@resolveio/server-lib 20.7.84 → 20.7.85

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":["NodeCache","require","os_1","simpl_schema_1","user_collection_1","resolveio_server_app_1","common_1","monitor_manager_1","crypto","scmp","numCPUs","cpus","length","v8","AsyncLocalStorage","asyncLocalStorage","MongoManager","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_isWorkersEnabled","_isWorkerInstance","create","mongoManager","initialize","_a","sent","prototype","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","setupChangeStream","ResolveIOServer","getMainDB","listCollections","toArray","collections","oneTimeTransaction","fn","_this","run","__awaiter","session","getMongoConnection","startSession","getStore","attemptCount_1","withTransaction","console","log","serverSession","id","result_1","endSession","store","getSession","_heapLimit","getServerCollections","registerCollection","collection","collectionOptions","timeseries","timeField","some","a","name","collectionName","type","dropCollection","createCollection","push","find","delay","ms","Promise","resolve","setTimeout","filter","options","safeOptions","__rest","cacheKey","generateCacheKey","undefined","result","getFromCache","getMainServer","getSubscriptionManager","getEnableDebug","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","_b","monitor","MonitorMongo","JSON","stringify","code","err_1","codeName","message","stack","concat","finish","addToCache","findOne","executeFindOne","err_2","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","err_3","countDocuments","executeCountDocuments","err_4","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","del","data","getBinarySize","includes","endsWith","startsWith","nodeCacheSize","getStats","vsize","deleteCount","keys","keys_1","__values","keys_1_1","next","done","key","value","invalidateQueryCache","collectionCacheMap","collectionCacheMap_1","collectionCacheMap_1_1","cacheMap","_c","entries","_d","_e","changeStream","watch","$match","$and","ns.coll","$nin","$not","fullDocument","on","change","coll","close","MongoManagerModel","exports","collection_main","collection_version","mongoManagerModel","versionOptions","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","skipCache","setImmediate","createIndex","_id._id","_id.__v","versionCollection","simplschema","rbSchema","useRB","bypassSession","mongoManagerCollection","schemaCopy","interval","default","buildRbLookups","buildRbSchema","setInterval","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","mongoSession","readPreference","err_5","aggregateCount","err_6","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassCheckSchema","bypassLogs","bypassVersions","BATCH_SIZE","opIndex","sessionOptions","batchOps","slice","logs","versionOps","e_4","batchOps_1","batchOps_1_1","op","opType","Object","doc","validationContext","newContext","isValid","validate","document","replacement","modifier","Error","validationErrors","createdAt","updatedAt","objectIdHexString","id_document","payload","method","id_user","user","messageId","route","$set","$inc","__v","affectedDocs","versionFilters","map","v","$or","_f","versionInserts","insertOne","__assign","err_7","getServerConfig","getLocalLogManager","writeLogs","bwOptions","ordered","affectedDocIds","$in","$sort","$group","versions","$push","$project","versionsToDelete","$slice","$size","$unwind","$replaceRoot","newRoot","oldVersions","deleteMany","ok","estimatedDocumentCount","err_8","f_docs","Array","isArray","insertMany","fieldOrSpec","dbCollection","indexes","existingIndexes","index","createIndexes","indexSpecs","existingIndexes_1","indexSpec","existingIndex","docs","i","writeLog","versionDoc","replaceOne","$lt","res","acknowledged","err_9","deleteOne","findOneAndDelete","returnVal","err_10","err_11","distinct","err_12","drop","err_13","dropIndex","indexName","err_14","dropIndexes","err_15","err_16","findById","err_17","findCount","count","err_18","findCursor","removeAllListeners","findStream","err_19","err_20","findOneAndReplace","validation","getMethodManager","callMethod","call","date","upsert","err_21","findOneAndUpdate","$setOnInsert","err_22","err_23","indexExists","err_24","bypassMonitor","validationResults","forEach","validDocs","idx","hasOwnProperty","err_25","err_26","listIndexes","rename","newName","err_27","err_28","prevDoc","docId","docVersion","updatedDoc","getMongoMergeUpdatedDoc","err_29","err_30","returnDocument","safeOptions_1","doc_1","err_31","err_32","updateMany","$unset","objectContainsPropertyDeep","err_33","updateOne","err_34","err_35","err_36","err_37","watchCollection","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","error","salt","pbkdf2Promisified","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","err_38","serializeUser","cb","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","hashRaw","services","err_39","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","pbkdf2","callback","reject","err","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import { AggregateOptions, AggregationCursor, BulkWriteOptions, BulkWriteResult, ChangeStream, ChangeStreamOptions, Collection, CollectionInfo, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, OptionalUnlessRequiredId, RenameOptions, ReplaceOptions, UpdateOptions } from 'mongodb';\nimport * as NodeCache from 'node-cache';\nimport { cpus } from 'os';\nimport SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { LookupTables } from '../models/report-builder.model';\nimport { UserModel } from '../models/user.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\nimport { MonitorMongo } from './monitor.manager';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nconst { AsyncLocalStorage } = require('async_hooks');\nconst asyncLocalStorage = new AsyncLocalStorage();\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n\t$gt?: P;\n\t$gte?: P;\n\t$in?: P extends Array<any> ? P : P[];\n\t$lt?: P;\n\t$lte?: P;\n\t$ne?: P;\n\t$nin?: P extends Array<any> ? P : P[];\n\t$not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n\t$exists?: boolean;\n\t$expr?: any[]\n\t$regex?: P extends string ? RegExpConstructor | string : never;\n\t$options?: P extends string ? string : never;\n\t$geoIntersects?: {\n\t\t$geometry: Document;\n\t};\n\t$geoWithin?: Document;\n\t$near?: Document;\n\t$nearSphere?: Document;\n\t$maxDistance?: number;\n\t$all?: any[];\n\t$elemMatch?: Document;\n\t$size?: P extends any[] ? number : never;\n}\n\nexport declare interface MongoManagerFilterOperators<T> extends Document { //TODO: Remove extends document when I get answer on S.O.\n\t$and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$text?: {\n\t\t$search: string;\n\t\t$language?: string;\n\t\t$caseSensitive?: boolean;\n\t\t$diacriticSensitive?: boolean;\n\t};\n\t// eslint-disable-next-line no-unused-vars\n\t$where?: string | ((this: T) => boolean);\n\t$comment?: string | Document;\n}\n\n// function isDotStringRegExp(obj: Object, dotKey: string): boolean {\n// \tlet keyData = dotKey.split('.');\n// \tlet objData = obj;\n\t\n// \tfor (let i = 0; i < keyData.length; i++) {\n// \t\tlet key = keyData[i];\n// \t\tif (objData.hasOwnProperty(key)) {\n// \t\t\tobjData = objData[key];\n\t\t\t\n// \t\t\tif (i === keyData.length - 1) {\n// \t\t\t\treturn true;\n// \t\t\t}\n// \t\t}\n// \t\telse {\n// \t\t\treturn false;\n// \t\t}\n// \t}\n// }\n\n// export declare type MongoManagerDotStringFilter<T> = {\n// \t[key: string]: (isDotStringRegExp(T, key) ? any : never);\n// };\n\nexport declare type MongoManagerFilter<T> = {\n\t[P in keyof T]?: T[P] | MongoManagerFilterParamaterOperators<T[P]>;\n};\n\nexport declare type MongoManagerUnsetFilter<T> = {\n\t// eslint-disable-next-line no-unused-vars\n\t[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\n\t// eslint-disable-next-line no-unused-vars\n\t[P in keyof T]?: number;\n};\n\nexport declare type MongoManagerUpdateFilter<T> = {\n\t$inc?: MongoManagerIncFilter<T> | Document;\n\t$set?: MongoManagerFilter<T> | Document;\n\t$setOnInsert?: MongoManagerFilter<T> | Document;\n\t$unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _nodeCache;\n\tprivate _cacheMap: { collections: string[], key: string }[] = [];\n\tprivate _operationInProgress: Map<string, { promise: Promise<any>, invalidatedDuringExecution: boolean, collections: string[] }> = new Map();\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, 'name' | 'type'>)[] = [];\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst mongoManager = new MongoManager();\n\t\tawait mongoManager.initialize();\n\t\treturn mongoManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._nodeCache = new NodeCache({ stdTTL: 0, checkperiod: 0 });\n\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\t\tthis.setCacheLimit();\n\n\t\tif (this._isWorkersEnabled && this._isWorkerInstance) {\n\t\t\tthis.setupChangeStream();\n\t\t}\n\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\toneTimeTransaction<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn asyncLocalStorage.run({}, async () => {\n\t\t\tconst session = ResolveIOServer.getMongoConnection().startSession();\n\t\t\tasyncLocalStorage.getStore().session = session;\n\t\n\t\t\ttry {\n\t\t\t\tlet result: T;\n\n\t\t\t\tlet attemptCount = 0;\n\t\t\t\t\n\t\t\t\tawait session.withTransaction(async () => {\n\t\t\t\t\tattemptCount++;\n\t\t\t\t\tconsole.log(\"withTransaction callback invoked, attempt #\", attemptCount, session.serverSession.id);\n\n\t\t\t\t\t// Directly assign the result from fn()\n\t\t\t\t\tresult = await fn();\n\t\t\t\t\treturn result; // Explicit return for transaction validation\n\t\t\t\t});\n\t\n\t\t\t\treturn result; // Transaction committed successfully\n\t\t\t} \n\t\t\tfinally {\n\t\t\t\tawait session.endSession();\n\t\t\t\tconst store = asyncLocalStorage.getStore();\n\t\t\t\tif (store) delete store.session;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetSession() {\n\t\tconst store = asyncLocalStorage.getStore();\n\t\treturn store ? store.session : null;\n\t}\n\n\tprivate setCacheLimit() {\n\t\tif (this._isWorkersEnabled) {\n\t\t\tthis._heapLimit = this._isWorkerInstance ? this._heapSize * 0.8 : this._heapSize * 0.4;\n\t\t}\n\t\telse {\n\t\t\tthis._heapLimit = this._heapSize * 0.3;\n\t\t}\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tasync registerCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tif (\n\t\t\tcollection.collectionOptions &&\n\t\t\tcollection.collectionOptions.timeseries &&\n\t\t\tcollection.collectionOptions.timeseries.timeField &&\n\t\t\tthis._serverCollections.some(a => a.name === collection.collectionName && a.type === 'collection')\n\t\t) {\n\t\t\tawait ResolveIOServer.getMainDB().dropCollection(collection.collectionName);\n\t\t\tawait this.createCollection(collection);\n\t\t}\n\n\t\tthis._collections.push(collection);\n\t}\n\n\tasync createCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tawait ResolveIOServer.getMainDB().createCollection(collection.collectionName, collection.collectionOptions);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): MongoManagerCollection<CollectionDocument> | MongoManagerUserCollection<CollectionDocument> {\n\t\treturn this._collections.find(a => a.collectionName === collectionName);\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tpublic async find<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: FindOptions<T>\n\t): Promise<T[]> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'find', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Cache', collectionName);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Already running', collectionName);\n\t\t\t}\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Find - Running', collectionName);\n\t\t}\n\n\t\tconst operation = this.executeFind<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Done', collectionName);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeFind<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>,\n\t\toptions: FindOptions<T> | undefined,\n\t\tcacheKey: string\n\t): Promise<T[]> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('find', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.find<T>(<any>filter, options).toArray();\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Find', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Find: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// FindOne Operation\n\tpublic async findOne<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {},\n\t\toptions?: FindOptions<T>\n\t): Promise<T> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'findOne', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Cache', collectionName);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Already running', collectionName);\n\t\t\t}\n\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo FindOne - Running', collectionName);\n\t\t}\n\n\t\tconst operation = this.executeFindOne<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Done', collectionName);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeFindOne<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T>,\n\t\toptions: FindOptions<T> | undefined,\n\t\tcacheKey: string\n\t): Promise<T> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('findOne', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.findOne<T>(<any>filter, options);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Find One', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Find One: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Aggregate Operation\n\tpublic async aggregate<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tpipeline: any[],\n\t\toptions?: AggregateOptions\n\t): Promise<any[]> {\n\t\tconst collections = [collectionName, ...pipeline.flatMap(stage => stage.$lookup?.from ? [stage.$lookup.from] : [])];\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey(collections, 'aggregate', [pipeline, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Cache', collections);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Already running', collections);\n\t\t\t}\n\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Agg - Running', collections);\n\t\t}\n\n\t\tconst operation = this.executeAggregate<T>(collectionName, pipeline, options, cacheKey, collections);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: collections\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Done', collections);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeAggregate<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tpipeline: any[],\n\t\toptions: AggregateOptions | undefined,\n\t\tcacheKey: string,\n\t\tcollections: string[]\n\t): Promise<any[]> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('aggregate', collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.aggregate<T>(pipeline, options).toArray();\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Aggregate', collectionName, pipeline, collections, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Aggregate: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache(collections, cacheKey, result);\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n\n\tpublic async countDocuments<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions\n\t): Promise<number> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'countDocuments', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tconst operation = this.executeCountDocuments<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => this._operationInProgress.delete(cacheKey));\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeCountDocuments<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T>,\n\t\toptions: CountDocumentsOptions,\n\t\tcacheKey: string\n\t): Promise<number> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('countDocuments', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.countDocuments(<any>filter, options);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Count Documents', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Count Documents: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Cache and Invalidation Setup\n\tprivate generateCacheKey(collections: string[], functionName: string, args: any[]): string {\n\t\tconst keyString = JSON.stringify({ collections, functionName, args });\n\t\treturn crypto.createHash('sha256').update(keyString).digest('hex');\n\t}\n\n\tprivate getFromCache(cacheKey: string): any | undefined {\n\t\ttry {\n\t\t\tconst cachedData = this._nodeCache.get(cacheKey);\n\t\t\tif (cachedData) {\n\t\t\t\treturn JSON.parse(cachedData, dateReviver);\n\t\t\t}\n\t\t} \n\t\tcatch {\n\t\t\tthis._nodeCache.del(cacheKey);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate addToCache(collections: string[], cacheKey: string, data: any) {\n\t\tif (getBinarySize(JSON.stringify(data)) < 1000000 && \n\t\t\t!collections.includes('logs') &&\n\t\t\t!collections.find(a => a.endsWith('.versions')) &&\n\t\t\t!collections.find(a => a.startsWith('monitor-'))\n\t\t) {\n\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\tlet deleteCount = 0;\n\t\t\t\tconst keys = this._nodeCache.keys();\n\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t}\n\t\t\t\n\t\t\tthis._nodeCache.set(cacheKey, JSON.stringify(data));\n\t\t\tthis._cacheMap.push({ collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tconst collectionCacheMap = this._cacheMap.filter(a => a.collections.includes(collection));\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Invalidate Cache', collection);\n\t\t}\n\n\t\tfor (const cacheMap of collectionCacheMap) {\n\t\t\tthis._nodeCache.del(cacheMap.key);\n\t\t\t\n\t\t\tif (this._operationInProgress.has(cacheMap.key)) {\n\t\t\t\tthis._operationInProgress.get(cacheMap.key).invalidatedDuringExecution = true;\n\n\t\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Mongo Invalidated During Execution', cacheMap.collections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tfor (const [key, operation] of this._operationInProgress.entries()) {\n\t\t\tif (operation.collections.includes(collection)) {\n\t\t\t\toperation.invalidatedDuringExecution = true;\n\t\t\n\t\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Mongo Invalidated During Execution (No cache)', operation.collections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._cacheMap = this._cacheMap.filter(a => !a.collections.includes(collection));\n\t}\n\n\tprivate setupChangeStream() {\n\t\tconst db = ResolveIOServer.getMainDB();\n\n\t\tconst pipeline = [\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{'ns.coll': { $nin: [\n\t\t\t\t\t\t\t'log-method-latencies', \n\t\t\t\t\t\t\t'log-subscriptions', \n\t\t\t\t\t\t\t'logs', \n\t\t\t\t\t\t\t'counters', \n\t\t\t\t\t\t\t'cron-job-histories', \n\t\t\t\t\t\t\t'email-histories',\n\t\t\t\t\t\t\t'qb-soap-request-histories', \n\t\t\t\t\t\t\t'qb-soap-request-responses', \n\t\t\t\t\t\t\t'qb-soap-requests',\n\t\t\t\t\t\t\t'qb-soap-retries'\n\t\t\t\t\t\t] }},\n\t\t\t\t\t\t{'ns.coll': { $not: /.*\\.versions$/ }},\n\t\t\t\t\t\t{'ns.coll': { $not: /^monitor-/ }},\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t\tconst changeStream = db.watch(pipeline, { fullDocument: 'updateLookup' });\n\n\t\tchangeStream.on('change', (change: any) => {\n\t\t\tif (change['ns'] && change['ns'].coll) {\n\t\t\t\tconst collectionName = change['ns'].coll;\n\t\t\t\tconst collection = this.collection(collectionName);\n\n\t\t\t\tif (collection) {\n\t\t\t\t\tthis.invalidateQueryCache(collectionName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tchangeStream.on('error', async () => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream error. Restart...');\n\t\t\tawait changeStream.close();\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000);\n\t\t});\n\n\t\tchangeStream.on('close', () => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream closed. Restarting...');\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000);\n\t\t});\n\t}\n}\n\nexport class MongoManagerModel<T extends CollectionDocument> {\n\tcollection_main: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\tcollection_version: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\n\tconstructor() {}\n\n\tstatic create<T>(options: MongoManagerCollectionOptions): MongoManagerModel<T> {\n\t\tconst mongoManagerModel = new MongoManagerModel<T>();\n\t\tmongoManagerModel.initialize(options);\n\t\treturn mongoManagerModel;\n\t}\n\n\tprivate initialize(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = MongoManagerUserCollection.create(options) as MongoManagerUserCollection<T>;\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = MongoManagerCollection.create(options) as MongoManagerCollection<T>;\n\t\t}\n\n\t\tif (options.useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(options.schema);\n\t\t\tversionSchema._id.type = 'Object';\n\t\t\tversionSchema._id.blackbox = true;\n\n\t\t\tlet versionOptions: MongoManagerCollectionOptions = {\n\t\t\t\tcollectionName: options.collectionName + '.versions',\n\t\t\t\tschema: versionSchema,\n\t\t\t\tuseVersionCollection: false,\n\t\t\t\tuseReportBuilder: false,\n\t\t\t\treportBuilderLookupTables: [],\n\t\t\t\ttimestamps: true,\n\t\t\t\tcreateLogs: false,\n\t\t\t\tcheckSchema: false,\n\t\t\t\tcollectionOptions: null,\n\t\t\t\tskipCache: true\n\t\t\t};\n\n\t\t\tif (options.collectionName === 'users') {\t\n\t\t\t\tthis.collection_version = MongoManagerUserCollection.create(versionOptions) as MongoManagerUserCollection<T>;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = MongoManagerCollection.create(versionOptions) as MongoManagerCollection<T>;\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\t});\n\n\t\t\tthis.collection_main.versionCollection = options.collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport interface MongoManagerCollectionOptions {\n\tcollectionName: string;\n\tschema: object;\n\tuseVersionCollection: boolean;\n\tuseReportBuilder: boolean;\n\treportBuilderLookupTables: LookupTables[]\n\ttimestamps: boolean;\n\tcreateLogs: boolean;\n\tcheckSchema: boolean;\n\tcollectionOptions: CreateCollectionOptions;\n\tskipCache?: boolean;\n\tbypassSession?: boolean;\n}\n\nexport class MongoManagerCollection<T extends CollectionDocument> {\n\tcollectionName = '';\n\tcheckSchema = false;\n\tsimplschema = null;\n\trbSchema = null;\n\ttimestamps = false;\n\tuseVersions = false;\n\tversionCollection = '';\n\tcreateLogs = true;\n\tuseRB = false;\n\tcollectionOptions: CreateCollectionOptions;\n\tskipCache = false;\n\tbypassSession = false;\n\t\n\tconstructor() {}\n\t\n\tstatic create(options: MongoManagerCollectionOptions) {\n\t\tconst mongoManagerCollection = new MongoManagerCollection();\n\t\tmongoManagerCollection.initialize(options);\n\t\treturn mongoManagerCollection;\n\t}\n\n\tinitialize(options: MongoManagerCollectionOptions) {\n\t\tthis.collectionName = options.collectionName;\n\t\tthis.simplschema = new SimpleSchema(options.schema);\n\t\tthis.timestamps = options.timestamps;\n\t\tthis.createLogs = options.createLogs;\n\t\tthis.checkSchema = options.checkSchema;\n\t\tthis.collectionOptions = options.collectionOptions;\n\t\tthis.skipCache = options.skipCache || false;\n\t\tthis.bypassSession = options.bypassSession || false;\n\n\t\tif (options.useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(options.schema);\n\t\t\tlet rbSchema = buildRbLookups(options.reportBuilderLookupTables, schemaCopy, []);\n\t\t\tthis.rbSchema = buildRbSchema(rbSchema);\n\t\t}\n\n\t\tlet interval = setInterval(async () => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tawait ResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\t// Method to extract index name from error message\n\textractIndexNameFromError(errorMessage) {\n\t\tlet regexPattern = /Index already exists with a different name: (\\S+)/;\n\t\tlet matches = errorMessage.match(regexPattern);\n\t\n\t\tif (!matches || matches.length <= 1) {\n\t\t\t// If the first pattern doesn't match, try the second pattern\n\t\t\tregexPattern = /existing index:.*name: \"([^\"]+)\"/;\n\t\t\tmatches = errorMessage.match(regexPattern);\n\t\t}\n\t\n\t\treturn matches && matches.length > 1 ? matches[1] : null;\n\t}\n\n\tasync aggregate(pipeline: object[], options?: AggregateOptions, skipCache = false, bypassSession = false) : Promise<any[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().aggregate(this.collectionName, pipeline, options);\n\t\t}\n\t\telse {\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\t\t\tlet monitor = MonitorMongo.create('aggregate', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray();\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Aggregate', this.collectionName, pipeline, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync aggregateCount(pipeline: object[], options?: AggregateOptions, bypassSession = false) : Promise<number> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateCount', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray();\n\t\t\treturn res.length;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Aggregate Count', this.collectionName, pipeline, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Aggregate Count: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions, bypassSession = false): AggregationCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateCursor', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\taggregateStream(pipeline: object[], options?: AggregateOptions, streamOptions?: CursorStreamOptions, bypassSession = false) {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateStream', this.collectionName, JSON.stringify([pipeline, safeOptions, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions).on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tasync bulkWrite(\n\t\toperations: any[],\n\t\toptions?: BulkWriteOptions,\n\t\tbypassCheckSchema = false,\n\t\tbypassLogs = false,\n\t\tbypassVersions = false, \n\t\tbypassSession = false\n\t): Promise<BulkWriteResult> {\n\t\tif (!operations.length) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tconst BATCH_SIZE = 1000;\n\t\tlet opIndex = 0;\n\n\t\tlet sessionOptions = null;\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\t\n\t\twhile (opIndex < operations.length) {\n\t\t\tconst batchOps = operations.slice(opIndex, opIndex + BATCH_SIZE);\n\t\n\t\t\t// Initialize arrays for logs and version operations\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = [];\n\t\n\t\t\tfor (const op of batchOps) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tconst doc = op[opType];\n\t\n\t\t\t\t// Skip validation if bypassCheckSchema is true\n\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\tconst validationContext = this.simplschema.newContext();\n\t\t\t\t\tlet isValid: boolean;\n\t\n\t\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t\tisValid = validationContext.validate(doc.document);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\t\tisValid = validationContext.validate(doc.replacement);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'updateOne' || opType === 'updateMany') {\n\t\t\t\t\t\t// For updates, validate the update modifier\n\t\t\t\t\t\tisValid = validationContext.validate(doc.update, { modifier: true });\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'deleteOne' || opType === 'deleteMany') {\n\t\t\t\t\t\t// No validation needed for deletes\n\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error(`Unsupported operation type: ${opType}`);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Schema validation failed for ${opType}: ${JSON.stringify(validationContext.validationErrors())}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Now proceed to process the operations\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// If this.timestamps is true, set createdAt and updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = new Date();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!doc.document.updatedAt) {\n\t\t\t\t\t\t\tdoc.document.updatedAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.document._id || objectIdHexString(),\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.document)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.document, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Since we might have modified doc.document, update the operation\n\t\t\t\t\top[opType].document = doc.document;\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateOne' || opType === 'updateMany') {\n\t\t\t\t\t// If this.timestamps is true, add updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (!doc.update.$set) {\n\t\t\t\t\t\t\tdoc.update.$set = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If this.useVersions is true, increment __v\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\tdoc.update.$inc = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.update)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.update, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// No need to modify the operation further\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\t// If this.timestamps is true, set updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If this.useVersions is true, increment __v\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tdoc.replacement.__v = (doc.replacement.__v || 0) + 1;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.replacement)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.replacement, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Since we might have modified doc.replacement, update the operation\n\t\t\t\t\top[opType].replacement = doc.replacement;\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne' || opType === 'deleteMany') {\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.filter)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.filter, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// No need to modify the operation\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(`Unsupported operation type: ${opType}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet affectedDocs = [];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\t// Handle versioning\n\t\t\tif (!bypassVersions && this.useVersions && versionOps.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\t// Fetch the affected documents\n\t\t\t\t\tconst versionFilters = versionOps.map((v) => v.filter);\n\n\t\t\t\t\tif (versionFilters.length) {\n\t\t\t\t\t\taffectedDocs = await ResolveIOServer.getMainDB().collection(this.collectionName).find({ $or: versionFilters }, sessionOptions).toArray();\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Prepare version documents\n\t\t\t\t\tconst versionInserts = affectedDocs.map((doc) => ({\n\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t...doc,\n\t\t\t\t\t\t\t\t_id: { _id: doc._id, __v: doc.__v },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\n\t\t\t\t\t// Insert versions in bulk\n\t\t\t\t\tif (versionInserts.length > 0) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(<any>versionInserts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\t\t\t}\n\n\t\t\t// Execute bulkWrite\n\t\t\tconst monitor = MonitorMongo.create('bulkWrite', this.collectionName, JSON.stringify([batchOps, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(batchOps, options);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Bulk Write', this.collectionName, operations, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Bulk Write: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\n\t\t\t// Insert logs in bulk\n\t\t\tif (!bypassLogs && this.createLogs && logs.length > 0) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLogs(logs.map(a => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: a\n\t\t\t\t\t\t};\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet bwOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tbwOptions = {ordered: false};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbwOptions = {session: mongoSession, ordered: false};\n\t\t\t\t\t}\n\n\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').bulkWrite(logs.map(a => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: a\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}), bwOptions);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\ttry {\n\t\t\t\t\t// Delete old versions beyond the latest 5\n\t\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\n\t\t\t\t\tconst pipeline = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline).toArray();\n\n\t\t\t\t\tif (oldVersions.length > 0) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).deleteMany({ _id: { $in: oldVersions.map((v) => v._id) } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\t\t\t}\n\t\n\t\t\topIndex += BATCH_SIZE;\n\t\n\t\t\t// Yield to the event loop\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\n\t\t\t// Invalidate cache\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\t\t}\n\t\n\t\treturn { ok: 1 } as BulkWriteResult; // Adjust return value as per your requirements\n\t}\n\n\tasync countDocuments(\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions,\n\t\tskipCache = false\n\t): Promise<number> {\n\t\t\n\t\t// ********* COUNTS ARE NOT SUPPORTED IN MONGO SESSIONS! ***************\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t// Check if the filter is empty\n\t\tconst isUnfiltered = Object.keys(filter).length === 0;\n\n\t\tif (isUnfiltered) {\n\t\t\t// Use collection stats for an unfiltered count\n\t\t\treturn ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).estimatedDocumentCount(safeOptions);\n\t\t}\n\t\telse if (!skipCache && !this.skipCache) {\n\t\t\t// Use cached count if skipCache is false\n\t\t\treturn ResolveIOServer.getMongoManager().countDocuments(this.collectionName, filter, safeOptions);\n\t\t}\n\t\telse {\n\t\t\t// Fallback to direct countDocuments call with monitoring if skipCache is true\n\n\t\t\tlet monitor = MonitorMongo.create('countDocuments', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, safeOptions);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Count Documents', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Count Documents: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\t//Helper Function (1 or Many) - Not Real Mongo Function\n\tcreate(f_docs: T | T[], options?: InsertOneOptions | BulkWriteOptions): Promise<T | T[]> {\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, <InsertOneOptions>options);\n\t\t}\n\t\telse if (f_docs.length === 1) {\n\t\t\treturn this.insertOne(f_docs[0], <InsertOneOptions>options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, <BulkWriteOptions>options);\n\t}\n\n\tasync createIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\t// Check if index already exists based on the key\n\n\t\ttry {\n\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\tconst existingIndexes = await dbCollection.indexes();\n\n\t\t\t// Check if an index with the same key already exists\n\t\t\tconst indexExists = existingIndexes.some(index => \n\t\t\t\tJSON.stringify(index.key) === JSON.stringify(fieldOrSpec)\n\t\t\t);\n\n\t\t\tif (indexExists) {\n\t\t\t\treturn 'Index already exists'; // Skip creation if index exists\n\t\t\t}\n\n\t\t\treturn dbCollection.createIndex(fieldOrSpec, options);\n\t\t}\n\t\tcatch {}\n\t\t\n\t\treturn 'Index creation queued';\n\t}\n\t\n\tasync createIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\ttry {\n\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\tconst existingIndexes = await dbCollection.indexes();\n\n\t\t\t// Filter out indexes that already exist based on the key\n\t\t\tconst indexesToCreate = indexSpecs.filter(indexSpec => \n\t\t\t\t!existingIndexes.some(existingIndex => \n\t\t\t\t\tJSON.stringify(existingIndex.key) === JSON.stringify(indexSpec.key)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// If no new indexes to create, resolve early\n\t\t\tif (indexesToCreate.length === 0) {\n\t\t\t\treturn ['All indexes already exist'];\n\t\t\t}\n\n\t\t\treturn dbCollection.createIndexes(indexSpecs, options);\n\t\t}\n\t\tcatch {}\n\n\t\treturn ['Index creation queued'];\n\t}\n\t\n\tasync deleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.createLogs && !bypassLogs) || this.useVersions) {\n\t\t\tlet docs = await this.find(filter, sessionOptions);\n\n\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\tlet doc = docs[i];\n\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('deleteMany', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\n\t\t\treturn res.acknowledged;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete Many', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Delete Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync deleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\tlet monitor = MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet returnVal = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options);\n\t\t\t\tlet doc = returnVal.value;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete One (Find One And Delete)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Delete One (Find One And Delete): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('deleteOne', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options);\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\treturn res.acknowledged;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Delete One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync distinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions, bypassSession = false): Promise<T[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('distinct', this.collectionName, JSON.stringify([key, filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Distinct', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Distinct: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync drop(options?: CommandOperationOptions, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('drop', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Collection', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Collection: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync dropIndex(indexName: string, options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('dropIndex', this.collectionName, JSON.stringify([indexName, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options);\n\t\t\treturn <Document>res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Index', this.collectionName, indexName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Index: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync dropIndexes(options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('dropIndexes', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Indexes', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Indexes: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync find(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().find(this.collectionName, filter, options);\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('find', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray();\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findById(id: string, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().findOne(this.collectionName, {_id: id}, options);\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('findById', this.collectionName, JSON.stringify([{_id: id}, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find By ID', this.collectionName, id, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find By ID: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): Promise<Number> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findCount', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count();\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find Count', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find Count: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): FindCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findCursor', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\tcursor.removeAllListeners();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tfindStream(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, streamOptions?: CursorStreamOptions, bypassSession = false) {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tlet monitor = MonitorMongo.create('findStream', this.collectionName, JSON.stringify([filter, safeOptions, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions).on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tasync findOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().findOne(this.collectionName, filter, options);\n\t\t}\n\t\telse {\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\tlet monitor = MonitorMongo.create('findOne', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options);\n\t\t\tlet doc = res.value;\n\t\t\t\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Delete', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Delete: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync findOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndReplace - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet date = new Date();\n\n\t\tif (this.timestamps) {\n\t\t\treplacement.updatedAt = date;\n\t\t}\n\n\t\tif (options && options.upsert) {\n\t\t\tif (!replacement._id) {\n\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\treplacement.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\treplacement.createdAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options);\n\t\t\tlet doc = res.value;\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Replace', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Replace: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync findOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndUpdate - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date(); \n\t\t\t\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tif (options && options.upsert) {\n\t\t\tif (!update.$setOnInsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options);\n\t\t\tlet doc = res.value;\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\t\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Update', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Update: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync indexes(options: IndexInformationOptions): Promise<any[]> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('indexes', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Indexes', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Indexes: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync indexExists(indexes: string | string[], options?: IndexInformationOptions): Promise<boolean> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('indexExists', this.collectionName, JSON.stringify([indexes, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Index Exists', this.collectionName, indexes, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Index Exists: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync insertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false, bypassSession = false): Promise<T[]> {\n\t\tif (!docs.length) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\tlet validationResults = [];\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tdocs.forEach(doc => {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertMany - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\tvalidationResults.push(false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\tlet doc = validDocs[i];\n\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\tdoc.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t}, sessionOptions);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (validDocs.length) {\n\t\t\tlet monitor = null;\n\t\t\t\n\t\t\tif (!bypassMonitor) {\n\t\t\t\tmonitor = MonitorMongo.create('insertMany', this.collectionName, JSON.stringify([validDocs, safeOptions]));\n\t\t\t}\n\t\t\t\n\t\t\ttry {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options);\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\treturn validDocs;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Insert Many', this.collectionName, docs, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Insert Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tif (monitor) {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tasync insertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (!doc._id) {\n\t\t\tdoc._id = objectIdHexString();\n\t\t}\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertOne - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\tthrow new Error (validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date();\n\t\t\n\t\t\tif (!doc.createdAt) {\n\t\t\t\tdoc.createdAt = date;\n\t\t\t}\n\n\t\t\tif (!doc.updatedAt) {\n\t\t\t\tdoc.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\tif (\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t) {\n\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\ttype: 'log',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: '',\n\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t}, sessionOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\tdoc.__v = 0;\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('insertOne', this.collectionName, JSON.stringify([doc, safeOptions]));\n\n\t\ttry {\n\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\t\t\t\n\t\t\treturn doc;\n\t\t}\n\t\tcatch(err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Insert One', this.collectionName, doc, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Insert One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions, bypassSession = false): ListIndexesCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('listIndexes', this.collectionName, JSON.stringify([safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tasync rename(newName: string, options?: RenameOptions, bypassSession = false): Promise<Collection<Document>> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('rename', this.collectionName, JSON.stringify([newName, safeOptions]));\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Rename', this.collectionName, newName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Rename: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync replaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null, bypassSession = false) : Promise<number> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on replaceOne - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet date = new Date();\n\t\t\n\t\tif (this.timestamps) {\n\t\t\treplacement.updatedAt = date;\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.useVersions) {\n\t\t\tif (!doc) {\n\t\t\t\tdoc = await this.findOne(<any>filter, sessionOptions, true);\n\t\t\t}\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t}\n\n\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t\t}], null, 2));\n\t\t\t\n\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\tawait monitor.finish();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t}\n\t\t\t\t\t}, null, true);\n\n\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, safeOptions]));\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options);\n\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t\t\t}], null, 2));\n\t\t\t\t\n\t\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfinally {\n\t\t\t\t\t\t\tawait monitor.finish();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Replace One: Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\treplacement.__v = 0;\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('Error in Replace One: No Document');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\treplacement.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\t\tlet monitor = MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options);\n\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One (Find One And Replace)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One (Find One And Replace): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync updateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false, bypassSession = false) : Promise<number> {\n\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\treturn 1;\n\t\t}\n\t\t\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date();\n\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateMany - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\tlet docs = await this.find(filter, sessionOptions);\n\n\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\tlet doc = docs[i];\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\t\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('updateMany', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\n\t\t\treturn res.acknowledged;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update Many', this.collectionName, filter, update, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Update Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync updateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false) : Promise<boolean> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateOne - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet date = new Date();\n\n\t\tif (this.timestamps) {\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tif (this.useVersions) {\n\t\t\tlet doc = await this.findOne(filter, sessionOptions, true);\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\n\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\n\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t}\n\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t__v: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('Error in Update One: No Document');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t}\n\n\t\t\t\tlet monitor = MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options);\n\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn !!res.ok;\n\t\t\t\t\t}\n\t\t\t\t\telse if (update.$setOnInsert) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn !!res.ok;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One (Find One And Update)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One (Find One And Update): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions, bypassSession = false): ChangeStream<T> {\n\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !bypassSession && !this.bypassSession) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = session;\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).watch(pipeline, options);\n\t\treturn <ChangeStream<T>>stream;\n\t}\n}\n\nexport class MongoManagerUserCollection<T extends CollectionDocument> extends MongoManagerCollection<T> {\n\tstatic create(options: MongoManagerCollectionOptions) {\n\t\tconst mongoManagerCollection = new MongoManagerUserCollection();\n\t\tmongoManagerCollection.initialize(options);\n\t\treturn mongoManagerCollection;\n\t}\n\t\n\tasync authenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\n\t\tif (user.last) {\n\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tuser.last = new Date();\n\t\t}\n\t\n\t\tif (user.attempts >= 5) {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: 'Too Many Attempts'\n\t\t\t};\n\t\t}\n\t\t\n\t\tif (!user.salt) {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tlet hashBuffer = await pbkdf2Promisified(password, user.salt, {\n\t\t\t\titerations: 25000,\n\t\t\t\tkeylen: 512,\n\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t});\n\n\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tuser.attempts = 0;\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\treturn {\n\t\t\t\t\tdata: user,\n\t\t\t\t\terror: ''\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Invalid Username And Password'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\terr.message = `Error in User Authenticate: ${JSON.stringify(user, null, 2)} - ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tserializeUser() {\n\t\treturn (user, cb) => {\n\t\t\tcb(null, user.username);\n\t\t};\n\t}\n\n\tdeserializeUser() {\n\t\treturn async (username) => {\n\t\t\treturn Users.findOne({username: username});\n\t\t};\n\t}\n\n\tasync setPassword(user: UserModel, password: string) {\n\t\tif (!user) {\n\t\t\tthrow new Error('Error In User Set Password: No User');\n\t\t}\n\t\telse if (!password) {\n\t\t\tthrow new Error('Error In User Set Password: No Password');\n\t\t}\n\t\telse {\n\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\tlet salt = saltBuffer.toString('hex');\n\t\t\ttry {\n\t\t\t\tlet hashRaw = await pbkdf2Promisified(password, salt, {\n\t\t\t\t\titerations: 25000,\n\t\t\t\t\tkeylen: 512,\n\t\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t\t});\n\t\t\t\tlet hash = Buffer.from(hashRaw, 'binary').toString('hex');\n\t\t\t\t\n\t\t\t\treturn Users.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}});\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in User Set Password: ${JSON.stringify(user, null, 2)} - ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t};\n\n\tasync changePassword(user, oldPassword, newPassword) {\n\t\tif (!user) {\n\t\t\tthrow new Error('Error in User Change Password: Missing User');\n\t\t}\n\t\telse if (!oldPassword || !newPassword) {\n\t\t\tthrow new Error('Error in User Change Password: Missing Password');\n\t\t}\n\t\telse {\n\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\tif (!authUser['data']) {\n\t\t\t\tthrow authUser['error'];\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.setPassword(user, newPassword);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tasync register(user, password) {\n\t\tif (!user.username) {\n\t\t\tthrow new Error('Error in User Register: Missing Username');\n\t\t}\n\t\telse {\n\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\n\t\t\tif (dbUser) {\n\t\t\t\tthrow new Error('Error in User Register: Username Exists');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\tif (dbUser) {\n\t\t\t\t\tthrow new Error('Error in User Register: Email Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\treturn user;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresetAttempts(user: UserModel) {\n\t\treturn Users.updateOne({_id: user._id}, {$set: {attempts: 0}});\n\t}\n}\n\nfunction pbkdf2(password, salt, options, callback) {\n\tcrypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);\n};\n\nfunction pbkdf2Promisified(password, salt, options): Promise<any> {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn new Promise((resolve, reject) => crypto.randomBytes(saltlen, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))));\n}\n\nfunction objectContainsPropertyDeep(obj: Object, prop: string) {\n\tlet keys = Object.keys(obj);\n\n\tif (keys.some(a => a === prop)) {\n\t\treturn true;\n\t}\n\t\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tlet key = keys[i];\n\t\tif (obj[key] && typeof obj[key] === 'object' && objectContainsPropertyDeep(obj[key], prop)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}"]}
1
+ {"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":["NodeCache","require","os_1","simpl_schema_1","user_collection_1","resolveio_server_app_1","common_1","monitor_manager_1","crypto","scmp","numCPUs","cpus","length","v8","AsyncLocalStorage","asyncLocalStorage","MongoManager","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_isWorkersEnabled","_isWorkerInstance","create","mongoManager","initialize","_a","sent","prototype","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","setupChangeStream","ResolveIOServer","getMainDB","listCollections","toArray","collections","oneTimeTransaction","fn","_this","run","__awaiter","session","getMongoConnection","startSession","getStore","attemptCount_1","withTransaction","console","log","_b","serverSession","id","toString","result_1","_c","endSession","store","getSession","_heapLimit","getServerCollections","registerCollection","collection","collectionOptions","timeseries","timeField","some","a","name","collectionName","type","dropCollection","createCollection","push","find","delay","ms","Promise","resolve","setTimeout","filter","options","safeOptions","__rest","cacheKey","generateCacheKey","undefined","result","getFromCache","getMainServer","getSubscriptionManager","getEnableDebug","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","monitor","MonitorMongo","JSON","stringify","code","err_1","codeName","message","stack","concat","finish","addToCache","findOne","executeFindOne","err_2","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","err_3","countDocuments","executeCountDocuments","err_4","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","del","data","getBinarySize","includes","endsWith","startsWith","nodeCacheSize","getStats","vsize","deleteCount","keys","keys_1","__values","keys_1_1","next","done","key","value","invalidateQueryCache","collectionCacheMap","collectionCacheMap_1","collectionCacheMap_1_1","cacheMap","entries","_d","_e","changeStream","watch","$match","$and","ns.coll","$nin","$not","fullDocument","on","change","coll","close","MongoManagerModel","exports","collection_main","collection_version","mongoManagerModel","versionOptions","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","skipCache","setImmediate","createIndex","_id._id","_id.__v","versionCollection","simplschema","rbSchema","useRB","bypassSession","mongoManagerCollection","schemaCopy","interval","default","buildRbLookups","buildRbSchema","setInterval","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","mongoSession","readPreference","err_5","aggregateCount","err_6","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassCheckSchema","bypassLogs","bypassVersions","BATCH_SIZE","opIndex","sessionOptions","batchOps","slice","logs","versionOps","e_4","batchOps_1","batchOps_1_1","op","opType","Object","doc","validationContext","newContext","isValid","validate","document","replacement","modifier","Error","validationErrors","createdAt","updatedAt","objectIdHexString","id_document","payload","method","id_user","user","messageId","route","$set","$inc","__v","affectedDocs","versionFilters","map","v","$or","_f","versionInserts","insertOne","__assign","err_7","getServerConfig","getLocalLogManager","writeLogs","bwOptions","ordered","affectedDocIds","$in","$sort","$group","versions","$push","$project","versionsToDelete","$slice","$size","$unwind","$replaceRoot","newRoot","oldVersions","deleteMany","ok","estimatedDocumentCount","err_8","f_docs","Array","isArray","insertMany","fieldOrSpec","dbCollection","indexes","existingIndexes","index","createIndexes","indexSpecs","existingIndexes_1","indexSpec","existingIndex","docs","i","writeLog","versionDoc","replaceOne","$lt","res","acknowledged","err_9","deleteOne","findOneAndDelete","returnVal","err_10","err_11","distinct","err_12","drop","err_13","dropIndex","indexName","err_14","dropIndexes","err_15","err_16","findById","err_17","findCount","count","err_18","findCursor","removeAllListeners","findStream","err_19","err_20","findOneAndReplace","validation","getMethodManager","callMethod","call","date","upsert","err_21","findOneAndUpdate","$setOnInsert","err_22","err_23","indexExists","err_24","bypassMonitor","validationResults","forEach","validDocs","idx","hasOwnProperty","err_25","err_26","listIndexes","rename","newName","err_27","err_28","prevDoc","docId","docVersion","updatedDoc","getMongoMergeUpdatedDoc","err_29","err_30","returnDocument","safeOptions_1","doc_1","err_31","err_32","updateMany","$unset","objectContainsPropertyDeep","err_33","updateOne","err_34","err_35","err_36","err_37","watchCollection","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","error","salt","pbkdf2Promisified","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","err_38","serializeUser","cb","username","deserializeUser","setPassword","randomBytes","saltBuffer","hashRaw","services","err_39","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","pbkdf2","callback","reject","err","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import { AggregateOptions, AggregationCursor, BulkWriteOptions, BulkWriteResult, ChangeStream, ChangeStreamOptions, Collection, CollectionInfo, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, OptionalUnlessRequiredId, RenameOptions, ReplaceOptions, UpdateOptions } from 'mongodb';\nimport * as NodeCache from 'node-cache';\nimport { cpus } from 'os';\nimport SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { LookupTables } from '../models/report-builder.model';\nimport { UserModel } from '../models/user.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\nimport { MonitorMongo } from './monitor.manager';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nconst { AsyncLocalStorage } = require('async_hooks');\nconst asyncLocalStorage = new AsyncLocalStorage();\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n\t$gt?: P;\n\t$gte?: P;\n\t$in?: P extends Array<any> ? P : P[];\n\t$lt?: P;\n\t$lte?: P;\n\t$ne?: P;\n\t$nin?: P extends Array<any> ? P : P[];\n\t$not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n\t$exists?: boolean;\n\t$expr?: any[]\n\t$regex?: P extends string ? RegExpConstructor | string : never;\n\t$options?: P extends string ? string : never;\n\t$geoIntersects?: {\n\t\t$geometry: Document;\n\t};\n\t$geoWithin?: Document;\n\t$near?: Document;\n\t$nearSphere?: Document;\n\t$maxDistance?: number;\n\t$all?: any[];\n\t$elemMatch?: Document;\n\t$size?: P extends any[] ? number : never;\n}\n\nexport declare interface MongoManagerFilterOperators<T> extends Document { //TODO: Remove extends document when I get answer on S.O.\n\t$and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n\t$text?: {\n\t\t$search: string;\n\t\t$language?: string;\n\t\t$caseSensitive?: boolean;\n\t\t$diacriticSensitive?: boolean;\n\t};\n\t// eslint-disable-next-line no-unused-vars\n\t$where?: string | ((this: T) => boolean);\n\t$comment?: string | Document;\n}\n\n// function isDotStringRegExp(obj: Object, dotKey: string): boolean {\n// \tlet keyData = dotKey.split('.');\n// \tlet objData = obj;\n\t\n// \tfor (let i = 0; i < keyData.length; i++) {\n// \t\tlet key = keyData[i];\n// \t\tif (objData.hasOwnProperty(key)) {\n// \t\t\tobjData = objData[key];\n\t\t\t\n// \t\t\tif (i === keyData.length - 1) {\n// \t\t\t\treturn true;\n// \t\t\t}\n// \t\t}\n// \t\telse {\n// \t\t\treturn false;\n// \t\t}\n// \t}\n// }\n\n// export declare type MongoManagerDotStringFilter<T> = {\n// \t[key: string]: (isDotStringRegExp(T, key) ? any : never);\n// };\n\nexport declare type MongoManagerFilter<T> = {\n\t[P in keyof T]?: T[P] | MongoManagerFilterParamaterOperators<T[P]>;\n};\n\nexport declare type MongoManagerUnsetFilter<T> = {\n\t// eslint-disable-next-line no-unused-vars\n\t[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\n\t// eslint-disable-next-line no-unused-vars\n\t[P in keyof T]?: number;\n};\n\nexport declare type MongoManagerUpdateFilter<T> = {\n\t$inc?: MongoManagerIncFilter<T> | Document;\n\t$set?: MongoManagerFilter<T> | Document;\n\t$setOnInsert?: MongoManagerFilter<T> | Document;\n\t$unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _nodeCache;\n\tprivate _cacheMap: { collections: string[], key: string }[] = [];\n\tprivate _operationInProgress: Map<string, { promise: Promise<any>, invalidatedDuringExecution: boolean, collections: string[] }> = new Map();\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, 'name' | 'type'>)[] = [];\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst mongoManager = new MongoManager();\n\t\tawait mongoManager.initialize();\n\t\treturn mongoManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._nodeCache = new NodeCache({ stdTTL: 0, checkperiod: 0 });\n\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\t\tthis.setCacheLimit();\n\n\t\tif (this._isWorkersEnabled && this._isWorkerInstance) {\n\t\t\tthis.setupChangeStream();\n\t\t}\n\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\toneTimeTransaction<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn asyncLocalStorage.run({}, async () => {\n\t\t\tconst session = ResolveIOServer.getMongoConnection().startSession();\n\t\t\tasyncLocalStorage.getStore().session = session;\n\t\n\t\t\ttry {\n\t\t\t\tlet result: T;\n\n\t\t\t\tlet attemptCount = 0;\n\t\t\t\t\n\t\t\t\tawait session.withTransaction(async () => {\n\t\t\t\t\tattemptCount++;\n\t\t\t\t\tconsole.log(\"withTransaction callback invoked, attempt #\", attemptCount, session.serverSession?.id?.toString() || '');\n\n\t\t\t\t\t// Directly assign the result from fn()\n\t\t\t\t\tresult = await fn();\n\t\t\t\t\treturn result; // Explicit return for transaction validation\n\t\t\t\t});\n\t\n\t\t\t\treturn result; // Transaction committed successfully\n\t\t\t} \n\t\t\tfinally {\n\t\t\t\tawait session.endSession();\n\t\t\t\tconst store = asyncLocalStorage.getStore();\n\t\t\t\tif (store) delete store.session;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetSession() {\n\t\tconst store = asyncLocalStorage.getStore();\n\t\treturn store ? store.session : null;\n\t}\n\n\tprivate setCacheLimit() {\n\t\tif (this._isWorkersEnabled) {\n\t\t\tthis._heapLimit = this._isWorkerInstance ? this._heapSize * 0.8 : this._heapSize * 0.4;\n\t\t}\n\t\telse {\n\t\t\tthis._heapLimit = this._heapSize * 0.3;\n\t\t}\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tasync registerCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tif (\n\t\t\tcollection.collectionOptions &&\n\t\t\tcollection.collectionOptions.timeseries &&\n\t\t\tcollection.collectionOptions.timeseries.timeField &&\n\t\t\tthis._serverCollections.some(a => a.name === collection.collectionName && a.type === 'collection')\n\t\t) {\n\t\t\tawait ResolveIOServer.getMainDB().dropCollection(collection.collectionName);\n\t\t\tawait this.createCollection(collection);\n\t\t}\n\n\t\tthis._collections.push(collection);\n\t}\n\n\tasync createCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tawait ResolveIOServer.getMainDB().createCollection(collection.collectionName, collection.collectionOptions);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): MongoManagerCollection<CollectionDocument> | MongoManagerUserCollection<CollectionDocument> {\n\t\treturn this._collections.find(a => a.collectionName === collectionName);\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tpublic async find<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: FindOptions<T>\n\t): Promise<T[]> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'find', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Cache', collectionName);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Already running', collectionName);\n\t\t\t}\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Find - Running', collectionName);\n\t\t}\n\n\t\tconst operation = this.executeFind<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Find - Done', collectionName);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeFind<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>,\n\t\toptions: FindOptions<T> | undefined,\n\t\tcacheKey: string\n\t): Promise<T[]> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('find', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.find<T>(<any>filter, options).toArray();\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Find', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Find: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// FindOne Operation\n\tpublic async findOne<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {},\n\t\toptions?: FindOptions<T>\n\t): Promise<T> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'findOne', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Cache', collectionName);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Already running', collectionName);\n\t\t\t}\n\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo FindOne - Running', collectionName);\n\t\t}\n\n\t\tconst operation = this.executeFindOne<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo FindOne - Done', collectionName);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeFindOne<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T>,\n\t\toptions: FindOptions<T> | undefined,\n\t\tcacheKey: string\n\t): Promise<T> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('findOne', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.findOne<T>(<any>filter, options);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Find One', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Find One: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Aggregate Operation\n\tpublic async aggregate<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tpipeline: any[],\n\t\toptions?: AggregateOptions\n\t): Promise<any[]> {\n\t\tconst collections = [collectionName, ...pipeline.flatMap(stage => stage.$lookup?.from ? [stage.$lookup.from] : [])];\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey(collections, 'aggregate', [pipeline, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Cache', collections);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Already running', collections);\n\t\t\t}\n\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Agg - Running', collections);\n\t\t}\n\n\t\tconst operation = this.executeAggregate<T>(collectionName, pipeline, options, cacheKey, collections);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: collections\n\t\t});\n\n\t\tawait operation.finally(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Agg - Done', collections);\n\t\t\t}\n\n\t\t\tthis._operationInProgress.delete(cacheKey);\n\t\t});\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeAggregate<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tpipeline: any[],\n\t\toptions: AggregateOptions | undefined,\n\t\tcacheKey: string,\n\t\tcollections: string[]\n\t): Promise<any[]> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('aggregate', collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.aggregate<T>(pipeline, options).toArray();\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Aggregate', collectionName, pipeline, collections, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Aggregate: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache(collections, cacheKey, result);\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n\n\tpublic async countDocuments<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions\n\t): Promise<number> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst cacheKey = this.generateCacheKey([collectionName], 'countDocuments', [filter, safeOptions]);\n\t\tlet result = this.getFromCache(cacheKey);\n\t\tif (result !== undefined) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\treturn this._operationInProgress.get(cacheKey).promise;\n\t\t}\n\n\t\tconst operation = this.executeCountDocuments<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { \n\t\t\tpromise: operation, \n\t\t\tinvalidatedDuringExecution: false,\n\t\t\tcollections: [collectionName]\n\t\t});\n\n\t\tawait operation.finally(() => this._operationInProgress.delete(cacheKey));\n\n\t\treturn operation;\n\t}\n\n\tprivate async executeCountDocuments<T extends CollectionDocument>(\n\t\tcollectionName: string,\n\t\tfilter: MongoManagerFilter<T> | MongoManagerFilterOperators<T>,\n\t\toptions: CountDocumentsOptions,\n\t\tcacheKey: string\n\t): Promise<number> {\n\t\tlet result;\n\t\tconst collection = ResolveIOServer.getMainDB().collection(collectionName);\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tconst monitor = MonitorMongo.create('countDocuments', collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tresult = await collection.countDocuments(<any>filter, options);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Execute Count Documents', collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Execute Count Documents: ${collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t\n\t\tif (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\tthis.addToCache([collectionName], cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Cache and Invalidation Setup\n\tprivate generateCacheKey(collections: string[], functionName: string, args: any[]): string {\n\t\tconst keyString = JSON.stringify({ collections, functionName, args });\n\t\treturn crypto.createHash('sha256').update(keyString).digest('hex');\n\t}\n\n\tprivate getFromCache(cacheKey: string): any | undefined {\n\t\ttry {\n\t\t\tconst cachedData = this._nodeCache.get(cacheKey);\n\t\t\tif (cachedData) {\n\t\t\t\treturn JSON.parse(cachedData, dateReviver);\n\t\t\t}\n\t\t} \n\t\tcatch {\n\t\t\tthis._nodeCache.del(cacheKey);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate addToCache(collections: string[], cacheKey: string, data: any) {\n\t\tif (getBinarySize(JSON.stringify(data)) < 1000000 && \n\t\t\t!collections.includes('logs') &&\n\t\t\t!collections.find(a => a.endsWith('.versions')) &&\n\t\t\t!collections.find(a => a.startsWith('monitor-'))\n\t\t) {\n\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\tlet deleteCount = 0;\n\t\t\t\tconst keys = this._nodeCache.keys();\n\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t}\n\t\t\t\n\t\t\tthis._nodeCache.set(cacheKey, JSON.stringify(data));\n\t\t\tthis._cacheMap.push({ collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tconst collectionCacheMap = this._cacheMap.filter(a => a.collections.includes(collection));\n\n\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Mongo Invalidate Cache', collection);\n\t\t}\n\n\t\tfor (const cacheMap of collectionCacheMap) {\n\t\t\tthis._nodeCache.del(cacheMap.key);\n\t\t\t\n\t\t\tif (this._operationInProgress.has(cacheMap.key)) {\n\t\t\t\tthis._operationInProgress.get(cacheMap.key).invalidatedDuringExecution = true;\n\n\t\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Mongo Invalidated During Execution', cacheMap.collections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tfor (const [key, operation] of this._operationInProgress.entries()) {\n\t\t\tif (operation.collections.includes(collection)) {\n\t\t\t\toperation.invalidatedDuringExecution = true;\n\t\t\n\t\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Mongo Invalidated During Execution (No cache)', operation.collections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._cacheMap = this._cacheMap.filter(a => !a.collections.includes(collection));\n\t}\n\n\tprivate setupChangeStream() {\n\t\tconst db = ResolveIOServer.getMainDB();\n\n\t\tconst pipeline = [\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{'ns.coll': { $nin: [\n\t\t\t\t\t\t\t'log-method-latencies', \n\t\t\t\t\t\t\t'log-subscriptions', \n\t\t\t\t\t\t\t'logs', \n\t\t\t\t\t\t\t'counters', \n\t\t\t\t\t\t\t'cron-job-histories', \n\t\t\t\t\t\t\t'email-histories',\n\t\t\t\t\t\t\t'qb-soap-request-histories', \n\t\t\t\t\t\t\t'qb-soap-request-responses', \n\t\t\t\t\t\t\t'qb-soap-requests',\n\t\t\t\t\t\t\t'qb-soap-retries'\n\t\t\t\t\t\t] }},\n\t\t\t\t\t\t{'ns.coll': { $not: /.*\\.versions$/ }},\n\t\t\t\t\t\t{'ns.coll': { $not: /^monitor-/ }},\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t\tconst changeStream = db.watch(pipeline, { fullDocument: 'updateLookup' });\n\n\t\tchangeStream.on('change', (change: any) => {\n\t\t\tif (change['ns'] && change['ns'].coll) {\n\t\t\t\tconst collectionName = change['ns'].coll;\n\t\t\t\tconst collection = this.collection(collectionName);\n\n\t\t\t\tif (collection) {\n\t\t\t\t\tthis.invalidateQueryCache(collectionName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tchangeStream.on('error', async () => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream error. Restart...');\n\t\t\tawait changeStream.close();\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000);\n\t\t});\n\n\t\tchangeStream.on('close', () => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream closed. Restarting...');\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000);\n\t\t});\n\t}\n}\n\nexport class MongoManagerModel<T extends CollectionDocument> {\n\tcollection_main: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\tcollection_version: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\n\tconstructor() {}\n\n\tstatic create<T>(options: MongoManagerCollectionOptions): MongoManagerModel<T> {\n\t\tconst mongoManagerModel = new MongoManagerModel<T>();\n\t\tmongoManagerModel.initialize(options);\n\t\treturn mongoManagerModel;\n\t}\n\n\tprivate initialize(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = MongoManagerUserCollection.create(options) as MongoManagerUserCollection<T>;\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = MongoManagerCollection.create(options) as MongoManagerCollection<T>;\n\t\t}\n\n\t\tif (options.useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(options.schema);\n\t\t\tversionSchema._id.type = 'Object';\n\t\t\tversionSchema._id.blackbox = true;\n\n\t\t\tlet versionOptions: MongoManagerCollectionOptions = {\n\t\t\t\tcollectionName: options.collectionName + '.versions',\n\t\t\t\tschema: versionSchema,\n\t\t\t\tuseVersionCollection: false,\n\t\t\t\tuseReportBuilder: false,\n\t\t\t\treportBuilderLookupTables: [],\n\t\t\t\ttimestamps: true,\n\t\t\t\tcreateLogs: false,\n\t\t\t\tcheckSchema: false,\n\t\t\t\tcollectionOptions: null,\n\t\t\t\tskipCache: true\n\t\t\t};\n\n\t\t\tif (options.collectionName === 'users') {\t\n\t\t\t\tthis.collection_version = MongoManagerUserCollection.create(versionOptions) as MongoManagerUserCollection<T>;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = MongoManagerCollection.create(versionOptions) as MongoManagerCollection<T>;\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\t});\n\n\t\t\tthis.collection_main.versionCollection = options.collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport interface MongoManagerCollectionOptions {\n\tcollectionName: string;\n\tschema: object;\n\tuseVersionCollection: boolean;\n\tuseReportBuilder: boolean;\n\treportBuilderLookupTables: LookupTables[]\n\ttimestamps: boolean;\n\tcreateLogs: boolean;\n\tcheckSchema: boolean;\n\tcollectionOptions: CreateCollectionOptions;\n\tskipCache?: boolean;\n\tbypassSession?: boolean;\n}\n\nexport class MongoManagerCollection<T extends CollectionDocument> {\n\tcollectionName = '';\n\tcheckSchema = false;\n\tsimplschema = null;\n\trbSchema = null;\n\ttimestamps = false;\n\tuseVersions = false;\n\tversionCollection = '';\n\tcreateLogs = true;\n\tuseRB = false;\n\tcollectionOptions: CreateCollectionOptions;\n\tskipCache = false;\n\tbypassSession = false;\n\t\n\tconstructor() {}\n\t\n\tstatic create(options: MongoManagerCollectionOptions) {\n\t\tconst mongoManagerCollection = new MongoManagerCollection();\n\t\tmongoManagerCollection.initialize(options);\n\t\treturn mongoManagerCollection;\n\t}\n\n\tinitialize(options: MongoManagerCollectionOptions) {\n\t\tthis.collectionName = options.collectionName;\n\t\tthis.simplschema = new SimpleSchema(options.schema);\n\t\tthis.timestamps = options.timestamps;\n\t\tthis.createLogs = options.createLogs;\n\t\tthis.checkSchema = options.checkSchema;\n\t\tthis.collectionOptions = options.collectionOptions;\n\t\tthis.skipCache = options.skipCache || false;\n\t\tthis.bypassSession = options.bypassSession || false;\n\n\t\tif (options.useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(options.schema);\n\t\t\tlet rbSchema = buildRbLookups(options.reportBuilderLookupTables, schemaCopy, []);\n\t\t\tthis.rbSchema = buildRbSchema(rbSchema);\n\t\t}\n\n\t\tlet interval = setInterval(async () => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tawait ResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\t// Method to extract index name from error message\n\textractIndexNameFromError(errorMessage) {\n\t\tlet regexPattern = /Index already exists with a different name: (\\S+)/;\n\t\tlet matches = errorMessage.match(regexPattern);\n\t\n\t\tif (!matches || matches.length <= 1) {\n\t\t\t// If the first pattern doesn't match, try the second pattern\n\t\t\tregexPattern = /existing index:.*name: \"([^\"]+)\"/;\n\t\t\tmatches = errorMessage.match(regexPattern);\n\t\t}\n\t\n\t\treturn matches && matches.length > 1 ? matches[1] : null;\n\t}\n\n\tasync aggregate(pipeline: object[], options?: AggregateOptions, skipCache = false, bypassSession = false) : Promise<any[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().aggregate(this.collectionName, pipeline, options);\n\t\t}\n\t\telse {\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\t\t\tlet monitor = MonitorMongo.create('aggregate', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray();\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Aggregate', this.collectionName, pipeline, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync aggregateCount(pipeline: object[], options?: AggregateOptions, bypassSession = false) : Promise<number> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateCount', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray();\n\t\t\treturn res.length;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Aggregate Count', this.collectionName, pipeline, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Aggregate Count: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions, bypassSession = false): AggregationCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateCursor', this.collectionName, JSON.stringify([pipeline, safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\taggregateStream(pipeline: object[], options?: AggregateOptions, streamOptions?: CursorStreamOptions, bypassSession = false) {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\tlet monitor = MonitorMongo.create('aggregateStream', this.collectionName, JSON.stringify([pipeline, safeOptions, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions).on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tasync bulkWrite(\n\t\toperations: any[],\n\t\toptions?: BulkWriteOptions,\n\t\tbypassCheckSchema = false,\n\t\tbypassLogs = false,\n\t\tbypassVersions = false, \n\t\tbypassSession = false\n\t): Promise<BulkWriteResult> {\n\t\tif (!operations.length) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tconst BATCH_SIZE = 1000;\n\t\tlet opIndex = 0;\n\n\t\tlet sessionOptions = null;\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\t\n\t\twhile (opIndex < operations.length) {\n\t\t\tconst batchOps = operations.slice(opIndex, opIndex + BATCH_SIZE);\n\t\n\t\t\t// Initialize arrays for logs and version operations\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = [];\n\t\n\t\t\tfor (const op of batchOps) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tconst doc = op[opType];\n\t\n\t\t\t\t// Skip validation if bypassCheckSchema is true\n\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\tconst validationContext = this.simplschema.newContext();\n\t\t\t\t\tlet isValid: boolean;\n\t\n\t\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t\tisValid = validationContext.validate(doc.document);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\t\tisValid = validationContext.validate(doc.replacement);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'updateOne' || opType === 'updateMany') {\n\t\t\t\t\t\t// For updates, validate the update modifier\n\t\t\t\t\t\tisValid = validationContext.validate(doc.update, { modifier: true });\n\t\t\t\t\t}\n\t\t\t\t\telse if (opType === 'deleteOne' || opType === 'deleteMany') {\n\t\t\t\t\t\t// No validation needed for deletes\n\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error(`Unsupported operation type: ${opType}`);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Schema validation failed for ${opType}: ${JSON.stringify(validationContext.validationErrors())}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Now proceed to process the operations\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// If this.timestamps is true, set createdAt and updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = new Date();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!doc.document.updatedAt) {\n\t\t\t\t\t\t\tdoc.document.updatedAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.document._id || objectIdHexString(),\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.document)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.document, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Since we might have modified doc.document, update the operation\n\t\t\t\t\top[opType].document = doc.document;\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateOne' || opType === 'updateMany') {\n\t\t\t\t\t// If this.timestamps is true, add updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (!doc.update.$set) {\n\t\t\t\t\t\t\tdoc.update.$set = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If this.useVersions is true, increment __v\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\tdoc.update.$inc = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.update)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.update, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// No need to modify the operation further\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\t// If this.timestamps is true, set updatedAt\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If this.useVersions is true, increment __v\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tdoc.replacement.__v = (doc.replacement.__v || 0) + 1;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.replacement)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.replacement, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Since we might have modified doc.replacement, update the operation\n\t\t\t\t\top[opType].replacement = doc.replacement;\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne' || opType === 'deleteMany') {\n\t\t\t\t\t// Prepare log entry\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc.filter._id || null,\n\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.filter)) < 1000000\n\t\t\t\t\t\t\t\t\t? JSON.stringify(doc.filter, null, 2)\n\t\t\t\t\t\t\t\t\t: 'Too Big',\n\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\tid_user: '', // Add user info if available\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// For versioning, store the filter to fetch the document later\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tfilter: doc.filter,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// No need to modify the operation\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(`Unsupported operation type: ${opType}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet affectedDocs = [];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\t// Handle versioning\n\t\t\tif (!bypassVersions && this.useVersions && versionOps.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\t// Fetch the affected documents\n\t\t\t\t\tconst versionFilters = versionOps.map((v) => v.filter);\n\n\t\t\t\t\tif (versionFilters.length) {\n\t\t\t\t\t\taffectedDocs = await ResolveIOServer.getMainDB().collection(this.collectionName).find({ $or: versionFilters }, sessionOptions).toArray();\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Prepare version documents\n\t\t\t\t\tconst versionInserts = affectedDocs.map((doc) => ({\n\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t...doc,\n\t\t\t\t\t\t\t\t_id: { _id: doc._id, __v: doc.__v },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\n\t\t\t\t\t// Insert versions in bulk\n\t\t\t\t\tif (versionInserts.length > 0) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(<any>versionInserts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\t\t\t}\n\n\t\t\t// Execute bulkWrite\n\t\t\tconst monitor = MonitorMongo.create('bulkWrite', this.collectionName, JSON.stringify([batchOps, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(batchOps, options);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Bulk Write', this.collectionName, operations, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Bulk Write: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\n\t\t\t// Insert logs in bulk\n\t\t\tif (!bypassLogs && this.createLogs && logs.length > 0) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLogs(logs.map(a => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: a\n\t\t\t\t\t\t};\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet bwOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tbwOptions = {ordered: false};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbwOptions = {session: mongoSession, ordered: false};\n\t\t\t\t\t}\n\n\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').bulkWrite(logs.map(a => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: a\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}), bwOptions);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\ttry {\n\t\t\t\t\t// Delete old versions beyond the latest 5\n\t\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\n\t\t\t\t\tconst pipeline = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline).toArray();\n\n\t\t\t\t\tif (oldVersions.length > 0) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).deleteMany({ _id: { $in: oldVersions.map((v) => v._id) } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\t\t\t}\n\t\n\t\t\topIndex += BATCH_SIZE;\n\t\n\t\t\t// Yield to the event loop\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\n\t\t\t// Invalidate cache\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\t\t}\n\t\n\t\treturn { ok: 1 } as BulkWriteResult; // Adjust return value as per your requirements\n\t}\n\n\tasync countDocuments(\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions,\n\t\tskipCache = false\n\t): Promise<number> {\n\t\t\n\t\t// ********* COUNTS ARE NOT SUPPORTED IN MONGO SESSIONS! ***************\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t// Check if the filter is empty\n\t\tconst isUnfiltered = Object.keys(filter).length === 0;\n\n\t\tif (isUnfiltered) {\n\t\t\t// Use collection stats for an unfiltered count\n\t\t\treturn ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).estimatedDocumentCount(safeOptions);\n\t\t}\n\t\telse if (!skipCache && !this.skipCache) {\n\t\t\t// Use cached count if skipCache is false\n\t\t\treturn ResolveIOServer.getMongoManager().countDocuments(this.collectionName, filter, safeOptions);\n\t\t}\n\t\telse {\n\t\t\t// Fallback to direct countDocuments call with monitoring if skipCache is true\n\n\t\t\tlet monitor = MonitorMongo.create('countDocuments', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, safeOptions);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Count Documents', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Count Documents: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\t//Helper Function (1 or Many) - Not Real Mongo Function\n\tcreate(f_docs: T | T[], options?: InsertOneOptions | BulkWriteOptions): Promise<T | T[]> {\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, <InsertOneOptions>options);\n\t\t}\n\t\telse if (f_docs.length === 1) {\n\t\t\treturn this.insertOne(f_docs[0], <InsertOneOptions>options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, <BulkWriteOptions>options);\n\t}\n\n\tasync createIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\t// Check if index already exists based on the key\n\n\t\ttry {\n\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\tconst existingIndexes = await dbCollection.indexes();\n\n\t\t\t// Check if an index with the same key already exists\n\t\t\tconst indexExists = existingIndexes.some(index => \n\t\t\t\tJSON.stringify(index.key) === JSON.stringify(fieldOrSpec)\n\t\t\t);\n\n\t\t\tif (indexExists) {\n\t\t\t\treturn 'Index already exists'; // Skip creation if index exists\n\t\t\t}\n\n\t\t\treturn dbCollection.createIndex(fieldOrSpec, options);\n\t\t}\n\t\tcatch {}\n\t\t\n\t\treturn 'Index creation queued';\n\t}\n\t\n\tasync createIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\ttry {\n\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\tconst existingIndexes = await dbCollection.indexes();\n\n\t\t\t// Filter out indexes that already exist based on the key\n\t\t\tconst indexesToCreate = indexSpecs.filter(indexSpec => \n\t\t\t\t!existingIndexes.some(existingIndex => \n\t\t\t\t\tJSON.stringify(existingIndex.key) === JSON.stringify(indexSpec.key)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// If no new indexes to create, resolve early\n\t\t\tif (indexesToCreate.length === 0) {\n\t\t\t\treturn ['All indexes already exist'];\n\t\t\t}\n\n\t\t\treturn dbCollection.createIndexes(indexSpecs, options);\n\t\t}\n\t\tcatch {}\n\n\t\treturn ['Index creation queued'];\n\t}\n\t\n\tasync deleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.createLogs && !bypassLogs) || this.useVersions) {\n\t\t\tlet docs = await this.find(filter, sessionOptions);\n\n\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\tlet doc = docs[i];\n\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('deleteMany', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\n\t\t\treturn res.acknowledged;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete Many', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Delete Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync deleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\tlet monitor = MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet returnVal = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options);\n\t\t\t\tlet doc = returnVal.value;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete One (Find One And Delete)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Delete One (Find One And Delete): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('deleteOne', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options);\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\treturn res.acknowledged;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Delete One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Delete One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync distinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions, bypassSession = false): Promise<T[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('distinct', this.collectionName, JSON.stringify([key, filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Distinct', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Distinct: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync drop(options?: CommandOperationOptions, bypassSession = false): Promise<boolean> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('drop', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Collection', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Collection: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync dropIndex(indexName: string, options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('dropIndex', this.collectionName, JSON.stringify([indexName, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options);\n\t\t\treturn <Document>res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Index', this.collectionName, indexName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Index: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync dropIndexes(options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('dropIndexes', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Drop Indexes', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Drop Indexes: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync find(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T[]> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t \n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tconsole.log(\"Find: \", this.collectionName, \"Session: \", session.serverSession?.id?.toString() || '');\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().find(this.collectionName, filter, options);\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('find', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray();\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findById(id: string, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().findOne(this.collectionName, {_id: id}, options);\n\t\t}\n\t\telse {\n\t\t\tlet monitor = MonitorMongo.create('findById', this.collectionName, JSON.stringify([{_id: id}, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find By ID', this.collectionName, id, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find By ID: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): Promise<Number> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findCount', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count();\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find Count', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find Count: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): FindCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findCursor', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\tcursor.removeAllListeners();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tfindStream(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, streamOptions?: CursorStreamOptions, bypassSession = false) {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tlet monitor = MonitorMongo.create('findStream', this.collectionName, JSON.stringify([filter, safeOptions, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions).on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tasync findOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\tif (!skipCache && !this.skipCache) {\n\t\t\treturn ResolveIOServer.getMongoManager().findOne(this.collectionName, filter, options);\n\t\t}\n\t\telse {\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\tlet monitor = MonitorMongo.create('findOne', this.collectionName, JSON.stringify([filter, safeOptions]));\n\t\t\t\n\t\t\ttry {\n\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Find One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait monitor.finish();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync findOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<T> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options);\n\t\t\tlet doc = res.value;\n\t\t\t\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Delete', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Delete: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync findOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndReplace - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet date = new Date();\n\n\t\tif (this.timestamps) {\n\t\t\treplacement.updatedAt = date;\n\t\t}\n\n\t\tif (options && options.upsert) {\n\t\t\tif (!replacement._id) {\n\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\treplacement.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\treplacement.createdAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options);\n\t\t\tlet doc = res.value;\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id as string,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Replace', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Replace: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync findOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndUpdate - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date(); \n\t\t\t\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tif (options && options.upsert) {\n\t\t\tif (!update.$setOnInsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options);\n\t\t\tlet doc = res.value;\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\t\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}\n\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn <T>doc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Find One And Update', this.collectionName, filter, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Find One And Update: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync indexes(options: IndexInformationOptions): Promise<any[]> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('indexes', this.collectionName, JSON.stringify([safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Indexes', this.collectionName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Indexes: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync indexExists(indexes: string | string[], options?: IndexInformationOptions): Promise<boolean> {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('indexExists', this.collectionName, JSON.stringify([indexes, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Index Exists', this.collectionName, indexes, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Index Exists: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync insertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false, bypassSession = false): Promise<T[]> {\n\t\tif (!docs.length) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\tlet validationResults = [];\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tdocs.forEach(doc => {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertMany - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\tvalidationResults.push(false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\tlet doc = validDocs[i];\n\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\tdoc.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t}, sessionOptions);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (validDocs.length) {\n\t\t\tlet monitor = null;\n\t\t\t\n\t\t\tif (!bypassMonitor) {\n\t\t\t\tmonitor = MonitorMongo.create('insertMany', this.collectionName, JSON.stringify([validDocs, safeOptions]));\n\t\t\t}\n\t\t\t\n\t\t\ttry {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options);\n\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t}\n\t\t\t\treturn validDocs;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Insert Many', this.collectionName, docs, safeOptions, {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tstack: err.stack\n\t\t\t\t}], null, 2));\n\t\n\t\t\t\terr.message = `Error in Insert Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tif (monitor) {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tasync insertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\tif (!doc._id) {\n\t\t\tdoc._id = objectIdHexString();\n\t\t}\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertOne - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\tthrow new Error (validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date();\n\t\t\n\t\t\tif (!doc.createdAt) {\n\t\t\t\tdoc.createdAt = date;\n\t\t\t}\n\n\t\t\tif (!doc.updatedAt) {\n\t\t\t\tdoc.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\tif (\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t) {\n\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\ttype: 'log',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: '',\n\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t}, sessionOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\tdoc.__v = 0;\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('insertOne', this.collectionName, JSON.stringify([doc, safeOptions]));\n\n\t\ttry {\n\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\t\t\t\n\t\t\treturn doc;\n\t\t}\n\t\tcatch(err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Insert One', this.collectionName, doc, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Insert One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions, bypassSession = false): ListIndexesCursor {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('listIndexes', this.collectionName, JSON.stringify([safeOptions]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', async ev => {\n\t\t\tawait monitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tasync rename(newName: string, options?: RenameOptions, bypassSession = false): Promise<Collection<Document>> {\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: mongoSession\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tlet monitor = MonitorMongo.create('rename', this.collectionName, JSON.stringify([newName, safeOptions]));\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options);\n\t\t\treturn res;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Rename', this.collectionName, newName, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Rename: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync replaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null, bypassSession = false) : Promise<number> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on replaceOne - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet date = new Date();\n\t\t\n\t\tif (this.timestamps) {\n\t\t\treplacement.updatedAt = date;\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif (this.useVersions) {\n\t\t\tif (!doc) {\n\t\t\t\tdoc = await this.findOne(<any>filter, sessionOptions, true);\n\t\t\t}\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t}\n\n\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t\t}], null, 2));\n\t\t\t\n\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\tawait monitor.finish();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t}\n\t\t\t\t\t}, null, true);\n\n\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, safeOptions]));\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options);\n\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t\t\t}], null, 2));\n\t\t\t\t\n\t\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfinally {\n\t\t\t\t\t\t\tawait monitor.finish();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in Replace One: Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\treplacement.__v = 0;\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('Error in Replace One: No Document');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\treplacement.__v = 0;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet { session, ...safeOptions } = options || {};\n\n\t\t\t\tlet monitor = MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options);\n\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One (Find One And Replace)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One (Find One And Replace): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync updateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false, bypassSession = false) : Promise<number> {\n\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\treturn 1;\n\t\t}\n\t\t\n\t\tif (this.timestamps) {\n\t\t\tlet date = new Date();\n\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateMany - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\tlet docs = await this.find(filter, sessionOptions);\n\n\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\tlet doc = docs[i];\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\t\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = MonitorMongo.create('updateMany', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\ttry {\n\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options);\n\t\t\tif (!this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t}\n\n\t\t\treturn res.acknowledged;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update Many', this.collectionName, filter, update, safeOptions, {\n\t\t\t\tcode: err.code,\n\t\t\t\tcodeName: err.codeName,\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack\n\t\t\t}], null, 2));\n\n\t\t\terr.message = `Error in Update Many: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t\tfinally {\n\t\t\tawait monitor.finish();\n\t\t}\n\t}\n\n\tasync updateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false) : Promise<boolean> {\n\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\tif (!isValid) {\n\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateOne - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\tthrow new Error(validation.validationErrors());\n\t\t\t}\n\t\t}\n\n\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet date = new Date();\n\n\t\tif (this.timestamps) {\n\t\t\tif (!update.$set) {\n\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t}\n\t\t}\n\n\t\tconst mongoSession = ResolveIOServer.getMongoManager().getSession();\n\t\tlet sessionOptions = null;\n\n\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session: mongoSession};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = mongoSession;\n\t\t\t}\n\n\t\t\tsessionOptions = {session: mongoSession};\n\t\t}\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tif (this.useVersions) {\n\t\t\tlet doc = await this.findOne(filter, sessionOptions, true);\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc);\n\t\t\t\t\t\n\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {}\n\n\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t}\n\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t__v: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('Error in Update One: No Document');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t}\n\n\t\t\t\tlet monitor = MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options);\n\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t}, sessionOptions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn !!res.ok;\n\t\t\t\t\t}\n\t\t\t\t\telse if (update.$setOnInsert) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn !!res.ok;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One (Find One And Update)', this.collectionName, filter, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One (Find One And Update): ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options);\n\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t}\n\t\t\t\t\treturn res.acknowledged;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tcodeName: err.codeName,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\tstack: err.stack\n\t\t\t\t\t}], null, 2));\n\t\t\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} => ${err.codeName || 'NoCodeName'} => ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait monitor.finish();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions, bypassSession = false): ChangeStream<T> {\n\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !bypassSession && !this.bypassSession) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {session};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = session;\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).watch(pipeline, options);\n\t\treturn <ChangeStream<T>>stream;\n\t}\n}\n\nexport class MongoManagerUserCollection<T extends CollectionDocument> extends MongoManagerCollection<T> {\n\tstatic create(options: MongoManagerCollectionOptions) {\n\t\tconst mongoManagerCollection = new MongoManagerUserCollection();\n\t\tmongoManagerCollection.initialize(options);\n\t\treturn mongoManagerCollection;\n\t}\n\t\n\tasync authenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\n\t\tif (user.last) {\n\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tuser.last = new Date();\n\t\t}\n\t\n\t\tif (user.attempts >= 5) {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: 'Too Many Attempts'\n\t\t\t};\n\t\t}\n\t\t\n\t\tif (!user.salt) {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tlet hashBuffer = await pbkdf2Promisified(password, user.salt, {\n\t\t\t\titerations: 25000,\n\t\t\t\tkeylen: 512,\n\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t});\n\n\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tuser.attempts = 0;\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\treturn {\n\t\t\t\t\tdata: user,\n\t\t\t\t\terror: ''\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser.last = new Date();\n\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Invalid Username And Password'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\terr.message = `Error in User Authenticate: ${JSON.stringify(user, null, 2)} - ${err.message}`;\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tserializeUser() {\n\t\treturn (user, cb) => {\n\t\t\tcb(null, user.username);\n\t\t};\n\t}\n\n\tdeserializeUser() {\n\t\treturn async (username) => {\n\t\t\treturn Users.findOne({username: username});\n\t\t};\n\t}\n\n\tasync setPassword(user: UserModel, password: string) {\n\t\tif (!user) {\n\t\t\tthrow new Error('Error In User Set Password: No User');\n\t\t}\n\t\telse if (!password) {\n\t\t\tthrow new Error('Error In User Set Password: No Password');\n\t\t}\n\t\telse {\n\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\tlet salt = saltBuffer.toString('hex');\n\t\t\ttry {\n\t\t\t\tlet hashRaw = await pbkdf2Promisified(password, salt, {\n\t\t\t\t\titerations: 25000,\n\t\t\t\t\tkeylen: 512,\n\t\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t\t});\n\t\t\t\tlet hash = Buffer.from(hashRaw, 'binary').toString('hex');\n\t\t\t\t\n\t\t\t\treturn Users.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}});\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in User Set Password: ${JSON.stringify(user, null, 2)} - ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t};\n\n\tasync changePassword(user, oldPassword, newPassword) {\n\t\tif (!user) {\n\t\t\tthrow new Error('Error in User Change Password: Missing User');\n\t\t}\n\t\telse if (!oldPassword || !newPassword) {\n\t\t\tthrow new Error('Error in User Change Password: Missing Password');\n\t\t}\n\t\telse {\n\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\tif (!authUser['data']) {\n\t\t\t\tthrow authUser['error'];\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.setPassword(user, newPassword);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tasync register(user, password) {\n\t\tif (!user.username) {\n\t\t\tthrow new Error('Error in User Register: Missing Username');\n\t\t}\n\t\telse {\n\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\n\t\t\tif (dbUser) {\n\t\t\t\tthrow new Error('Error in User Register: Username Exists');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\tif (dbUser) {\n\t\t\t\t\tthrow new Error('Error in User Register: Email Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\treturn user;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresetAttempts(user: UserModel) {\n\t\treturn Users.updateOne({_id: user._id}, {$set: {attempts: 0}});\n\t}\n}\n\nfunction pbkdf2(password, salt, options, callback) {\n\tcrypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);\n};\n\nfunction pbkdf2Promisified(password, salt, options): Promise<any> {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn new Promise((resolve, reject) => crypto.randomBytes(saltlen, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))));\n}\n\nfunction objectContainsPropertyDeep(obj: Object, prop: string) {\n\tlet keys = Object.keys(obj);\n\n\tif (keys.some(a => a === prop)) {\n\t\treturn true;\n\t}\n\t\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tlet key = keys[i];\n\t\tif (obj[key] && typeof obj[key] === 'object' && objectContainsPropertyDeep(obj[key], prop)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}"]}