@resolveio/server-lib 20.6.27 → 20.7.0

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":["simpl_schema_1","require","resolveio_server_app_1","user_collection_1","common_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","MongoManager","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_isWorkersEnabled","_isWorkerInstance","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","setupChangeStream","prototype","_heapLimit","initServerCollections","ResolveIOServer","getMainDB","listCollections","toArray","collections","_a","sent","getServerCollections","registerCollection","collection","_this","collectionOptions","timeseries","timeField","some","a","name","collectionName","type","dropCollection","then","createCollection","push","find","delay","ms","Promise","resolve","setTimeout","filter","options","cacheKey","generateCacheKey","undefined","result","getFromCache","getMainServer","getSubscriptionManager","getEnableDebug","console","log","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","monitor","MonitorMongo","JSON","stringify","finish","addToCache","findOne","executeFindOne","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","countDocuments","executeCountDocuments","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","error","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","__awaiter","coll","err","close","MongoManagerModel","exports","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","skipCache","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","setInterval","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","reject","monitor_1","res","aggregateCount","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassCheckSchema","bypassLogs","bypassVersions","BATCH_SIZE","opIndex","batchOps","slice","logs","versionOps","e_5","batchOps_1","batchOps_1_1","op","opType","Object","doc","validationContext","newContext","isValid","validate","document","replacement","modifier","Error","concat","validationErrors","createdAt","updatedAt","insertOne","objectIdHexString","id_document","payload","method","id_user","user","messageId","route","versionDoc","__assign","__v","$set","$inc","affectedDocs","versionFilters","map","v","$or","versionInserts","ordered","e_4","getServerConfig","getLocalLogManager","writeLogs","affectedDocIds","$in","$sort","$group","versions","$push","$project","versionsToDelete","$slice","$size","$unwind","$replaceRoot","newRoot","oldVersions","deleteMany","error_1","setImmediate","ok","estimatedDocumentCount","_b","monitor_2","err_1","create","f_docs","Array","isArray","insertMany","fieldOrSpec","indexes","existingIndexes","index","indexQueue","action","specs","err_2","createIndexes","indexSpecs","existingIndexes_1","indexesToCreate","indexSpec","existingIndex","err_3","docs","i","writeLog","replaceOne","upsert","$lt","acknowledged","deletedCount","deleteOne","monitor_3","findOneAndDelete","returnVal","monitor_4","distinct","drop","dropIndex","indexName","dropIndexes","monitor_5","findById","id","findCount","count","findCursor","removeAllListeners","findStream","monitor_6","findOneAndReplace","validation","date","getMethodManager","callMethod","call","findOneAndUpdate","$setOnInsert","indexExists","bypassMonitor","validationResults","forEach","validDocs","idx","hasOwnProperty","monitor_7","listIndexes","rename","newName","monitor_8","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_9","monitor_10","returnDocument","monitor_11","monitor_12","updateMany","$unset","objectContainsPropertyDeep","updateOne","monitor_13","monitor_14","monitor_15","monitor_16","watchCollection","queue","task","callback","dbCollection","apply","code","err_4","message","existingIndexName","innerError_1","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","salt","pbkdf2","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","serializeUser","cb","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","pbkdf2Promisified","hashRaw","services","rej","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { AggregateOptions, AggregationCursor, BulkWriteOptions, ChangeStream, ChangeStreamOptions, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, Filter, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, ObjectId, RenameOptions, ReplaceOptions, UpdateOptions, OptionalId, Collection, CollectionInfo, OptionalUnlessRequiredId, AnyBulkWriteOperation, BulkWriteResult, DbStatsOptions, ChangeStreamDocument } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport * as NodeCache from 'node-cache';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nimport { MonitorMongo } from './monitor.manager';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { cpus } from 'os';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nimport async from 'async';\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$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[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\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\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\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\tasync initServerCollections() {\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tregisterCollection(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\tResolveIOServer.getMainDB()\n\t\t\t\t.dropCollection(collection.collectionName)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.createCollection(collection);\n\t\t\t\t});\n\t\t}\n\n\t\tthis._collections.push(collection);\n\t}\n\n\tcreateCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tResolveIOServer.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\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\tconst cacheKey = this.generateCacheKey([collectionName], 'find', [filter, options]);\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\toperation.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\tconst monitor = new MonitorMongo('find', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.find(<any>filter, options).toArray();\n\t\tmonitor.finish();\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\tconst cacheKey = this.generateCacheKey([collectionName], 'findOne', [filter, options]);\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\toperation.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\n\t\tconst monitor = new MonitorMongo('findOne', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.findOne(<any>filter, options);\n\t\tmonitor.finish();\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\t\tconst cacheKey = this.generateCacheKey(collections, 'aggregate', [pipeline, options]);\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\toperation.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\tconst monitor = new MonitorMongo('aggregate', collectionName, JSON.stringify([pipeline, options]));\n\t\tresult = await collection.aggregate(pipeline, options).toArray();\n\t\tmonitor.finish();\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\tconst cacheKey = this.generateCacheKey([collectionName], 'countDocuments', [filter, options]);\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\toperation.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\tconst monitor = new MonitorMongo('countDocuments', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.countDocuments(<any>filter, options);\n\t\tmonitor.finish();\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} catch (error) {\n\t\t\tthis._nodeCache.del(cacheKey);\n\t\t}\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\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', async (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', err => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream error. Restart...');\n\t\t\tchangeStream.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(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = new MongoManagerUserCollection<T>(options);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new MongoManagerCollection<T>(options);\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 = new MongoManagerUserCollection<T>(versionOptions);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new MongoManagerCollection<T>(versionOptions);\n\t\t\t}\n\n\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\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}\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\t\n\tconstructor(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\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(() => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\tprivate static indexQueue = async.queue(async (task, callback) => {\n\t\tconst { action, collection, specs, options } = task;\n\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n\t\n\t\tif (!dbCollection) {\n\t\t\treturn callback(new Error(`Collection ${collection.collectionName} not found`));\n\t\t}\n\t\n\t\ttry {\n\t\t\t// Try creating the index, will auto-skip if already checked in createIndex/createIndexes\n\t\t\tconst result = await dbCollection[action](...specs, options);\n\t\t\tcallback(null, result);\n\t\t} catch (err) {\n\t\t\t// Handle any specific errors related to index creation\n\t\t\tif (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n\t\t\t\ttry {\n\t\t\t\t\tconst existingIndexName = collection.extractIndexNameFromError(err.message);\n\t\t\t\t\tif (existingIndexName) {\n\t\t\t\t\t\tawait dbCollection.dropIndex(existingIndexName);\n\t\t\t\t\t\tconst result = await dbCollection[action](...specs, options);\n\t\t\t\t\t\tcallback(null, result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch (innerError) {\n\t\t\t\t\tcallback(innerError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallback(err);\n\t\t}\n\t}, 1);\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}\t\n\n\taggregate(pipeline: object[], options?: AggregateOptions, skipCache = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().aggregate(this.collectionName, pipeline, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tasync aggregateCount(pipeline: object[], options?: AggregateOptions) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('aggregateCount', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res.length);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\treject(0);\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions): AggregationCursor {\n\t\tlet monitor = new MonitorMongo('aggregateCursor', this.collectionName, JSON.stringify([pipeline, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.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) {\n\t\tlet monitor = new MonitorMongo('aggregateStream', this.collectionName, JSON.stringify([pipeline, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.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): 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\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.document._id || objectIdHexString(),\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.document)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\n\t\n\t\t\t\t\t// Prepare version document\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tconst versionDoc = {\n\t\t\t\t\t\t\t...doc.document,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t_id: { _id: doc.document._id || objectIdHexString(), __v: 0 },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: versionDoc,\n\t\t\t\t\t\t\t},\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.update)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.replacement)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.filter)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\t\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\t\t\t\t\taffectedDocs = await ResolveIOServer.getMainDB().collection(this.collectionName).find({ $or: versionFilters }).toArray();\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\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(<any>versionInserts, { ordered: false });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tconsole.error('Error during version creation:', e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Execute bulkWrite\n\t\t\tconst monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([batchOps, options]));\n\t\t\tawait ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(batchOps, options);\n\t\t\tmonitor.finish();\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\tawait ResolveIOServer.getMainDB().collection('logs').bulkWrite(logs);\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\ttry {\n\t\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\t\n\t\t\t\t\tconst pipeline = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline).toArray();\n\t\n\t\t\t\t\tif (oldVersions.length > 0) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection(this.versionCollection).deleteMany({ _id: { $in: oldVersions.map((v) => v._id) } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tconsole.error('Error during version cleanup:', error);\n\t\t\t\t\t// Handle the error as needed\n\t\t\t\t}\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\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\tcountDocuments(\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions,\n\t\tskipCache = false\n\t): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// Check if the filter is empty\n\t\t\t\tconst isUnfiltered = Object.keys(filter).length === 0;\n\t\n\t\t\t\tif (isUnfiltered) {\n\t\t\t\t\t// Use collection stats for an unfiltered count\n\t\t\t\t\tconst res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).estimatedDocumentCount(options);\n\t\t\t\t\tresolve(res);\n\t\t\t\t}\n\t\t\t\telse if (!skipCache && !this.skipCache) {\n\t\t\t\t\t// Use cached count if skipCache is false\n\t\t\t\t\tResolveIOServer.getMongoManager().countDocuments(this.collectionName, filter, options).then(\n\t\t\t\t\t\tres => resolve(res),\n\t\t\t\t\t\terr => reject(err)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Fallback to direct countDocuments call with monitoring if skipCache is true\n\t\t\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, options).then(\n\t\t\t\t\t\tres => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terr => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, filter, options, err);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents (Stats)', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\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\tcreateIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// Check if index already exists based on the key\n\t\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\t\tconst existingIndexes = await dbCollection.indexes();\n\t\n\t\t\t\t// Check if an index with the same key already exists\n\t\t\t\tconst indexExists = existingIndexes.some(index => \n\t\t\t\t\tJSON.stringify(index.key) === JSON.stringify(fieldOrSpec)\n\t\t\t\t);\n\t\n\t\t\t\tif (indexExists) {\n\t\t\t\t\treturn resolve('Index already exists'); // Skip creation if index exists\n\t\t\t\t}\n\t\n\t\t\t\t// If index doesn't exist, push it to the queue\n\t\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\t\taction: 'createIndex',\n\t\t\t\t\tcollection: this,\n\t\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\t\toptions: options\n\t\t\t\t}, (err, result) => {\n\t\t\t\t\tif (err) reject(err);\n\t\t\t\t\telse resolve(result);\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\t\tconst existingIndexes = await dbCollection.indexes();\n\t\n\t\t\t\t// Filter out indexes that already exist based on the key\n\t\t\t\tconst indexesToCreate = indexSpecs.filter(indexSpec => \n\t\t\t\t\t!existingIndexes.some(existingIndex => \n\t\t\t\t\t\tJSON.stringify(existingIndex.key) === JSON.stringify(indexSpec.key)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\n\t\t\t\t// If no new indexes to create, resolve early\n\t\t\t\tif (indexesToCreate.length === 0) {\n\t\t\t\t\treturn resolve(['All indexes already exist']);\n\t\t\t\t}\n\t\n\t\t\t\t// Push only new indexes to the queue\n\t\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\t\taction: 'createIndexes',\n\t\t\t\t\tcollection: this,\n\t\t\t\t\tspecs: [indexesToCreate],\n\t\t\t\t\toptions: options\n\t\t\t\t}, (err, result) => {\n\t\t\t\t\tif (err) reject(err);\n\t\t\t\t\telse resolve(result);\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tdeleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif ((this.createLogs && !bypassLogs) || this.useVersions) {\n\t\t\t\tlet docs = await this.find(filter);\n\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\t\t\t\t\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'deleteMany',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, filter, options], 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\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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('deleteMany', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(res.deletedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Delete Many', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(async returnVal => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tlet doc = returnVal.value;\n \n\t\t\t\t\tif (doc) {\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: doc._id as string,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'deleteOne',\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\tResolveIOServer.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: doc._id as string,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], 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\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t\t}\n\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\tresolve(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('deleteOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.deletedCount);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Delete One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions): Promise<T[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('distinct', this.collectionName, JSON.stringify([key, filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Distinct', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdrop(options?: CommandOperationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('drop', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndex(indexName: string, options?: CommandOperationOptions): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndex', this.collectionName, JSON.stringify([indexName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(<Document>res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Index', this.collectionName, indexName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndexes(options?: CommandOperationOptions): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfind(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().find(this.collectionName, filter, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('find', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOptions<T>): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findById', this.collectionName, JSON.stringify([{_id: id}, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): Promise<Number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findCount', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find Count', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): FindCursor {\n\t\tlet monitor = new MonitorMongo('findCursor', this.collectionName, JSON.stringify([filter, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.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) {\n\t\tlet monitor = new MonitorMongo('findStream', this.collectionName, JSON.stringify([filter, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tfindOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().findOne(this.collectionName, filter, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('findOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.value;\n\t\t\t\t\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, filter, options], 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\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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\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\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\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\t\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\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\tif (this.useVersions) {\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\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\tResolveIOServer.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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\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\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date(); \n\t\t\t\t\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\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\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.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) {\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\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\t\t\t\t\t\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexes(options: IndexInformationOptions): Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexExists(indexes: string | string[], options?: IndexInformationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexExists', this.collectionName, JSON.stringify([indexes, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Index Exists', this.collectionName, indexes, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tinsertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!docs.length) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet validationResults = [];\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tdocs.forEach(doc => {\n\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\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\t\tvalidationResults.push(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\t\tlet doc = validDocs[i];\n\n\t\t\t\tif (!doc._id) {\n\t\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\t\tdoc.__v = 0;\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: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'insertMany',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, options], 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}\n\n\t\t\tif (validDocs.length) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\tif (!bypassMonitor) {\n\t\t\t\t\tmonitor = new MonitorMongo('insertMany', this.collectionName, JSON.stringify([validDocs, options]));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options).then(res => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tif (res.acknowledged) {\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\tresolve(validDocs);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(new Date(), 'Error Insert Many', this.collectionName, validDocs, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tinsertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\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 - insertOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\t\t\t\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.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, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertOne',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, options], 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\n\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\tdoc.__v = 0;\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('insertOne', this.collectionName, JSON.stringify([doc, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Insert One', this.collectionName, doc, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions): ListIndexesCursor {\n\t\tlet monitor = new MonitorMongo('listIndexes', this.collectionName, JSON.stringify([options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\trename(newName: string, options?: RenameOptions): Promise<Collection<Document>> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('rename', this.collectionName, JSON.stringify([newName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Rename', this.collectionName, newName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\treplaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\tif (!doc) {\n\t\t\t\t\tdoc = await this.findOne(<any>filter, null, true);\n\t\t\t\t}\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\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: doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\tResolveIOServer.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: doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\t\n\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\t\treject(err);\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\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, null, true);\n\n\t\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\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, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], 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\n\t\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, options]));\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, options, err);\n\t\t\t\t\t\t\t\treject(err);\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\treject('Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\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: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\t\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\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: <string>doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\tResolveIOServer.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: <string>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\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: replacement._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\tResolveIOServer.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: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\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\tresolve(1);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\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\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\t\tlet docs = await this.find(filter);\n\t\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateMany',\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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\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\t\t\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\t\tupdate.$inc.__v = 1;\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}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('updateMany', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Update Many', this.collectionName, filter, update, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\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\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (this.useVersions) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\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,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\n\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t}\n\t\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\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0,\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\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0\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\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\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\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString()\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\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\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 (!options) {\n\t\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\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: <any>doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\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\tResolveIOServer.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: <any>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (update.$setOnInsert) {\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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\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\tResolveIOServer.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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\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\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions): ChangeStream<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\tauthenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\t\n\t\t\tif (user.last) {\n\t\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\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}\n\t\t\n\t\t\tif (user.attempts >= 5) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (!user.salt) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tpbkdf2(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}, async (err, hashBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = 0;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: user,\n\t\t\t\t\t\terror: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Too Many Attempts'\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\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Invalid Username And Password'\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\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 (username, cb) => {\n\t\t\tUsers.findOne({username: username}).then(res => {\n\t\t\t\tcb(null, res);\n\t\t\t}, err => {\n\t\t\t\tcb(err, null);\n\t\t\t});\n\t\t};\n\t}\n\n\tsetPassword(user: UserModel, password: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('No User');\n\t\t\t}\n\t\t\telse if (!password) {\n\t\t\t\treject('No Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\t\tlet salt = saltBuffer.toString('hex');\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\tUsers.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}}).then(res => resolve(res), rej => reject(rej));\n\t\t\t}\n\t\t});\n\t};\n\n\tchangePassword(user, oldPassword, newPassword) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('Missing User');\n\t\t\t}\n\t\t\telse if (!oldPassword || !newPassword) {\n\t\t\t\treject('Missing Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\t\tif (!authUser['data']) {\n\t\t\t\t\treject(authUser['error']);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.setPassword(user, newPassword).then(res => resolve(res), rej => reject(rej));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tregister(user, password) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user.username) {\n\t\t\t\treject('Missing Username');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\t\n\t\t\t\tif (dbUser) {\n\t\t\t\t\treject('Username Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\t\tif (dbUser) {\n\t\t\t\t\t\treject('Email Exists');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t}\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\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\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":["simpl_schema_1","require","resolveio_server_app_1","user_collection_1","common_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","AsyncLocalStorage","asyncLocalStorage","MongoManager","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_isWorkersEnabled","_isWorkerInstance","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","setupChangeStream","prototype","withSession","fn","session","ResolveIOServer","getMongoConnection","startSession","startTransaction","run","__awaiter","_this","_a","sent","result","commitTransaction","abortTransaction","error_1","endSession","getSession","getStore","_heapLimit","initServerCollections","getMainDB","listCollections","toArray","collections","getServerCollections","registerCollection","collection","collectionOptions","timeseries","timeField","some","a","name","collectionName","type","dropCollection","then","createCollection","push","find","delay","ms","Promise","resolve","setTimeout","filter","options","cacheKey","generateCacheKey","undefined","getFromCache","getMainServer","getSubscriptionManager","getEnableDebug","console","log","Date","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","monitor","MonitorMongo","JSON","stringify","finish","addToCache","findOne","executeFindOne","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","countDocuments","executeCountDocuments","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","error","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","err","close","MongoManagerModel","exports","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","skipCache","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","setInterval","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","bypassSession","reject","monitor_1","res","aggregateCount","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassCheckSchema","bypassLogs","bypassVersions","BATCH_SIZE","opIndex","sessionOptions","batchOps","slice","logs","versionOps","e_5","batchOps_1","batchOps_1_1","op","opType","Object","doc","validationContext","newContext","isValid","validate","document","replacement","modifier","Error","concat","validationErrors","createdAt","updatedAt","insertOne","objectIdHexString","id_document","payload","method","id_user","user","messageId","route","versionDoc","__assign","__v","$set","$inc","affectedDocs","versionFilters","map","v","$or","versionInserts","bwOptions","ordered","e_4","getServerConfig","getLocalLogManager","writeLogs","affectedDocIds","$in","$sort","$group","versions","$push","$project","versionsToDelete","$slice","$size","$unwind","$replaceRoot","newRoot","oldVersions","deleteMany","error_2","setImmediate","ok","estimatedDocumentCount","_b","monitor_2","err_1","create","f_docs","Array","isArray","insertMany","fieldOrSpec","indexes","existingIndexes","index","indexQueue","action","specs","err_2","createIndexes","indexSpecs","existingIndexes_1","indexesToCreate","indexSpec","existingIndex","err_3","docs","i","writeLog","upsert","replaceOne","$lt","acknowledged","deletedCount","deleteOne","monitor_3","findOneAndDelete","returnVal","monitor_4","distinct","drop","dropIndex","indexName","dropIndexes","monitor_5","findById","id","monitor_6","findCount","count","findCursor","removeAllListeners","findStream","monitor_7","findOneAndReplace","validation","date","getMethodManager","callMethod","call","findOneAndUpdate","$setOnInsert","indexExists","bypassMonitor","validationResults","forEach","validDocs","idx","hasOwnProperty","monitor_8","listIndexes","rename","newName","monitor_9","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_10","monitor_11","returnDocument","monitor_12","monitor_13","updateMany","$unset","objectContainsPropertyDeep","updateOne","monitor_14","monitor_15","monitor_16","monitor_17","watchCollection","queue","task","callback","dbCollection","apply","code","err_4","message","existingIndexName","innerError_1","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","salt","pbkdf2","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","serializeUser","cb","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","pbkdf2Promisified","hashRaw","services","rej","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { AggregateOptions, AggregationCursor, BulkWriteOptions, ChangeStream, ChangeStreamOptions, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, Filter, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, ObjectId, RenameOptions, ReplaceOptions, UpdateOptions, OptionalId, Collection, CollectionInfo, OptionalUnlessRequiredId, AnyBulkWriteOperation, BulkWriteResult, DbStatsOptions, ChangeStreamDocument } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc, objectIdHexString } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport * as NodeCache from 'node-cache';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nimport { MonitorMongo } from './monitor.manager';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { cpus } from 'os';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nimport async from 'async';\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$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[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\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\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\t}\n\n\tasync withSession(fn) {\n\t\tconst session = ResolveIOServer.getMongoConnection().startSession();\n\t\tsession.startTransaction();\n\t\ttry {\n\t\t\t// Store session in async context\n\t\t\tconst result = await asyncLocalStorage.run(session, async () => {\n\t\t\t\treturn await fn();\n\t\t\t});\n\t\t\tawait session.commitTransaction();\n\t\t\treturn result;\n\t\t} \n\t\tcatch (error) {\n\t\t\tawait session.abortTransaction();\n\t\t\tthrow error;\n\t\t} \n\t\tfinally {\n\t\t\tsession.endSession();\n\t\t}\n\t}\n\t\n\tgetSession() {\n\t\treturn asyncLocalStorage.getStore(); // Returns session for CURRENT async context\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\tasync initServerCollections() {\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tregisterCollection(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\tResolveIOServer.getMainDB()\n\t\t\t\t.dropCollection(collection.collectionName)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.createCollection(collection);\n\t\t\t\t});\n\t\t}\n\n\t\tthis._collections.push(collection);\n\t}\n\n\tcreateCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tResolveIOServer.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\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\tconst cacheKey = this.generateCacheKey([collectionName], 'find', [filter, options]);\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\toperation.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\tconst monitor = new MonitorMongo('find', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.find(<any>filter, options).toArray();\n\t\tmonitor.finish();\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\tconst cacheKey = this.generateCacheKey([collectionName], 'findOne', [filter, options]);\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\toperation.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\n\t\tconst monitor = new MonitorMongo('findOne', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.findOne(<any>filter, options);\n\t\tmonitor.finish();\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\t\tconst cacheKey = this.generateCacheKey(collections, 'aggregate', [pipeline, options]);\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\toperation.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\tconst monitor = new MonitorMongo('aggregate', collectionName, JSON.stringify([pipeline, options]));\n\t\tresult = await collection.aggregate(pipeline, options).toArray();\n\t\tmonitor.finish();\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\tconst cacheKey = this.generateCacheKey([collectionName], 'countDocuments', [filter, options]);\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\toperation.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\tconst monitor = new MonitorMongo('countDocuments', collectionName, JSON.stringify([filter, options]));\n\t\tresult = await collection.countDocuments(<any>filter, options);\n\t\tmonitor.finish();\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} catch (error) {\n\t\t\tthis._nodeCache.del(cacheKey);\n\t\t}\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\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', async (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', err => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream error. Restart...');\n\t\t\tchangeStream.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(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = new MongoManagerUserCollection<T>(options);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new MongoManagerCollection<T>(options);\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 = new MongoManagerUserCollection<T>(versionOptions);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new MongoManagerCollection<T>(versionOptions);\n\t\t\t}\n\n\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\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}\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\t\n\tconstructor(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\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(() => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\tprivate static indexQueue = async.queue(async (task, callback) => {\n\t\tconst { action, collection, specs, options } = task;\n\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n\t\n\t\tif (!dbCollection) {\n\t\t\treturn callback(new Error(`Collection ${collection.collectionName} not found`));\n\t\t}\n\t\n\t\ttry {\n\t\t\t// Try creating the index, will auto-skip if already checked in createIndex/createIndexes\n\t\t\tconst result = await dbCollection[action](...specs, options);\n\t\t\tcallback(null, result);\n\t\t} catch (err) {\n\t\t\t// Handle any specific errors related to index creation\n\t\t\tif (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n\t\t\t\ttry {\n\t\t\t\t\tconst existingIndexName = collection.extractIndexNameFromError(err.message);\n\t\t\t\t\tif (existingIndexName) {\n\t\t\t\t\t\tawait dbCollection.dropIndex(existingIndexName);\n\t\t\t\t\t\tconst result = await dbCollection[action](...specs, options);\n\t\t\t\t\t\tcallback(null, result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch (innerError) {\n\t\t\t\t\tcallback(innerError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallback(err);\n\t\t}\n\t}, 1);\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}\t\n\n\taggregate(pipeline: object[], options?: AggregateOptions, skipCache = false, bypassSession = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {\n\t\t\t\t\t\tsession: session\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().aggregate(this.collectionName, pipeline, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tasync aggregateCount(pipeline: object[], options?: AggregateOptions, bypassSession = false) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('aggregateCount', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res.length);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\treject(0);\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions, bypassSession = false): AggregationCursor {\n\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !bypassSession) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: session\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = session;\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = new MonitorMongo('aggregateCursor', this.collectionName, JSON.stringify([pipeline, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.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 session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !bypassSession) {\n\t\t\tif (!options) {\n\t\t\t\toptions = {\n\t\t\t\t\tsession: session\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.session = session;\n\t\t\t}\n\t\t}\n\n\t\tlet monitor = new MonitorMongo('aggregateStream', this.collectionName, JSON.stringify([pipeline, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.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 session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !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\n\t\t\tsessionOptions = {session};\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.document._id || objectIdHexString(),\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.document)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\n\t\n\t\t\t\t\t// Prepare version document\n\t\t\t\t\tif (!bypassVersions && this.useVersions) {\n\t\t\t\t\t\tconst versionDoc = {\n\t\t\t\t\t\t\t...doc.document,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t_id: { _id: doc.document._id || objectIdHexString(), __v: 0 },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t},\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.update)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.replacement)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\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.filter._id || null,\n\t\t\t\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\t\t\t\tgetBinarySize(JSON.stringify(doc.filter)) < 200000\n\t\t\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\t\t: 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '', // Add user info if available\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}\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\t\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\t\t\t\t\taffectedDocs = await ResolveIOServer.getMainDB().collection(this.collectionName).find({ $or: versionFilters }, sessionOptions).toArray();\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, ordered: false};\n\t\t\t\t\t\t}\n\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(e) {\n\t\t\t\t\tconsole.error('Error during version creation:', e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Execute bulkWrite\n\t\t\tconst monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([batchOps, options]));\n\t\t\tawait ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(batchOps, options);\n\t\t\tmonitor.finish();\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, ordered: false};\n\t\t\t\t\t}\n\n\t\t\t\t\tawait ResolveIOServer.getMainDB().collection('logs').bulkWrite(logs, 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\ttry {\n\t\t\t\t\tconst affectedDocIds = affectedDocs.map((doc) => doc._id);\n\t\n\t\t\t\t\tconst pipeline = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$match: { '_id._id': { $in: affectedDocIds } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$sort: { '_id._id': 1, '_id.__v': -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: '$_id._id',\n\t\t\t\t\t\t\t\tversions: { $push: '$_id' },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\tversionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ $unwind: '$versionsToDelete' },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$replaceRoot: { newRoot: { _id: '$versionsToDelete' } },\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\n\t\t\t\t\tconst oldVersions = await ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline, sessionOptions).toArray();\n\t\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 (error) {\n\t\t\t\t\tconsole.error('Error during version cleanup:', error);\n\t\t\t\t\t// Handle the error as needed\n\t\t\t\t}\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\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\tcountDocuments(\n\t\tfilter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {},\n\t\toptions?: CountDocumentsOptions,\n\t\tskipCache = false, \n\t\tbypassSession = false\n\t): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\t\tif (session && !bypassSession) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = {session};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\toptions.session = session;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if the filter is empty\n\t\t\t\tconst isUnfiltered = Object.keys(filter).length === 0;\n\t\n\t\t\t\tif (isUnfiltered) {\n\t\t\t\t\t// Use collection stats for an unfiltered count\n\t\t\t\t\tconst res = await ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).estimatedDocumentCount(options);\n\t\t\t\t\tresolve(res);\n\t\t\t\t}\n\t\t\t\telse if (!skipCache && !this.skipCache) {\n\t\t\t\t\t// Use cached count if skipCache is false\n\t\t\t\t\tResolveIOServer.getMongoManager().countDocuments(this.collectionName, filter, options).then(\n\t\t\t\t\t\tres => resolve(res),\n\t\t\t\t\t\terr => reject(err)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Fallback to direct countDocuments call with monitoring if skipCache is true\n\t\t\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, options).then(\n\t\t\t\t\t\tres => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terr => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, filter, options, err);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents (Stats)', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\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\tcreateIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// Check if index already exists based on the key\n\t\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\t\tconst existingIndexes = await dbCollection.indexes();\n\t\n\t\t\t\t// Check if an index with the same key already exists\n\t\t\t\tconst indexExists = existingIndexes.some(index => \n\t\t\t\t\tJSON.stringify(index.key) === JSON.stringify(fieldOrSpec)\n\t\t\t\t);\n\t\n\t\t\t\tif (indexExists) {\n\t\t\t\t\treturn resolve('Index already exists'); // Skip creation if index exists\n\t\t\t\t}\n\t\n\t\t\t\t// If index doesn't exist, push it to the queue\n\t\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\t\taction: 'createIndex',\n\t\t\t\t\tcollection: this,\n\t\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\t\toptions: options\n\t\t\t\t}, (err, result) => {\n\t\t\t\t\tif (err) reject(err);\n\t\t\t\t\telse resolve(result);\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst dbCollection = ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);\n\t\t\t\tconst existingIndexes = await dbCollection.indexes();\n\t\n\t\t\t\t// Filter out indexes that already exist based on the key\n\t\t\t\tconst indexesToCreate = indexSpecs.filter(indexSpec => \n\t\t\t\t\t!existingIndexes.some(existingIndex => \n\t\t\t\t\t\tJSON.stringify(existingIndex.key) === JSON.stringify(indexSpec.key)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\n\t\t\t\t// If no new indexes to create, resolve early\n\t\t\t\tif (indexesToCreate.length === 0) {\n\t\t\t\t\treturn resolve(['All indexes already exist']);\n\t\t\t\t}\n\t\n\t\t\t\t// Push only new indexes to the queue\n\t\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\t\taction: 'createIndexes',\n\t\t\t\t\tcollection: this,\n\t\t\t\t\tspecs: [indexesToCreate],\n\t\t\t\t\toptions: options\n\t\t\t\t}, (err, result) => {\n\t\t\t\t\tif (err) reject(err);\n\t\t\t\t\telse resolve(result);\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tdeleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false, bypassSession = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\t\t\t\n\t\t\tif ((this.createLogs && !bypassLogs) || this.useVersions) {\n\t\t\t\tlet docs = await this.find(filter);\n\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\t\t\t\t\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'deleteMany',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, filter, options], 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}, 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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\n\t\t\t\t\t\tResolveIOServer.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}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('deleteMany', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(res.deletedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Delete Many', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(async returnVal => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tlet doc = returnVal.value;\n \n\t\t\t\t\tif (doc) {\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: doc._id as string,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'deleteOne',\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\tResolveIOServer.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: doc._id as string,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], 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}, sessionOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\t\tlet versionOptions = null;\n\t\t\t\t\t\t\tif (!sessionOptions) {\n\t\t\t\t\t\t\t\tversionOptions = {upsert: true};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tversionOptions = {session, upsert: true};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\n\t\t\t\t\t\t\tResolveIOServer.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\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\tresolve(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('deleteOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.deletedCount);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Delete One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions, bypassSession = false): Promise<T[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('distinct', this.collectionName, JSON.stringify([key, filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Distinct', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdrop(options?: CommandOperationOptions, bypassSession = false): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('drop', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndex(indexName: string, options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('dropIndex', this.collectionName, JSON.stringify([indexName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(<Document>res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Index', this.collectionName, indexName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndexes(options?: CommandOperationOptions, bypassSession = false): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('dropIndexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfind(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().find(this.collectionName, filter, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('find', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().findOne(this.collectionName, {_id: id}, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('findById', this.collectionName, JSON.stringify([{_id: id}, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): Promise<Number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findCount', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find Count', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, bypassSession = false): FindCursor {\n\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !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 monitor = new MonitorMongo('findCursor', this.collectionName, JSON.stringify([filter, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.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 session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !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 monitor = new MonitorMongo('findStream', this.collectionName, JSON.stringify([filter, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tfindOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!skipCache && !this.skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().findOne(this.collectionName, filter, options).then(res => {\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('findOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.value;\n\t\t\t\t\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, filter, options], 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}, 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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\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\t\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\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\tif (this.useVersions) {\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\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\tResolveIOServer.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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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}, 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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date(); \n\t\t\t\t\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\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\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res.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) {\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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}, 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\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, versionOptions);\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\t\t\t\t\t\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexes(options: IndexInformationOptions, bypassSession = false): Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('indexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexExists(indexes: string | string[], options?: IndexInformationOptions, bypassSession = false): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('indexExists', this.collectionName, JSON.stringify([indexes, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Index Exists', this.collectionName, indexes, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tinsertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false, bypassSession = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!docs.length) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet validationResults = [];\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tdocs.forEach(doc => {\n\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\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\t\tvalidationResults.push(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\t\tlet doc = validDocs[i];\n\n\t\t\t\tif (!doc._id) {\n\t\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\t\tdoc.__v = 0;\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: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'insertMany',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, options], 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}, sessionOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (validDocs.length) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\tif (!bypassMonitor) {\n\t\t\t\t\tmonitor = new MonitorMongo('insertMany', this.collectionName, JSON.stringify([validDocs, options]));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options).then(res => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tif (res.acknowledged) {\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\tresolve(validDocs);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(new Date(), 'Error Insert Many', this.collectionName, validDocs, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tinsertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\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 - insertOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\t\t\t\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\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\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, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'insertOne',\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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify([doc, options], 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}, sessionOptions);\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\tlet monitor = new MonitorMongo('insertOne', this.collectionName, JSON.stringify([doc, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Insert One', this.collectionName, doc, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions, bypassSession = false): ListIndexesCursor {\n\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\tif (session && !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 monitor = new MonitorMongo('listIndexes', this.collectionName, JSON.stringify([options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\trename(newName: string, options?: RenameOptions, bypassSession = false): Promise<Collection<Document>> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('rename', this.collectionName, JSON.stringify([newName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Rename', this.collectionName, newName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\treplaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null, bypassSession = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\tif (!doc) {\n\t\t\t\t\tdoc = await this.findOne(<any>filter, null, true);\n\t\t\t\t}\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\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\tResolveIOServer.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\tResolveIOServer.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\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: doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\tResolveIOServer.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: doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\t\t\t\t\t\t\n\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\t\treject(err);\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\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, null, true);\n\n\t\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection('logs').insertOne(<any>{\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, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], 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}, sessionOptions);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, options]));\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\t\tif (!this.skipCache) {\n\t\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, options, err);\n\t\t\t\t\t\t\t\treject(err);\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\treject('Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\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: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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 = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\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: <string>doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\tResolveIOServer.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: <string>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], 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\t\t\t\t\t\telse {\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: replacement._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\tResolveIOServer.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: replacement._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], 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\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\tresolve(1);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false, bypassSession = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\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\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\n\t\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\t\tlet docs = await this.find(filter);\n\t\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'updateMany',\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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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}, 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\t\t\n\t\t\t\t\t\tResolveIOServer.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\tResolveIOServer.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\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\t\tupdate.$inc.__v = 1;\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}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('updateMany', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Update Many', this.collectionName, filter, update, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassSession = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\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\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\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\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tlet sessionOptions = null;\n\t\t\tif (session && !bypassSession) {\n\t\t\t\tif (!options) {\n\t\t\t\t\toptions = {session};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions.session = session;\n\t\t\t\t}\n\n\t\t\t\tsessionOptions = {session};\n\t\t\t}\n\t\t\t\n\t\t\tif (this.useVersions) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\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,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\tResolveIOServer.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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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\t\t\t\t\t}\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\t\n\t\t\t\t\tResolveIOServer.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\tResolveIOServer.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\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\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0,\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\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0\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\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\tResolveIOServer.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, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\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\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString()\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\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\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 (!options) {\n\t\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\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: <any>doc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\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\tResolveIOServer.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: <any>doc._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], 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}, sessionOptions);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (update.$setOnInsert) {\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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: 'updateOne',\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\tResolveIOServer.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: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], 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\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\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\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\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\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\tlet sessionOptions = null;\n\t\tif (session && !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\n\t\t\tsessionOptions = {session};\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\tauthenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\t\n\t\t\tif (user.last) {\n\t\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\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}\n\t\t\n\t\t\tif (user.attempts >= 5) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (!user.salt) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tpbkdf2(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}, async (err, hashBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = 0;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: user,\n\t\t\t\t\t\terror: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Too Many Attempts'\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\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Invalid Username And Password'\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\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 (username, cb) => {\n\t\t\tUsers.findOne({username: username}).then(res => {\n\t\t\t\tcb(null, res);\n\t\t\t}, err => {\n\t\t\t\tcb(err, null);\n\t\t\t});\n\t\t};\n\t}\n\n\tsetPassword(user: UserModel, password: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('No User');\n\t\t\t}\n\t\t\telse if (!password) {\n\t\t\t\treject('No Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\t\tlet salt = saltBuffer.toString('hex');\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\tUsers.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}}).then(res => resolve(res), rej => reject(rej));\n\t\t\t}\n\t\t});\n\t};\n\n\tchangePassword(user, oldPassword, newPassword) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('Missing User');\n\t\t\t}\n\t\t\telse if (!oldPassword || !newPassword) {\n\t\t\t\treject('Missing Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\t\tif (!authUser['data']) {\n\t\t\t\t\treject(authUser['error']);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.setPassword(user, newPassword).then(res => resolve(res), rej => reject(rej));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tregister(user, password) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user.username) {\n\t\t\t\treject('Missing Username');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\t\n\t\t\t\tif (dbUser) {\n\t\t\t\t\treject('Username Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\t\tif (dbUser) {\n\t\t\t\t\t\treject('Email Exists');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t}\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\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\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}"]}