@resolveio/server-lib 20.4.22 → 20.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":["simpl_schema_1","require","mongodb_1","index_1","user_collection_1","common_1","log_collection_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","MongoManager","serverConfig","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_serverConfig","_isWorkersEnabled","_isWorkerInstance","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","initServerCollections","setupChangeStream","prototype","_heapLimit","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","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","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","error","del","data","getBinarySize","nodeCacheSize","getStats","vsize","deleteCount","keys","keys_1","__values","keys_1_1","next","done","key","value","console","log","invalidateQueryCache","collectionCacheMap","includes","collectionCacheMap_1","collectionCacheMap_1_1","cacheMap","changeStream","getMongoConnection","db","watch","on","change","__awaiter","coll","err","Date","close","MongoManagerModel","exports","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","setInterval","getMainServer","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","skipCache","reject","monitor_1","res","aggregateCount","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassLogs","bypassCheckSchema","logs","versionOps","deleteOldVersionsOps","bulkOps","updateFilters","updateManyFilters","deleteManyFilters","forEach","op","opType","Object","$or","_b","_d","currentDocs","getNestedValue","doc","split","reduce","acc","part","Array","isArray","map","item","val","findMatchingDocs","matchDocument","every","docValue","subFilter","evaluateCondition","condition","$in","$nin","$ne","$gt","$gte","$lt","$lte","$exists","RegExp","$regex","$options","test","date","document","objectIdHexString","this_1","hasOwnProperty","__v","createdAt","updatedAt","validation","newContext","validate","validationErrors","getMethodManager","callMethodInternal","call","insertOne","id_document","payload","method","id_user","user","messageId","route","matchingDocs","e_4","matchingDocs_1","matchingDocs_1_1","currentDoc","$set","modifier","versionDoc","objectContainsPropertyDeep","$inc","deleteMany","upsert","$setOnInsert","replacement","e_5","matchingDocs_2","matchingDocs_2_1","e_6","matchingDocs_3","matchingDocs_3_1","operations_1","operations_1_1","slice","mainResult","Logs","err_1","countDocuments","create","f_docs","insertMany","fieldOrSpec","indexQueue","action","specs","createIndexes","indexSpecs","docs","i","replaceOne","$and","acknowledged","deletedCount","deleteOne","monitor_2","findOneAndDelete","returnVal","monitor_3","distinct","drop","dropIndex","indexName","dropIndexes","monitor_4","findById","id","findCount","count","findCursor","removeAllListeners","findStream","monitor_5","findOneAndReplace","findOneAndUpdate","indexes","indexExists","bypassMonitor","validationResults","validDocs","idx","monitor_6","listIndexes","rename","newName","monitor_7","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_8","monitor_9","returnDocument","monitor_10","monitor_11","updateMany","bypassVersions","$unset","updateOne","monitor_12","monitor_13","monitor_14","ok","monitor_15","watchCollection","queue","task","callback","dbCollection","apply","code","err_2","message","existingIndexName","innerError_1","Error","concat","_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","ObjectId","toHexString","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 } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../index';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport { Logs } from '../collections/log.collection';\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\ninterface MongoQueueModel {\n\t_id: number,\n\tname_collection: string;\n\tlookup_collections: string[];\n\tname_function: string;\n\tdata_function: any[];\n\tname_function_addt: string;\n\tdata_function_addt: any[];\n\tcbs: Function[];\n\tcbs_next: Function[];\n\trunning: boolean;\n\tcacheId: number;\n\tinvalidateFlag: boolean;\n\tinvalidateCount: number;\n}\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n $gt?: P;\n $gte?: P;\n $in?: P extends Array<any> ? P : P[];\n $lt?: P;\n $lte?: P;\n $ne?: P;\n $nin?: P extends Array<any> ? P : P[];\n $not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n $exists?: boolean;\n $expr?: any[]\n $regex?: P extends string ? RegExpConstructor | string : never;\n $options?: P extends string ? string : never;\n $geoIntersects?: {\n $geometry: Document;\n };\n $geoWithin?: Document;\n $near?: Document;\n $nearSphere?: Document;\n $maxDistance?: number;\n $all?: any[];\n $elemMatch?: Document;\n $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 $and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $text?: {\n $search: string;\n $language?: string;\n $caseSensitive?: boolean;\n $diacriticSensitive?: boolean;\n };\n $where?: string | ((this: T) => boolean);\n $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 $inc?: MongoManagerIncFilter<T> | Document;\n $set?: MongoManagerFilter<T> | Document;\n $setOnInsert?: MongoManagerFilter<T> | Document;\n $unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _nodeCache;\n\tprivate _cacheMap: { collections: string[], key: string }[] = [];\n\tprivate _operationInProgress: Map<string, { promise: Promise<any>, invalidatedDuringExecution: boolean }> = new Map();\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, 'name' | 'type'>)[] = [];\n\tprivate _serverConfig = null;\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tconstructor(serverConfig) {\n\t\tthis._serverConfig = serverConfig;\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\tthis.initServerCollections();\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<CollectionDocument>(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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeFind<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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<T>(collectionName);\n\t\t\n\t\tdo {\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false; // Reset before query\n\t\t\t}\n\n\t\t\tconst monitor = new MonitorMongo('find', collectionName, JSON.stringify([filter, options]));\n\t\t\tresult = await collection.find(<any>filter, options).toArray();\n\t\t\tmonitor.finish();\n\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tawait this.delay(500);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution); // Re-run if invalidated\n\n\n\t\tthis.addToCache([collectionName], cacheKey, result);\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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeFindOne<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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<T>(collectionName);\n\t\t\n\t\tdo {\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false;\n\t\t\t}\n\t\t\t\n\t\t\tconst monitor = new MonitorMongo('findOne', collectionName, JSON.stringify([filter, options]));\n\t\t\tresult = await collection.findOne(<any>filter, options);\n\t\t\tmonitor.finish();\n\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tawait this.delay(500);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution);\n\t\t\n\t\tthis.addToCache([collectionName], cacheKey, result);\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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeAggregate<T>(collectionName, pipeline, options, cacheKey, collections);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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<T>(collectionName);\n\n\t\tdo {\n\t\t\t\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false;\n\t\t\t}\n\n\t\t\tconst monitor = new MonitorMongo('aggregate', collectionName, JSON.stringify([pipeline, options]));\n\t\t\tresult = await collection.aggregate(pipeline, options).toArray();\n\t\t\tmonitor.finish();\n\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tawait this.delay(500);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution);\n\n\t\tthis.addToCache(collections, cacheKey, result);\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\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\tlet deleteCount = 0;\n\t\t\t\tconst keys = this._nodeCache.keys();\n\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t}\n\t\t\t\n\t\t\tthis._nodeCache.set(cacheKey, JSON.stringify(data));\n\t\t\tthis._cacheMap.push({ collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tconst collectionCacheMap = this._cacheMap.filter(a => a.collections.includes(collection));\n\n\t\tfor (const cacheMap of collectionCacheMap) {\n\t\t\tthis._nodeCache.del(cacheMap.key);\n\t\t\t\n\t\t\tif (this._operationInProgress.has(cacheMap.key)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheMap.key);\n\t\t\t\top.invalidatedDuringExecution = true;\n\t\t\t}\n\t\t}\n\n\t\tthis._cacheMap = this._cacheMap.filter(a => !a.collections.includes(collection));\n\t}\n\n\tprivate setupChangeStream() {\n\t\tconst db = ResolveIOServer.getMongoConnection().db(this._serverConfig['DATABASE']);\n\t\tconst changeStream = db.watch();\n\n\t\tchangeStream.on('change', async change => {\n\t\t\tif (change['ns'] && change['ns'].coll) {\n\t\t\t\tconst collectionName = change['ns'].coll;\n\t\t\t\tif (this.collection(collectionName)) {\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};\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}\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\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\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 const { action, collection, specs, options } = task;\n \n const dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n \n if (!dbCollection) {\n return callback(new Error(`Collection ${collection.collectionName} not found`));\n }\n\n let monitor = new MonitorMongo(action, collection.collectionName, JSON.stringify([specs, options]));\n\n const createIndex = async () => {\n try {\n const result = await dbCollection[action](...specs, options);\n monitor.finish();\n callback(null, result);\n } catch (err) {\n if (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n try {\n const existingIndexName = collection.extractIndexNameFromError(err.message);\n if (existingIndexName) {\n await dbCollection.dropIndex(existingIndexName);\n return await createIndex();\n }\n } catch (innerError) {\n callback(innerError);\n }\n }\n monitor.finish();\n callback(err);\n }\n };\n\n await createIndex();\n }, 1);\n\n // Method to extract index name from error message\n extractIndexNameFromError(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) {\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\t// bulkWrite(operations: AnyBulkWriteOperation<T>[], options: BulkWriteOptions): Promise<BulkWriteResult> {\n\tbulkWrite(operations: any[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false): Promise<BulkWriteResult> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!operations.length) {\n\t\t\t\tresolve(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = []; // For storing versioning ops\n\t\t\tconst deleteOldVersionsOps = []; // For deleteMany operations to remove older versions\n\t\t\tconst bulkOps = [];\n\t\t\tconst updateFilters = [];\n\t\t\tconst updateManyFilters = [];\n\t\t\tconst deleteManyFilters = [];\n\t\n\t\t\t// Collect filters for all operations\n\t\t\toperations.forEach(op => {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tif (opType === 'updateOne' || opType === 'deleteOne' || opType === 'replaceOne') {\n\t\t\t\t\tupdateFilters.push(op[opType].filter); // Store filters for updateOne, deleteOne, and replaceOne\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tupdateManyFilters.push(op[opType].filter); // Store the entire filter for updateMany\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\tdeleteManyFilters.push(op[opType].filter); // Store the entire filter for deleteMany\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t// Pre-fetch all documents based on the filters before proceeding with the bulk operations\n\t\t\tconst currentDocs = updateFilters.length || updateManyFilters.length || deleteManyFilters.length\n\t\t\t\t? await this.find(<any>{ $or: [...updateFilters, ...updateManyFilters, ...deleteManyFilters] })\n\t\t\t\t: [];\n\n\t\t\t// Helper function to get the value from a document using a dot-notated key (e.g., 'obj.property')\n\t\t\t// This will also handle arrays of objects (e.g., 'obj.arrayOfObjects.property')\n\t\t\tconst getNestedValue = (doc, key) => {\n\t\t\t\tconst parts = key.split('.');\n\n\t\t\t\treturn parts.reduce((acc, part) => {\n\t\t\t\t\tif (Array.isArray(acc)) {\n\t\t\t\t\t\t// If we're dealing with an array, return an array of values for each element\n\t\t\t\t\t\treturn acc.map(item => item[part]).filter(val => val !== undefined);\n\t\t\t\t\t}\n\t\t\t\t\treturn acc && acc[part];\n\t\t\t\t}, doc);\n\t\t\t};\n\t\n\t\t\t// Helper function to locally find matching documents based on filter\n\t\t\tconst findMatchingDocs = (filter) => {\n\t\t\t\treturn currentDocs.filter(doc => {\n\t\t\t\t\treturn matchDocument(filter, doc);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst matchDocument = (filter, doc) => {\n\t\t\t\treturn Object.keys(filter).every(key => {\n\t\t\t\t\tconst value = filter[key];\n\t\t\t\t\tconst docValue = getNestedValue(doc, key); // Get nested value from the document\n\t\t\t\n\t\t\t\t\t// Handle logical operators\n\t\t\t\t\tif (key === '$and') {\n\t\t\t\t\t\treturn value.every(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif (key === '$or') {\n\t\t\t\t\t\treturn value.some(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// If docValue is an array, apply filter conditions to each element\n\t\t\t\t\tif (Array.isArray(docValue)) {\n\t\t\t\t\t\treturn docValue.some(val => evaluateCondition(value, val));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// Otherwise, apply the condition to the single value\n\t\t\t\t\treturn evaluateCondition(value, docValue);\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\t// Helper function to evaluate the condition (value) against the document value (docValue)\n\t\t\tconst evaluateCondition = (condition, docValue) => {\n\t\t\t\t// If condition is an object, handle operators like $in, $nin, $ne, etc.\n\t\t\t\tif (condition instanceof Object) {\n\t\t\t\t\tif ('$in' in condition) {\n\t\t\t\t\t\treturn condition.$in.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$nin' in condition) {\n\t\t\t\t\t\treturn !condition.$nin.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$ne' in condition) {\n\t\t\t\t\t\treturn docValue !== condition.$ne;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gt' in condition) {\n\t\t\t\t\t\treturn docValue > condition.$gt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gte' in condition) {\n\t\t\t\t\t\treturn docValue >= condition.$gte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lt' in condition) {\n\t\t\t\t\t\treturn docValue < condition.$lt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lte' in condition) {\n\t\t\t\t\t\treturn docValue <= condition.$lte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$exists' in condition) {\n\t\t\t\t\t\treturn (docValue !== undefined) === condition.$exists;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$regex' in condition) {\n\t\t\t\t\t\tconst regex = new RegExp(condition.$regex, condition.$options || '');\n\t\t\t\t\t\treturn regex.test(docValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Handle regular equality comparison\n\t\t\t\treturn docValue === condition;\n\t\t\t};\n\t\n\t\t\tfor (const op of operations) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tlet doc = op[opType];\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// Ensure _id and __v for insertOne operations\n\t\t\t\t\tif (!doc.document._id) {\n\t\t\t\t\t\tdoc.document._id = objectIdHexString();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions && !doc.document.hasOwnProperty('__v')) {\n\t\t\t\t\t\tdoc.document.__v = 0;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = 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 = date;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\tconst isValid = validation.validate(doc.document);\n\t\t\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite insertOne - ' + this.collectionName, [validation.validationErrors(), doc.document]);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Log the operation\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,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add insertOne operation to bulkOps\n\t\t\t\t} \n\t\t\t\telse if (opType === 'updateOne') {\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\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\tdoc.update.$set = { updatedAt: 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.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update, currentDoc]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\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}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\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 (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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 (!objectContainsPropertyDeep(doc.update, '_id')) {\n\t\t\t\t\t\t\t\tdoc.update.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.__v = 0;\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.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: doc.update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.update])) < 200000 ? JSON.stringify([op, options, doc.update], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\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// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tdoc.replacement.__v = versionDoc.__v + 1;\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\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}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\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 (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - replaceOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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 (!objectContainsPropertyDeep(doc.replacement, '_id')) {\n\t\t\t\t\t\t\t\tdoc.replacement._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.__v = 0;\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.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: doc.replacement._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.replacement])) < 200000 ? JSON.stringify([op, options, doc.replacement], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne') {\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\t\t\t\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add deleteOne operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\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.updatedAt = new Date();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdoc.update.$set = {\n\t\t\t\t\t\t\t\tupdatedAt: 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\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdoc.update.$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\n\t\t\t\t\t// Process all documents matching the updateMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateMany - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\tcontinue;\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\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add updateMany operation to bulkOps\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\t// Process all documents matching the deleteMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add deleteMany operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttry {\n\t\t\t\tif (bulkOps.length) {\n\t\t\t\t\tlet monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([bulkOps.slice(-100), options]));\n\t\t\t\t\t\n\t\t\t\t\t// First, perform the main bulk operations on the collection\n\t\t\t\t\tconst mainResult = await ResolveIOServer.getMainDB().collection<T>(this.collectionName).bulkWrite(bulkOps, options);\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\t// Separate bulkWrite for versions (if any versioning is required)\n\t\t\t\t\tif (versionOps.length || deleteOldVersionsOps.length) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.versionCollection).bulkWrite([...versionOps, ...deleteOldVersionsOps]);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Separate bulkWrite for logs (if logging is enabled)\n\t\t\t\t\tif (!bypassLogs && logs.length) {\n\t\t\t\t\t\tawait Logs.bulkWrite(logs);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tmonitor.finish();\n\t\n\t\t\t\t\tresolve(mainResult); // Resolve with the result of the main bulkWrite\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} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Bulk Write', this.collectionName, bulkOps.slice(-100), options, err);\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tcountDocuments(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: CountDocumentsOptions): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<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 Count Documents', 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((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndex',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndexes',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [indexSpecs],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\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) {\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\tLogs.insertOne({\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, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'deleteMany',\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});\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;\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\tLogs.insertOne({\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\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<Boolean> {\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) {\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) {\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;\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\t\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\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: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: ''\n\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, 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});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, 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});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, 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});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tLogs.insertOne({\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});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, 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});\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\tLogs.insertOne({\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});\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\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\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","mongodb_1","index_1","user_collection_1","common_1","log_collection_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","MongoManager","serverConfig","this","_collections","_cacheMap","_operationInProgress","Map","_heapSize","getHeapStatistics","_serverCollections","_serverConfig","_isWorkersEnabled","_isWorkerInstance","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setCacheLimit","initServerCollections","setupChangeStream","prototype","_heapLimit","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","has","get","promise","operation","executeFind","set","invalidatedDuringExecution","finally","delete","retryCount","monitor","MonitorMongo","JSON","stringify","finish","addToCache","findOne","executeFindOne","aggregate","pipeline","__spreadArray","__read","flatMap","stage","$lookup","from","executeAggregate","functionName","args","keyString","createHash","update","digest","cachedData","parse","dateReviver","error","del","data","getBinarySize","nodeCacheSize","getStats","vsize","deleteCount","keys","keys_1","__values","keys_1_1","next","done","key","value","console","log","invalidateQueryCache","collectionCacheMap","includes","collectionCacheMap_1","collectionCacheMap_1_1","cacheMap","changeStream","getMongoConnection","db","watch","on","change","__awaiter","coll","err","Date","close","MongoManagerModel","exports","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","_id","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","setInterval","getMainServer","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","skipCache","reject","monitor_1","res","aggregateCount","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassLogs","bypassCheckSchema","logs","versionOps","deleteOldVersionsOps","bulkOps","updateFilters","updateManyFilters","deleteManyFilters","forEach","op","opType","Object","$or","_b","_d","currentDocs","getNestedValue","doc","split","reduce","acc","part","Array","isArray","map","item","val","findMatchingDocs","matchDocument","every","docValue","subFilter","evaluateCondition","condition","$in","$nin","$ne","$gt","$gte","$lt","$lte","$exists","RegExp","$regex","$options","test","date","document","objectIdHexString","this_1","hasOwnProperty","__v","createdAt","updatedAt","validation","newContext","validate","validationErrors","getMethodManager","callMethodInternal","call","insertOne","id_document","payload","method","id_user","user","messageId","route","matchingDocs","e_4","matchingDocs_1","matchingDocs_1_1","currentDoc","$set","modifier","versionDoc","objectContainsPropertyDeep","$inc","deleteMany","upsert","$setOnInsert","replacement","e_5","matchingDocs_2","matchingDocs_2_1","e_6","matchingDocs_3","matchingDocs_3_1","operations_1","operations_1_1","slice","mainResult","Logs","err_1","countDocuments","create","f_docs","insertMany","fieldOrSpec","indexQueue","action","specs","createIndexes","indexSpecs","docs","i","replaceOne","$and","acknowledged","deletedCount","deleteOne","monitor_2","findOneAndDelete","returnVal","monitor_3","distinct","drop","dropIndex","indexName","dropIndexes","monitor_4","findById","id","findCount","count","findCursor","removeAllListeners","findStream","monitor_5","findOneAndReplace","findOneAndUpdate","indexes","indexExists","bypassMonitor","validationResults","validDocs","idx","monitor_6","listIndexes","rename","newName","monitor_7","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_8","monitor_9","returnDocument","monitor_10","monitor_11","updateMany","bypassVersions","$unset","updateOne","monitor_12","monitor_13","monitor_14","ok","monitor_15","watchCollection","queue","task","callback","dbCollection","apply","code","err_2","message","existingIndexName","innerError_1","Error","concat","_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","ObjectId","toHexString","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 } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../index';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport { Logs } from '../collections/log.collection';\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\ninterface MongoQueueModel {\n\t_id: number,\n\tname_collection: string;\n\tlookup_collections: string[];\n\tname_function: string;\n\tdata_function: any[];\n\tname_function_addt: string;\n\tdata_function_addt: any[];\n\tcbs: Function[];\n\tcbs_next: Function[];\n\trunning: boolean;\n\tcacheId: number;\n\tinvalidateFlag: boolean;\n\tinvalidateCount: number;\n}\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n $gt?: P;\n $gte?: P;\n $in?: P extends Array<any> ? P : P[];\n $lt?: P;\n $lte?: P;\n $ne?: P;\n $nin?: P extends Array<any> ? P : P[];\n $not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n $exists?: boolean;\n $expr?: any[]\n $regex?: P extends string ? RegExpConstructor | string : never;\n $options?: P extends string ? string : never;\n $geoIntersects?: {\n $geometry: Document;\n };\n $geoWithin?: Document;\n $near?: Document;\n $nearSphere?: Document;\n $maxDistance?: number;\n $all?: any[];\n $elemMatch?: Document;\n $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 $and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $text?: {\n $search: string;\n $language?: string;\n $caseSensitive?: boolean;\n $diacriticSensitive?: boolean;\n };\n $where?: string | ((this: T) => boolean);\n $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 $inc?: MongoManagerIncFilter<T> | Document;\n $set?: MongoManagerFilter<T> | Document;\n $setOnInsert?: MongoManagerFilter<T> | Document;\n $unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _nodeCache;\n\tprivate _cacheMap: { collections: string[], key: string }[] = [];\n\tprivate _operationInProgress: Map<string, { promise: Promise<any>, invalidatedDuringExecution: boolean }> = new Map();\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, 'name' | 'type'>)[] = [];\n\tprivate _serverConfig = null;\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tconstructor(serverConfig) {\n\t\tthis._serverConfig = serverConfig;\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\tthis.initServerCollections();\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<CollectionDocument>(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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeFind<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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\tlet retryCount = 0;\n\t\tconst collection = ResolveIOServer.getMainDB().collection<T>(collectionName);\n\t\t\n\t\tdo {\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false; // Reset before query\n\t\t\t}\n\n\t\t\tconst monitor = new MonitorMongo('find', collectionName, JSON.stringify([filter, options]));\n\t\t\tresult = await collection.find(<any>filter, options).toArray();\n\t\t\tmonitor.finish();\n\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tretryCount++;\n\t\t\t\tawait this.delay(200);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution && retryCount < 3);\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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeFindOne<T>(collectionName, filter, options, cacheKey);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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\tlet retryCount = 0;\n\t\tconst collection = ResolveIOServer.getMainDB().collection<T>(collectionName);\n\t\n\t\tdo {\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false;\n\t\t\t}\n\t\n\t\t\tconst monitor = new MonitorMongo('findOne', collectionName, JSON.stringify([filter, options]));\n\t\t\tresult = await collection.findOne(<any>filter, options);\n\t\t\tmonitor.finish();\n\t\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tretryCount++;\n\t\t\t\tawait this.delay(200);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution && retryCount < 3);\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\treturn result;\n\t\t}\n\n\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\treturn op.promise;\n\t\t}\n\n\t\tconst operation = this.executeAggregate<T>(collectionName, pipeline, options, cacheKey, collections);\n\t\tthis._operationInProgress.set(cacheKey, { promise: operation, invalidatedDuringExecution: false });\n\n\t\toperation.finally(() => this._operationInProgress.delete(cacheKey));\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\tlet retryCount = 0;\n\t\tconst collection = ResolveIOServer.getMainDB().collection<T>(collectionName);\n\t\n\t\tdo {\n\t\t\tif (this._operationInProgress.has(cacheKey)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheKey);\n\t\t\t\top.invalidatedDuringExecution = false;\n\t\t\t}\n\t\n\t\t\tconst monitor = new MonitorMongo('aggregate', collectionName, JSON.stringify([pipeline, options]));\n\t\t\tresult = await collection.aggregate(pipeline, options).toArray();\n\t\t\tmonitor.finish();\n\t\n\t\t\tif (this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {\n\t\t\t\tretryCount++;\n\t\t\t\tawait this.delay(200);\n\t\t\t}\n\t\t} while (this._operationInProgress.get(cacheKey).invalidatedDuringExecution && retryCount < 3);\n\t\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\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\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\tlet deleteCount = 0;\n\t\t\t\tconst keys = this._nodeCache.keys();\n\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\tthis._nodeCache.del(key);\n\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t}\n\t\t\t\n\t\t\tthis._nodeCache.set(cacheKey, JSON.stringify(data));\n\t\t\tthis._cacheMap.push({ collections, key: cacheKey });\n\t\t}\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tconst collectionCacheMap = this._cacheMap.filter(a => a.collections.includes(collection));\n\n\t\tfor (const cacheMap of collectionCacheMap) {\n\t\t\tthis._nodeCache.del(cacheMap.key);\n\t\t\t\n\t\t\tif (this._operationInProgress.has(cacheMap.key)) {\n\t\t\t\tconst op = this._operationInProgress.get(cacheMap.key);\n\t\t\t\top.invalidatedDuringExecution = true;\n\t\t\t}\n\t\t}\n\n\t\tthis._cacheMap = this._cacheMap.filter(a => !a.collections.includes(collection));\n\t}\n\n\tprivate setupChangeStream() {\n\t\tconst db = ResolveIOServer.getMongoConnection().db(this._serverConfig['DATABASE']);\n\t\tconst changeStream = db.watch();\n\n\t\tchangeStream.on('change', async change => {\n\t\t\tif (change['ns'] && change['ns'].coll) {\n\t\t\t\tconst collectionName = change['ns'].coll;\n\t\t\t\tif (this.collection(collectionName)) {\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};\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}\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\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\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 const { action, collection, specs, options } = task;\n \n const dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n \n if (!dbCollection) {\n return callback(new Error(`Collection ${collection.collectionName} not found`));\n }\n\n let monitor = new MonitorMongo(action, collection.collectionName, JSON.stringify([specs, options]));\n\n const createIndex = async () => {\n try {\n const result = await dbCollection[action](...specs, options);\n monitor.finish();\n callback(null, result);\n } catch (err) {\n if (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n try {\n const existingIndexName = collection.extractIndexNameFromError(err.message);\n if (existingIndexName) {\n await dbCollection.dropIndex(existingIndexName);\n return await createIndex();\n }\n } catch (innerError) {\n callback(innerError);\n }\n }\n monitor.finish();\n callback(err);\n }\n };\n\n await createIndex();\n }, 1);\n\n // Method to extract index name from error message\n extractIndexNameFromError(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) {\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\t// bulkWrite(operations: AnyBulkWriteOperation<T>[], options: BulkWriteOptions): Promise<BulkWriteResult> {\n\tbulkWrite(operations: any[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false): Promise<BulkWriteResult> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!operations.length) {\n\t\t\t\tresolve(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = []; // For storing versioning ops\n\t\t\tconst deleteOldVersionsOps = []; // For deleteMany operations to remove older versions\n\t\t\tconst bulkOps = [];\n\t\t\tconst updateFilters = [];\n\t\t\tconst updateManyFilters = [];\n\t\t\tconst deleteManyFilters = [];\n\t\n\t\t\t// Collect filters for all operations\n\t\t\toperations.forEach(op => {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tif (opType === 'updateOne' || opType === 'deleteOne' || opType === 'replaceOne') {\n\t\t\t\t\tupdateFilters.push(op[opType].filter); // Store filters for updateOne, deleteOne, and replaceOne\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tupdateManyFilters.push(op[opType].filter); // Store the entire filter for updateMany\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\tdeleteManyFilters.push(op[opType].filter); // Store the entire filter for deleteMany\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t// Pre-fetch all documents based on the filters before proceeding with the bulk operations\n\t\t\tconst currentDocs = updateFilters.length || updateManyFilters.length || deleteManyFilters.length\n\t\t\t\t? await this.find(<any>{ $or: [...updateFilters, ...updateManyFilters, ...deleteManyFilters] })\n\t\t\t\t: [];\n\n\t\t\t// Helper function to get the value from a document using a dot-notated key (e.g., 'obj.property')\n\t\t\t// This will also handle arrays of objects (e.g., 'obj.arrayOfObjects.property')\n\t\t\tconst getNestedValue = (doc, key) => {\n\t\t\t\tconst parts = key.split('.');\n\n\t\t\t\treturn parts.reduce((acc, part) => {\n\t\t\t\t\tif (Array.isArray(acc)) {\n\t\t\t\t\t\t// If we're dealing with an array, return an array of values for each element\n\t\t\t\t\t\treturn acc.map(item => item[part]).filter(val => val !== undefined);\n\t\t\t\t\t}\n\t\t\t\t\treturn acc && acc[part];\n\t\t\t\t}, doc);\n\t\t\t};\n\t\n\t\t\t// Helper function to locally find matching documents based on filter\n\t\t\tconst findMatchingDocs = (filter) => {\n\t\t\t\treturn currentDocs.filter(doc => {\n\t\t\t\t\treturn matchDocument(filter, doc);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst matchDocument = (filter, doc) => {\n\t\t\t\treturn Object.keys(filter).every(key => {\n\t\t\t\t\tconst value = filter[key];\n\t\t\t\t\tconst docValue = getNestedValue(doc, key); // Get nested value from the document\n\t\t\t\n\t\t\t\t\t// Handle logical operators\n\t\t\t\t\tif (key === '$and') {\n\t\t\t\t\t\treturn value.every(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif (key === '$or') {\n\t\t\t\t\t\treturn value.some(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// If docValue is an array, apply filter conditions to each element\n\t\t\t\t\tif (Array.isArray(docValue)) {\n\t\t\t\t\t\treturn docValue.some(val => evaluateCondition(value, val));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// Otherwise, apply the condition to the single value\n\t\t\t\t\treturn evaluateCondition(value, docValue);\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\t// Helper function to evaluate the condition (value) against the document value (docValue)\n\t\t\tconst evaluateCondition = (condition, docValue) => {\n\t\t\t\t// If condition is an object, handle operators like $in, $nin, $ne, etc.\n\t\t\t\tif (condition instanceof Object) {\n\t\t\t\t\tif ('$in' in condition) {\n\t\t\t\t\t\treturn condition.$in.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$nin' in condition) {\n\t\t\t\t\t\treturn !condition.$nin.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$ne' in condition) {\n\t\t\t\t\t\treturn docValue !== condition.$ne;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gt' in condition) {\n\t\t\t\t\t\treturn docValue > condition.$gt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gte' in condition) {\n\t\t\t\t\t\treturn docValue >= condition.$gte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lt' in condition) {\n\t\t\t\t\t\treturn docValue < condition.$lt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lte' in condition) {\n\t\t\t\t\t\treturn docValue <= condition.$lte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$exists' in condition) {\n\t\t\t\t\t\treturn (docValue !== undefined) === condition.$exists;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$regex' in condition) {\n\t\t\t\t\t\tconst regex = new RegExp(condition.$regex, condition.$options || '');\n\t\t\t\t\t\treturn regex.test(docValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Handle regular equality comparison\n\t\t\t\treturn docValue === condition;\n\t\t\t};\n\t\n\t\t\tfor (const op of operations) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tlet doc = op[opType];\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// Ensure _id and __v for insertOne operations\n\t\t\t\t\tif (!doc.document._id) {\n\t\t\t\t\t\tdoc.document._id = objectIdHexString();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions && !doc.document.hasOwnProperty('__v')) {\n\t\t\t\t\t\tdoc.document.__v = 0;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = 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 = date;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\tconst isValid = validation.validate(doc.document);\n\t\t\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite insertOne - ' + this.collectionName, [validation.validationErrors(), doc.document]);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Log the operation\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,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add insertOne operation to bulkOps\n\t\t\t\t} \n\t\t\t\telse if (opType === 'updateOne') {\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\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\tdoc.update.$set = { updatedAt: 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.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update, currentDoc]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\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}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\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 (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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 (!objectContainsPropertyDeep(doc.update, '_id')) {\n\t\t\t\t\t\t\t\tdoc.update.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.__v = 0;\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.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: doc.update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.update])) < 200000 ? JSON.stringify([op, options, doc.update], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\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// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tdoc.replacement.__v = versionDoc.__v + 1;\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\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}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\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 (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - replaceOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\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 (!objectContainsPropertyDeep(doc.replacement, '_id')) {\n\t\t\t\t\t\t\t\tdoc.replacement._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.__v = 0;\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.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\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: doc.replacement._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.replacement])) < 200000 ? JSON.stringify([op, options, doc.replacement], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne') {\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\t\t\t\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add deleteOne operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\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.updatedAt = new Date();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdoc.update.$set = {\n\t\t\t\t\t\t\t\tupdatedAt: 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\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdoc.update.$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\n\t\t\t\t\t// Process all documents matching the updateMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateMany - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\tcontinue;\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\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add updateMany operation to bulkOps\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\t// Process all documents matching the deleteMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\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}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\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: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\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}\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\tbulkOps.push(op); // Add deleteMany operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttry {\n\t\t\t\tif (bulkOps.length) {\n\t\t\t\t\tlet monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([bulkOps.slice(-100), options]));\n\t\t\t\t\t\n\t\t\t\t\t// First, perform the main bulk operations on the collection\n\t\t\t\t\tconst mainResult = await ResolveIOServer.getMainDB().collection<T>(this.collectionName).bulkWrite(bulkOps, options);\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\t// Separate bulkWrite for versions (if any versioning is required)\n\t\t\t\t\tif (versionOps.length || deleteOldVersionsOps.length) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.versionCollection).bulkWrite([...versionOps, ...deleteOldVersionsOps]);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Separate bulkWrite for logs (if logging is enabled)\n\t\t\t\t\tif (!bypassLogs && logs.length) {\n\t\t\t\t\t\tawait Logs.bulkWrite(logs);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tmonitor.finish();\n\t\n\t\t\t\t\tresolve(mainResult); // Resolve with the result of the main bulkWrite\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} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Bulk Write', this.collectionName, bulkOps.slice(-100), options, err);\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tcountDocuments(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: CountDocumentsOptions): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<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 Count Documents', 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((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndex',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndexes',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [indexSpecs],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\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) {\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\tLogs.insertOne({\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, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'deleteMany',\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});\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;\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\tLogs.insertOne({\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, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\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<Boolean> {\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) {\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) {\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;\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\t\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\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: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: ''\n\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, 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});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, 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});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, 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});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tLogs.insertOne({\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});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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().callMethodInternal.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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\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\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, 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});\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\tLogs.insertOne({\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});\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\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\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}"]}
|