@resolveio/server-lib 20.7.77 → 20.7.78

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","withTransaction","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","console","log","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","_b","monitor","MonitorMongo","JSON","stringify","message","concat","err_1","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","versionInserts","insertOne","__assign","bwOptions","ordered","err_7","getServerConfig","getLocalLogManager","writeLogs","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","upsert","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","id","err_17","findCount","count","err_18","findCursor","removeAllListeners","findStream","err_19","err_20","findOneAndReplace","validation","getMethodManager","callMethod","call","date","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\t\t\t\t\n\t\t\t\tawait session.withTransaction(async () => {\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\terr.message = `Error in Execute Find (${collectionName}): ${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\terr.message = `Error in Execute Find One (${collectionName}): ${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\terr.message = `Error in Execute Aggregate (${collectionName}): ${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\terr.message = `Error in Execute Count Documents (${collectionName}): ${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')) {\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(new Date(), 'Error Aggregate', this.collectionName, JSON.stringify([pipeline, safeOptions, err], null, 2));\n\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Aggregate Count', this.collectionName, JSON.stringify([pipeline, safeOptions, err], null, 2));\n\t\t\terr.message = `Error in Aggregate Count: ${this.collectionName} - ${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')) {\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')) {\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')) {\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// 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\tlet bwOptions = null;\n\t\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\t\tbwOptions = {ordered: false};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbwOptions = {session: mongoSession, ordered: false};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(<any>versionInserts, bwOptions);\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// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\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\terr.message = `Error in Bulk Write: ${this.collectionName} - ${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\t// Delete old versions beyond the latest 5\n\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\n\t\t\t\tconst pipeline = [\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t{\n\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\ttry {\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline, sessionOptions).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) } }, sessionOptions);\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(new Date(), 'Error Count Documents', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Count Documents: ${this.collectionName} - ${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')) {\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);\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session: mongoSession, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Delete Many', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Delete Many: ${this.collectionName} - ${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')) {\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\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\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\tlet versionOptions = null;\n\t\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Delete One (Find One And Delete)', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Delete One (Find One And Delete): ${this.collectionName} - ${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(new Date(), 'Error Delete One', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Delete One: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Distinct', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Distinct: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Count Documents', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Count Documents: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Drop Index', this.collectionName, indexName, safeOptions, err);\n\t\t\terr.message = `Error in Drop Index: ${this.collectionName} - ${indexName} - ${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')) {\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(new Date(), 'Error Drop Indexes', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Drop Indexes: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Find', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Find: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, safeOptions, err);\n\t\t\t\terr.message = `Error in Find By ID: ${this.collectionName} - ${id} - ${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')) {\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(new Date(), 'Error Find Count', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find Count: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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')) {\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')) {\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(new Date(), 'Error Find One', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Find One: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Delete', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Delete: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Replace', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Replace: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Update', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Update: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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(new Date(), 'Error Indexes', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Indexes: ${this.collectionName} - ${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(new Date(), 'Error Index Exists', this.collectionName, indexes, safeOptions, err);\n\t\t\terr.message = `Error in Index Exists: ${this.collectionName} - ${JSON.stringify(indexes, null, 2)} - ${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')) {\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(new Date(), 'Error Insert Many', this.collectionName, validDocs, safeOptions, err);\n\t\t\t\terr.message = `Error in Insert Many: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Insert One', this.collectionName, doc, safeOptions, err);\n\t\t\terr.message = `Error in Insert One: ${this.collectionName} - ${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')) {\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')) {\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(new Date(), 'Error Rename', this.collectionName, newName, safeOptions, err);\n\t\t\terr.message = `Error in Rename: ${this.collectionName} - ${newName} - ${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')) {\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\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, null, 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\treplacement.__v += 1;\n\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\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, safeOptions, err);\n\t\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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 Replcae 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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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(new Date(), 'Error Replace One (Find One And Replace)', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Replace One (Find One And Replace): ${this.collectionName} - ${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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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')) {\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\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\tlet docs = await this.find(filter);\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Update Many', this.collectionName, filter, update, safeOptions, err);\n\t\t\terr.message = `Error in Update Many: ${this.collectionName} - ${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\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || !options.readPreference || options.readPreference === 'primary')) {\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\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tif (this.useVersions) {\n\t\t\tlet doc = await this.findOne(filter, null, 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\tlet versionDoc = deepCopy(doc);\n\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\tlet versionOptions = null;\n\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} - ${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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} - ${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(new Date(), 'Error Update One (Find One And Update)', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One (Find One And Update): ${this.collectionName} - ${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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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","startTransaction","result","commitTransaction","abortTransaction","err_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","getFromCache","getMainServer","getSubscriptionManager","getEnableDebug","console","log","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","_b","monitor","MonitorMongo","JSON","stringify","message","concat","err_2","finish","addToCache","findOne","executeFindOne","err_3","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","err_4","countDocuments","executeCountDocuments","err_5","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_6","aggregateCount","err_7","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","versionInserts","insertOne","__assign","bwOptions","ordered","err_8","getServerConfig","getLocalLogManager","writeLogs","affectedDocIds","$in","$sort","$group","versions","$push","$project","versionsToDelete","$slice","$size","$unwind","$replaceRoot","newRoot","oldVersions","deleteMany","ok","estimatedDocumentCount","err_9","f_docs","Array","isArray","insertMany","fieldOrSpec","dbCollection","indexes","existingIndexes","index","createIndexes","indexSpecs","existingIndexes_1","indexSpec","existingIndex","docs","i","writeLog","versionDoc","upsert","replaceOne","$lt","res","acknowledged","err_10","deleteOne","findOneAndDelete","returnVal","err_11","err_12","distinct","err_13","drop","err_14","dropIndex","indexName","err_15","dropIndexes","err_16","err_17","findById","id","err_18","findCount","count","err_19","findCursor","removeAllListeners","findStream","err_20","err_21","findOneAndReplace","validation","getMethodManager","callMethod","call","date","err_22","findOneAndUpdate","$setOnInsert","err_23","err_24","indexExists","err_25","bypassMonitor","validationResults","forEach","validDocs","idx","hasOwnProperty","err_26","err_27","listIndexes","rename","newName","err_28","err_29","prevDoc","docId","docVersion","updatedDoc","getMongoMergeUpdatedDoc","err_30","err_31","returnDocument","safeOptions_1","doc_1","err_32","err_33","updateMany","$unset","objectContainsPropertyDeep","err_34","updateOne","err_35","err_36","err_37","err_38","watchCollection","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","error","salt","pbkdf2Promisified","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","err_39","serializeUser","cb","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","hashRaw","services","err_40","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\tsession.startTransaction();\n\t\t\t\tlet result: T = await fn();\n\t\t\t\t\n\t\t\t\tawait session.commitTransaction();\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tawait session.abortTransaction();\n\t\t\t\tthrow err;\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) {\n\t\t\t\t\tdelete store.session;\n\t\t\t\t}\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\terr.message = `Error in Execute Find (${collectionName}): ${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\terr.message = `Error in Execute Find One (${collectionName}): ${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\terr.message = `Error in Execute Aggregate (${collectionName}): ${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\terr.message = `Error in Execute Count Documents (${collectionName}): ${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')) {\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(new Date(), 'Error Aggregate', this.collectionName, JSON.stringify([pipeline, safeOptions, err], null, 2));\n\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Aggregate Count', this.collectionName, JSON.stringify([pipeline, safeOptions, err], null, 2));\n\t\t\terr.message = `Error in Aggregate Count: ${this.collectionName} - ${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')) {\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')) {\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')) {\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// 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\tlet bwOptions = null;\n\t\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\t\tbwOptions = {ordered: false};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbwOptions = {session: mongoSession, ordered: false};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(<any>versionInserts, bwOptions);\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// eslint-disable-next-line no-unused-vars\n\t\t\tlet { session, ...safeOptions } = options || {};\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\terr.message = `Error in Bulk Write: ${this.collectionName} - ${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\t// Delete old versions beyond the latest 5\n\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\n\t\t\t\tconst pipeline = [\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t{\n\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\ttry {\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline, sessionOptions).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) } }, sessionOptions);\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(new Date(), 'Error Count Documents', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Count Documents: ${this.collectionName} - ${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')) {\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);\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session: mongoSession, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Delete Many', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Delete Many: ${this.collectionName} - ${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')) {\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\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\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\tlet versionOptions = null;\n\t\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Delete One (Find One And Delete)', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Delete One (Find One And Delete): ${this.collectionName} - ${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(new Date(), 'Error Delete One', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Delete One: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Distinct', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Distinct: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Count Documents', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Count Documents: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Drop Index', this.collectionName, indexName, safeOptions, err);\n\t\t\terr.message = `Error in Drop Index: ${this.collectionName} - ${indexName} - ${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')) {\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(new Date(), 'Error Drop Indexes', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Drop Indexes: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Find', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Find: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, safeOptions, err);\n\t\t\t\terr.message = `Error in Find By ID: ${this.collectionName} - ${id} - ${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')) {\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(new Date(), 'Error Find Count', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find Count: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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')) {\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')) {\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(new Date(), 'Error Find One', this.collectionName, filter, safeOptions, err);\n\t\t\t\terr.message = `Error in Find One: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Delete', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Delete: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Replace', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Replace: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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')) {\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\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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(new Date(), 'Error Find One And Update', this.collectionName, filter, safeOptions, err);\n\t\t\terr.message = `Error in Find One And Update: ${this.collectionName} - ${JSON.stringify(filter, null, 2)} - ${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(new Date(), 'Error Indexes', this.collectionName, safeOptions, err);\n\t\t\terr.message = `Error in Indexes: ${this.collectionName} - ${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(new Date(), 'Error Index Exists', this.collectionName, indexes, safeOptions, err);\n\t\t\terr.message = `Error in Index Exists: ${this.collectionName} - ${JSON.stringify(indexes, null, 2)} - ${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')) {\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(new Date(), 'Error Insert Many', this.collectionName, validDocs, safeOptions, err);\n\t\t\t\terr.message = `Error in Insert Many: ${this.collectionName} - ${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')) {\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(new Date(), 'Error Insert One', this.collectionName, doc, safeOptions, err);\n\t\t\terr.message = `Error in Insert One: ${this.collectionName} - ${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')) {\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')) {\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(new Date(), 'Error Rename', this.collectionName, newName, safeOptions, err);\n\t\t\terr.message = `Error in Rename: ${this.collectionName} - ${newName} - ${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')) {\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\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, null, 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\treplacement.__v += 1;\n\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\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, safeOptions, err);\n\t\t\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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 Replcae 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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Replace One: ${this.collectionName} - ${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(new Date(), 'Error Replace One (Find One And Replace)', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Replace One (Find One And Replace): ${this.collectionName} - ${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(new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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')) {\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\tlet { session, ...safeOptions } = options || {};\n\n\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\tlet docs = await this.find(filter);\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\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Update Many', this.collectionName, filter, update, safeOptions, err);\n\t\t\terr.message = `Error in Update Many: ${this.collectionName} - ${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\t\tif (mongoSession && !bypassSession && !this.bypassSession && (!options || !options.readPreference || options.readPreference === 'primary')) {\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\tlet { session, ...safeOptions } = options || {};\n\t\t\n\t\tif (this.useVersions) {\n\t\t\tlet doc = await this.findOne(filter, null, 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\tlet versionDoc = deepCopy(doc);\n\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\tlet versionOptions = null;\n\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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}}]}, sessionOptions);\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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} - ${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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One: ${this.collectionName} - ${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(new Date(), 'Error Update One (Find One And Update)', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Update One (Find One And Update): ${this.collectionName} - ${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(new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, err);\n\t\t\t\t\terr.message = `Error in Aggregate: ${this.collectionName} - ${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}"]}