@resolveio/server-lib 20.6.19 → 20.6.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/collections/app-status.collection.js +1 -1
- package/collections/app-status.collection.js.map +1 -1
- package/collections/counter.collection.js +1 -1
- package/collections/counter.collection.js.map +1 -1
- package/collections/cron-job-history.collection.js +1 -1
- package/collections/cron-job-history.collection.js.map +1 -1
- package/collections/cron-job.collection.js +1 -1
- package/collections/cron-job.collection.js.map +1 -1
- package/collections/email-history.collection.js +1 -1
- package/collections/email-history.collection.js.map +1 -1
- package/collections/email-verified.collection.js +1 -1
- package/collections/email-verified.collection.js.map +1 -1
- package/collections/file.collection.js +1 -1
- package/collections/file.collection.js.map +1 -1
- package/collections/flag-update.collection.js +1 -1
- package/collections/flag-update.collection.js.map +1 -1
- package/collections/flag.collection.js +1 -1
- package/collections/flag.collection.js.map +1 -1
- package/collections/log-method-latency.collection.js +1 -1
- package/collections/log-method-latency.collection.js.map +1 -1
- package/collections/log-subscription.collection.js +1 -1
- package/collections/log-subscription.collection.js.map +1 -1
- package/collections/log.collection.js +1 -1
- package/collections/log.collection.js.map +1 -1
- package/collections/logged-in-users.collection.js +1 -1
- package/collections/logged-in-users.collection.js.map +1 -1
- package/collections/method-response.collection.js +1 -1
- package/collections/method-response.collection.js.map +1 -1
- package/collections/monitor-cpu.collection.js +1 -1
- package/collections/monitor-cpu.collection.js.map +1 -1
- package/collections/monitor-function.collection.js +1 -1
- package/collections/monitor-function.collection.js.map +1 -1
- package/collections/monitor-memory.collection.js +1 -1
- package/collections/monitor-memory.collection.js.map +1 -1
- package/collections/monitor-mongo.collection.js +1 -1
- package/collections/monitor-mongo.collection.js.map +1 -1
- package/collections/notification.collection.js +1 -1
- package/collections/notification.collection.js.map +1 -1
- package/collections/report-builder-dashboard-builder.collection.js +1 -1
- package/collections/report-builder-dashboard-builder.collection.js.map +1 -1
- package/collections/report-builder-library.collection.js +1 -1
- package/collections/report-builder-library.collection.js.map +1 -1
- package/collections/report-builder-report.collection.js +1 -1
- package/collections/report-builder-report.collection.js.map +1 -1
- package/collections/user-group.collection.js +1 -1
- package/collections/user-group.collection.js.map +1 -1
- package/collections/user-guide.collection.js +1 -1
- package/collections/user-guide.collection.js.map +1 -1
- package/collections/user.collection.js +1 -1
- package/collections/user.collection.js.map +1 -1
- package/managers/mongo.manager.d.ts +0 -2
- package/managers/mongo.manager.js +1 -1
- package/managers/mongo.manager.js.map +1 -1
- package/managers/subscription.manager.js +1 -1
- package/managers/subscription.manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -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","Map","_operationInProgress","_heapSize","getHeapStatistics","_serverCollections","_isWorkersEnabled","_isWorkerInstance","_invalidationQueue","_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","now","queueItem","timer","lastInvalidated","_processInvalidation","clearTimeout","toDelete","_c","entries","_d","_e","forEach","_f","_g","_h","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","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","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: Map<string, {collections: string[], key: string}> = new Map();\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\tprivate _invalidationQueue = new Map<string, {timer: NodeJS.Timeout, lastInvalidated: number}>();\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.set(cacheKey, { collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tconst now = Date.now();\n \t\tconst queueItem = this._invalidationQueue.get(collection);\n\t\t\n\t\tif (!queueItem || now - queueItem.lastInvalidated > 500) {\n\t\t\tthis._processInvalidation(collection);\n\t\t}\n\n\t\tif (queueItem) {\n\t\t\tclearTimeout(queueItem.timer);\n\t\t}\n\t\t\n\t\tconst timer = setTimeout(() => {\n\t\t\tthis._processInvalidation(collection);\n\t\t\tthis._invalidationQueue.delete(collection);\n\t\t}, 1000);\n\t\t\n\t\t this._invalidationQueue.set(collection, {\n\t\t\ttimer,\n\t\t\tlastInvalidated: now\n\t\t});\n\t}\n\n\tprivate _processInvalidation(collection: string) {\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\tconst toDelete = [];\n\n\t\tfor (const [key, value] of this._cacheMap.entries()) {\n\t\t\tif (value.collections.includes(collection)) {\n\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\ttoDelete.push(key);\n\t\t\t\t\n\t\t\t\tif (this._operationInProgress.has(key)) {\n\t\t\t\t\tthis._operationInProgress.get(key).invalidatedDuringExecution = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\ttoDelete.forEach(key => this._cacheMap.delete(key));\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\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'cron-jobs', \n\t\t\t\t\t\t\t'email-histories',\n\t\t\t\t\t\t\t'logged-in-users', \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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\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","MongoManager","this","_collections","_cacheMap","Map","_operationInProgress","_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","toDelete","_c","entries","_d","_e","forEach","_f","_g","_h","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","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: Map<string, {collections: string[], key: string}> = new Map();\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.set(cacheKey, { collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\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\tconst toDelete = [];\n\n\t\tfor (const [key, value] of this._cacheMap.entries()) {\n\t\t\tif (value.collections.includes(collection)) {\n\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\ttoDelete.push(key);\n\t\t\t\t\n\t\t\t\tif (this._operationInProgress.has(key)) {\n\t\t\t\t\tthis._operationInProgress.get(key).invalidatedDuringExecution = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\ttoDelete.forEach(key => this._cacheMap.delete(key));\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\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}"]}
|