@resolveio/server-lib 9.2.18 → 9.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-server-app.js +1 -55
- package/client-server-app.js.map +1 -1
- package/collections/app-status.collection.js +1 -40
- package/collections/app-status.collection.js.map +1 -1
- package/collections/app-version.collection.js +1 -40
- package/collections/app-version.collection.js.map +1 -1
- package/collections/counter.collection.js +1 -43
- package/collections/counter.collection.js.map +1 -1
- package/collections/cron-job-history.collection.js +1 -71
- package/collections/cron-job-history.collection.js.map +1 -1
- package/collections/cron-job.collection.js +1 -74
- package/collections/cron-job.collection.js.map +1 -1
- package/collections/email-history.collection.js +1 -55
- package/collections/email-history.collection.js.map +1 -1
- package/collections/email-verified.collection.js +1 -50
- package/collections/email-verified.collection.js.map +1 -1
- package/collections/file.collection.js +1 -62
- package/collections/file.collection.js.map +1 -1
- package/collections/flag.collection.js +1 -44
- package/collections/flag.collection.js.map +1 -1
- package/collections/log-method-latency.collection.js +1 -53
- package/collections/log-method-latency.collection.js.map +1 -1
- package/collections/log-subscription.collection.js +1 -57
- package/collections/log-subscription.collection.js.map +1 -1
- package/collections/log.collection.js +1 -72
- package/collections/log.collection.js.map +1 -1
- package/collections/logged-in-users.collection.js +1 -58
- package/collections/logged-in-users.collection.js.map +1 -1
- package/collections/method-call.collection.js +1 -51
- package/collections/method-call.collection.js.map +1 -1
- package/collections/method-response.collection.js +1 -55
- package/collections/method-response.collection.js.map +1 -1
- package/collections/monitor-cpu.collection.js +1 -57
- package/collections/monitor-cpu.collection.js.map +1 -1
- package/collections/monitor-https-inbound.collection.js +1 -66
- package/collections/monitor-https-inbound.collection.js.map +1 -1
- package/collections/monitor-https-outbound.collection.js +1 -74
- package/collections/monitor-https-outbound.collection.js.map +1 -1
- package/collections/monitor-memory.collection.js +1 -68
- package/collections/monitor-memory.collection.js.map +1 -1
- package/collections/monitor-mongo.collection.js +1 -62
- package/collections/monitor-mongo.collection.js.map +1 -1
- package/collections/notification.collection.js +1 -40
- package/collections/notification.collection.js.map +1 -1
- package/collections/report-builder-dashboard-builder.collection.js +1 -93
- package/collections/report-builder-dashboard-builder.collection.js.map +1 -1
- package/collections/report-builder-library.collection.js +1 -76
- package/collections/report-builder-library.collection.js.map +1 -1
- package/collections/report-builder-report.collection.js +1 -138
- package/collections/report-builder-report.collection.js.map +1 -1
- package/collections/user-group.collection.js +1 -79
- package/collections/user-group.collection.js.map +1 -1
- package/collections/user-guide.collection.js +1 -46
- package/collections/user-guide.collection.js.map +1 -1
- package/collections/user.collection.js +1 -248
- package/collections/user.collection.js.map +1 -1
- package/cron/cron.js +1 -161
- package/cron/cron.js.map +1 -1
- package/fixtures/cron-jobs.js +1 -72
- package/fixtures/cron-jobs.js.map +1 -1
- package/fixtures/init.js +1 -62
- package/fixtures/init.js.map +1 -1
- package/http/auth.js +1 -697
- package/http/auth.js.map +1 -1
- package/http/health.js +1 -10
- package/http/health.js.map +1 -1
- package/http/home.js +1 -64
- package/http/home.js.map +1 -1
- package/index.js +1 -123
- package/index.js.map +1 -1
- package/managers/cron.manager.js +1 -205
- package/managers/cron.manager.js.map +1 -1
- package/managers/method.manager.js +1 -599
- package/managers/method.manager.js.map +1 -1
- package/managers/mongo.manager.js +1 -1682
- package/managers/mongo.manager.js.map +1 -1
- package/managers/monitor.manager.js +1 -334
- package/managers/monitor.manager.js.map +1 -1
- package/managers/subscription.manager.js +1 -867
- package/managers/subscription.manager.js.map +1 -1
- package/managers/subscription.performance.js +1 -100
- package/managers/subscription.performance.js.map +1 -1
- package/methods/accounts.js +1 -224
- package/methods/accounts.js.map +1 -1
- package/methods/aws.js +1 -449
- package/methods/aws.js.map +1 -1
- package/methods/cloudconvert.js +1 -214
- package/methods/cloudconvert.js.map +1 -1
- package/methods/collections.js +1 -526
- package/methods/collections.js.map +1 -1
- package/methods/counters.js +1 -121
- package/methods/counters.js.map +1 -1
- package/methods/cron-jobs.js +1 -1284
- package/methods/cron-jobs.js.map +1 -1
- package/methods/flags.js +1 -8
- package/methods/flags.js.map +1 -1
- package/methods/logs.js +1 -370
- package/methods/logs.js.map +1 -1
- package/methods/monitor.js +1 -384
- package/methods/monitor.js.map +1 -1
- package/methods/pdf.js +1 -685
- package/methods/pdf.js.map +1 -1
- package/methods/report-builder.js +1 -826
- package/methods/report-builder.js.map +1 -1
- package/methods/support.js +1 -263
- package/methods/support.js.map +1 -1
- package/models/app-status.model.js +1 -3
- package/models/app-status.model.js.map +1 -1
- package/models/app-version.model.js +1 -3
- package/models/app-version.model.js.map +1 -1
- package/models/billing-logged-in-users.model.js +1 -3
- package/models/billing-logged-in-users.model.js.map +1 -1
- package/models/collection-document.model.js +1 -3
- package/models/collection-document.model.js.map +1 -1
- package/models/counter.model.js +1 -3
- package/models/counter.model.js.map +1 -1
- package/models/cron-job-history.model.js +1 -3
- package/models/cron-job-history.model.js.map +1 -1
- package/models/cron-job.model.js +1 -3
- package/models/cron-job.model.js.map +1 -1
- package/models/dialog.model.js +1 -3
- package/models/dialog.model.js.map +1 -1
- package/models/email-history.model.js +1 -3
- package/models/email-history.model.js.map +1 -1
- package/models/email-verified.model.js +1 -3
- package/models/email-verified.model.js.map +1 -1
- package/models/file.model.js +1 -3
- package/models/file.model.js.map +1 -1
- package/models/flag.model.js +1 -3
- package/models/flag.model.js.map +1 -1
- package/models/log-method-latency.model.js +1 -3
- package/models/log-method-latency.model.js.map +1 -1
- package/models/log-subscription.model.js +1 -3
- package/models/log-subscription.model.js.map +1 -1
- package/models/log.model.js +1 -3
- package/models/log.model.js.map +1 -1
- package/models/logged-in-users.model.js +1 -3
- package/models/logged-in-users.model.js.map +1 -1
- package/models/method-call.model.js +1 -3
- package/models/method-call.model.js.map +1 -1
- package/models/method-response.model.js +1 -3
- package/models/method-response.model.js.map +1 -1
- package/models/method.model.js +1 -3
- package/models/method.model.js.map +1 -1
- package/models/monitor-cpu.model.js +1 -3
- package/models/monitor-cpu.model.js.map +1 -1
- package/models/monitor-https-inbound.model.js +1 -3
- package/models/monitor-https-inbound.model.js.map +1 -1
- package/models/monitor-https-outbound.model.js +1 -3
- package/models/monitor-https-outbound.model.js.map +1 -1
- package/models/monitor-memory.model.js +1 -3
- package/models/monitor-memory.model.js.map +1 -1
- package/models/monitor-mongo.model.js +1 -3
- package/models/monitor-mongo.model.js.map +1 -1
- package/models/notification.model.js +1 -3
- package/models/notification.model.js.map +1 -1
- package/models/pagination.model.js +1 -23
- package/models/pagination.model.js.map +1 -1
- package/models/permission.model.js +1 -3
- package/models/permission.model.js.map +1 -1
- package/models/report-builder-dashboard-builder.model.js +1 -3
- package/models/report-builder-dashboard-builder.model.js.map +1 -1
- package/models/report-builder-library.model.js +1 -3
- package/models/report-builder-library.model.js.map +1 -1
- package/models/report-builder-report.model.js +1 -3
- package/models/report-builder-report.model.js.map +1 -1
- package/models/report-builder.model.js +1 -3
- package/models/report-builder.model.js.map +1 -1
- package/models/select-data-label.model.js +1 -3
- package/models/select-data-label.model.js.map +1 -1
- package/models/server-response.model.js +1 -3
- package/models/server-response.model.js.map +1 -1
- package/models/subscription.model.js +1 -3
- package/models/subscription.model.js.map +1 -1
- package/models/support-ticket.model.js +1 -3
- package/models/support-ticket.model.js.map +1 -1
- package/models/user-group.model.js +1 -3
- package/models/user-group.model.js.map +1 -1
- package/models/user-guide.model.js +1 -3
- package/models/user-guide.model.js.map +1 -1
- package/models/user.model.js +1 -3
- package/models/user.model.js.map +1 -1
- package/package.json +2 -1
- package/public_api.js +1 -78
- package/public_api.js.map +1 -1
- package/publications/app-status.js +1 -16
- package/publications/app-status.js.map +1 -1
- package/publications/app-version.js +1 -16
- package/publications/app-version.js.map +1 -1
- package/publications/cron-jobs.js +1 -32
- package/publications/cron-jobs.js.map +1 -1
- package/publications/files.js +1 -36
- package/publications/files.js.map +1 -1
- package/publications/flags.js +1 -22
- package/publications/flags.js.map +1 -1
- package/publications/logs.js +1 -90
- package/publications/logs.js.map +1 -1
- package/publications/method-calls.js +1 -16
- package/publications/method-calls.js.map +1 -1
- package/publications/method-responses.js +1 -16
- package/publications/method-responses.js.map +1 -1
- package/publications/notifications.js +1 -16
- package/publications/notifications.js.map +1 -1
- package/publications/report-builder-dashboard-builders.js +1 -42
- package/publications/report-builder-dashboard-builders.js.map +1 -1
- package/publications/report-builder-libraries.js +1 -89
- package/publications/report-builder-libraries.js.map +1 -1
- package/publications/report-builder-reports.js +1 -50
- package/publications/report-builder-reports.js.map +1 -1
- package/publications/super-admin.js +1 -16
- package/publications/super-admin.js.map +1 -1
- package/publications/user-groups.js +1 -16
- package/publications/user-groups.js.map +1 -1
- package/publications/user-guides.js +1 -16
- package/publications/user-guides.js.map +1 -1
- package/server-app.js +1 -682
- package/server-app.js.map +1 -1
- package/util/common.js +1 -498
- package/util/common.js.map +1 -1
- package/util/schema-report-builder.js +1 -452
- package/util/schema-report-builder.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":[],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ChangeStreamOptions, ClientSession, CollectionAggregationOptions, CollectionInsertManyOptions, CollectionInsertOneOptions, CommonOptions, FilterQuery, FindOneAndDeleteOption, FindOneAndReplaceOption, FindOneAndUpdateOption, FindOneOptions, IndexOptions, IndexSpecification, MongoCountPreferences, MongoDistinctPreferences, ReadPreferenceOrMode, ReplaceOneOptions, UpdateManyOptions, UpdateOneOptions, UpdateQuery, ObjectId } 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');\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}\n\nexport class MongoManager {\n\tprivate _collections: Collection<any>[] = [];\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _nodeCache;\n\tprivate _mongoQueueCacheId = 1;\n\n\tconstructor() {\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tthis.runQueue();\n\t}\n\n\tregisterCollection(collection: Collection<any>) {\n\t\tthis._collections.push(collection);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): Collection<any> | UserCollection<any> {\n\t\treturn this._collections.filter(a => a.collectionName === collectionName)[0];\n\t}\n\n\taddToQueue(mongoQueue: MongoQueueModel) {\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.name_collection === mongoQueue.name_collection && a.name_function === mongoQueue.name_function && a.name_function_addt === mongoQueue.name_function_addt && JSON.stringify(a.data_function) === JSON.stringify(mongoQueue.data_function) && JSON.stringify(a.data_function_addt) === JSON.stringify(mongoQueue.data_function_addt))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (!_mongoQueue.running) {\n\t\t\t\t_mongoQueue.cbs.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_mongoQueue.cbs_next.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t}\n\t}\n\n\tprivate async runQueue() {\n\t\tsetInterval(() => {\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running && a.cbs.length);\n\t\t\tif (queueArr.length) {\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tmongoQueue.running = true;\n\n\t\t\t\t\tif (mongoQueue.cacheId) {\n\t\t\t\t\t\tlet res = JSON.parse(this._nodeCache.get(mongoQueue.cacheId), dateReviver);\n\n\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\tcb(null, res, true);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!mongoQueue.name_function_addt) {\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function).then(res => {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\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\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\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\tqueueArr.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function)[mongoQueue.name_function_addt](...mongoQueue.data_function_addt).then(res => {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\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\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tqueueArr.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 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\t\t}, 10);\n\t}\n\n\tprivate addToCache(id, data) {\n\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\tif (nodeCacheSize > 100000000) {\n\t\t\tlet deleteCount = 0;\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => a.cacheId);\n\n\t\t\tfor (let zz = 0; zz < queueArr.length; zz++) {\n\t\t\t\tthis._nodeCache.del(queueArr[zz].cacheId);\n\t\t\t\tqueueArr[zz].cacheId = 0;\n\n\t\t\t\tdeleteCount += 1;\n\n\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t}\n\n\t\tthis._nodeCache.set(id, JSON.stringify(data));\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tthis._mongoQueue.filter(a => (a.name_collection === collection || a.lookup_collections.includes(collection)) && a.cacheId).forEach(queue => {\n\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\tqueue.cacheId = 0;\n\t\t});\n\t}\n}\n\nexport class Model<T> {\n\tcollection_main: Collection<T> | UserCollection<T> = null;\n\tcollection_version: Collection<T> | UserCollection<T> = null;\n\n\tconstructor(collectionName: string, schema: object, useVersionCollection = false, useReportBuilder = true, reportBuilderLookupTables: LookupTables[] = [], timestamps = true, createLogs = true, checkSchema = true) {\n\t\tif (collectionName === 'users') {\n\t\t\tthis.collection_main = new UserCollection<T>(collectionName, schema, useReportBuilder, reportBuilderLookupTables, timestamps, createLogs, checkSchema);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new Collection<T>(collectionName, schema, useReportBuilder, reportBuilderLookupTables, timestamps, createLogs, checkSchema);\n\t\t}\n\n\t\tif (useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(schema);\n\t\t\tversionSchema['_id'].type = 'Object';\n\t\t\tversionSchema['_id'].blackbox = true;\n\n\t\t\tif (collectionName === 'users') {\n\t\t\t\tthis.collection_version = new UserCollection<T>(collectionName + '.versions', versionSchema, false, [], true, false, false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new Collection<T>(collectionName + '.versions', versionSchema, false, [], true, false, false);\n\t\t\t}\n\n\t\t\tif (this.collection_version.indexExists('_id.__v_1__id._id_1')) {\n\t\t\t\tthis.collection_version.dropIndex('_id.__v_1__id._id_1');\n\t\t\t}\n\n\t\t\tif (!this.collection_version.indexExists('_id._id_1__id.__v_1')) {\n\t\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\t}\n\n\t\t\tthis.collection_main.versionCollection = collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport class Collection<T> {\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\t\n\tconstructor(collectionName: string, schema: object, useReportBuilder, reportBuilderLookupTables: LookupTables[], timestamps, createLogs, checkSchema) {\n\t\tthis.collectionName = collectionName;\n\t\tthis.simplschema = new SimpleSchema(schema);\n\t\tthis.timestamps = timestamps;\n\t\tthis.createLogs = createLogs;\n\t\tthis.checkSchema = checkSchema;\n\n\t\tif (useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(schema);\n\t\t\tlet rbSchema = buildRbLookups(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()) {\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\taggregate(pipeline: object[], options?: CollectionAggregationOptions, allowLogs = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.createLogs && allowLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t// \ttype: 'query',\n\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t// \tid_document: '',\n\t\t\t\t// \tpayload: JSON.stringify([pipeline, options], null, 2),\n\t\t\t\t// \tmethod: 'aggregate',\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\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'aggregate',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (this.createLogs && allowLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'aggregate',\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 (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options).toArray().then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\taggregateCount(pipeline: object[], options?: CollectionAggregationOptions) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\tname_collection: this.collectionName,\n\t\t\t\tname_function: 'aggregate',\n\t\t\t\tname_function_addt: 'count',\n\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\tdata_function_addt: [],\n\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tcbs_next: [],\n\t\t\t\trunning: false,\n\t\t\t\tcacheId: 0,\n\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t})\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: CollectionAggregationOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options);\n\t}\n\n\taggregateStream(pipeline: object[], options?: CollectionAggregationOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options).stream();\n\t}\n\n\tcountDocuments(filter: FilterQuery<T> = {}, options?: MongoCountPreferences) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).countDocuments(filter, options);\n\t}\n\n\tcreate(f_docs: T | T[], options?: CollectionInsertManyOptions): Promise<T | T[]> {\n\t\tlet docs = [];\n\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, options);\n\t}\n\n\tcreateIndex(fieldOrSpec: any, options?: IndexOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).createIndex(fieldOrSpec, options);\n\t}\n\n\tcreateIndexes(indexSpecs: IndexSpecification[], options?: { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).createIndexes(indexSpecs, options);\n\t}\n\n\tdeleteMany(filter: FilterQuery<T> = {}, options?: CommonOptions, bypassLogs = false) {\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id: { _id: doc['_id'], __v: doc['__v']}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).deleteMany(filter, options).then(res => {\n\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tdeleteOne(filter: FilterQuery<T> = {}, options?: CommonOptions & { bypassDocumentValidation?: boolean; }, bypassLogs = false) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\t\n\t\t\t\tif (doc) {\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: 'deleteOne',\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id: { _id: doc['_id'], __v: doc['__v']}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).deleteOne(filter, options).then(res => {\n\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: FilterQuery<T>, options?: MongoDistinctPreferences): Promise<T[]> {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).distinct(key, filter, options);\n\t}\n\n\tdrop(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).drop(options);\n\t}\n\n\tdropIndex(indexName: string, options?: CommonOptions & { maxTimeMS?: number; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).dropIndex(indexName, options);\n\t}\n\n\tdropIndexes(options?: { session?: ClientSession; maxTimeMS?: number; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).dropIndexes(options);\n\t}\n\n\tfind(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// type: 'query',\n\t\t\t\t\t// collection: this.collectionName,\n\t\t\t\t\t// id_document: '',\n\t\t\t\t\t// payload: JSON.stringify([filter, options], null, 2),\n\t\t\t\t\t// method: 'find',\n\t\t\t\t\t// id_user: '',\n\t\t\t\t\t// user: '',\n\t\t\t\t\t// messageId: 0,\n\t\t\t\t\t// route: ''\n\t\t\t\t// });\n\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'find',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'find',\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\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <any>options).toArray().then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOneOptions<T>): Promise<T> {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).findOne({_id: id}, <T>options);\n\t}\n\n\tfindCount(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false) {\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t// Logs.insertOne({\n\t\t\t// \t_id: objectIdHexString(),\n\t\t\t// \ttype: 'query',\n\t\t\t// \tcollection: this.collectionName,\n\t\t\t// \tid_document: '',\n\t\t\t// \tpayload: JSON.stringify([filter, options], null, 2),\n\t\t\t// \tmethod: 'findCount',\n\t\t\t// \tid_user: '',\n\t\t\t// \tuser: '',\n\t\t\t// \tmessageId: 0,\n\t\t\t// \troute: ''\n\t\t\t// });\n\t\t}\n\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options).count();\n\t}\n\n\tfindCursor(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options);\n\t}\n\n\tfindStream(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, streamOptions?: any) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options).stream(streamOptions);\n\t}\n\n\tfindOne(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t// \ttype: 'query',\n\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t// \tid_document: '',\n\t\t\t\t// \tpayload: JSON.stringify([filter, options], null, 2),\n\t\t\t\t// \tmethod: 'findOne',\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\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'findOne',\n\t\t\t\t\tname_function_addt: '',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'findOne',\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}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).findOne(filter, <any>options).then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: FilterQuery<T> = {}, options?: FindOneAndDeleteOption<T>, bypassLogs = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\t\n\t\t\t\tif (doc) {\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: 'findOneAndDelete',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndDelete(filter, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndDelete',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndDelete',\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\t\t});\n\t}\n\n\tfindOneAndReplace(filter: FilterQuery<T> = {}, replacement: T, options?: FindOneAndReplaceOption<T>, 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('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\t\t\tif (this.timestamps) {\n\t\t\t\treplacement['updatedAt'] = date;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'findOneAndReplace',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndReplace(filter, <any>replacement, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndReplace',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndReplace',\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\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: FilterQuery<T> = {}, update: any, options?: FindOneAndUpdateOption<T>, 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('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\n\t\t\t\tif (!update['$set']) {\n\t\t\t\t\tupdate['$set'] = {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.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'findOneAndUpdate',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndUpdate(filter, update, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndUpdate',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndUpdate',\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\t\t});\n\t}\n\n\tindexes(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).indexes(options);\n\t}\n\n\tindexExists(indexes: string | string[], options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).indexExists(indexes, options);\n\t}\n\n\tinsertMany(docs: T[], options?: CollectionInsertManyOptions, bypassLogs = false, bypassCheckSchema = 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('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\t\t\t\t\tdoc['createdAt'] = date;\n\t\t\t\t\tdoc['updatedAt'] = date;\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\tResolveIOServer.getMainDB().collection(this.collectionName).insertMany(validDocs, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t\t}\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});\n\t}\n\n\tinsertOne(doc: T, options?: CollectionInsertOneOptions, 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('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\tdoc['createdAt'] = date;\n\t\t\t\tdoc['updatedAt'] = date;\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\tResolveIOServer.getMainDB().collection(this.collectionName).insertOne(doc, options).then(res => {\n\t\t\t\tif (res.result.ok) {\n\t\t\t\t\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.result.ok);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: { batchSize?: number; readPreference?: ReadPreferenceOrMode; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).listIndexes(options);\n\t}\n\n\treIndex(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).reIndex(options);\n\t}\n\n\trename(newName: string, options?: { dropTarget?: boolean; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).rename(newName, options);\n\t}\n\n\treplaceOne(filter: FilterQuery<T>, replacement: T, options?: ReplaceOneOptions, 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('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\tif (this.timestamps) {\n\t\t\t\treplacement['updatedAt'] = date;\n\t\t\t}\n\n\t\t\tif (!doc) {\n\t\t\t\tdoc = await this.findOne(filter, null, true);\n\t\t\t}\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.timestamps && !replacement['createdAt'] && doc['createdAt']) {\n\t\t\t\t\treplacement['createdAt'] = doc['createdAt'];\n\t\t\t\t}\n\n\t\t\t\tif (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, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'replaceOne',\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\n\t\t\t\tif (this.useVersions) {\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({\n\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t_id: doc['_id'],\n\t\t\t\t\t\t\t\t\t__v: {$lte: doc['__v'] - 4}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\t\tresolve(res.result.nModified);\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.result.ok);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 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: {\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\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\t\t\tresolve(res.result.nModified);\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.result.ok);\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\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 {\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 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\telse if (options && options.upsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\treplacement['createdAt'] = date;\n\t\t\t\t}\n\n\t\t\t\tif (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: replacement['_id'],\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([filter, replacement, options])) < 200000 ? JSON.stringify([filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'replaceOne',\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\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\treplacement['__v'] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t}\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\treject('No Document');\n\t\t\t}\n\t\t});\n\t}\n\n\tstats(options?: { scale: number; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).stats(options);\n\t}\n\n\tupdateMany(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateManyOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\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\t(<any>update.$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('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\t\t\t\n\t\t\tif (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\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateMany',\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\tResolveIOServer.getMainDB().collection(this.collectionName).updateMany(filter, update, options).then(res => {\n\t\t\t\tif (res.result.ok) {\n\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tupdateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOneOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\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\t(<any>update.$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();\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('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\t\t\t\t\n\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateOne',\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\t\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc['_id'] = {_id: doc['_id'], __v: doc['__v']};\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({\n\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t_id: doc['_id'],\n\t\t\t\t\t\t\t\t__v: {$lte: doc['__v'] - 4}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = <any>{__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\t(<any>update.$inc).__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => reject(err));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => reject(err));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert && update.$setOnInsert && update.$setOnInsert._id) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tif (!update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t(<any>update.$setOnInsert).createdAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\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: update.$setOnInsert._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([filter, update, options])) < 200000 ? JSON.stringify([filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateOne',\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\t\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t(<any>update.$setOnInsert).__v = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t}\n\t\t\t\t}, err => reject(err));\n\t\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\treject('No Document');\n\t\t\t}\n\t\t});\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions & { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).watch(pipeline, options);\n\t}\n\n\twatchCollectionWithAggregate(pipeline = [], options?: ChangeStreamOptions & { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).watch(pipeline, options);\n\t}\n}\n\nexport class UserCollection<T> extends Collection<T> {\n\tauthenticateStrategy() {\n\t\treturn async (username, password, cb) => {\n\t\t\tlet user = await Users.findOne({username: username});\n\t\t\tthis.authenticate(user, password).then(authUser => {\n\t\t\t\tif (authUser.data) {\n\t\t\t\t\tcb(null, user, null);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcb(null, null, authUser.error);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tcb(err, null, null);\n\t\t\t})\n\t\t};\n\t}\n\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: {}}}).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","MongoManager","this","_collections","_mongoQueue","_mongoQueueId","_mongoQueueCacheId","_nodeCache","stdTTL","checkperiod","runQueue","prototype","registerCollection","collection","push","collections","collectionName","filter","a","addToQueue","mongoQueue","name_collection","name_function","name_function_addt","JSON","stringify","data_function","data_function_addt","running","cbs_next","cbs","_id","setInterval","queueArr","_this","length","i","cacheId","res_1","parse","get","dateReviver","forEach","cb","_b","_c","ResolveIOServer","getMainDB","apply","then","res","addToCache","err","splice","map","indexOf","_a","id","data","nodeCacheSize","getStats","vsize","deleteCount","zz","del","console","log","set","invalidateQueryCache","lookup_collections","includes","queue","exports","Model","schema","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collection_main","collection_version","UserCollection","Collection","useVersions","versionSchema","deepCopy","type","blackbox","indexExists","dropIndex","createIndex","_id._id","_id.__v","versionCollection","simplschema","rbSchema","useRB","default","schemaCopy","buildRbLookups","buildRbSchema","interval","getMainServer","getMongoManager","clearInterval","aggregate","pipeline","options","allowLogs","Promise","resolve","reject","cached","from","elem","index","self","toArray","aggregateCount","aggregateCursor","aggregateStream","stream","countDocuments","create","f_docs","Array","isArray","insertMany","insertOne","fieldOrSpec","createIndexes","indexSpecs","deleteMany","bypassLogs","__awaiter","find","docs","sent","doc","Logs","objectIdHexString","id_document","payload","getBinarySize","method","id_user","user","messageId","route","versionDoc","__v","replaceOne","upsert","result","ok","deletedCount","deleteOne","findOne","distinct","key","drop","indexName","dropIndexes","findById","findCount","count","findCursor","findStream","streamOptions","findOneAndDelete","value","lastErrorObject","findOneAndReplace","replacement","bypassCheckSchema","validation","newContext","validate","date","Date","validationErrors","getMethodManager","callMethodInternal","findOneAndUpdate","update","modifier","updatedAt","indexes","validationResults","validDocs","idx","hasOwnProperty","listIndexes","reIndex","rename","newName","$lte","nModified","prevDoc","docId","docVersion","updatedDoc","getMongoMergeUpdatedDoc","stats","updateMany","$set","updateOne","objectContainsPropertyDeep","$inc","$setOnInsert","createdAt","watchCollection","watch","watchCollectionWithAggregate","_super","__extends","authenticateStrategy","username","password","Users","authenticate","authUser","error","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","salt","pbkdf2","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","serializeUser","deserializeUser","setPassword","randomBytes","saltBuffer","toString","pbkdf2Promisified","hashRaw","services","rej","changePassword","oldPassword","newPassword","register","email","resetAttempts","ObjectId","toHexString","callback","saltlen","obj","prop","keys","Object","some"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ChangeStreamOptions, ClientSession, CollectionAggregationOptions, CollectionInsertManyOptions, CollectionInsertOneOptions, CommonOptions, FilterQuery, FindOneAndDeleteOption, FindOneAndReplaceOption, FindOneAndUpdateOption, FindOneOptions, IndexOptions, IndexSpecification, MongoCountPreferences, MongoDistinctPreferences, ReadPreferenceOrMode, ReplaceOneOptions, UpdateManyOptions, UpdateOneOptions, UpdateQuery, ObjectId } 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');\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}\n\nexport class MongoManager {\n\tprivate _collections: Collection<any>[] = [];\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _nodeCache;\n\tprivate _mongoQueueCacheId = 1;\n\n\tconstructor() {\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tthis.runQueue();\n\t}\n\n\tregisterCollection(collection: Collection<any>) {\n\t\tthis._collections.push(collection);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): Collection<any> | UserCollection<any> {\n\t\treturn this._collections.filter(a => a.collectionName === collectionName)[0];\n\t}\n\n\taddToQueue(mongoQueue: MongoQueueModel) {\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.name_collection === mongoQueue.name_collection && a.name_function === mongoQueue.name_function && a.name_function_addt === mongoQueue.name_function_addt && JSON.stringify(a.data_function) === JSON.stringify(mongoQueue.data_function) && JSON.stringify(a.data_function_addt) === JSON.stringify(mongoQueue.data_function_addt))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (!_mongoQueue.running) {\n\t\t\t\t_mongoQueue.cbs.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_mongoQueue.cbs_next.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t}\n\t}\n\n\tprivate async runQueue() {\n\t\tsetInterval(() => {\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running && a.cbs.length);\n\t\t\tif (queueArr.length) {\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tmongoQueue.running = true;\n\n\t\t\t\t\tif (mongoQueue.cacheId) {\n\t\t\t\t\t\tlet res = JSON.parse(this._nodeCache.get(mongoQueue.cacheId), dateReviver);\n\n\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\tcb(null, res, true);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!mongoQueue.name_function_addt) {\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function).then(res => {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\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\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\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\tqueueArr.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function)[mongoQueue.name_function_addt](...mongoQueue.data_function_addt).then(res => {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\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\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tqueueArr.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 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\t\t}, 10);\n\t}\n\n\tprivate addToCache(id, data) {\n\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\tif (nodeCacheSize > 100000000) {\n\t\t\tlet deleteCount = 0;\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => a.cacheId);\n\n\t\t\tfor (let zz = 0; zz < queueArr.length; zz++) {\n\t\t\t\tthis._nodeCache.del(queueArr[zz].cacheId);\n\t\t\t\tqueueArr[zz].cacheId = 0;\n\n\t\t\t\tdeleteCount += 1;\n\n\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t}\n\n\t\tthis._nodeCache.set(id, JSON.stringify(data));\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tthis._mongoQueue.filter(a => (a.name_collection === collection || a.lookup_collections.includes(collection)) && a.cacheId).forEach(queue => {\n\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\tqueue.cacheId = 0;\n\t\t});\n\t}\n}\n\nexport class Model<T> {\n\tcollection_main: Collection<T> | UserCollection<T> = null;\n\tcollection_version: Collection<T> | UserCollection<T> = null;\n\n\tconstructor(collectionName: string, schema: object, useVersionCollection = false, useReportBuilder = true, reportBuilderLookupTables: LookupTables[] = [], timestamps = true, createLogs = true, checkSchema = true) {\n\t\tif (collectionName === 'users') {\n\t\t\tthis.collection_main = new UserCollection<T>(collectionName, schema, useReportBuilder, reportBuilderLookupTables, timestamps, createLogs, checkSchema);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new Collection<T>(collectionName, schema, useReportBuilder, reportBuilderLookupTables, timestamps, createLogs, checkSchema);\n\t\t}\n\n\t\tif (useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(schema);\n\t\t\tversionSchema['_id'].type = 'Object';\n\t\t\tversionSchema['_id'].blackbox = true;\n\n\t\t\tif (collectionName === 'users') {\n\t\t\t\tthis.collection_version = new UserCollection<T>(collectionName + '.versions', versionSchema, false, [], true, false, false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new Collection<T>(collectionName + '.versions', versionSchema, false, [], true, false, false);\n\t\t\t}\n\n\t\t\tif (this.collection_version.indexExists('_id.__v_1__id._id_1')) {\n\t\t\t\tthis.collection_version.dropIndex('_id.__v_1__id._id_1');\n\t\t\t}\n\n\t\t\tif (!this.collection_version.indexExists('_id._id_1__id.__v_1')) {\n\t\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\t}\n\n\t\t\tthis.collection_main.versionCollection = collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport class Collection<T> {\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\t\n\tconstructor(collectionName: string, schema: object, useReportBuilder, reportBuilderLookupTables: LookupTables[], timestamps, createLogs, checkSchema) {\n\t\tthis.collectionName = collectionName;\n\t\tthis.simplschema = new SimpleSchema(schema);\n\t\tthis.timestamps = timestamps;\n\t\tthis.createLogs = createLogs;\n\t\tthis.checkSchema = checkSchema;\n\n\t\tif (useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(schema);\n\t\t\tlet rbSchema = buildRbLookups(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()) {\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\taggregate(pipeline: object[], options?: CollectionAggregationOptions, allowLogs = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.createLogs && allowLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t// \ttype: 'query',\n\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t// \tid_document: '',\n\t\t\t\t// \tpayload: JSON.stringify([pipeline, options], null, 2),\n\t\t\t\t// \tmethod: 'aggregate',\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\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'aggregate',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (this.createLogs && allowLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'aggregate',\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 (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options).toArray().then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\taggregateCount(pipeline: object[], options?: CollectionAggregationOptions) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\tname_collection: this.collectionName,\n\t\t\t\tname_function: 'aggregate',\n\t\t\t\tname_function_addt: 'count',\n\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\tdata_function_addt: [],\n\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tcbs_next: [],\n\t\t\t\trunning: false,\n\t\t\t\tcacheId: 0,\n\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t})\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: CollectionAggregationOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options);\n\t}\n\n\taggregateStream(pipeline: object[], options?: CollectionAggregationOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).aggregate(pipeline, options).stream();\n\t}\n\n\tcountDocuments(filter: FilterQuery<T> = {}, options?: MongoCountPreferences) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).countDocuments(filter, options);\n\t}\n\n\tcreate(f_docs: T | T[], options?: CollectionInsertManyOptions): Promise<T | T[]> {\n\t\tlet docs = [];\n\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, options);\n\t}\n\n\tcreateIndex(fieldOrSpec: any, options?: IndexOptions) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).createIndex(fieldOrSpec, options);\n\t}\n\n\tcreateIndexes(indexSpecs: IndexSpecification[], options?: { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).createIndexes(indexSpecs, options);\n\t}\n\n\tdeleteMany(filter: FilterQuery<T> = {}, options?: CommonOptions, bypassLogs = false) {\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id: { _id: doc['_id'], __v: doc['__v']}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).deleteMany(filter, options).then(res => {\n\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tdeleteOne(filter: FilterQuery<T> = {}, options?: CommonOptions & { bypassDocumentValidation?: boolean; }, bypassLogs = false) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\t\n\t\t\t\tif (doc) {\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: 'deleteOne',\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id: { _id: doc['_id'], __v: doc['__v']}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).deleteOne(filter, options).then(res => {\n\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: FilterQuery<T>, options?: MongoDistinctPreferences): Promise<T[]> {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).distinct(key, filter, options);\n\t}\n\n\tdrop(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).drop(options);\n\t}\n\n\tdropIndex(indexName: string, options?: CommonOptions & { maxTimeMS?: number; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).dropIndex(indexName, options);\n\t}\n\n\tdropIndexes(options?: { session?: ClientSession; maxTimeMS?: number; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).dropIndexes(options);\n\t}\n\n\tfind(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// type: 'query',\n\t\t\t\t\t// collection: this.collectionName,\n\t\t\t\t\t// id_document: '',\n\t\t\t\t\t// payload: JSON.stringify([filter, options], null, 2),\n\t\t\t\t\t// method: 'find',\n\t\t\t\t\t// id_user: '',\n\t\t\t\t\t// user: '',\n\t\t\t\t\t// messageId: 0,\n\t\t\t\t\t// route: ''\n\t\t\t\t// });\n\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'find',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'find',\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\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <any>options).toArray().then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOneOptions<T>): Promise<T> {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).findOne({_id: id}, <T>options);\n\t}\n\n\tfindCount(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false) {\n\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t// Logs.insertOne({\n\t\t\t// \t_id: objectIdHexString(),\n\t\t\t// \ttype: 'query',\n\t\t\t// \tcollection: this.collectionName,\n\t\t\t// \tid_document: '',\n\t\t\t// \tpayload: JSON.stringify([filter, options], null, 2),\n\t\t\t// \tmethod: 'findCount',\n\t\t\t// \tid_user: '',\n\t\t\t// \tuser: '',\n\t\t\t// \tmessageId: 0,\n\t\t\t// \troute: ''\n\t\t\t// });\n\t\t}\n\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options).count();\n\t}\n\n\tfindCursor(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options);\n\t}\n\n\tfindStream(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, streamOptions?: any) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).find(filter, <T>options).stream(streamOptions);\n\t}\n\n\tfindOne(filter: FilterQuery<T> = {}, options?: FindOneOptions<T>, bypassLogs = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t// Logs.insertOne({\n\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t// \ttype: 'query',\n\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t// \tid_document: '',\n\t\t\t\t// \tpayload: JSON.stringify([filter, options], null, 2),\n\t\t\t\t// \tmethod: 'findOne',\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\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'findOne',\n\t\t\t\t\tname_function_addt: '',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify(['Is Cached: ' + cached, err, res])) < 200000 ? JSON.stringify(['Is Cached: ' + cached, err, res], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t// \tmethod: 'findOne',\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}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).findOne(filter, <any>options).then(res => resolve(res), err => reject(err));\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: FilterQuery<T> = {}, options?: FindOneAndDeleteOption<T>, bypassLogs = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\t\n\t\t\t\tif (doc) {\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: 'findOneAndDelete',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndDelete(filter, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndDelete',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndDelete',\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\t\t});\n\t}\n\n\tfindOneAndReplace(filter: FilterQuery<T> = {}, replacement: T, options?: FindOneAndReplaceOption<T>, 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('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\t\t\tif (this.timestamps) {\n\t\t\t\treplacement['updatedAt'] = date;\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\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, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'findOneAndReplace',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndReplace(filter, <any>replacement, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndReplace',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndReplace',\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\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: FilterQuery<T> = {}, update: any, options?: FindOneAndUpdateOption<T>, 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('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\n\t\t\t\tif (!update['$set']) {\n\t\t\t\t\tupdate['$set'] = {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.createLogs && !bypassLogs) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'findOneAndUpdate',\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\tResolveIOServer.getMainDB().collection(this.collectionName).findOneAndUpdate(filter, update, options).then(res => {\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tresolve(res.value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.lastErrorObject);\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([res.value])) < 200000 ? JSON.stringify([res.value], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndUpdate',\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}, err => {\n\t\t\t\treject(err);\n\t\t\t\t\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t// Logs.insertOne({\n\t\t\t\t\t// \t_id: objectIdHexString(),\n\t\t\t\t\t// \ttype: 'queryResponse',\n\t\t\t\t\t// \tcollection: this.collectionName,\n\t\t\t\t\t// \tid_document: '',\n\t\t\t\t\t// \tpayload: getBinarySize(JSON.stringify([err])) < 200000 ? JSON.stringify([err], null, 2) : 'Too Big',\n\t\t\t\t\t// \tmethod: 'findOneAndUpdate',\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\t\t});\n\t}\n\n\tindexes(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).indexes(options);\n\t}\n\n\tindexExists(indexes: string | string[], options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).indexExists(indexes, options);\n\t}\n\n\tinsertMany(docs: T[], options?: CollectionInsertManyOptions, bypassLogs = false, bypassCheckSchema = 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('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\t\t\t\t\tdoc['createdAt'] = date;\n\t\t\t\t\tdoc['updatedAt'] = date;\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\tResolveIOServer.getMainDB().collection(this.collectionName).insertMany(validDocs, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\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.result.ok);\n\t\t\t\t\t}\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});\n\t}\n\n\tinsertOne(doc: T, options?: CollectionInsertOneOptions, 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('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\tdoc['createdAt'] = date;\n\t\t\t\tdoc['updatedAt'] = date;\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\tResolveIOServer.getMainDB().collection(this.collectionName).insertOne(doc, options).then(res => {\n\t\t\t\tif (res.result.ok) {\n\t\t\t\t\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.result.ok);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: { batchSize?: number; readPreference?: ReadPreferenceOrMode; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).listIndexes(options);\n\t}\n\n\treIndex(options?: { session: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).reIndex(options);\n\t}\n\n\trename(newName: string, options?: { dropTarget?: boolean; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).rename(newName, options);\n\t}\n\n\treplaceOne(filter: FilterQuery<T>, replacement: T, options?: ReplaceOneOptions, 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('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\tif (this.timestamps) {\n\t\t\t\treplacement['updatedAt'] = date;\n\t\t\t}\n\n\t\t\tif (!doc) {\n\t\t\t\tdoc = await this.findOne(filter, null, true);\n\t\t\t}\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.timestamps && !replacement['createdAt'] && doc['createdAt']) {\n\t\t\t\t\treplacement['createdAt'] = doc['createdAt'];\n\t\t\t\t}\n\n\t\t\t\tif (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, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'replaceOne',\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\n\t\t\t\tif (this.useVersions) {\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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({\n\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t_id: doc['_id'],\n\t\t\t\t\t\t\t\t\t__v: {$lte: doc['__v'] - 4}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\t\tresolve(res.result.nModified);\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.result.ok);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 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: {\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\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\t\t\tresolve(res.result.nModified);\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.result.ok);\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\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 {\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 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\telse if (options && options.upsert) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\treplacement['createdAt'] = date;\n\t\t\t\t}\n\n\t\t\t\tif (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: replacement['_id'],\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([filter, replacement, options])) < 200000 ? JSON.stringify([filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'replaceOne',\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\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\treplacement['__v'] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).replaceOne(filter, replacement, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t}\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\treject('No Document');\n\t\t\t}\n\t\t});\n\t}\n\n\tstats(options?: { scale: number; session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).stats(options);\n\t}\n\n\tupdateMany(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateManyOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\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\t(<any>update.$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('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\t\t\t\n\t\t\tif (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\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateMany',\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\tResolveIOServer.getMainDB().collection(this.collectionName).updateMany(filter, update, options).then(res => {\n\t\t\t\tif (res.result.ok) {\n\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.result.ok);\n\t\t\t\t}\n\t\t\t}, err => reject(err));\n\t\t});\n\t}\n\n\tupdateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOneOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\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\t(<any>update.$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();\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('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\t\t\t\t\n\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\tif (doc) {\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\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, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateOne',\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\t\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc['_id'] = {_id: doc['_id'], __v: doc['__v']};\n\n\t\t\t\t\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_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\tawait ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({\n\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t_id: doc['_id'],\n\t\t\t\t\t\t\t\t__v: {$lte: doc['__v'] - 4}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = <any>{__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\t(<any>update.$inc).__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => reject(err));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => reject(err));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options && options.upsert && update.$setOnInsert && update.$setOnInsert._id) {\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tif (!update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t(<any>update.$setOnInsert).createdAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\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: update.$setOnInsert._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([filter, update, options])) < 200000 ? JSON.stringify([filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'updateOne',\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\t\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t(<any>update.$setOnInsert).__v = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName).updateOne(filter, update, options).then(res => {\n\t\t\t\t\tif (res.result.ok) {\n\t\t\t\t\t\tresolve(res.result.nModified);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.result.ok);\n\t\t\t\t\t}\n\t\t\t\t}, err => reject(err));\n\t\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\treject('No Document');\n\t\t\t}\n\t\t});\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions & { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).watch(pipeline, options);\n\t}\n\n\twatchCollectionWithAggregate(pipeline = [], options?: ChangeStreamOptions & { session?: ClientSession; }) {\n\t\treturn ResolveIOServer.getMainDB().collection(this.collectionName).watch(pipeline, options);\n\t}\n}\n\nexport class UserCollection<T> extends Collection<T> {\n\tauthenticateStrategy() {\n\t\treturn async (username, password, cb) => {\n\t\t\tlet user = await Users.findOne({username: username});\n\t\t\tthis.authenticate(user, password).then(authUser => {\n\t\t\t\tif (authUser.data) {\n\t\t\t\t\tcb(null, user, null);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcb(null, null, authUser.error);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tcb(err, null, null);\n\t\t\t})\n\t\t};\n\t}\n\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: {}}}).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}"]}
|