@resolveio/server-lib 20.7.120 → 20.7.122

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.
Files changed (216) hide show
  1. package/client-server-app.js +51 -1
  2. package/client-server-app.js.map +1 -1
  3. package/collections/app-status.collection.js +51 -1
  4. package/collections/app-status.collection.js.map +1 -1
  5. package/collections/counter.collection.js +55 -1
  6. package/collections/counter.collection.js.map +1 -1
  7. package/collections/cron-job-history.collection.js +136 -1
  8. package/collections/cron-job-history.collection.js.map +1 -1
  9. package/collections/cron-job.collection.js +87 -1
  10. package/collections/cron-job.collection.js.map +1 -1
  11. package/collections/email-history.collection.js +98 -1
  12. package/collections/email-history.collection.js.map +1 -1
  13. package/collections/email-verified.collection.js +60 -1
  14. package/collections/email-verified.collection.js.map +1 -1
  15. package/collections/file.collection.js +73 -1
  16. package/collections/file.collection.js.map +1 -1
  17. package/collections/flag-update.collection.js +56 -1
  18. package/collections/flag-update.collection.js.map +1 -1
  19. package/collections/flag.collection.js +56 -1
  20. package/collections/flag.collection.js.map +1 -1
  21. package/collections/log-method-latency.collection.js +72 -1
  22. package/collections/log-method-latency.collection.js.map +1 -1
  23. package/collections/log-subscription.collection.js +75 -1
  24. package/collections/log-subscription.collection.js.map +1 -1
  25. package/collections/log.collection.js +87 -1
  26. package/collections/log.collection.js.map +1 -1
  27. package/collections/logged-in-users.collection.js +66 -1
  28. package/collections/logged-in-users.collection.js.map +1 -1
  29. package/collections/monitor-cpu.collection.js +64 -1
  30. package/collections/monitor-cpu.collection.js.map +1 -1
  31. package/collections/monitor-function.collection.js +73 -1
  32. package/collections/monitor-function.collection.js.map +1 -1
  33. package/collections/monitor-memory.collection.js +76 -1
  34. package/collections/monitor-memory.collection.js.map +1 -1
  35. package/collections/monitor-mongo.collection.js +70 -1
  36. package/collections/monitor-mongo.collection.js.map +1 -1
  37. package/collections/notification.collection.js +56 -1
  38. package/collections/notification.collection.js.map +1 -1
  39. package/collections/report-builder-dashboard-builder.collection.js +108 -1
  40. package/collections/report-builder-dashboard-builder.collection.js.map +1 -1
  41. package/collections/report-builder-library.collection.js +86 -1
  42. package/collections/report-builder-library.collection.js.map +1 -1
  43. package/collections/report-builder-report.collection.js +148 -1
  44. package/collections/report-builder-report.collection.js.map +1 -1
  45. package/collections/user-group.collection.js +88 -1
  46. package/collections/user-group.collection.js.map +1 -1
  47. package/collections/user-guide.collection.js +56 -1
  48. package/collections/user-guide.collection.js.map +1 -1
  49. package/collections/user.collection.js +265 -1
  50. package/collections/user.collection.js.map +1 -1
  51. package/cron/cron.js +97 -1
  52. package/cron/cron.js.map +1 -1
  53. package/fixtures/cron-jobs.js +95 -1
  54. package/fixtures/cron-jobs.js.map +1 -1
  55. package/fixtures/init.js +78 -1
  56. package/fixtures/init.js.map +1 -1
  57. package/http/auth.js +869 -1
  58. package/http/auth.js.map +1 -1
  59. package/http/health.js +11 -1
  60. package/http/health.js.map +1 -1
  61. package/http/home.js +114 -1
  62. package/http/home.js.map +1 -1
  63. package/index.js +18 -1
  64. package/index.js.map +1 -1
  65. package/managers/cron.manager.js +461 -1
  66. package/managers/cron.manager.js.map +1 -1
  67. package/managers/local-log.manager.js +79 -1
  68. package/managers/local-log.manager.js.map +1 -1
  69. package/managers/method.manager.js +1025 -1
  70. package/managers/method.manager.js.map +1 -1
  71. package/managers/mongo.manager.js +4231 -1
  72. package/managers/mongo.manager.js.map +1 -1
  73. package/managers/monitor.manager.js +534 -1
  74. package/managers/monitor.manager.js.map +1 -1
  75. package/managers/subscription.manager.js +1292 -1
  76. package/managers/subscription.manager.js.map +1 -1
  77. package/managers/websocket.manager.js +165 -1
  78. package/managers/websocket.manager.js.map +1 -1
  79. package/managers/worker-dispatcher.manager.js +335 -1
  80. package/managers/worker-dispatcher.manager.js.map +1 -1
  81. package/managers/worker-server.manager.js +292 -1
  82. package/managers/worker-server.manager.js.map +1 -1
  83. package/methods/accounts.js +302 -1
  84. package/methods/accounts.js.map +1 -1
  85. package/methods/aws.js +748 -1
  86. package/methods/aws.js.map +1 -1
  87. package/methods/collections.js +542 -1
  88. package/methods/collections.js.map +1 -1
  89. package/methods/counters.js +111 -1
  90. package/methods/counters.js.map +1 -1
  91. package/methods/cron-jobs.js +1476 -1
  92. package/methods/cron-jobs.js.map +1 -1
  93. package/methods/flag-updates.js +8 -1
  94. package/methods/flag-updates.js.map +1 -1
  95. package/methods/flags.js +8 -1
  96. package/methods/flags.js.map +1 -1
  97. package/methods/logs.js +417 -1
  98. package/methods/logs.js.map +1 -1
  99. package/methods/monitor.js +543 -1
  100. package/methods/monitor.js.map +1 -1
  101. package/methods/pdf.js +742 -1
  102. package/methods/pdf.js.map +1 -1
  103. package/methods/report-builder.js +840 -1
  104. package/methods/report-builder.js.map +1 -1
  105. package/methods/support.js +232 -1
  106. package/methods/support.js.map +1 -1
  107. package/models/app-status.model.js +3 -1
  108. package/models/app-status.model.js.map +1 -1
  109. package/models/billing-logged-in-users.model.js +3 -1
  110. package/models/billing-logged-in-users.model.js.map +1 -1
  111. package/models/collection-document.model.js +3 -1
  112. package/models/collection-document.model.js.map +1 -1
  113. package/models/counter.model.js +3 -1
  114. package/models/counter.model.js.map +1 -1
  115. package/models/cron-job-history.model.js +3 -1
  116. package/models/cron-job-history.model.js.map +1 -1
  117. package/models/cron-job.model.js +3 -1
  118. package/models/cron-job.model.js.map +1 -1
  119. package/models/dialog.model.js +3 -1
  120. package/models/dialog.model.js.map +1 -1
  121. package/models/email-history.model.js +15 -1
  122. package/models/email-history.model.js.map +1 -1
  123. package/models/email-verified.model.js +3 -1
  124. package/models/email-verified.model.js.map +1 -1
  125. package/models/file.model.js +3 -1
  126. package/models/file.model.js.map +1 -1
  127. package/models/flag-update.model.js +3 -1
  128. package/models/flag-update.model.js.map +1 -1
  129. package/models/flag.model.js +3 -1
  130. package/models/flag.model.js.map +1 -1
  131. package/models/log-method-latency.model.js +3 -1
  132. package/models/log-method-latency.model.js.map +1 -1
  133. package/models/log-subscription.model.js +3 -1
  134. package/models/log-subscription.model.js.map +1 -1
  135. package/models/log.model.js +3 -1
  136. package/models/log.model.js.map +1 -1
  137. package/models/logged-in-users.model.js +3 -1
  138. package/models/logged-in-users.model.js.map +1 -1
  139. package/models/method-response.model.js +3 -1
  140. package/models/method-response.model.js.map +1 -1
  141. package/models/method.model.d.ts +0 -1
  142. package/models/method.model.js +3 -1
  143. package/models/method.model.js.map +1 -1
  144. package/models/monitor-cpu.model.js +3 -1
  145. package/models/monitor-cpu.model.js.map +1 -1
  146. package/models/monitor-function.model.js +3 -1
  147. package/models/monitor-function.model.js.map +1 -1
  148. package/models/monitor-memory.model.js +3 -1
  149. package/models/monitor-memory.model.js.map +1 -1
  150. package/models/monitor-mongo.model.js +3 -1
  151. package/models/monitor-mongo.model.js.map +1 -1
  152. package/models/notification.model.js +3 -1
  153. package/models/notification.model.js.map +1 -1
  154. package/models/pagination.model.js +23 -1
  155. package/models/pagination.model.js.map +1 -1
  156. package/models/permission.model.js +3 -1
  157. package/models/permission.model.js.map +1 -1
  158. package/models/report-builder-dashboard-builder.model.js +3 -1
  159. package/models/report-builder-dashboard-builder.model.js.map +1 -1
  160. package/models/report-builder-library.model.js +3 -1
  161. package/models/report-builder-library.model.js.map +1 -1
  162. package/models/report-builder-report.model.js +3 -1
  163. package/models/report-builder-report.model.js.map +1 -1
  164. package/models/report-builder.model.js +3 -1
  165. package/models/report-builder.model.js.map +1 -1
  166. package/models/select-data-label.model.js +3 -1
  167. package/models/select-data-label.model.js.map +1 -1
  168. package/models/server-message.model.js +3 -1
  169. package/models/server-message.model.js.map +1 -1
  170. package/models/subscription.model.js +3 -1
  171. package/models/subscription.model.js.map +1 -1
  172. package/models/support-ticket.model.js +3 -1
  173. package/models/support-ticket.model.js.map +1 -1
  174. package/models/user-group.model.js +3 -1
  175. package/models/user-group.model.js.map +1 -1
  176. package/models/user-guide.model.js +3 -1
  177. package/models/user-guide.model.js.map +1 -1
  178. package/models/user.model.js +3 -1
  179. package/models/user.model.js.map +1 -1
  180. package/package.json +1 -1
  181. package/public_api.js +77 -1
  182. package/public_api.js.map +1 -1
  183. package/publications/app-status.js +16 -1
  184. package/publications/app-status.js.map +1 -1
  185. package/publications/cron-jobs.js +32 -1
  186. package/publications/cron-jobs.js.map +1 -1
  187. package/publications/files.js +36 -1
  188. package/publications/files.js.map +1 -1
  189. package/publications/flags-update.js +22 -1
  190. package/publications/flags-update.js.map +1 -1
  191. package/publications/flags.js +22 -1
  192. package/publications/flags.js.map +1 -1
  193. package/publications/logs.js +164 -1
  194. package/publications/logs.js.map +1 -1
  195. package/publications/notifications.js +16 -1
  196. package/publications/notifications.js.map +1 -1
  197. package/publications/report-builder-dashboard-builders.js +42 -1
  198. package/publications/report-builder-dashboard-builders.js.map +1 -1
  199. package/publications/report-builder-libraries.js +90 -1
  200. package/publications/report-builder-libraries.js.map +1 -1
  201. package/publications/report-builder-reports.js +50 -1
  202. package/publications/report-builder-reports.js.map +1 -1
  203. package/publications/super-admin.js +16 -1
  204. package/publications/super-admin.js.map +1 -1
  205. package/publications/user-groups.js +16 -1
  206. package/publications/user-groups.js.map +1 -1
  207. package/publications/user-guides.js +16 -1
  208. package/publications/user-guides.js.map +1 -1
  209. package/resolveio-server-app.js +176 -1
  210. package/resolveio-server-app.js.map +1 -1
  211. package/server-app.js +1159 -1
  212. package/server-app.js.map +1 -1
  213. package/util/common.js +632 -1
  214. package/util/common.js.map +1 -1
  215. package/util/schema-report-builder.js +454 -1
  216. package/util/schema-report-builder.js.map +1 -1
@@ -1,2 +1,4232 @@
1
- "use strict";var __extends=this&&this.__extends||function(){var t=function(e,o){return(t=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,o){e.__proto__=o}:function(e,o){for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e[t]=o[t])}))(e,o)};return function(e,o){if("function"!=typeof o&&null!==o)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");function __(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(__.prototype=o.prototype,new __)}}(),__assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var o,t=1,r=arguments.length;t<r;t++)for(var n in o=arguments[t])Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n]);return e}).apply(this,arguments)},__awaiter=this&&this.__awaiter||function(e,r,n,s){return new(n=n||Promise)(function(t,o){function fulfilled(e){try{step(s.next(e))}catch(e){o(e)}}function rejected(e){try{step(s.throw(e))}catch(e){o(e)}}function step(e){var o;e.done?t(e.value):((o=e.value)instanceof n?o:new n(function(e){e(o)})).then(fulfilled,rejected)}step((s=s.apply(e,r||[])).next())})},__generator=this&&this.__generator||function(r,n){var s,i,a,c={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function verb(t){return function(e){var o=[t,e];if(s)throw new TypeError("Generator is already executing.");for(;c=l&&o[l=0]?0:c;)try{if(s=1,i&&(a=2&o[0]?i.return:o[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,o[1])).done)return a;switch(i=0,(o=a?[2&o[0],a.value]:o)[0]){case 0:case 1:a=o;break;case 4:return c.label++,{value:o[1],done:!1};case 5:c.label++,i=o[1],o=[0];continue;case 7:o=c.ops.pop(),c.trys.pop();continue;default:if(!(a=0<(a=c.trys).length&&a[a.length-1])&&(6===o[0]||2===o[0])){c=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3]))c.label=o[1];else if(6===o[0]&&c.label<a[1])c.label=a[1],a=o;else{if(!(a&&c.label<a[2])){a[2]&&c.ops.pop(),c.trys.pop();continue}c.label=a[2],c.ops.push(o)}}o=n.call(r,c)}catch(e){o=[6,e],i=0}finally{s=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}}},__rest=this&&this.__rest||function(e,o){var t={};for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&o.indexOf(n)<0&&(t[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,n=Object.getOwnPropertySymbols(e);r<n.length;r++)o.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(t[n[r]]=e[n[r]]);return t},__read=this&&this.__read||function(e,o){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,n,s=t.call(e),i=[];try{for(;(void 0===o||0<o--)&&!(r=s.next()).done;)i.push(r.value)}catch(e){n={error:e}}finally{try{r&&!r.done&&(t=s.return)&&t.call(s)}finally{if(n)throw n.error}}return i},__spreadArray=this&&this.__spreadArray||function(e,o,t){if(t||2===arguments.length)for(var r,n=0,s=o.length;n<s;n++)!r&&n in o||((r=r||Array.prototype.slice.call(o,0,n))[n]=o[n]);return e.concat(r||Array.prototype.slice.call(o))},__values=this&&this.__values||function(e){var o="function"==typeof Symbol&&Symbol.iterator,t=o&&e[o],r=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&r>=e.length?void 0:e)&&e[r++],done:!e}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},NodeCache=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.MongoManagerUserCollection=exports.MongoManagerCollection=exports.MongoManagerModel=exports.MongoManager=void 0,require("node-cache")),os_1=require("os"),simpl_schema_1=require("simpl-schema"),user_collection_1=require("../collections/user.collection"),resolveio_server_app_1=require("../resolveio-server-app"),common_1=require("../util/common"),monitor_manager_1=require("./monitor.manager"),crypto=require("crypto"),scmp=require("scmp"),numCPUs=(0,os_1.cpus)().length,v8=require("v8"),AsyncLocalStorage=require("async_hooks").AsyncLocalStorage,asyncLocalStorage=new AsyncLocalStorage,MongoManager=function(){function MongoManager(){this._collections=[],this._cacheMap=[],this._operationInProgress=new Map,this._heapSize=v8.getHeapStatistics()/numCPUs,this._serverCollections=[],this._isWorkersEnabled=!1,this._isWorkerInstance=!1}return MongoManager.create=function(){return __awaiter(this,void 0,void 0,function(){var o;return __generator(this,function(e){switch(e.label){case 0:return[4,(o=new MongoManager).initialize()];case 1:return e.sent(),[2,o]}})})},MongoManager.prototype.initialize=function(){return __awaiter(this,void 0,void 0,function(){var o;return __generator(this,function(e){switch(e.label){case 0:return this._nodeCache=new NodeCache({stdTTL:0,checkperiod:0}),this._isWorkersEnabled="true"===process.env.IS_WORKERS_ENABLED,this._isWorkerInstance="true"===process.env.IS_WORKER_INSTANCE,this.setCacheLimit(),this._isWorkersEnabled&&this._isWorkerInstance&&this.setupChangeStream(),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().listCollections().toArray()];case 1:return o=e.sent(),this._serverCollections=o,[2]}})})},MongoManager.prototype.oneTimeTransaction=function(s){var e=this;return asyncLocalStorage.run({},function(){return __awaiter(e,void 0,void 0,function(){var o,t,r,n=this;return __generator(this,function(e){switch(e.label){case 0:o=resolveio_server_app_1.ResolveIOServer.getMongoConnection().startSession(),asyncLocalStorage.getStore().session=o,e.label=1;case 1:return e.trys.push([1,,3,5]),[4,o.withTransaction(function(){return __awaiter(n,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,s()];case 1:return[2,t=e.sent()]}})})})];case 2:return e.sent(),[2,t];case 3:return[4,o.endSession()];case 4:return e.sent(),(r=asyncLocalStorage.getStore())&&delete r.session,[7];case 5:return[2]}})})})},MongoManager.prototype.getSession=function(){var e=asyncLocalStorage.getStore();return e?e.session:null},MongoManager.prototype.setCacheLimit=function(){this._isWorkersEnabled?this._heapLimit=this._isWorkerInstance?.8*this._heapSize:.4*this._heapSize:this._heapLimit=.3*this._heapSize},MongoManager.prototype.getServerCollections=function(){return this._serverCollections},MongoManager.prototype.registerCollection=function(o){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return o.collectionOptions&&o.collectionOptions.timeseries&&o.collectionOptions.timeseries.timeField&&this._serverCollections.some(function(e){return e.name===o.collectionName&&"collection"===e.type})?[4,resolveio_server_app_1.ResolveIOServer.getMainDB().dropCollection(o.collectionName)]:[3,3];case 1:return e.sent(),[4,this.createCollection(o)];case 2:e.sent(),e.label=3;case 3:return this._collections.push(o),[2]}})})},MongoManager.prototype.createCollection=function(o){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().createCollection(o.collectionName,o.collectionOptions)];case 1:return e.sent(),[2]}})})},MongoManager.prototype.collections=function(){return this._collections},MongoManager.prototype.collection=function(o){return this._collections.find(function(e){return e.collectionName===o})},MongoManager.prototype.delay=function(o){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){return[2,new Promise(function(e){return setTimeout(e,o)})]})})},MongoManager.prototype.find=function(s,i,a){return void 0===i&&(i={}),__awaiter(this,void 0,void 0,function(){var o,t,r,n=this;return __generator(this,function(e){switch(e.label){case 0:return((t=a||{}).session,t=__rest(t,["session"]),o=this.generateCacheKey([s],"find",[i,t]),void 0!==(t=this.getFromCache(o)))?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Find - Cache",s),[2,t]):this._operationInProgress.has(o)?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Find - Already running",s),[2,this._operationInProgress.get(o).promise]):(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Find - Running",s),r=this.executeFind(s,i,a,o),this._operationInProgress.set(o,{promise:r,invalidatedDuringExecution:!1,collections:[s]}),[4,r.finally(function(){resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Find - Done",s),n._operationInProgress.delete(o)})]);case 1:return e.sent(),[2,r]}})})},MongoManager.prototype.executeFind=function(i,a,c,l){return __awaiter(this,void 0,void 0,function(){var o,t,r,n,s;return __generator(this,function(e){switch(e.label){case 0:t=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(i),(r=c||{}).session,r=__rest(r,["session"]),n=monitor_manager_1.MonitorMongo.create("find",i,JSON.stringify([a,r])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,t.find(a,c).toArray()];case 2:return o=e.sent(),[3,6];case 3:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Execute Find",i,a,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Execute Find: ".concat(i," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 4:return[4,n.finish()];case 5:return e.sent(),[7];case 6:return this._operationInProgress.get(l).invalidatedDuringExecution||this.addToCache([i],l,o),[2,o]}})})},MongoManager.prototype.findOne=function(s,i,a){return void 0===i&&(i={}),__awaiter(this,void 0,void 0,function(){var o,t,r,n=this;return __generator(this,function(e){switch(e.label){case 0:return((t=a||{}).session,t=__rest(t,["session"]),o=this.generateCacheKey([s],"findOne",[i,t]),void 0!==(t=this.getFromCache(o)))?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo FindOne - Cache",s),[2,t]):this._operationInProgress.has(o)?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo FindOne - Already running",s),[2,this._operationInProgress.get(o).promise]):(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo FindOne - Running",s),r=this.executeFindOne(s,i,a,o),this._operationInProgress.set(o,{promise:r,invalidatedDuringExecution:!1,collections:[s]}),[4,r.finally(function(){resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo FindOne - Done",s),n._operationInProgress.delete(o)})]);case 1:return e.sent(),[2,r]}})})},MongoManager.prototype.executeFindOne=function(i,a,c,l){return __awaiter(this,void 0,void 0,function(){var o,t,r,n,s;return __generator(this,function(e){switch(e.label){case 0:t=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(i),(r=c||{}).session,r=__rest(r,["session"]),n=monitor_manager_1.MonitorMongo.create("findOne",i,JSON.stringify([a,r])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,t.findOne(a,c)];case 2:return o=e.sent(),[3,6];case 3:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Execute Find One",i,a,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Execute Find One: ".concat(i," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 4:return[4,n.finish()];case 5:return e.sent(),[7];case 6:return this._operationInProgress.get(l).invalidatedDuringExecution||this.addToCache([i],l,o),[2,o]}})})},MongoManager.prototype.aggregate=function(i,a,c){return __awaiter(this,void 0,void 0,function(){var o,t,r,n,s=this;return __generator(this,function(e){switch(e.label){case 0:return(o=__spreadArray([i],__read(a.flatMap(function(e){var o;return null!=(o=e.$lookup)&&o.from?[e.$lookup.from]:[]})),!1),(r=c||{}).session,r=__rest(r,["session"]),t=this.generateCacheKey(o,"aggregate",[a,r]),void 0!==(r=this.getFromCache(t)))?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Agg - Cache",o),[2,r]):this._operationInProgress.has(t)?(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Agg - Already running",o),[2,this._operationInProgress.get(t).promise]):(resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Agg - Running",o),n=this.executeAggregate(i,a,c,t,o),this._operationInProgress.set(t,{promise:n,invalidatedDuringExecution:!1,collections:o}),[4,n.finally(function(){resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Agg - Done",o),s._operationInProgress.delete(t)})]);case 1:return e.sent(),[2,n]}})})},MongoManager.prototype.executeAggregate=function(i,a,c,l,g){return __awaiter(this,void 0,void 0,function(){var o,t,r,n,s;return __generator(this,function(e){switch(e.label){case 0:t=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(i),(r=c||{}).session,r=__rest(r,["session"]),n=monitor_manager_1.MonitorMongo.create("aggregate",i,JSON.stringify([a,r])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,t.aggregate(a,c).toArray()];case 2:return o=e.sent(),[3,6];case 3:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Execute Aggregate",i,a,g,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Execute Aggregate: ".concat(i," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 4:return[4,n.finish()];case 5:return e.sent(),[7];case 6:return this._operationInProgress.get(l).invalidatedDuringExecution||this.addToCache(g,l,o),[2,o]}})})},MongoManager.prototype.countDocuments=function(s,i,a){return void 0===i&&(i={}),__awaiter(this,void 0,void 0,function(){var o,t,r,n=this;return __generator(this,function(e){switch(e.label){case 0:return((t=a||{}).session,t=__rest(t,["session"]),o=this.generateCacheKey([s],"countDocuments",[i,t]),void 0!==(t=this.getFromCache(o)))?[2,t]:this._operationInProgress.has(o)?[2,this._operationInProgress.get(o).promise]:(r=this.executeCountDocuments(s,i,a,o),this._operationInProgress.set(o,{promise:r,invalidatedDuringExecution:!1,collections:[s]}),[4,r.finally(function(){return n._operationInProgress.delete(o)})]);case 1:return e.sent(),[2,r]}})})},MongoManager.prototype.executeCountDocuments=function(i,a,c,l){return __awaiter(this,void 0,void 0,function(){var o,t,r,n,s;return __generator(this,function(e){switch(e.label){case 0:t=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(i),(r=c||{}).session,r=__rest(r,["session"]),n=monitor_manager_1.MonitorMongo.create("countDocuments",i,JSON.stringify([a,r])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,t.countDocuments(a,c)];case 2:return o=e.sent(),[3,6];case 3:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Execute Count Documents",i,a,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Execute Count Documents: ".concat(i," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 4:return[4,n.finish()];case 5:return e.sent(),[7];case 6:return this._operationInProgress.get(l).invalidatedDuringExecution||this.addToCache([i],l,o),[2,o]}})})},MongoManager.prototype.generateCacheKey=function(e,o,t){e=JSON.stringify({collections:e,functionName:o,args:t});return crypto.createHash("sha256").update(e).digest("hex")},MongoManager.prototype.getFromCache=function(o){try{var e=this._nodeCache.get(o);if(e)return JSON.parse(e,common_1.dateReviver)}catch(e){this._nodeCache.del(o)}},MongoManager.prototype.addToCache=function(e,o,t){var r,n;if((0,common_1.getBinarySize)(JSON.stringify(t))<1e6&&!e.includes("logs")&&!e.find(function(e){return e.endsWith(".versions")})&&!e.find(function(e){return e.startsWith("monitor-")})){var s=this._nodeCache.getStats().vsize;if(s>this._heapLimit){var i=0,a=this._nodeCache.keys();try{for(var c=__values(a),l=c.next();!l.done;l=c.next()){var g=l.value;if(this._nodeCache.del(g),i+=1,(s=this._nodeCache.getStats().vsize)<.75*this._heapLimit)break}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}console.log("Query Cache: Too Big, - Deleted: "+i+" - "+s)}this._nodeCache.set(o,JSON.stringify(t)),this._cacheMap.push({collections:e,key:o})}},MongoManager.prototype.invalidateQueryCache=function(o){var t,e,r,n,s=this._cacheMap.filter(function(e){return e.collections.includes(o)});resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager()&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Invalidate Cache",o);try{for(var i=__values(s),a=i.next();!a.done;a=i.next()){var c=a.value;this._nodeCache.del(c.key),this._operationInProgress.has(c.key)&&(this._operationInProgress.get(c.key).invalidatedDuringExecution=!0,resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager())&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Invalidated During Execution",c.collections)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}try{for(var l=__values(this._operationInProgress.entries()),g=l.next();!g.done;g=l.next()){var _=__read(g.value,2),d=(_[0],_[1]);d.collections.includes(o)&&(d.invalidatedDuringExecution=!0,resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager())&&resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()&&console.log(new Date,"Mongo Invalidated During Execution (No cache)",d.collections)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}this._cacheMap=this._cacheMap.filter(function(e){return!e.collections.includes(o)})},MongoManager.prototype.setupChangeStream=function(){var o=this,t=resolveio_server_app_1.ResolveIOServer.getMainDB().watch([{$match:{$and:[{"ns.coll":{$nin:["log-method-latencies","log-subscriptions","logs","counters","cron-job-histories","email-histories","qb-soap-request-histories","qb-soap-request-responses","qb-soap-requests","qb-soap-retries"]}},{"ns.coll":{$not:/.*\.versions$/}},{"ns.coll":{$not:/^monitor-/}}]}}],{fullDocument:"updateLookup"});t.on("change",function(e){e.ns&&e.ns.coll&&(e=e.ns.coll,o.collection(e))&&o.invalidateQueryCache(e)}),t.on("error",function(){return __awaiter(o,void 0,void 0,function(){var o=this;return __generator(this,function(e){switch(e.label){case 0:return console.log(new Date,"Mongo change stream error. Restart..."),[4,t.close()];case 1:return e.sent(),setTimeout(function(){return o.setupChangeStream()},5e3),[2]}})})}),t.on("close",function(){console.log(new Date,"Mongo change stream closed. Restarting..."),setTimeout(function(){return o.setupChangeStream()},5e3)})},MongoManager}(),MongoManagerModel=(exports.MongoManager=MongoManager,function(){function MongoManagerModel(){this.collection_main=null,this.collection_version=null}return MongoManagerModel.create=function(e){var o=new MongoManagerModel;return o.initialize(e),o},MongoManagerModel.prototype.initialize=function(e){var o,t=this;"users"===e.collectionName?this.collection_main=MongoManagerUserCollection.create(e):this.collection_main=MongoManagerCollection.create(e),e.useVersionCollection&&(this.collection_main.useVersions=!0,(o=(0,common_1.deepCopy)(e.schema))._id.type="Object",o._id.blackbox=!0,o={collectionName:e.collectionName+".versions",schema:o,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!1,collectionOptions:null,skipCache:!0},"users"===e.collectionName?this.collection_version=MongoManagerUserCollection.create(o):this.collection_version=MongoManagerCollection.create(o),setImmediate(function(){return __awaiter(t,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,this.collection_version.createIndex({"_id._id":1,"_id.__v":1})];case 1:return e.sent(),[2]}})})}),this.collection_main.versionCollection=e.collectionName+".versions")},MongoManagerModel}()),MongoManagerCollection=(exports.MongoManagerModel=MongoManagerModel,function(){function MongoManagerCollection(){this.collectionName="",this.checkSchema=!1,this.simplschema=null,this.rbSchema=null,this.timestamps=!1,this.useVersions=!1,this.versionCollection="",this.createLogs=!0,this.useRB=!1,this.skipCache=!1,this.bypassSession=!1}return MongoManagerCollection.create=function(e){var o=new MongoManagerCollection;return o.initialize(e),o},MongoManagerCollection.prototype.initialize=function(e){var o,t=this,r=(this.collectionName=e.collectionName,this.simplschema=new simpl_schema_1.default(e.schema),this.timestamps=e.timestamps,this.createLogs=e.createLogs,this.checkSchema=e.checkSchema,this.collectionOptions=e.collectionOptions,this.skipCache=e.skipCache||!1,this.bypassSession=e.bypassSession||!1,e.useReportBuilder&&(this.useRB=!0,o=(0,common_1.deepCopy)(e.schema),e=(0,common_1.buildRbLookups)(e.reportBuilderLookupTables,o,[]),this.rbSchema=(0,common_1.buildRbSchema)(e)),setInterval(function(){return __awaiter(t,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainServer()&&resolveio_server_app_1.ResolveIOServer.getMongoManager()&&resolveio_server_app_1.ResolveIOServer.getMongoManager().getServerCollections().length?[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().registerCollection(this)]:[3,2];case 1:e.sent(),clearInterval(r),e.label=2;case 2:return[2]}})})},1))},MongoManagerCollection.prototype.extractIndexNameFromError=function(e){var o=e.match(/Index already exists with a different name: (\S+)/);return(o=!o||o.length<=1?e.match(/existing index:.*name: "([^"]+)"/):o)&&1<o.length?o[1]:null},MongoManagerCollection.prototype.aggregate=function(s,i,a,c){return void 0===a&&(a=!1),void 0===c&&(c=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n;return __generator(this,function(e){switch(e.label){case 0:return!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||c||this.bypassSession||i&&(i.readPreference&&"primary"!==i.readPreference||i.session)||(i?i.session=o:i={session:o}),a||this.skipCache?[3,1]:[2,resolveio_server_app_1.ResolveIOServer.getMongoManager().aggregate(this.collectionName,s,i)];case 1:(o=i||{}).session,t=__rest(o,["session"]),r=monitor_manager_1.MonitorMongo.create("aggregate",this.collectionName,JSON.stringify([s,t])),e.label=2;case 2:return e.trys.push([2,4,5,7]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).aggregate(s,i).toArray()];case 3:return[2,e.sent()];case 4:throw n=e.sent(),console.log(JSON.stringify([new Date,"Error Aggregate",this.collectionName,s,t,{code:n.code,codeName:n.codeName,message:n.message,stack:n.stack}],null,2)),n.message="Error in Aggregate: ".concat(this.collectionName," => ").concat(n.codeName||"NoCodeName"," => ").concat(n.message),n;case 5:return[4,r.finish()];case 6:return e.sent(),[7];case 7:return[2]}})})},MongoManagerCollection.prototype.aggregateCount=function(n,s,i){return void 0===i&&(i=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||i||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("aggregateCount",this.collectionName,JSON.stringify([n,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).aggregate(n,s).toArray()];case 2:return[2,e.sent().length];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Aggregate Count",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Aggregate Count: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.aggregateCursor=function(e,o,t){var r=this,n=(void 0===t&&(t=!1),resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession()),t=(!n||t||this.bypassSession||o&&(o.readPreference&&"primary"!==o.readPreference||o.session)||(o?o.session=n:o={session:n}),o||{}),n=(t.session,__rest(t,["session"])),s=monitor_manager_1.MonitorMongo.create("aggregateCursor",this.collectionName,JSON.stringify([e,n])),t=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).aggregate(e,o);return t.on("close",function(o){return __awaiter(r,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,s.finish()];case 1:return e.sent(),[2,o]}})})}),t},MongoManagerCollection.prototype.aggregateStream=function(e,o,t,r){var n=this,s=(void 0===r&&(r=!1),resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession()),r=(!s||r||this.bypassSession||o&&(o.readPreference&&"primary"!==o.readPreference||o.session)||(o?o.session=s:o={session:s}),o||{}),s=(r.session,__rest(r,["session"])),i=monitor_manager_1.MonitorMongo.create("aggregateStream",this.collectionName,JSON.stringify([e,s,t]));return resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).aggregate(e,o).stream(t).on("close",function(o){return __awaiter(n,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,i.finish()];case 1:return e.sent(),[2,o]}})})})},MongoManagerCollection.prototype.bulkWrite=function(N,I,w,b,R,C){return void 0===w&&(w=!1),void 0===b&&(b=!1),void 0===R&&(R=!1),void 0===C&&(C=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a,c,l,g,_,d,u,v,p,m,h,f,O,S,y,M;return __generator(this,function(e){switch(e.label){case 0:if(!N.length)return[2,null];o=1e3,t=0,!(n=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||C||this.bypassSession||I&&(I.readPreference&&"primary"!==I.readPreference||I.session)||(I?I.session=n:I={session:n}),r=(n=I||{}).session,n=__rest(n,["session"]),e.label=1;case 1:if(!(t<N.length))return[3,27];s=N.slice(t,t+o),i=[],a=[];try{for(y=void 0,c=__values(s),l=c.next();!l.done;l=c.next()){if(g=l.value,_=Object.keys(g)[0],d=g[_],this.checkSchema&&!w){if(u=this.simplschema.newContext(),v=void 0,"insertOne"===_)v=u.validate(d.document);else if("replaceOne"===_)v=u.validate(d.replacement);else if("updateOne"===_||"updateMany"===_)v=u.validate(d.update,{modifier:!0});else{if("deleteOne"!==_&&"deleteMany"!==_)throw new Error("Unsupported operation type: ".concat(_));v=!0}if(!v)throw new Error("Schema validation failed for ".concat(_,": ").concat(JSON.stringify(u.validationErrors(),null,2)))}if("insertOne"===_)this.timestamps&&(d.document.createdAt||(d.document.createdAt=new Date),d.document.updatedAt||(d.document.updatedAt=new Date)),!b&&this.createLogs&&i.push({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d.document._id||(0,common_1.objectIdHexString)(),payload:(0,common_1.getBinarySize)(JSON.stringify(d.document))<1e6?JSON.stringify(d.document,null,2):"Too Big",method:"insertOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}),g[_].document=d.document;else if("updateOne"===_||"updateMany"===_)this.timestamps&&(d.update.$set||(d.update.$set={}),d.update.$set.updatedAt=new Date),!R&&this.useVersions&&(d.update.$inc||(d.update.$inc={}),d.update.$inc.__v=1),!b&&this.createLogs&&i.push({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d.filter._id||null,payload:(0,common_1.getBinarySize)(JSON.stringify(d.update))<1e6?JSON.stringify(d.update,null,2):"Too Big",method:_,id_user:"",user:"",messageId:0,route:"",createdAt:new Date}),!R&&this.useVersions&&a.push({filter:d.filter});else if("replaceOne"===_)this.timestamps&&(d.replacement.updatedAt=new Date),!R&&this.useVersions&&(d.replacement.__v=(d.replacement.__v||0)+1),!b&&this.createLogs&&i.push({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d.filter._id||null,payload:(0,common_1.getBinarySize)(JSON.stringify(d.replacement))<1e6?JSON.stringify(d.replacement,null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}),!R&&this.useVersions&&a.push({filter:d.filter}),g[_].replacement=d.replacement;else{if("deleteOne"!==_&&"deleteMany"!==_)throw new Error("Unsupported operation type: ".concat(_));!b&&this.createLogs&&i.push({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d.filter._id||null,payload:(0,common_1.getBinarySize)(JSON.stringify(d.filter))<1e6?JSON.stringify(d.filter,null,2):"Too Big",method:_,id_user:"",user:"",messageId:0,route:"",createdAt:new Date}),!R&&this.useVersions&&a.push({filter:d.filter})}}}catch(e){y={error:e}}finally{try{l&&!l.done&&(M=c.return)&&M.call(c)}finally{if(y)throw y.error}}if(p=[],!(!R&&this.useVersions&&0<a.length))return[3,10];e.label=2;case 2:return(e.trys.push([2,9,,10]),(f=a.map(function(e){return e.filter})).length)?[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName).find({$or:f},{session:r}).toArray()]:[3,4];case 3:p=e.sent(),e.label=4;case 4:if(!(0<(m=p.map(function(e){return{insertOne:{document:__assign(__assign({},e),{_id:{_id:e._id,__v:e.__v}})}}})).length))return[3,8];e.label=5;case 5:return e.trys.push([5,7,,8]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(m)];case 6:return e.sent(),[3,8];case 7:return e.sent(),[3,8];case 8:return[3,10];case 9:return e.sent(),[3,10];case 10:h=monitor_manager_1.MonitorMongo.create("bulkWrite",this.collectionName,JSON.stringify([s,n])),e.label=11;case 11:return e.trys.push([11,13,14,16]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(s,I)];case 12:return e.sent(),[3,16];case 13:throw f=e.sent(),console.log(JSON.stringify([new Date,"Error Bulk Write",this.collectionName,N,n,{code:f.code,codeName:f.codeName,message:f.message,stack:f.stack}],null,2)),f.message="Error in Bulk Write: ".concat(this.collectionName," => ").concat(f.codeName||"NoCodeName"," => ").concat(f.message),f;case 14:return[4,h.finish()];case 15:return e.sent(),[7];case 16:if(!b&&this.createLogs&&0<i.length){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,17];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLogs(i.map(function(e){return{type:"log",data:e}}))}return[3,19];case 17:return O={session:r,ordered:!1},[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").bulkWrite(i.map(function(e){return{insertOne:{document:e}}}),O)];case 18:e.sent(),e.label=19;case 19:if(R||!this.useVersions)return[3,25];e.label=20;case 20:return e.trys.push([20,24,,25]),O=p.map(function(e){return e._id}),S=[{$match:{"_id._id":{$in:O}}},{$sort:{"_id._id":1,"_id.__v":-1}},{$group:{_id:"$_id._id",versions:{$push:"$_id"}}},{$project:{versionsToDelete:{$slice:["$versions",5,{$size:"$versions"}]}}},{$unwind:"$versionsToDelete"},{$replaceRoot:{newRoot:{_id:"$versionsToDelete"}}}],[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(S).toArray()];case 21:return 0<(S=e.sent()).length?[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).deleteMany({_id:{$in:S.map(function(e){return e._id})}})]:[3,23];case 22:e.sent(),e.label=23;case 23:return[3,25];case 24:return e.sent(),[3,25];case 25:return t+=o,[4,new Promise(function(e){return setImmediate(e)})];case 26:return e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[3,1];case 27:return[2,{ok:1}]}})})},MongoManagerCollection.prototype.countDocuments=function(n,s,i){return void 0===n&&(n={}),void 0===i&&(i=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:return((o=s||{}).session,o=__rest(o,["session"]),0===Object.keys(n).length)?[2,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).estimatedDocumentCount(o)]:[3,1];case 1:return i||this.skipCache?[3,2]:[2,resolveio_server_app_1.ResolveIOServer.getMongoManager().countDocuments(this.collectionName,n,o)];case 2:t=monitor_manager_1.MonitorMongo.create("countDocuments",this.collectionName,JSON.stringify([n,o])),e.label=3;case 3:return e.trys.push([3,5,6,8]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).countDocuments(n,o)];case 4:return[2,e.sent()];case 5:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Count Documents",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Count Documents: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 6:return[4,t.finish()];case 7:return e.sent(),[7];case 8:return[2]}})})},MongoManagerCollection.prototype.create=function(e,o){return Array.isArray(e)?1===e.length?this.insertOne(e[0],o):this.insertMany(e,o):this.insertOne(e,o)},MongoManagerCollection.prototype.createIndex=function(r,n){return __awaiter(this,void 0,void 0,function(){var o,t;return __generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,(o=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions)).indexes()];case 1:return t=e.sent(),t.some(function(e){return JSON.stringify(e.key)===JSON.stringify(r)})?[2,"Index already exists"]:[2,o.createIndex(r,n)];case 2:return e.sent(),[3,3];case 3:return[2,"Index creation queued"]}})})},MongoManagerCollection.prototype.createIndexes=function(r,n){return __awaiter(this,void 0,void 0,function(){var o,t;return __generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,(o=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions)).indexes()];case 1:return t=e.sent(),0===r.filter(function(o){return!t.some(function(e){return JSON.stringify(e.key)===JSON.stringify(o.key)})}).length?[2,["All indexes already exist"]]:[2,o.createIndexes(r,n)];case 2:return e.sent(),[3,3];case 3:return[2,["Index creation queued"]]}})})},MongoManagerCollection.prototype.deleteMany=function(l,g,_,d){return void 0===l&&(l={}),void 0===_&&(_=!1),void 0===d&&(d=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a,c;return __generator(this,function(e){switch(e.label){case 0:return(!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||d||this.bypassSession||g&&(g.readPreference&&"primary"!==g.readPreference||g.session)||(g?g.session=t:g={session:t}),o=(t=g||{}).session,t=__rest(t,["session"]),this.createLogs&&!_||this.useVersions)?[4,this.find(l,{session:o})]:[3,11];case 1:r=e.sent(),n=0,e.label=2;case 2:if(!(n<r.length))return[3,11];if(s=r[n],this.createLogs&&!_){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,3];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:s._id,payload:(0,common_1.getBinarySize)(JSON.stringify([s,l,t]))<1e6?JSON.stringify([s,l,t],null,2):"Too Big",method:"deleteMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,5];case 3:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:s._id,payload:(0,common_1.getBinarySize)(JSON.stringify([s,l,t]))<1e6?JSON.stringify([s,l,t],null,2):"Too Big",method:"deleteMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:o})];case 4:e.sent(),e.label=5;case 5:if(!this.useVersions)return[3,10];e.label=6;case 6:return e.trys.push([6,9,,10]),(a=(0,common_1.deepCopy)(s))._id={_id:s._id,__v:s.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:s._id,__v:s.__v}},a,{upsert:!0})];case 7:return e.sent(),[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({$and:[{"_id._id":s._id},{"_id.__v":{$lt:s.__v-1}}]})];case 8:return e.sent(),[3,10];case 9:return e.sent(),[3,10];case 10:return n++,[3,2];case 11:i=monitor_manager_1.MonitorMongo.create("deleteMany",this.collectionName,JSON.stringify([l,t])),e.label=12;case 12:return e.trys.push([12,14,15,17]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).deleteMany(l,g)];case 13:return a=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,a];case 14:throw c=e.sent(),console.log(JSON.stringify([new Date,"Error Delete Many",this.collectionName,l,t,{code:c.code,codeName:c.codeName,message:c.message,stack:c.stack}],null,2)),c.message="Error in Delete Many: ".concat(this.collectionName," => ").concat(c.codeName||"NoCodeName"," => ").concat(c.message),c;case 15:return[4,i.finish()];case 16:return e.sent(),[7];case 17:return[2]}})})},MongoManagerCollection.prototype.deleteOne=function(c,l,g,_){return void 0===c&&(c={}),void 0===g&&(g=!1),void 0===_&&(_=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a;return __generator(this,function(e){switch(e.label){case 0:if(!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||_||this.bypassSession||l&&(l.readPreference&&"primary"!==l.readPreference||l.session)||(l?l.session=t:l={session:t}),o=(t=l||{}).session,t=__rest(t,["session"]),!this.createLogs||g)return[3,17];s=monitor_manager_1.MonitorMongo.create("findOneAndDelete",this.collectionName,JSON.stringify([c,t])),e.label=1;case 1:return e.trys.push([1,13,14,16]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).deleteOne(c,l)];case 2:return i=e.sent(),[4,this.findOne(c,l)];case 3:if(!(r=e.sent()))return[3,12];if(this.createLogs&&!g){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,4];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:r._id,payload:(0,common_1.getBinarySize)(JSON.stringify([r,c,t]))<1e6?JSON.stringify([r,c,t],null,2):"Too Big",method:"deleteOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,6];case 4:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:r._id,payload:(0,common_1.getBinarySize)(JSON.stringify([r,c,t]))<1e6?JSON.stringify([r,c,t],null,2):"Too Big",method:"deleteOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:o})];case 5:e.sent(),e.label=6;case 6:if(!this.useVersions)return[3,11];e.label=7;case 7:return e.trys.push([7,10,,11]),(n=(0,common_1.deepCopy)(r))._id={_id:r._id,__v:r.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:r._id,__v:r.__v}},n,{upsert:!0})];case 8:return e.sent(),[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({$and:[{"_id._id":r._id},{"_id.__v":{$lt:r.__v-1}}]})];case 9:return e.sent(),[3,11];case 10:return e.sent(),[3,11];case 11:this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),e.label=12;case 12:return[2,i];case 13:throw n=e.sent(),console.log(JSON.stringify([new Date,"Error Delete One (Find One And Delete)",this.collectionName,c,t,{code:n.code,codeName:n.codeName,message:n.message,stack:n.stack}],null,2)),n.message="Error in Delete One (Find One And Delete): ".concat(this.collectionName," => ").concat(n.codeName||"NoCodeName"," => ").concat(n.message),n;case 14:return[4,s.finish()];case 15:return e.sent(),[7];case 16:return[3,23];case 17:s=monitor_manager_1.MonitorMongo.create("deleteOne",this.collectionName,JSON.stringify([c,t])),e.label=18;case 18:return e.trys.push([18,20,21,23]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).deleteOne(c,l)];case 19:return i=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,i];case 20:throw a=e.sent(),console.log(JSON.stringify([new Date,"Error Delete One",this.collectionName,c,t,{code:a.code,codeName:a.codeName,message:a.message,stack:a.stack}],null,2)),a.message="Error in Delete One: ".concat(this.collectionName," => ").concat(a.codeName||"NoCodeName"," => ").concat(a.message),a;case 21:return[4,s.finish()];case 22:return e.sent(),[7];case 23:return[2]}})})},MongoManagerCollection.prototype.distinct=function(n,s,i,a){return void 0===a&&(a=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||a||this.bypassSession||i&&(i.readPreference&&"primary"!==i.readPreference||i.session)||(i?i.session=o:i={session:o}),(o=i||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("distinct",this.collectionName,JSON.stringify([n,s,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).distinct(n,s,i)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Distinct",this.collectionName,s,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Distinct: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.drop=function(n,s){return void 0===s&&(s=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||s||this.bypassSession||n&&(n.readPreference&&"primary"!==n.readPreference||n.session)||(n?n.session=o:n={session:o}),(o=n||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("drop",this.collectionName,JSON.stringify([o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).drop(n)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Drop Collection",this.collectionName,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Drop Collection: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.dropIndex=function(n,s,i){return void 0===i&&(i=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||i||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("dropIndex",this.collectionName,JSON.stringify([n,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).dropIndex(n,s)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Drop Index",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Drop Index: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.dropIndexes=function(n,s){return void 0===s&&(s=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||s||this.bypassSession||n&&(n.readPreference&&"primary"!==n.readPreference||n.session)||(n?n.session=o:n={session:o}),(o=n||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("dropIndexes",this.collectionName,JSON.stringify([o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).dropIndexes(n)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Drop Indexes",this.collectionName,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Drop Indexes: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.find=function(n,s,i,a){return void 0===n&&(n={}),void 0===i&&(i=!1),void 0===a&&(a=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:return!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||a||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),i||this.skipCache?[3,1]:[2,resolveio_server_app_1.ResolveIOServer.getMongoManager().find(this.collectionName,n,s)];case 1:t=monitor_manager_1.MonitorMongo.create("find",this.collectionName,JSON.stringify([n,o])),e.label=2;case 2:return e.trys.push([2,4,5,7]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).find(n,s).toArray()];case 3:return[2,e.sent()];case 4:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Find",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Find: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 5:return[4,t.finish()];case 6:return e.sent(),[7];case 7:return[2]}})})},MongoManagerCollection.prototype.findById=function(n,s,i,a){return void 0===i&&(i=!1),void 0===a&&(a=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:return!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||a||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),i||this.skipCache?[3,1]:[2,resolveio_server_app_1.ResolveIOServer.getMongoManager().findOne(this.collectionName,{_id:n},s)];case 1:t=monitor_manager_1.MonitorMongo.create("findById",this.collectionName,JSON.stringify([{_id:n},o])),e.label=2;case 2:return e.trys.push([2,4,5,7]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).findOne({_id:n},s)];case 3:return[2,e.sent()];case 4:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Find By ID",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Find By ID: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 5:return[4,t.finish()];case 6:return e.sent(),[7];case 7:return[2]}})})},MongoManagerCollection.prototype.findCount=function(n,s,i){return void 0===n&&(n={}),void 0===i&&(i=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||i||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("findCount",this.collectionName,JSON.stringify([n,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).find(n,s).count()];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Find Count",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Find Count: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.findCursor=function(e,o,t){var r=this,n=(void 0===e&&(e={}),void 0===t&&(t=!1),resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession()),t=(!n||t||this.bypassSession||o&&(o.readPreference&&"primary"!==o.readPreference||o.session)||(o?o.session=n:o={session:n}),o||{}),n=(t.session,__rest(t,["session"])),s=monitor_manager_1.MonitorMongo.create("findCursor",this.collectionName,JSON.stringify([e,n])),i=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).find(e,o);return i.on("close",function(o){return __awaiter(r,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,s.finish()];case 1:return e.sent(),i.removeAllListeners(),[2,o]}})})}),i},MongoManagerCollection.prototype.findStream=function(e,o,t,r){var n=this,s=(void 0===e&&(e={}),void 0===r&&(r=!1),resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession()),r=(!s||r||this.bypassSession||o&&(o.readPreference&&"primary"!==o.readPreference||o.session)||(o?o.session=s:o={session:s}),o||{}),s=(r.session,__rest(r,["session"])),i=monitor_manager_1.MonitorMongo.create("findStream",this.collectionName,JSON.stringify([e,s,t]));return resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).find(e,o).stream(t).on("close",function(o){return __awaiter(n,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,i.finish()];case 1:return e.sent(),[2,o]}})})})},MongoManagerCollection.prototype.findOne=function(s,i,a,c){return void 0===s&&(s={}),void 0===a&&(a=!1),void 0===c&&(c=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n;return __generator(this,function(e){switch(e.label){case 0:return!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||c||this.bypassSession||i&&(i.readPreference&&"primary"!==i.readPreference||i.session)||(i?i.session=o:i={session:o}),a||this.skipCache?[3,1]:[2,resolveio_server_app_1.ResolveIOServer.getMongoManager().findOne(this.collectionName,s,i)];case 1:(o=i||{}).session,t=__rest(o,["session"]),r=monitor_manager_1.MonitorMongo.create("findOne",this.collectionName,JSON.stringify([s,t])),e.label=2;case 2:return e.trys.push([2,4,5,7]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).findOne(s,i)];case 3:return[2,e.sent()];case 4:throw n=e.sent(),console.log(JSON.stringify([new Date,"Error Find One",this.collectionName,s,t,{code:n.code,codeName:n.codeName,message:n.message,stack:n.stack}],null,2)),n.message="Error in Find One: ".concat(this.collectionName," => ").concat(n.codeName||"NoCodeName"," => ").concat(n.message),n;case 5:return[4,r.finish()];case 6:return e.sent(),[7];case 7:return[2]}})})},MongoManagerCollection.prototype.findOneAndDelete=function(i,a,c,l){return void 0===i&&(i={}),void 0===c&&(c=!1),void 0===l&&(l=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s;return __generator(this,function(e){switch(e.label){case 0:!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||l||this.bypassSession||a&&(a.readPreference&&"primary"!==a.readPreference||a.session)||(a?a.session=t:a={session:t}),o=(t=a||{}).session,t=__rest(t,["session"]),r=monitor_manager_1.MonitorMongo.create("findOneAndDelete",this.collectionName,JSON.stringify([i,t])),e.label=1;case 1:return e.trys.push([1,12,13,15]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).findOneAndDelete(i,a)];case 2:if(n=e.sent(),!(n=n.value))return[3,10];if(this.createLogs&&!c){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,3];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:n._id,payload:(0,common_1.getBinarySize)(JSON.stringify([n,i,t]))<1e6?JSON.stringify([n,i,t],null,2):"Too Big",method:"findOneAndDelete",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,5];case 3:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:n._id,payload:(0,common_1.getBinarySize)(JSON.stringify([n,i,t]))<1e6?JSON.stringify([n,i,t],null,2):"Too Big",method:"findOneAndDelete",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:o})];case 4:e.sent(),e.label=5;case 5:if(!this.useVersions)return[3,9];e.label=6;case 6:return e.trys.push([6,8,,9]),(s=(0,common_1.deepCopy)(n))._id={_id:n._id,__v:n.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:n._id,__v:n.__v}},s,{upsert:!0})];case 7:return e.sent(),[3,9];case 8:return e.sent(),[3,9];case 9:return this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,n];case 10:return[2,null];case 11:return[3,15];case 12:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Find One And Delete",this.collectionName,i,t,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Find One And Delete: ".concat(this.collectionName," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 13:return[4,r.finish()];case 14:return e.sent(),[7];case 15:return[2]}})})},MongoManagerCollection.prototype.findOneAndReplace=function(a,c,l,g,_,d){return void 0===a&&(a={}),void 0===g&&(g=!1),void 0===_&&(_=!1),void 0===d&&(d=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i;return __generator(this,function(e){switch(e.label){case 0:return!this.checkSchema||_?[3,2]:(o=this.simplschema.newContext(),o.validate(c)?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - findOneAndReplace",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on findOneAndReplace - "+this.collectionName,JSON.stringify([o.validationErrors(),c],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:r=new Date,this.timestamps&&(c.updatedAt=r),l&&l.upsert&&(c._id||(c._id=(0,common_1.objectIdHexString)()),this.useVersions&&(c.__v=0),this.timestamps)&&!c.createdAt&&(c.createdAt=r),!(r=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||d||this.bypassSession||l&&(l.readPreference&&"primary"!==l.readPreference||l.session)||(l?l.session=r:l={session:r}),t=(r=l||{}).session,r=__rest(r,["session"]),n=monitor_manager_1.MonitorMongo.create("findOneAndReplace",this.collectionName,JSON.stringify([a,c,r])),e.label=3;case 3:return e.trys.push([3,14,15,17]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).findOneAndReplace(a,c,l)];case 4:if(s=e.sent(),!(s=s.value))return[3,12];if(this.createLogs&&!g){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,5];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:s._id,payload:(0,common_1.getBinarySize)(JSON.stringify([s,a,c,r]))<1e6?JSON.stringify([s,a,c,r],null,2):"Too Big",method:"findOneAndReplace",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,7];case 5:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:s._id,payload:(0,common_1.getBinarySize)(JSON.stringify([s,a,c,r]))<1e6?JSON.stringify([s,a,c,r],null,2):"Too Big",method:"findOneAndReplace",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:t})];case 6:e.sent(),e.label=7;case 7:if(!this.useVersions)return[3,11];e.label=8;case 8:return e.trys.push([8,10,,11]),(i=(0,common_1.deepCopy)(s))._id={_id:s._id,__v:s.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:s._id,__v:s.__v}},i,{upsert:!0})];case 9:return e.sent(),[3,11];case 10:return e.sent(),[3,11];case 11:return this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,s];case 12:return[2,null];case 13:return[3,17];case 14:throw i=e.sent(),console.log(JSON.stringify([new Date,"Error Find One And Replace",this.collectionName,a,r,{code:i.code,codeName:i.codeName,message:i.message,stack:i.stack}],null,2)),i.message="Error in Find One And Replace: ".concat(this.collectionName," => ").concat(i.codeName||"NoCodeName"," => ").concat(i.message),i;case 15:return[4,n.finish()];case 16:return e.sent(),[7];case 17:return[2]}})})},MongoManagerCollection.prototype.findOneAndUpdate=function(c,l,g,_,d,u){return void 0===c&&(c={}),void 0===_&&(_=!1),void 0===d&&(d=!1),void 0===u&&(u=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a;return __generator(this,function(e){switch(e.label){case 0:return!this.checkSchema||d?[3,2]:(o=this.simplschema.newContext(),o.validate(l,{modifier:!0})?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - findOneAndUpdate",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on findOneAndUpdate - "+this.collectionName,JSON.stringify([o.validationErrors(),l],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:this.timestamps&&(t=new Date,l.$set?l.$set.updatedAt=t:l.$set={updatedAt:t}),g&&g.upsert&&(l.$setOnInsert?(l.$setOnInsert._id||(l.$setOnInsert._id=(0,common_1.objectIdHexString)()),this.timestamps&&!l.$setOnInsert.createdAt&&(l.$setOnInsert.createdAt=new Date)):this.timestamps?l.$setOnInsert={_id:(0,common_1.objectIdHexString)(),createdAt:new Date}:l.$setOnInsert={_id:(0,common_1.objectIdHexString)()}),!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||u||this.bypassSession||g&&(g.readPreference&&"primary"!==g.readPreference||g.session)||(g?g.session=t:g={session:t}),r=(n=g||{}).session,n=__rest(n,["session"]),s=monitor_manager_1.MonitorMongo.create("findOneAndUpdate",this.collectionName,JSON.stringify([c,l,n])),e.label=3;case 3:return e.trys.push([3,14,15,17]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).findOneAndUpdate(c,l,g)];case 4:if(i=e.sent(),!(i=i.value))return[3,12];if(this.createLogs&&!_){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,5];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,c,l,n]))<1e6?JSON.stringify([i,c,l,n],null,2):"Too Big",method:"findOneAndUpdate",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,7];case 5:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,c,l,n]))<1e6?JSON.stringify([i,c,l,n],null,2):"Too Big",method:"findOneAndUpdate",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 6:e.sent(),e.label=7;case 7:if(!this.useVersions)return[3,11];e.label=8;case 8:return e.trys.push([8,10,,11]),(a=(0,common_1.deepCopy)(i))._id={_id:i._id,__v:i.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:i._id,__v:i.__v}},a,{upsert:!0})];case 9:return e.sent(),[3,11];case 10:return e.sent(),[3,11];case 11:return this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,i];case 12:return[2,null];case 13:return[3,17];case 14:throw a=e.sent(),console.log(JSON.stringify([new Date,"Error Find One And Update",this.collectionName,c,n,{code:a.code,codeName:a.codeName,message:a.message,stack:a.stack}],null,2)),a.message="Error in Find One And Update: ".concat(this.collectionName," => ").concat(a.codeName||"NoCodeName"," => ").concat(a.message),a;case 15:return[4,s.finish()];case 16:return e.sent(),[7];case 17:return[2]}})})},MongoManagerCollection.prototype.indexes=function(n){return __awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:(o=n||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("indexes",this.collectionName,JSON.stringify([o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).indexes(n)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Indexes",this.collectionName,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Indexes: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.indexExists=function(n,s){return __awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:(o=s||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("indexExists",this.collectionName,JSON.stringify([n,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).indexExists(n,s)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Index Exists",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Index Exists: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.insertMany=function(v,p,m,h,f,O){return void 0===m&&(m=!1),void 0===h&&(h=!1),void 0===f&&(f=!1),void 0===O&&(O=!1),__awaiter(this,void 0,void 0,function(){var t,o,r,n,s,i,a,c,l,g,_,d,u;return __generator(this,function(e){switch(e.label){case 0:if(!v.length)return[2,[]];if(t=[],!this.checkSchema||h)return[3,9];e.label=1;case 1:e.trys.push([1,7,8,9]),o=__values(v),r=o.next(),e.label=2;case 2:return r.done?[3,6]:(l=r.value,n=this.simplschema.newContext(),n.validate(l)?[3,4]:(console.log(new Date,this.collectionName,"Schema Errors - insertMany",n.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on insertMany - "+this.collectionName,JSON.stringify([n.validationErrors(),l],null,2))]));case 3:return e.sent(),t.push(!1),[3,5];case 4:t.push(!0),e.label=5;case 5:return r=o.next(),[3,2];case 6:return[3,9];case 7:return n=e.sent(),d={error:n},[3,9];case 8:try{r&&!r.done&&(u=o.return)&&u.call(o)}finally{if(d)throw d.error}return[7];case 9:s=this.checkSchema?v.filter(function(e,o){return t[o]}):v,!(a=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||O||this.bypassSession||p&&(p.readPreference&&"primary"!==p.readPreference||p.session)||(p?p.session=a:p={session:a}),i=(a=p||{}).session,a=__rest(a,["session"]),c=0,e.label=10;case 10:if(!(c<s.length))return[3,14];if((l=s[c])._id||(l._id=(0,common_1.objectIdHexString)()),this.timestamps&&(_=new Date,l.createdAt||(l.createdAt=_),l.updatedAt||(l.updatedAt=_)),this.useVersions&&!l.hasOwnProperty("__v")&&(l.__v=0),this.createLogs&&!m){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,11];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:l._id,payload:(0,common_1.getBinarySize)(JSON.stringify([l,a]))<1e6?JSON.stringify([l,a],null,2):"Too Big",method:"insertMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,13];case 11:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:l._id,payload:(0,common_1.getBinarySize)(JSON.stringify([l,a]))<1e6?JSON.stringify([l,a],null,2):"Too Big",method:"insertMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:i})];case 12:e.sent(),e.label=13;case 13:return c++,[3,10];case 14:if(!s.length)return[3,19];g=null,f||(g=monitor_manager_1.MonitorMongo.create("insertMany",this.collectionName,JSON.stringify([s,a]))),e.label=15;case 15:return e.trys.push([15,17,18,19]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).insertMany(s,p)];case 16:return e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,s];case 17:throw _=e.sent(),console.log(JSON.stringify([new Date,"Error Insert Many",this.collectionName,v,a,{code:_.code,codeName:_.codeName,message:_.message,stack:_.stack}],null,2)),_.message="Error in Insert Many: ".concat(this.collectionName," => ").concat(_.codeName||"NoCodeName"," => ").concat(_.message),_;case 18:return g&&g.finish(),[7];case 19:return[2,[]]}})})},MongoManagerCollection.prototype.insertOne=function(a,c,l,g,_){return void 0===l&&(l=!1),void 0===g&&(g=!1),void 0===_&&(_=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i;return __generator(this,function(e){switch(e.label){case 0:return(a._id||(a._id=(0,common_1.objectIdHexString)()),!this.checkSchema||g)?[3,2]:(o=this.simplschema.newContext(),o.validate(a)?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - insertOne",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on insertOne - "+this.collectionName,JSON.stringify([o.validationErrors(),a],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:if(this.timestamps&&(t=new Date,a.createdAt||(a.createdAt=t),a.updatedAt||(a.updatedAt=t)),!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||_||this.bypassSession||c&&(c.readPreference&&"primary"!==c.readPreference||c.session)||(c?c.session=t:c={session:t}),r=(n=c||{}).session,n=__rest(n,["session"]),this.createLogs&&!l){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,3];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:a._id,payload:(0,common_1.getBinarySize)(JSON.stringify([a,n]))<1e6?JSON.stringify([a,n],null,2):"Too Big",method:"insertOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,5];case 3:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:a._id,payload:(0,common_1.getBinarySize)(JSON.stringify([a,n]))<1e6?JSON.stringify([a,n],null,2):"Too Big",method:"insertOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 4:e.sent(),e.label=5;case 5:this.useVersions&&!a.hasOwnProperty("__v")&&(a.__v=0),s=monitor_manager_1.MonitorMongo.create("insertOne",this.collectionName,JSON.stringify([a,n])),e.label=6;case 6:return e.trys.push([6,8,9,11]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).insertOne(a,c)];case 7:return e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,a];case 8:throw i=e.sent(),console.log(JSON.stringify([new Date,"Error Insert One",this.collectionName,a,n,{code:i.code,codeName:i.codeName,message:i.message,stack:i.stack}],null,2)),i.message="Error in Insert One: ".concat(this.collectionName," => ").concat(i.codeName||"NoCodeName"," => ").concat(i.message),i;case 9:return[4,s.finish()];case 10:return e.sent(),[7];case 11:return[2]}})})},MongoManagerCollection.prototype.listIndexes=function(e,o){var t=this,r=(void 0===o&&(o=!1),resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession()),o=(!r||o||this.bypassSession||e&&(e.readPreference&&"primary"!==e.readPreference||e.session)||(e?e.session=r:e={session:r}),e||{}),r=(o.session,__rest(o,["session"])),n=monitor_manager_1.MonitorMongo.create("listIndexes",this.collectionName,JSON.stringify([r])),o=resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).listIndexes(e);return o.on("close",function(o){return __awaiter(t,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,n.finish()];case 1:return e.sent(),[2,o]}})})}),o},MongoManagerCollection.prototype.rename=function(n,s,i){return void 0===i&&(i=!1),__awaiter(this,void 0,void 0,function(){var o,t,r;return __generator(this,function(e){switch(e.label){case 0:!(o=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||i||this.bypassSession||s&&(s.readPreference&&"primary"!==s.readPreference||s.session)||(s?s.session=o:s={session:o}),(o=s||{}).session,o=__rest(o,["session"]),t=monitor_manager_1.MonitorMongo.create("rename",this.collectionName,JSON.stringify([n,o])),e.label=1;case 1:return e.trys.push([1,3,4,6]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).rename(n,s)];case 2:return[2,e.sent()];case 3:throw r=e.sent(),console.log(JSON.stringify([new Date,"Error Rename",this.collectionName,n,o,{code:r.code,codeName:r.codeName,message:r.message,stack:r.stack}],null,2)),r.message="Error in Rename: ".concat(this.collectionName," => ").concat(r.codeName||"NoCodeName"," => ").concat(r.message),r;case 4:return[4,t.finish()];case 5:return e.sent(),[7];case 6:return[2]}})})},MongoManagerCollection.prototype.replaceOne=function(m,h,f,O,S,y,M){return void 0===O&&(O=!1),void 0===S&&(S=!1),void 0===y&&(y=null),void 0===M&&(M=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a,c,l,g,_,d,u,v,p;return __generator(this,function(e){switch(e.label){case 0:return!this.checkSchema||S?[3,2]:(o=this.simplschema.newContext(),o.validate(h)?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - replaceOne",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on replaceOne - "+this.collectionName,JSON.stringify([o.validationErrors(),h],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:return(t=new Date,this.timestamps&&(h.updatedAt=t),!(n=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||M||this.bypassSession||f&&(f.readPreference&&"primary"!==f.readPreference||f.session)||(f?f.session=n:f={session:n}),r=(n=f||{}).session,n=__rest(n,["session"]),this.useVersions)?y?[3,4]:[4,this.findOne(m,{session:r},!0)]:[3,45];case 3:y=e.sent(),e.label=4;case 4:if(!y)return[3,33];if(this.timestamps&&!h.createdAt&&y.createdAt&&(h.createdAt=y.createdAt),y.__v!==h.__v)return[3,20];e.label=5;case 5:return e.trys.push([5,9,,10]),h.__v+=1,(s=(0,common_1.deepCopy)(y))._id={_id:y._id,__v:y.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:y._id,__v:y.__v}},s,{upsert:!0})];case 6:return(e.sent(),4<=y.__v)?[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({$and:[{"_id._id":y._id},{"_id.__v":{$lt:y.__v-4}}]})]:[3,8];case 7:e.sent(),e.label=8;case 8:return[3,10];case 9:return e.sent(),[3,10];case 10:if(this.createLogs&&!O){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,11];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:y._id,payload:(0,common_1.getBinarySize)(JSON.stringify([y,m,h,n]))<1e6?JSON.stringify([y,m,h,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,13];case 11:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:y._id,payload:(0,common_1.getBinarySize)(JSON.stringify([y,m,h,n]))<1e6?JSON.stringify([y,m,h,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 12:e.sent(),e.label=13;case 13:u=monitor_manager_1.MonitorMongo.create("replaceOne",this.collectionName,JSON.stringify([m,h,n])),e.label=14;case 14:return e.trys.push([14,16,17,19]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).replaceOne(m,h,f)];case 15:return v=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,v];case 16:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Replace One",this.collectionName,m,h,n,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Replace One: ".concat(this.collectionName," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 17:return[4,u.finish()];case 18:return e.sent(),[7];case 19:return[3,32];case 20:return console.log("invalid version - "+this.collectionName,y.__v,h.__v),[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({_id:{_id:y._id,__v:h.__v}},null,!0)];case 21:if(!(a=e.sent()))return[3,31];if(i=y._id,c=y.__v,(a=(0,common_1.getMongoMergeUpdatedDoc)(h,y,a))._id=i,a.__v=c+1,this.createLogs&&!O){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,22];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i,payload:(0,common_1.getBinarySize)(JSON.stringify(["invalidVersion - merge",y,m,a,n]))<1e6?JSON.stringify(["invalidVersion - merge",y,m,a,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,24];case 22:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i,payload:(0,common_1.getBinarySize)(JSON.stringify(["invalidVersion - merge",y,m,a,n]))<1e6?JSON.stringify(["invalidVersion - merge",y,m,a,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 23:e.sent(),e.label=24;case 24:u=monitor_manager_1.MonitorMongo.create("replaceOne",this.collectionName,JSON.stringify([m,a,n])),e.label=25;case 25:return e.trys.push([25,27,28,30]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).replaceOne(m,a,f)];case 26:return v=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,v.acknowledged];case 27:throw c=e.sent(),console.log(JSON.stringify([new Date,"Error Replace One",this.collectionName,m,h,n,{code:c.code,codeName:c.codeName,message:c.message,stack:c.stack}],null,2)),c.message="Error in Replace One: ".concat(this.collectionName," => ").concat(c.codeName||"NoCodeName"," => ").concat(c.message),c;case 28:return[4,u.finish()];case 29:return e.sent(),[7];case 30:return[3,32];case 31:throw new Error("Error in Replace One: Invalid Version And Could Not Find History - DB: "+y.__v+", Trying to update with :"+h.__v);case 32:return[3,44];case 33:if(!f||!f.upsert)return[3,43];if(this.timestamps&&(h.createdAt=t),h._id||(h._id=(0,common_1.objectIdHexString)()),h.__v=0,this.createLogs&&!O){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,34];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:h._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",m,h,n]))<1e6?JSON.stringify(["upsert",m,h,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,36];case 34:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:h._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",m,h,n]))<1e6?JSON.stringify(["upsert",m,h,n],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 35:e.sent(),e.label=36;case 36:u=monitor_manager_1.MonitorMongo.create("replaceOne",this.collectionName,JSON.stringify([m,h,n])),e.label=37;case 37:return e.trys.push([37,39,40,42]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).replaceOne(m,h,f)];case 38:return v=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,v.acknowledged];case 39:throw l=e.sent(),console.log(JSON.stringify([new Date,"Error Replace One",this.collectionName,m,h,n,{code:l.code,codeName:l.codeName,message:l.message,stack:l.stack}],null,2)),l.message="Error in Replace One: ".concat(this.collectionName," => ").concat(l.codeName||"NoCodeName"," => ").concat(l.message),l;case 40:return[4,u.finish()];case 41:return e.sent(),[7];case 42:return[3,44];case 43:return[2,{acknowledged:!1,matchedCount:0,modifiedCount:0,upsertedCount:0,upsertedId:null}];case 44:return[3,66];case 45:if(f&&f.upsert&&(this.timestamps&&!h.createdAt&&(h.createdAt=t),h._id||(h._id=(0,common_1.objectIdHexString)()),h.__v=0),!this.createLogs||O)return[3,60];f?f.returnDocument="before":f={returnDocument:"before"},g=(l=f||{}).session,_=__rest(l,["session"]),u=monitor_manager_1.MonitorMongo.create("findOneAndReplace",this.collectionName,JSON.stringify([m,h,_])),e.label=46;case 46:return e.trys.push([46,56,57,59]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).replaceOne(m,h,f)];case 47:return v=e.sent(),[4,this.findOne(m,f)];case 48:return(d=e.sent())?"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?[3,49]:(resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d._id,payload:(0,common_1.getBinarySize)(JSON.stringify([d,m,h,_]))<1e6?JSON.stringify([d,m,h,_],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}}),[3,51]):[3,52];case 49:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:d._id,payload:(0,common_1.getBinarySize)(JSON.stringify([d,m,h,_]))<1e6?JSON.stringify([d,m,h,_],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:g})];case 50:e.sent(),e.label=51;case 51:return[3,55];case 52:return"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?[3,53]:(resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:h._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",m,h,_]))<1e6?JSON.stringify(["upsert",m,h,_],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}}),[3,55]);case 53:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:h._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",m,h,_]))<1e6?JSON.stringify(["upsert",m,h,_],null,2):"Too Big",method:"replaceOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:g})];case 54:e.sent(),e.label=55;case 55:return this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,v];case 56:throw p=e.sent(),console.log(JSON.stringify([new Date,"Error Replace One (Find One And Replace)",this.collectionName,m,_,{code:p.code,codeName:p.codeName,message:p.message,stack:p.stack}],null,2)),p.message="Error in Replace One (Find One And Replace): ".concat(this.collectionName," => ").concat(p.codeName||"NoCodeName"," => ").concat(p.message),p;case 57:return[4,u.finish()];case 58:return e.sent(),[7];case 59:return[3,66];case 60:u=monitor_manager_1.MonitorMongo.create("replaceOne",this.collectionName,JSON.stringify([m,h,n])),e.label=61;case 61:return e.trys.push([61,63,64,66]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).replaceOne(m,h,f)];case 62:return v=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,v.acknowledged];case 63:throw p=e.sent(),console.log(JSON.stringify([new Date,"Error Replace One",this.collectionName,m,h,n,{code:p.code,codeName:p.codeName,message:p.message,stack:p.stack}],null,2)),p.message="Error in Replace One: ".concat(this.collectionName," => ").concat(p.codeName||"NoCodeName"," => ").concat(p.message),p;case 64:return[4,u.finish()];case 65:return e.sent(),[7];case 66:return[2]}})})},MongoManagerCollection.prototype.updateMany=function(_,d,u,v,p,m,h){return void 0===v&&(v=!1),void 0===p&&(p=!1),void 0===m&&(m=!1),void 0===h&&(h=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a,c,l,g;return __generator(this,function(e){switch(e.label){case 0:return(t=!(d.$set||d.$unset||d.$inc||d.$setOnInsert||d.$push||d.$pull||d.$addToSet||d.$min||d.$max||d.$currentDate||d.$mul||d.$rename),t||Object.values(d).every(function(e){return!e||"{}"===JSON.stringify(e)}))?[2,{acknowledged:!1,matchedCount:0,modifiedCount:0,upsertedCount:0,upsertedId:null}]:(this.timestamps&&(t=new Date,d.$set?d.$set.updatedAt=t:d.$set={updatedAt:t}),!this.checkSchema||p||(o=this.simplschema.newContext(),o.validate(d,{modifier:!0}))?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - updateMany",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on updateMany - "+this.collectionName,JSON.stringify([o.validationErrors(),d],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:return(!(t=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||h||this.bypassSession||u&&(u.readPreference&&"primary"!==u.readPreference||u.session)||(u?u.session=t:u={session:t}),r=(n=u||{}).session,n=__rest(n,["session"]),this.useVersions&&!m||this.createLogs&&!v)?[4,this.find(_,{session:r})]:[3,15];case 3:s=e.sent(),i=0,e.label=4;case 4:if(!(i<s.length))return[3,15];if(a=s[i],this.createLogs&&!v){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,5];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:a._id,payload:(0,common_1.getBinarySize)(JSON.stringify([a,_,d,n]))<1e6?JSON.stringify([a,_,d,n],null,2):"Too Big",method:"updateMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,7];case 5:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:a._id,payload:(0,common_1.getBinarySize)(JSON.stringify([a,_,d,n]))<1e6?JSON.stringify([a,_,d,n],null,2):"Too Big",method:"updateMany",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:r})];case 6:e.sent(),e.label=7;case 7:if(!this.useVersions)return[3,14];e.label=8;case 8:return e.trys.push([8,12,,13]),(l=(0,common_1.deepCopy)(a))._id={_id:a._id,__v:a.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:a._id,__v:a.__v}},l,{upsert:!0})];case 9:return(e.sent(),4<=a.__v)?[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({$and:[{"_id._id":a._id},{"_id.__v":{$lt:a.__v-4}}]})]:[3,11];case 10:e.sent(),e.label=11;case 11:return[3,13];case 12:return e.sent(),[3,13];case 13:d.$inc||(d.$inc={}),"number"!=typeof d.$inc.__v&&(d.$inc.__v=1),d.$set&&"__v"in d.$set&&(delete d.$set.__v,0===Object.keys(d.$set).length)&&delete d.$set,e.label=14;case 14:return i++,[3,4];case 15:c=monitor_manager_1.MonitorMongo.create("updateMany",this.collectionName,JSON.stringify([_,d,n])),e.label=16;case 16:return e.trys.push([16,18,19,21]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).updateMany(_,d,u)];case 17:return l=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,l];case 18:throw g=e.sent(),console.log(JSON.stringify([new Date,"Error Update Many",this.collectionName,_,d,n,{code:g.code,codeName:g.codeName,message:g.message,stack:g.stack}],null,2)),g.message="Error in Update Many: ".concat(this.collectionName," => ").concat(g.codeName||"NoCodeName"," => ").concat(g.message),g;case 19:return[4,c.finish()];case 20:return e.sent(),[7];case 21:return[2]}})})},MongoManagerCollection.prototype.updateOne=function(g,_,d,u,v,p){return void 0===u&&(u=!1),void 0===v&&(v=!1),void 0===p&&(p=!1),__awaiter(this,void 0,void 0,function(){var o,t,r,n,s,i,a,c,l;return __generator(this,function(e){switch(e.label){case 0:return!this.checkSchema||v?[3,2]:(o=this.simplschema.newContext(),o.validate(_,{modifier:!0})?[3,2]:(console.log(new Date,this.collectionName,"Schema Errors - updateOne",o.validationErrors()),[4,resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod("insertErrorLog","Schema Failed on updateOne - "+this.collectionName,JSON.stringify([o.validationErrors(),_],null,2))]));case 1:throw e.sent(),new Error(JSON.stringify(o.validationErrors(),null,2));case 2:return(n=!(_.$set||_.$unset||_.$inc||_.$setOnInsert||_.$push||_.$pull||_.$addToSet||_.$min||_.$max||_.$currentDate||_.$mul||_.$rename),n||Object.values(_).every(function(e){return!e||"{}"===JSON.stringify(e)}))?[2,{acknowledged:!1,matchedCount:0,modifiedCount:0,upsertedCount:0,upsertedId:null}]:(n=new Date,this.timestamps&&(_.$set?_.$set.updatedAt=n:_.$set={updatedAt:n}),!(n=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession())||p||this.bypassSession||d&&(d.readPreference&&"primary"!==d.readPreference||d.session)||(d?d.session=n:d={session:n}),t=(n=d||{}).session,r=__rest(n,["session"]),this.useVersions?[4,this.findOne(g,{session:t},!0)]:[3,30]);case 3:if(!(i=e.sent()))return[3,18];if(this.createLogs&&!u){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,4];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,g,_,r]))<1e6?JSON.stringify([i,g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,6];case 4:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,g,_,r]))<1e6?JSON.stringify([i,g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:t})];case 5:e.sent(),e.label=6;case 6:return e.trys.push([6,10,,11]),(n=(0,common_1.deepCopy)(i))._id={_id:i._id,__v:i.__v},[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({_id:{_id:i._id,__v:i.__v}},n,{upsert:!0})];case 7:return(e.sent(),4<=i.__v)?[4,resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({$and:[{"_id._id":i._id},{"_id.__v":{$lt:i.__v-4}}]})]:[3,9];case 8:e.sent(),e.label=9;case 9:return[3,11];case 10:return e.sent(),[3,11];case 11:_.$inc||(_.$inc={}),"number"!=typeof _.$inc.__v&&(_.$inc.__v=1),_.$set&&"__v"in _.$set&&(delete _.$set.__v,0===Object.keys(_.$set).length)&&delete _.$set,a=monitor_manager_1.MonitorMongo.create("updateOne",this.collectionName,JSON.stringify([g,_,r])),e.label=12;case 12:return e.trys.push([12,14,15,17]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).updateOne(g,_,d)];case 13:return c=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,c];case 14:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Update One",this.collectionName,g,_,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Update One: ".concat(this.collectionName," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 15:return[4,a.finish()];case 16:return e.sent(),[7];case 17:return[3,29];case 18:if(!d||!d.upsert)return[3,28];if(_.$setOnInsert?(_.$setOnInsert._id||(_.$setOnInsert._id=(0,common_1.objectIdHexString)()),this.timestamps&&!_.$setOnInsert.createdAt&&(_.$setOnInsert.createdAt=new Date)):this.timestamps?_.$setOnInsert={_id:(0,common_1.objectIdHexString)(),__v:0,createdAt:new Date}:_.$setOnInsert={_id:(0,common_1.objectIdHexString)(),__v:0},this.createLogs&&!u){if("https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL)return[3,19];resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:_.$setOnInsert._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",g,_,r]))<1e6?JSON.stringify(["upsert",g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}})}return[3,21];case 19:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:_.$setOnInsert._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",g,_,r]))<1e6?JSON.stringify(["upsert",g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:t})];case 20:e.sent(),e.label=21;case 21:a=monitor_manager_1.MonitorMongo.create("updateOne",this.collectionName,JSON.stringify([g,_,r])),e.label=22;case 22:return e.trys.push([22,24,25,27]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).updateOne(g,_,d)];case 23:return c=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,c];case 24:throw s=e.sent(),console.log(JSON.stringify([new Date,"Error Update One",this.collectionName,g,r,{code:s.code,codeName:s.codeName,message:s.message,stack:s.stack}],null,2)),s.message="Error in Update One: ".concat(this.collectionName," => ").concat(s.codeName||"NoCodeName"," => ").concat(s.message),s;case 25:return[4,a.finish()];case 26:return e.sent(),[7];case 27:return[3,29];case 28:return[2,{acknowledged:!1,matchedCount:0,modifiedCount:0,upsertedCount:0,upsertedId:null}];case 29:return[3,52];case 30:if(d&&d.upsert&&(_.$setOnInsert?(_.$setOnInsert._id||(_.$setOnInsert._id=(0,common_1.objectIdHexString)()),this.timestamps&&!_.$setOnInsert.createdAt&&(_.$setOnInsert.createdAt=new Date)):this.timestamps?_.$setOnInsert={_id:(0,common_1.objectIdHexString)(),createdAt:new Date}:_.$setOnInsert={_id:(0,common_1.objectIdHexString)()}),!this.createLogs||u)return[3,46];d?d.returnDocument="before":d={returnDocument:"before"},a=monitor_manager_1.MonitorMongo.create("findOneAndUpdate",this.collectionName,JSON.stringify([g,_,r])),e.label=31;case 31:return e.trys.push([31,42,43,45]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).updateOne(g,_,d)];case 32:return c=e.sent(),[4,this.findOne(g,d)];case 33:return(i=e.sent())?"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?[3,34]:(resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,g,_,r]))<1e6?JSON.stringify([i,g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}}),[3,36]):[3,37];case 34:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:i._id,payload:(0,common_1.getBinarySize)(JSON.stringify([i,g,_,r]))<1e6?JSON.stringify([i,g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date},{session:t})];case 35:e.sent(),e.label=36;case 36:return[2,c];case 37:return _.$setOnInsert?"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?[3,38]:(resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log",data:{_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:_.$setOnInsert._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",g,_,r]))<1e6?JSON.stringify(["upsert",g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date}}),[3,40]):[3,41];case 38:return[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection("logs").insertOne({_id:(0,common_1.objectIdHexString)(),type:"document",collection:this.collectionName,id_document:_.$setOnInsert._id,payload:(0,common_1.getBinarySize)(JSON.stringify(["upsert",g,_,r]))<1e6?JSON.stringify(["upsert",g,_,r],null,2):"Too Big",method:"updateOne",id_user:"",user:"",messageId:0,route:"",createdAt:new Date})];case 39:e.sent(),e.label=40;case 40:this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),e.label=41;case 41:return[2,c];case 42:throw l=e.sent(),console.log(JSON.stringify([new Date,"Error Update One (Find One And Update)",this.collectionName,g,r,{code:l.code,codeName:l.codeName,message:l.message,stack:l.stack}],null,2)),l.message="Error in Update One (Find One And Update): ".concat(this.collectionName," => ").concat(l.codeName||"NoCodeName"," => ").concat(l.message),l;case 43:return[4,a.finish()];case 44:return e.sent(),[7];case 45:return[3,52];case 46:a=monitor_manager_1.MonitorMongo.create("updateOne",this.collectionName,JSON.stringify([g,_,r])),e.label=47;case 47:return e.trys.push([47,49,50,52]),[4,resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).updateOne(g,_,d)];case 48:return c=e.sent(),this.skipCache||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName),[2,c];case 49:throw l=e.sent(),console.log(JSON.stringify([new Date,"Error Update One",this.collectionName,g,_,r,{code:l.code,codeName:l.codeName,message:l.message,stack:l.stack}],null,2)),l.message="Error in Update One: ".concat(this.collectionName," => ").concat(l.codeName||"NoCodeName"," => ").concat(l.message),l;case 50:return[4,a.finish()];case 51:return e.sent(),[7];case 52:return[2]}})})},MongoManagerCollection.prototype.watchCollection=function(e,o,t){void 0===e&&(e=[]),void 0===t&&(t=!1);var r=resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();return!r||t||this.bypassSession||(o?o.session=r:o={session:r}),resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName,this.collectionOptions).watch(e,o)},MongoManagerCollection}()),MongoManagerUserCollection=function(e){function MongoManagerUserCollection(){return null!==e&&e.apply(this,arguments)||this}return __extends(MongoManagerUserCollection,e),MongoManagerUserCollection.create=function(e){var o=new MongoManagerUserCollection;return o.initialize(e),o},MongoManagerUserCollection.prototype.authenticate=function(r,n){return __awaiter(this,void 0,void 0,function(){var o,t;return __generator(this,function(e){switch(e.label){case 0:return(o=Math.pow(100,Math.log(r.attempts+1)),o=o<3e5?o:3e5,r.last)?Date.now()-r.last.getTime()<o?(r.last=new Date,[4,user_collection_1.Users.updateOne({_id:r._id},{$set:{last:r.last}})]):[3,2]:[3,3];case 1:return e.sent(),[2,{data:null,error:"Attempt Too Soon"}];case 2:return[3,4];case 3:r.last=new Date,e.label=4;case 4:if(5<=r.attempts)return[2,{data:null,error:"Too Many Attempts"}];if(!r.salt)return[2,{data:null,error:"No Salt Value Stored"}];e.label=5;case 5:return e.trys.push([5,11,,12]),[4,pbkdf2Promisified(n,r.salt,{iterations:25e3,keylen:512,digestAlgorithm:"sha256"})];case 6:return(o=e.sent(),scmp(o,Buffer.from(r.hash,"hex")))?(r.last=new Date,r.attempts=0,[4,user_collection_1.Users.updateOne({_id:r._id},{$set:{last:r.last,attempts:r.attempts}})]):[3,8];case 7:return e.sent(),[2,{data:r,error:""}];case 8:return r.last=new Date,r.attempts=r.attempts+1,[4,user_collection_1.Users.updateOne({_id:r._id},{$set:{last:r.last,attempts:r.attempts}})];case 9:return e.sent(),5<=r.attempts?[2,{data:null,error:"Too Many Attempts"}]:[2,{data:null,error:"Invalid Username And Password"}];case 10:return[3,12];case 11:throw(t=e.sent()).message="Error in User Authenticate: ".concat(JSON.stringify(r,null,2)," - ").concat(t.message),t;case 12:return[2]}})})},MongoManagerUserCollection.prototype.serializeUser=function(){return function(e,o){o(null,e.username)}},MongoManagerUserCollection.prototype.deserializeUser=function(){var e=this;return function(o){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return[2,user_collection_1.Users.findOne({username:o})]})})}},MongoManagerUserCollection.prototype.setPassword=function(r,n){return __awaiter(this,void 0,void 0,function(){var o,t;return __generator(this,function(e){switch(e.label){case 0:if(r)return[3,1];throw new Error("Error In User Set Password: No User");case 1:if(n)return[3,2];throw new Error("Error In User Set Password: No Password");case 2:return[4,randomBytes(32)];case 3:o=e.sent(),o=o.toString("hex"),e.label=4;case 4:return e.trys.push([4,6,,7]),[4,pbkdf2Promisified(n,o,{iterations:25e3,keylen:512,digestAlgorithm:"sha256"})];case 5:return t=e.sent(),t=Buffer.from(t,"binary").toString("hex"),[2,user_collection_1.Users.updateOne({_id:r._id},{$set:{hash:t,salt:o,services:{},attempts:0}})];case 6:throw(t=e.sent()).message="Error in User Set Password: ".concat(JSON.stringify(r,null,2)," - ").concat(t.message),t;case 7:return[2]}})})},MongoManagerUserCollection.prototype.changePassword=function(t,r,n){return __awaiter(this,void 0,void 0,function(){var o;return __generator(this,function(e){switch(e.label){case 0:if(t)return[3,1];throw new Error("Error in User Change Password: Missing User");case 1:if(r&&n)return[3,2];throw new Error("Error in User Change Password: Missing Password");case 2:return[4,this.authenticate(t,r)];case 3:if((o=e.sent()).data)return[2,this.setPassword(t,n)];throw o.error;case 4:return[2]}})})},MongoManagerUserCollection.prototype.register=function(o,t){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:if(o.username)return[3,1];throw new Error("Error in User Register: Missing Username");case 1:return[4,user_collection_1.Users.findOne({username:o.username})];case 2:if(e.sent())throw new Error("Error in User Register: Username Exists");return[3,3];case 3:return[4,user_collection_1.Users.findOne({email:o.email})];case 4:if(e.sent())throw new Error("Error in User Register: Email Exists");return o.setPassword(t),[2,o];case 5:return[2]}})})},MongoManagerUserCollection.prototype.resetAttempts=function(e){return user_collection_1.Users.updateOne({_id:e._id},{$set:{attempts:0}})},MongoManagerUserCollection}(exports.MongoManagerCollection=MongoManagerCollection);function pbkdf2(e,o,t,r){crypto.pbkdf2(e,o,t.iterations,t.keylen,t.digestAlgorithm,r)}function pbkdf2Promisified(e,o,n){return new Promise(function(t,r){return pbkdf2(e,o,n,function(e,o){return e?r(e):t(o)})})}function randomBytes(e){return new Promise(function(t,r){return crypto.randomBytes(e,function(e,o){return e?r(e):t(o)})})}exports.MongoManagerUserCollection=MongoManagerUserCollection;
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __rest = (this && this.__rest) || function (s, e) {
65
+ var t = {};
66
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
67
+ t[p] = s[p];
68
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
69
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
70
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
71
+ t[p[i]] = s[p[i]];
72
+ }
73
+ return t;
74
+ };
75
+ var __read = (this && this.__read) || function (o, n) {
76
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
77
+ if (!m) return o;
78
+ var i = m.call(o), r, ar = [], e;
79
+ try {
80
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
81
+ }
82
+ catch (error) { e = { error: error }; }
83
+ finally {
84
+ try {
85
+ if (r && !r.done && (m = i["return"])) m.call(i);
86
+ }
87
+ finally { if (e) throw e.error; }
88
+ }
89
+ return ar;
90
+ };
91
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
92
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
93
+ if (ar || !(i in from)) {
94
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
95
+ ar[i] = from[i];
96
+ }
97
+ }
98
+ return to.concat(ar || Array.prototype.slice.call(from));
99
+ };
100
+ var __values = (this && this.__values) || function(o) {
101
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
102
+ if (m) return m.call(o);
103
+ if (o && typeof o.length === "number") return {
104
+ next: function () {
105
+ if (o && i >= o.length) o = void 0;
106
+ return { value: o && o[i++], done: !o };
107
+ }
108
+ };
109
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
110
+ };
111
+ Object.defineProperty(exports, "__esModule", { value: true });
112
+ exports.MongoManagerUserCollection = exports.MongoManagerCollection = exports.MongoManagerModel = exports.MongoManager = void 0;
113
+ var NodeCache = require("node-cache");
114
+ var os_1 = require("os");
115
+ var simpl_schema_1 = require("simpl-schema");
116
+ var user_collection_1 = require("../collections/user.collection");
117
+ var resolveio_server_app_1 = require("../resolveio-server-app");
118
+ var common_1 = require("../util/common");
119
+ var monitor_manager_1 = require("./monitor.manager");
120
+ var crypto = require('crypto');
121
+ var scmp = require('scmp');
122
+ var numCPUs = (0, os_1.cpus)().length;
123
+ var v8 = require('v8');
124
+ var AsyncLocalStorage = require('async_hooks').AsyncLocalStorage;
125
+ var asyncLocalStorage = new AsyncLocalStorage();
126
+ var MongoManager = /** @class */ (function () {
127
+ function MongoManager() {
128
+ this._collections = [];
129
+ this._cacheMap = [];
130
+ this._operationInProgress = new Map();
131
+ this._heapSize = v8.getHeapStatistics() / numCPUs;
132
+ this._serverCollections = [];
133
+ this._isWorkersEnabled = false;
134
+ this._isWorkerInstance = false;
135
+ }
136
+ MongoManager.create = function () {
137
+ return __awaiter(this, void 0, void 0, function () {
138
+ var mongoManager;
139
+ return __generator(this, function (_a) {
140
+ switch (_a.label) {
141
+ case 0:
142
+ mongoManager = new MongoManager();
143
+ return [4 /*yield*/, mongoManager.initialize()];
144
+ case 1:
145
+ _a.sent();
146
+ return [2 /*return*/, mongoManager];
147
+ }
148
+ });
149
+ });
150
+ };
151
+ MongoManager.prototype.initialize = function () {
152
+ return __awaiter(this, void 0, void 0, function () {
153
+ var collections;
154
+ return __generator(this, function (_a) {
155
+ switch (_a.label) {
156
+ case 0:
157
+ this._nodeCache = new NodeCache({ stdTTL: 0, checkperiod: 0 });
158
+ this._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';
159
+ this._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';
160
+ this.setCacheLimit();
161
+ if (this._isWorkersEnabled && this._isWorkerInstance) {
162
+ this.setupChangeStream();
163
+ }
164
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().listCollections().toArray()];
165
+ case 1:
166
+ collections = _a.sent();
167
+ this._serverCollections = collections;
168
+ return [2 /*return*/];
169
+ }
170
+ });
171
+ });
172
+ };
173
+ MongoManager.prototype.oneTimeTransaction = function (fn) {
174
+ var _this = this;
175
+ return asyncLocalStorage.run({}, function () { return __awaiter(_this, void 0, void 0, function () {
176
+ var session, result_1, store;
177
+ var _this = this;
178
+ return __generator(this, function (_a) {
179
+ switch (_a.label) {
180
+ case 0:
181
+ session = resolveio_server_app_1.ResolveIOServer.getMongoConnection().startSession();
182
+ asyncLocalStorage.getStore().session = session;
183
+ _a.label = 1;
184
+ case 1:
185
+ _a.trys.push([1, , 3, 5]);
186
+ return [4 /*yield*/, session.withTransaction(function () { return __awaiter(_this, void 0, void 0, function () {
187
+ return __generator(this, function (_a) {
188
+ switch (_a.label) {
189
+ case 0: return [4 /*yield*/, fn()];
190
+ case 1:
191
+ // Directly assign the result from fn()
192
+ result_1 = _a.sent();
193
+ return [2 /*return*/, result_1]; // Explicit return for transaction validation
194
+ }
195
+ });
196
+ }); })];
197
+ case 2:
198
+ _a.sent();
199
+ return [2 /*return*/, result_1]; // Transaction committed successfully
200
+ case 3: return [4 /*yield*/, session.endSession()];
201
+ case 4:
202
+ _a.sent();
203
+ store = asyncLocalStorage.getStore();
204
+ if (store)
205
+ delete store.session;
206
+ return [7 /*endfinally*/];
207
+ case 5: return [2 /*return*/];
208
+ }
209
+ });
210
+ }); });
211
+ };
212
+ MongoManager.prototype.getSession = function () {
213
+ var store = asyncLocalStorage.getStore();
214
+ return store ? store.session : null;
215
+ };
216
+ MongoManager.prototype.setCacheLimit = function () {
217
+ if (this._isWorkersEnabled) {
218
+ this._heapLimit = this._isWorkerInstance ? this._heapSize * 0.8 : this._heapSize * 0.4;
219
+ }
220
+ else {
221
+ this._heapLimit = this._heapSize * 0.3;
222
+ }
223
+ };
224
+ MongoManager.prototype.getServerCollections = function () {
225
+ return this._serverCollections;
226
+ };
227
+ MongoManager.prototype.registerCollection = function (collection) {
228
+ return __awaiter(this, void 0, void 0, function () {
229
+ return __generator(this, function (_a) {
230
+ switch (_a.label) {
231
+ case 0:
232
+ if (!(collection.collectionOptions &&
233
+ collection.collectionOptions.timeseries &&
234
+ collection.collectionOptions.timeseries.timeField &&
235
+ this._serverCollections.some(function (a) { return a.name === collection.collectionName && a.type === 'collection'; }))) return [3 /*break*/, 3];
236
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().dropCollection(collection.collectionName)];
237
+ case 1:
238
+ _a.sent();
239
+ return [4 /*yield*/, this.createCollection(collection)];
240
+ case 2:
241
+ _a.sent();
242
+ _a.label = 3;
243
+ case 3:
244
+ this._collections.push(collection);
245
+ return [2 /*return*/];
246
+ }
247
+ });
248
+ });
249
+ };
250
+ MongoManager.prototype.createCollection = function (collection) {
251
+ return __awaiter(this, void 0, void 0, function () {
252
+ return __generator(this, function (_a) {
253
+ switch (_a.label) {
254
+ case 0: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().createCollection(collection.collectionName, collection.collectionOptions)];
255
+ case 1:
256
+ _a.sent();
257
+ return [2 /*return*/];
258
+ }
259
+ });
260
+ });
261
+ };
262
+ MongoManager.prototype.collections = function () {
263
+ return this._collections;
264
+ };
265
+ MongoManager.prototype.collection = function (collectionName) {
266
+ return this._collections.find(function (a) { return a.collectionName === collectionName; });
267
+ };
268
+ MongoManager.prototype.delay = function (ms) {
269
+ return __awaiter(this, void 0, void 0, function () {
270
+ return __generator(this, function (_a) {
271
+ // eslint-disable-next-line no-restricted-syntax
272
+ return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, ms); })];
273
+ });
274
+ });
275
+ };
276
+ MongoManager.prototype.find = function (collectionName, filter, options) {
277
+ if (filter === void 0) { filter = {}; }
278
+ return __awaiter(this, void 0, void 0, function () {
279
+ var _a, session, safeOptions, cacheKey, result, operation;
280
+ var _this = this;
281
+ return __generator(this, function (_b) {
282
+ switch (_b.label) {
283
+ case 0:
284
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
285
+ cacheKey = this.generateCacheKey([collectionName], 'find', [filter, safeOptions]);
286
+ result = this.getFromCache(cacheKey);
287
+ if (result !== undefined) {
288
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
289
+ console.log(new Date(), 'Mongo Find - Cache', collectionName);
290
+ }
291
+ return [2 /*return*/, result];
292
+ }
293
+ if (this._operationInProgress.has(cacheKey)) {
294
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
295
+ console.log(new Date(), 'Mongo Find - Already running', collectionName);
296
+ }
297
+ return [2 /*return*/, this._operationInProgress.get(cacheKey).promise];
298
+ }
299
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
300
+ console.log(new Date(), 'Mongo Find - Running', collectionName);
301
+ }
302
+ operation = this.executeFind(collectionName, filter, options, cacheKey);
303
+ this._operationInProgress.set(cacheKey, {
304
+ promise: operation,
305
+ invalidatedDuringExecution: false,
306
+ collections: [collectionName]
307
+ });
308
+ return [4 /*yield*/, operation.finally(function () {
309
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
310
+ console.log(new Date(), 'Mongo Find - Done', collectionName);
311
+ }
312
+ _this._operationInProgress.delete(cacheKey);
313
+ })];
314
+ case 1:
315
+ _b.sent();
316
+ return [2 /*return*/, operation];
317
+ }
318
+ });
319
+ });
320
+ };
321
+ MongoManager.prototype.executeFind = function (collectionName, filter, options, cacheKey) {
322
+ return __awaiter(this, void 0, void 0, function () {
323
+ var result, collection, _a, session, safeOptions, monitor, err_1;
324
+ return __generator(this, function (_b) {
325
+ switch (_b.label) {
326
+ case 0:
327
+ collection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(collectionName);
328
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
329
+ monitor = monitor_manager_1.MonitorMongo.create('find', collectionName, JSON.stringify([filter, safeOptions]));
330
+ _b.label = 1;
331
+ case 1:
332
+ _b.trys.push([1, 3, 4, 6]);
333
+ return [4 /*yield*/, collection.find(filter, options).toArray()];
334
+ case 2:
335
+ result = _b.sent();
336
+ return [3 /*break*/, 6];
337
+ case 3:
338
+ err_1 = _b.sent();
339
+ console.log(JSON.stringify([new Date(), 'Error Execute Find', collectionName, filter, safeOptions, {
340
+ code: err_1.code,
341
+ codeName: err_1.codeName,
342
+ message: err_1.message,
343
+ stack: err_1.stack
344
+ }], null, 2));
345
+ err_1.message = "Error in Execute Find: ".concat(collectionName, " => ").concat(err_1.codeName || 'NoCodeName', " => ").concat(err_1.message);
346
+ throw err_1;
347
+ case 4: return [4 /*yield*/, monitor.finish()];
348
+ case 5:
349
+ _b.sent();
350
+ return [7 /*endfinally*/];
351
+ case 6:
352
+ if (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {
353
+ this.addToCache([collectionName], cacheKey, result);
354
+ }
355
+ return [2 /*return*/, result];
356
+ }
357
+ });
358
+ });
359
+ };
360
+ // FindOne Operation
361
+ MongoManager.prototype.findOne = function (collectionName, filter, options) {
362
+ if (filter === void 0) { filter = {}; }
363
+ return __awaiter(this, void 0, void 0, function () {
364
+ var _a, session, safeOptions, cacheKey, result, operation;
365
+ var _this = this;
366
+ return __generator(this, function (_b) {
367
+ switch (_b.label) {
368
+ case 0:
369
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
370
+ cacheKey = this.generateCacheKey([collectionName], 'findOne', [filter, safeOptions]);
371
+ result = this.getFromCache(cacheKey);
372
+ if (result !== undefined) {
373
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
374
+ console.log(new Date(), 'Mongo FindOne - Cache', collectionName);
375
+ }
376
+ return [2 /*return*/, result];
377
+ }
378
+ if (this._operationInProgress.has(cacheKey)) {
379
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
380
+ console.log(new Date(), 'Mongo FindOne - Already running', collectionName);
381
+ }
382
+ return [2 /*return*/, this._operationInProgress.get(cacheKey).promise];
383
+ }
384
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
385
+ console.log(new Date(), 'Mongo FindOne - Running', collectionName);
386
+ }
387
+ operation = this.executeFindOne(collectionName, filter, options, cacheKey);
388
+ this._operationInProgress.set(cacheKey, {
389
+ promise: operation,
390
+ invalidatedDuringExecution: false,
391
+ collections: [collectionName]
392
+ });
393
+ return [4 /*yield*/, operation.finally(function () {
394
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
395
+ console.log(new Date(), 'Mongo FindOne - Done', collectionName);
396
+ }
397
+ _this._operationInProgress.delete(cacheKey);
398
+ })];
399
+ case 1:
400
+ _b.sent();
401
+ return [2 /*return*/, operation];
402
+ }
403
+ });
404
+ });
405
+ };
406
+ MongoManager.prototype.executeFindOne = function (collectionName, filter, options, cacheKey) {
407
+ return __awaiter(this, void 0, void 0, function () {
408
+ var result, collection, _a, session, safeOptions, monitor, err_2;
409
+ return __generator(this, function (_b) {
410
+ switch (_b.label) {
411
+ case 0:
412
+ collection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(collectionName);
413
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
414
+ monitor = monitor_manager_1.MonitorMongo.create('findOne', collectionName, JSON.stringify([filter, safeOptions]));
415
+ _b.label = 1;
416
+ case 1:
417
+ _b.trys.push([1, 3, 4, 6]);
418
+ return [4 /*yield*/, collection.findOne(filter, options)];
419
+ case 2:
420
+ result = _b.sent();
421
+ return [3 /*break*/, 6];
422
+ case 3:
423
+ err_2 = _b.sent();
424
+ console.log(JSON.stringify([new Date(), 'Error Execute Find One', collectionName, filter, safeOptions, {
425
+ code: err_2.code,
426
+ codeName: err_2.codeName,
427
+ message: err_2.message,
428
+ stack: err_2.stack
429
+ }], null, 2));
430
+ err_2.message = "Error in Execute Find One: ".concat(collectionName, " => ").concat(err_2.codeName || 'NoCodeName', " => ").concat(err_2.message);
431
+ throw err_2;
432
+ case 4: return [4 /*yield*/, monitor.finish()];
433
+ case 5:
434
+ _b.sent();
435
+ return [7 /*endfinally*/];
436
+ case 6:
437
+ if (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {
438
+ this.addToCache([collectionName], cacheKey, result);
439
+ }
440
+ return [2 /*return*/, result];
441
+ }
442
+ });
443
+ });
444
+ };
445
+ // Aggregate Operation
446
+ MongoManager.prototype.aggregate = function (collectionName, pipeline, options) {
447
+ return __awaiter(this, void 0, void 0, function () {
448
+ var collections, _a, session, safeOptions, cacheKey, result, operation;
449
+ var _this = this;
450
+ return __generator(this, function (_b) {
451
+ switch (_b.label) {
452
+ case 0:
453
+ collections = __spreadArray([collectionName], __read(pipeline.flatMap(function (stage) { var _a; return ((_a = stage.$lookup) === null || _a === void 0 ? void 0 : _a.from) ? [stage.$lookup.from] : []; })), false);
454
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
455
+ cacheKey = this.generateCacheKey(collections, 'aggregate', [pipeline, safeOptions]);
456
+ result = this.getFromCache(cacheKey);
457
+ if (result !== undefined) {
458
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
459
+ console.log(new Date(), 'Mongo Agg - Cache', collections);
460
+ }
461
+ return [2 /*return*/, result];
462
+ }
463
+ if (this._operationInProgress.has(cacheKey)) {
464
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
465
+ console.log(new Date(), 'Mongo Agg - Already running', collections);
466
+ }
467
+ return [2 /*return*/, this._operationInProgress.get(cacheKey).promise];
468
+ }
469
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
470
+ console.log(new Date(), 'Mongo Agg - Running', collections);
471
+ }
472
+ operation = this.executeAggregate(collectionName, pipeline, options, cacheKey, collections);
473
+ this._operationInProgress.set(cacheKey, {
474
+ promise: operation,
475
+ invalidatedDuringExecution: false,
476
+ collections: collections
477
+ });
478
+ return [4 /*yield*/, operation.finally(function () {
479
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
480
+ console.log(new Date(), 'Mongo Agg - Done', collections);
481
+ }
482
+ _this._operationInProgress.delete(cacheKey);
483
+ })];
484
+ case 1:
485
+ _b.sent();
486
+ return [2 /*return*/, operation];
487
+ }
488
+ });
489
+ });
490
+ };
491
+ MongoManager.prototype.executeAggregate = function (collectionName, pipeline, options, cacheKey, collections) {
492
+ return __awaiter(this, void 0, void 0, function () {
493
+ var result, collection, _a, session, safeOptions, monitor, err_3;
494
+ return __generator(this, function (_b) {
495
+ switch (_b.label) {
496
+ case 0:
497
+ collection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(collectionName);
498
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
499
+ monitor = monitor_manager_1.MonitorMongo.create('aggregate', collectionName, JSON.stringify([pipeline, safeOptions]));
500
+ _b.label = 1;
501
+ case 1:
502
+ _b.trys.push([1, 3, 4, 6]);
503
+ return [4 /*yield*/, collection.aggregate(pipeline, options).toArray()];
504
+ case 2:
505
+ result = _b.sent();
506
+ return [3 /*break*/, 6];
507
+ case 3:
508
+ err_3 = _b.sent();
509
+ console.log(JSON.stringify([new Date(), 'Error Execute Aggregate', collectionName, pipeline, collections, safeOptions, {
510
+ code: err_3.code,
511
+ codeName: err_3.codeName,
512
+ message: err_3.message,
513
+ stack: err_3.stack
514
+ }], null, 2));
515
+ err_3.message = "Error in Execute Aggregate: ".concat(collectionName, " => ").concat(err_3.codeName || 'NoCodeName', " => ").concat(err_3.message);
516
+ throw err_3;
517
+ case 4: return [4 /*yield*/, monitor.finish()];
518
+ case 5:
519
+ _b.sent();
520
+ return [7 /*endfinally*/];
521
+ case 6:
522
+ if (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {
523
+ this.addToCache(collections, cacheKey, result);
524
+ }
525
+ return [2 /*return*/, result];
526
+ }
527
+ });
528
+ });
529
+ };
530
+ MongoManager.prototype.countDocuments = function (collectionName, filter, options) {
531
+ if (filter === void 0) { filter = {}; }
532
+ return __awaiter(this, void 0, void 0, function () {
533
+ var _a, session, safeOptions, cacheKey, result, operation;
534
+ var _this = this;
535
+ return __generator(this, function (_b) {
536
+ switch (_b.label) {
537
+ case 0:
538
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
539
+ cacheKey = this.generateCacheKey([collectionName], 'countDocuments', [filter, safeOptions]);
540
+ result = this.getFromCache(cacheKey);
541
+ if (result !== undefined) {
542
+ return [2 /*return*/, result];
543
+ }
544
+ if (this._operationInProgress.has(cacheKey)) {
545
+ return [2 /*return*/, this._operationInProgress.get(cacheKey).promise];
546
+ }
547
+ operation = this.executeCountDocuments(collectionName, filter, options, cacheKey);
548
+ this._operationInProgress.set(cacheKey, {
549
+ promise: operation,
550
+ invalidatedDuringExecution: false,
551
+ collections: [collectionName]
552
+ });
553
+ return [4 /*yield*/, operation.finally(function () { return _this._operationInProgress.delete(cacheKey); })];
554
+ case 1:
555
+ _b.sent();
556
+ return [2 /*return*/, operation];
557
+ }
558
+ });
559
+ });
560
+ };
561
+ MongoManager.prototype.executeCountDocuments = function (collectionName, filter, options, cacheKey) {
562
+ return __awaiter(this, void 0, void 0, function () {
563
+ var result, collection, _a, session, safeOptions, monitor, err_4;
564
+ return __generator(this, function (_b) {
565
+ switch (_b.label) {
566
+ case 0:
567
+ collection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(collectionName);
568
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
569
+ monitor = monitor_manager_1.MonitorMongo.create('countDocuments', collectionName, JSON.stringify([filter, safeOptions]));
570
+ _b.label = 1;
571
+ case 1:
572
+ _b.trys.push([1, 3, 4, 6]);
573
+ return [4 /*yield*/, collection.countDocuments(filter, options)];
574
+ case 2:
575
+ result = _b.sent();
576
+ return [3 /*break*/, 6];
577
+ case 3:
578
+ err_4 = _b.sent();
579
+ console.log(JSON.stringify([new Date(), 'Error Execute Count Documents', collectionName, filter, safeOptions, {
580
+ code: err_4.code,
581
+ codeName: err_4.codeName,
582
+ message: err_4.message,
583
+ stack: err_4.stack
584
+ }], null, 2));
585
+ err_4.message = "Error in Execute Count Documents: ".concat(collectionName, " => ").concat(err_4.codeName || 'NoCodeName', " => ").concat(err_4.message);
586
+ throw err_4;
587
+ case 4: return [4 /*yield*/, monitor.finish()];
588
+ case 5:
589
+ _b.sent();
590
+ return [7 /*endfinally*/];
591
+ case 6:
592
+ if (!this._operationInProgress.get(cacheKey).invalidatedDuringExecution) {
593
+ this.addToCache([collectionName], cacheKey, result);
594
+ }
595
+ return [2 /*return*/, result];
596
+ }
597
+ });
598
+ });
599
+ };
600
+ // Cache and Invalidation Setup
601
+ MongoManager.prototype.generateCacheKey = function (collections, functionName, args) {
602
+ var keyString = JSON.stringify({ collections: collections, functionName: functionName, args: args });
603
+ return crypto.createHash('sha256').update(keyString).digest('hex');
604
+ };
605
+ MongoManager.prototype.getFromCache = function (cacheKey) {
606
+ try {
607
+ var cachedData = this._nodeCache.get(cacheKey);
608
+ if (cachedData) {
609
+ return JSON.parse(cachedData, common_1.dateReviver);
610
+ }
611
+ }
612
+ catch (_a) {
613
+ this._nodeCache.del(cacheKey);
614
+ }
615
+ return undefined;
616
+ };
617
+ MongoManager.prototype.addToCache = function (collections, cacheKey, data) {
618
+ var e_1, _a;
619
+ if ((0, common_1.getBinarySize)(JSON.stringify(data)) < 1000000 &&
620
+ !collections.includes('logs') &&
621
+ !collections.find(function (a) { return a.endsWith('.versions'); }) &&
622
+ !collections.find(function (a) { return a.startsWith('monitor-'); })) {
623
+ var nodeCacheSize = this._nodeCache.getStats().vsize;
624
+ if (nodeCacheSize > this._heapLimit) {
625
+ var deleteCount = 0;
626
+ var keys = this._nodeCache.keys();
627
+ try {
628
+ for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
629
+ var key = keys_1_1.value;
630
+ this._nodeCache.del(key);
631
+ deleteCount += 1;
632
+ nodeCacheSize = this._nodeCache.getStats().vsize;
633
+ if (nodeCacheSize < this._heapLimit * 0.75) {
634
+ break;
635
+ }
636
+ }
637
+ }
638
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
639
+ finally {
640
+ try {
641
+ if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
642
+ }
643
+ finally { if (e_1) throw e_1.error; }
644
+ }
645
+ console.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);
646
+ }
647
+ this._nodeCache.set(cacheKey, JSON.stringify(data));
648
+ this._cacheMap.push({ collections: collections, key: cacheKey });
649
+ }
650
+ };
651
+ MongoManager.prototype.invalidateQueryCache = function (collection) {
652
+ var e_2, _a, e_3, _b;
653
+ var collectionCacheMap = this._cacheMap.filter(function (a) { return a.collections.includes(collection); });
654
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
655
+ console.log(new Date(), 'Mongo Invalidate Cache', collection);
656
+ }
657
+ try {
658
+ for (var collectionCacheMap_1 = __values(collectionCacheMap), collectionCacheMap_1_1 = collectionCacheMap_1.next(); !collectionCacheMap_1_1.done; collectionCacheMap_1_1 = collectionCacheMap_1.next()) {
659
+ var cacheMap = collectionCacheMap_1_1.value;
660
+ this._nodeCache.del(cacheMap.key);
661
+ if (this._operationInProgress.has(cacheMap.key)) {
662
+ this._operationInProgress.get(cacheMap.key).invalidatedDuringExecution = true;
663
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
664
+ console.log(new Date(), 'Mongo Invalidated During Execution', cacheMap.collections);
665
+ }
666
+ }
667
+ }
668
+ }
669
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
670
+ finally {
671
+ try {
672
+ if (collectionCacheMap_1_1 && !collectionCacheMap_1_1.done && (_a = collectionCacheMap_1.return)) _a.call(collectionCacheMap_1);
673
+ }
674
+ finally { if (e_2) throw e_2.error; }
675
+ }
676
+ try {
677
+ // eslint-disable-next-line no-unused-vars
678
+ for (var _c = __values(this._operationInProgress.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
679
+ var _e = __read(_d.value, 2), key = _e[0], operation = _e[1];
680
+ if (operation.collections.includes(collection)) {
681
+ operation.invalidatedDuringExecution = true;
682
+ if (resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager() && resolveio_server_app_1.ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {
683
+ console.log(new Date(), 'Mongo Invalidated During Execution (No cache)', operation.collections);
684
+ }
685
+ }
686
+ }
687
+ }
688
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
689
+ finally {
690
+ try {
691
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
692
+ }
693
+ finally { if (e_3) throw e_3.error; }
694
+ }
695
+ this._cacheMap = this._cacheMap.filter(function (a) { return !a.collections.includes(collection); });
696
+ };
697
+ MongoManager.prototype.setupChangeStream = function () {
698
+ var _this = this;
699
+ var db = resolveio_server_app_1.ResolveIOServer.getMainDB();
700
+ var pipeline = [
701
+ {
702
+ $match: {
703
+ $and: [
704
+ { 'ns.coll': { $nin: [
705
+ 'log-method-latencies',
706
+ 'log-subscriptions',
707
+ 'logs',
708
+ 'counters',
709
+ 'cron-job-histories',
710
+ 'email-histories',
711
+ 'qb-soap-request-histories',
712
+ 'qb-soap-request-responses',
713
+ 'qb-soap-requests',
714
+ 'qb-soap-retries'
715
+ ] } },
716
+ { 'ns.coll': { $not: /.*\.versions$/ } },
717
+ { 'ns.coll': { $not: /^monitor-/ } },
718
+ ]
719
+ },
720
+ },
721
+ ];
722
+ var changeStream = db.watch(pipeline, { fullDocument: 'updateLookup' });
723
+ changeStream.on('change', function (change) {
724
+ if (change['ns'] && change['ns'].coll) {
725
+ var collectionName = change['ns'].coll;
726
+ var collection = _this.collection(collectionName);
727
+ if (collection) {
728
+ _this.invalidateQueryCache(collectionName);
729
+ }
730
+ }
731
+ });
732
+ changeStream.on('error', function () { return __awaiter(_this, void 0, void 0, function () {
733
+ var _this = this;
734
+ return __generator(this, function (_a) {
735
+ switch (_a.label) {
736
+ case 0:
737
+ console.log(new Date(), 'Mongo change stream error. Restart...');
738
+ return [4 /*yield*/, changeStream.close()];
739
+ case 1:
740
+ _a.sent();
741
+ setTimeout(function () { return _this.setupChangeStream(); }, 5000);
742
+ return [2 /*return*/];
743
+ }
744
+ });
745
+ }); });
746
+ changeStream.on('close', function () {
747
+ console.log(new Date(), 'Mongo change stream closed. Restarting...');
748
+ setTimeout(function () { return _this.setupChangeStream(); }, 5000);
749
+ });
750
+ };
751
+ return MongoManager;
752
+ }());
753
+ exports.MongoManager = MongoManager;
754
+ var MongoManagerModel = /** @class */ (function () {
755
+ function MongoManagerModel() {
756
+ this.collection_main = null;
757
+ this.collection_version = null;
758
+ }
759
+ MongoManagerModel.create = function (options) {
760
+ var mongoManagerModel = new MongoManagerModel();
761
+ mongoManagerModel.initialize(options);
762
+ return mongoManagerModel;
763
+ };
764
+ MongoManagerModel.prototype.initialize = function (options) {
765
+ var _this = this;
766
+ if (options.collectionName === 'users') {
767
+ this.collection_main = MongoManagerUserCollection.create(options);
768
+ }
769
+ else {
770
+ this.collection_main = MongoManagerCollection.create(options);
771
+ }
772
+ if (options.useVersionCollection) {
773
+ this.collection_main.useVersions = true;
774
+ var versionSchema = (0, common_1.deepCopy)(options.schema);
775
+ versionSchema._id.type = 'Object';
776
+ versionSchema._id.blackbox = true;
777
+ var versionOptions = {
778
+ collectionName: options.collectionName + '.versions',
779
+ schema: versionSchema,
780
+ useVersionCollection: false,
781
+ useReportBuilder: false,
782
+ reportBuilderLookupTables: [],
783
+ timestamps: true,
784
+ createLogs: false,
785
+ checkSchema: false,
786
+ collectionOptions: null,
787
+ skipCache: true
788
+ };
789
+ if (options.collectionName === 'users') {
790
+ this.collection_version = MongoManagerUserCollection.create(versionOptions);
791
+ }
792
+ else {
793
+ this.collection_version = MongoManagerCollection.create(versionOptions);
794
+ }
795
+ setImmediate(function () { return __awaiter(_this, void 0, void 0, function () {
796
+ return __generator(this, function (_a) {
797
+ switch (_a.label) {
798
+ case 0: return [4 /*yield*/, this.collection_version.createIndex({ '_id._id': 1, '_id.__v': 1 })];
799
+ case 1:
800
+ _a.sent();
801
+ return [2 /*return*/];
802
+ }
803
+ });
804
+ }); });
805
+ this.collection_main.versionCollection = options.collectionName + '.versions';
806
+ }
807
+ };
808
+ return MongoManagerModel;
809
+ }());
810
+ exports.MongoManagerModel = MongoManagerModel;
811
+ var MongoManagerCollection = /** @class */ (function () {
812
+ function MongoManagerCollection() {
813
+ this.collectionName = '';
814
+ this.checkSchema = false;
815
+ this.simplschema = null;
816
+ this.rbSchema = null;
817
+ this.timestamps = false;
818
+ this.useVersions = false;
819
+ this.versionCollection = '';
820
+ this.createLogs = true;
821
+ this.useRB = false;
822
+ this.skipCache = false;
823
+ this.bypassSession = false;
824
+ }
825
+ MongoManagerCollection.create = function (options) {
826
+ var mongoManagerCollection = new MongoManagerCollection();
827
+ mongoManagerCollection.initialize(options);
828
+ return mongoManagerCollection;
829
+ };
830
+ MongoManagerCollection.prototype.initialize = function (options) {
831
+ var _this = this;
832
+ this.collectionName = options.collectionName;
833
+ this.simplschema = new simpl_schema_1.default(options.schema);
834
+ this.timestamps = options.timestamps;
835
+ this.createLogs = options.createLogs;
836
+ this.checkSchema = options.checkSchema;
837
+ this.collectionOptions = options.collectionOptions;
838
+ this.skipCache = options.skipCache || false;
839
+ this.bypassSession = options.bypassSession || false;
840
+ if (options.useReportBuilder) {
841
+ this.useRB = true;
842
+ var schemaCopy = (0, common_1.deepCopy)(options.schema);
843
+ var rbSchema = (0, common_1.buildRbLookups)(options.reportBuilderLookupTables, schemaCopy, []);
844
+ this.rbSchema = (0, common_1.buildRbSchema)(rbSchema);
845
+ }
846
+ var interval = setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
847
+ return __generator(this, function (_a) {
848
+ switch (_a.label) {
849
+ case 0:
850
+ if (!(resolveio_server_app_1.ResolveIOServer && resolveio_server_app_1.ResolveIOServer.getMainServer() && resolveio_server_app_1.ResolveIOServer.getMongoManager() && resolveio_server_app_1.ResolveIOServer.getMongoManager().getServerCollections().length)) return [3 /*break*/, 2];
851
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().registerCollection(this)];
852
+ case 1:
853
+ _a.sent();
854
+ clearInterval(interval);
855
+ _a.label = 2;
856
+ case 2: return [2 /*return*/];
857
+ }
858
+ });
859
+ }); }, 1);
860
+ };
861
+ // Method to extract index name from error message
862
+ MongoManagerCollection.prototype.extractIndexNameFromError = function (errorMessage) {
863
+ var regexPattern = /Index already exists with a different name: (\S+)/;
864
+ var matches = errorMessage.match(regexPattern);
865
+ if (!matches || matches.length <= 1) {
866
+ // If the first pattern doesn't match, try the second pattern
867
+ regexPattern = /existing index:.*name: "([^"]+)"/;
868
+ matches = errorMessage.match(regexPattern);
869
+ }
870
+ return matches && matches.length > 1 ? matches[1] : null;
871
+ };
872
+ MongoManagerCollection.prototype.aggregate = function (pipeline, options, skipCache, bypassSession) {
873
+ if (skipCache === void 0) { skipCache = false; }
874
+ if (bypassSession === void 0) { bypassSession = false; }
875
+ return __awaiter(this, void 0, void 0, function () {
876
+ var mongoSession, _a, session, safeOptions, monitor, res, err_5;
877
+ return __generator(this, function (_b) {
878
+ switch (_b.label) {
879
+ case 0:
880
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
881
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
882
+ if (!options) {
883
+ options = {
884
+ session: mongoSession
885
+ };
886
+ }
887
+ else {
888
+ options.session = mongoSession;
889
+ }
890
+ }
891
+ if (!(!skipCache && !this.skipCache)) return [3 /*break*/, 1];
892
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().aggregate(this.collectionName, pipeline, options)];
893
+ case 1:
894
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
895
+ monitor = monitor_manager_1.MonitorMongo.create('aggregate', this.collectionName, JSON.stringify([pipeline, safeOptions]));
896
+ _b.label = 2;
897
+ case 2:
898
+ _b.trys.push([2, 4, 5, 7]);
899
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray()];
900
+ case 3:
901
+ res = _b.sent();
902
+ return [2 /*return*/, res];
903
+ case 4:
904
+ err_5 = _b.sent();
905
+ console.log(JSON.stringify([new Date(), 'Error Aggregate', this.collectionName, pipeline, safeOptions, {
906
+ code: err_5.code,
907
+ codeName: err_5.codeName,
908
+ message: err_5.message,
909
+ stack: err_5.stack
910
+ }], null, 2));
911
+ err_5.message = "Error in Aggregate: ".concat(this.collectionName, " => ").concat(err_5.codeName || 'NoCodeName', " => ").concat(err_5.message);
912
+ throw err_5;
913
+ case 5: return [4 /*yield*/, monitor.finish()];
914
+ case 6:
915
+ _b.sent();
916
+ return [7 /*endfinally*/];
917
+ case 7: return [2 /*return*/];
918
+ }
919
+ });
920
+ });
921
+ };
922
+ MongoManagerCollection.prototype.aggregateCount = function (pipeline, options, bypassSession) {
923
+ if (bypassSession === void 0) { bypassSession = false; }
924
+ return __awaiter(this, void 0, void 0, function () {
925
+ var mongoSession, _a, session, safeOptions, monitor, res, err_6;
926
+ return __generator(this, function (_b) {
927
+ switch (_b.label) {
928
+ case 0:
929
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
930
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
931
+ if (!options) {
932
+ options = {
933
+ session: mongoSession
934
+ };
935
+ }
936
+ else {
937
+ options.session = mongoSession;
938
+ }
939
+ }
940
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
941
+ monitor = monitor_manager_1.MonitorMongo.create('aggregateCount', this.collectionName, JSON.stringify([pipeline, safeOptions]));
942
+ _b.label = 1;
943
+ case 1:
944
+ _b.trys.push([1, 3, 4, 6]);
945
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray()];
946
+ case 2:
947
+ res = _b.sent();
948
+ return [2 /*return*/, res.length];
949
+ case 3:
950
+ err_6 = _b.sent();
951
+ console.log(JSON.stringify([new Date(), 'Error Aggregate Count', this.collectionName, pipeline, safeOptions, {
952
+ code: err_6.code,
953
+ codeName: err_6.codeName,
954
+ message: err_6.message,
955
+ stack: err_6.stack
956
+ }], null, 2));
957
+ err_6.message = "Error in Aggregate Count: ".concat(this.collectionName, " => ").concat(err_6.codeName || 'NoCodeName', " => ").concat(err_6.message);
958
+ throw err_6;
959
+ case 4: return [4 /*yield*/, monitor.finish()];
960
+ case 5:
961
+ _b.sent();
962
+ return [7 /*endfinally*/];
963
+ case 6: return [2 /*return*/];
964
+ }
965
+ });
966
+ });
967
+ };
968
+ MongoManagerCollection.prototype.aggregateCursor = function (pipeline, options, bypassSession) {
969
+ var _this = this;
970
+ if (bypassSession === void 0) { bypassSession = false; }
971
+ var mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
972
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
973
+ if (!options) {
974
+ options = {
975
+ session: mongoSession
976
+ };
977
+ }
978
+ else {
979
+ options.session = mongoSession;
980
+ }
981
+ }
982
+ // eslint-disable-next-line no-unused-vars
983
+ var _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
984
+ var monitor = monitor_manager_1.MonitorMongo.create('aggregateCursor', this.collectionName, JSON.stringify([pipeline, safeOptions]));
985
+ var cursor = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).aggregate(pipeline, options);
986
+ cursor.on('close', function (ev) { return __awaiter(_this, void 0, void 0, function () {
987
+ return __generator(this, function (_a) {
988
+ switch (_a.label) {
989
+ case 0: return [4 /*yield*/, monitor.finish()];
990
+ case 1:
991
+ _a.sent();
992
+ return [2 /*return*/, ev];
993
+ }
994
+ });
995
+ }); });
996
+ return cursor;
997
+ };
998
+ MongoManagerCollection.prototype.aggregateStream = function (pipeline, options, streamOptions, bypassSession) {
999
+ var _this = this;
1000
+ if (bypassSession === void 0) { bypassSession = false; }
1001
+ var mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1002
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1003
+ if (!options) {
1004
+ options = {
1005
+ session: mongoSession
1006
+ };
1007
+ }
1008
+ else {
1009
+ options.session = mongoSession;
1010
+ }
1011
+ }
1012
+ // eslint-disable-next-line no-unused-vars
1013
+ var _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1014
+ var monitor = monitor_manager_1.MonitorMongo.create('aggregateStream', this.collectionName, JSON.stringify([pipeline, safeOptions, streamOptions]));
1015
+ var stream = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions).on('close', function (ev) { return __awaiter(_this, void 0, void 0, function () {
1016
+ return __generator(this, function (_a) {
1017
+ switch (_a.label) {
1018
+ case 0: return [4 /*yield*/, monitor.finish()];
1019
+ case 1:
1020
+ _a.sent();
1021
+ return [2 /*return*/, ev];
1022
+ }
1023
+ });
1024
+ }); });
1025
+ return stream;
1026
+ };
1027
+ MongoManagerCollection.prototype.bulkWrite = function (operations, options, bypassCheckSchema, bypassLogs, bypassVersions, bypassSession) {
1028
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
1029
+ if (bypassLogs === void 0) { bypassLogs = false; }
1030
+ if (bypassVersions === void 0) { bypassVersions = false; }
1031
+ if (bypassSession === void 0) { bypassSession = false; }
1032
+ return __awaiter(this, void 0, void 0, function () {
1033
+ var BATCH_SIZE, opIndex, mongoSession, _a, session, safeOptions, batchOps, logs, versionOps, batchOps_1, batchOps_1_1, op, opType, doc, validationContext, isValid, affectedDocs, versionFilters, versionInserts, _b, _c, monitor, err_7, bwOptions, affectedDocIds, pipeline, oldVersions, _d;
1034
+ var e_4, _e;
1035
+ return __generator(this, function (_f) {
1036
+ switch (_f.label) {
1037
+ case 0:
1038
+ if (!operations.length) {
1039
+ return [2 /*return*/, null];
1040
+ }
1041
+ BATCH_SIZE = 1000;
1042
+ opIndex = 0;
1043
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1044
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1045
+ if (!options) {
1046
+ options = { session: mongoSession };
1047
+ }
1048
+ else {
1049
+ options.session = mongoSession;
1050
+ }
1051
+ }
1052
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1053
+ _f.label = 1;
1054
+ case 1:
1055
+ if (!(opIndex < operations.length)) return [3 /*break*/, 27];
1056
+ batchOps = operations.slice(opIndex, opIndex + BATCH_SIZE);
1057
+ logs = [];
1058
+ versionOps = [];
1059
+ try {
1060
+ for (batchOps_1 = (e_4 = void 0, __values(batchOps)), batchOps_1_1 = batchOps_1.next(); !batchOps_1_1.done; batchOps_1_1 = batchOps_1.next()) {
1061
+ op = batchOps_1_1.value;
1062
+ opType = Object.keys(op)[0];
1063
+ doc = op[opType];
1064
+ // Skip validation if bypassCheckSchema is true
1065
+ if (this.checkSchema && !bypassCheckSchema) {
1066
+ validationContext = this.simplschema.newContext();
1067
+ isValid = void 0;
1068
+ if (opType === 'insertOne') {
1069
+ isValid = validationContext.validate(doc.document);
1070
+ }
1071
+ else if (opType === 'replaceOne') {
1072
+ isValid = validationContext.validate(doc.replacement);
1073
+ }
1074
+ else if (opType === 'updateOne' || opType === 'updateMany') {
1075
+ // For updates, validate the update modifier
1076
+ isValid = validationContext.validate(doc.update, { modifier: true });
1077
+ }
1078
+ else if (opType === 'deleteOne' || opType === 'deleteMany') {
1079
+ // No validation needed for deletes
1080
+ isValid = true;
1081
+ }
1082
+ else {
1083
+ throw new Error("Unsupported operation type: ".concat(opType));
1084
+ }
1085
+ if (!isValid) {
1086
+ throw new Error("Schema validation failed for ".concat(opType, ": ").concat(JSON.stringify(validationContext.validationErrors(), null, 2)));
1087
+ }
1088
+ }
1089
+ // Now proceed to process the operations
1090
+ if (opType === 'insertOne') {
1091
+ // If this.timestamps is true, set createdAt and updatedAt
1092
+ if (this.timestamps) {
1093
+ if (!doc.document.createdAt) {
1094
+ doc.document.createdAt = new Date();
1095
+ }
1096
+ if (!doc.document.updatedAt) {
1097
+ doc.document.updatedAt = new Date();
1098
+ }
1099
+ }
1100
+ // Prepare log entry
1101
+ if (!bypassLogs && this.createLogs) {
1102
+ logs.push({
1103
+ _id: (0, common_1.objectIdHexString)(),
1104
+ type: 'document',
1105
+ collection: this.collectionName,
1106
+ id_document: doc.document._id || (0, common_1.objectIdHexString)(),
1107
+ payload: (0, common_1.getBinarySize)(JSON.stringify(doc.document)) < 1000000
1108
+ ? JSON.stringify(doc.document, null, 2)
1109
+ : 'Too Big',
1110
+ method: 'insertOne',
1111
+ id_user: '',
1112
+ user: '',
1113
+ messageId: 0,
1114
+ route: '',
1115
+ createdAt: new Date(),
1116
+ });
1117
+ }
1118
+ // Since we might have modified doc.document, update the operation
1119
+ op[opType].document = doc.document;
1120
+ }
1121
+ else if (opType === 'updateOne' || opType === 'updateMany') {
1122
+ // If this.timestamps is true, add updatedAt
1123
+ if (this.timestamps) {
1124
+ if (!doc.update.$set) {
1125
+ doc.update.$set = {};
1126
+ }
1127
+ doc.update.$set.updatedAt = new Date();
1128
+ }
1129
+ // If this.useVersions is true, increment __v
1130
+ if (!bypassVersions && this.useVersions) {
1131
+ if (!doc.update.$inc) {
1132
+ doc.update.$inc = {};
1133
+ }
1134
+ doc.update.$inc.__v = 1;
1135
+ }
1136
+ // Prepare log entry
1137
+ if (!bypassLogs && this.createLogs) {
1138
+ logs.push({
1139
+ _id: (0, common_1.objectIdHexString)(),
1140
+ type: 'document',
1141
+ collection: this.collectionName,
1142
+ id_document: doc.filter._id || null,
1143
+ payload: (0, common_1.getBinarySize)(JSON.stringify(doc.update)) < 1000000
1144
+ ? JSON.stringify(doc.update, null, 2)
1145
+ : 'Too Big',
1146
+ method: opType,
1147
+ id_user: '',
1148
+ user: '',
1149
+ messageId: 0,
1150
+ route: '',
1151
+ createdAt: new Date()
1152
+ });
1153
+ }
1154
+ // For versioning, store the filter to fetch the document later
1155
+ if (!bypassVersions && this.useVersions) {
1156
+ versionOps.push({
1157
+ filter: doc.filter,
1158
+ });
1159
+ }
1160
+ // No need to modify the operation further
1161
+ }
1162
+ else if (opType === 'replaceOne') {
1163
+ // If this.timestamps is true, set updatedAt
1164
+ if (this.timestamps) {
1165
+ doc.replacement.updatedAt = new Date();
1166
+ }
1167
+ // If this.useVersions is true, increment __v
1168
+ if (!bypassVersions && this.useVersions) {
1169
+ doc.replacement.__v = (doc.replacement.__v || 0) + 1;
1170
+ }
1171
+ // Prepare log entry
1172
+ if (!bypassLogs && this.createLogs) {
1173
+ logs.push({
1174
+ _id: (0, common_1.objectIdHexString)(),
1175
+ type: 'document',
1176
+ collection: this.collectionName,
1177
+ id_document: doc.filter._id || null,
1178
+ payload: (0, common_1.getBinarySize)(JSON.stringify(doc.replacement)) < 1000000
1179
+ ? JSON.stringify(doc.replacement, null, 2)
1180
+ : 'Too Big',
1181
+ method: 'replaceOne',
1182
+ id_user: '',
1183
+ user: '',
1184
+ messageId: 0,
1185
+ route: '',
1186
+ createdAt: new Date(),
1187
+ });
1188
+ }
1189
+ // For versioning, store the filter to fetch the document later
1190
+ if (!bypassVersions && this.useVersions) {
1191
+ versionOps.push({
1192
+ filter: doc.filter,
1193
+ });
1194
+ }
1195
+ // Since we might have modified doc.replacement, update the operation
1196
+ op[opType].replacement = doc.replacement;
1197
+ }
1198
+ else if (opType === 'deleteOne' || opType === 'deleteMany') {
1199
+ // Prepare log entry
1200
+ if (!bypassLogs && this.createLogs) {
1201
+ logs.push({
1202
+ _id: (0, common_1.objectIdHexString)(),
1203
+ type: 'document',
1204
+ collection: this.collectionName,
1205
+ id_document: doc.filter._id || null,
1206
+ payload: (0, common_1.getBinarySize)(JSON.stringify(doc.filter)) < 1000000
1207
+ ? JSON.stringify(doc.filter, null, 2)
1208
+ : 'Too Big',
1209
+ method: opType,
1210
+ id_user: '',
1211
+ user: '',
1212
+ messageId: 0,
1213
+ route: '',
1214
+ createdAt: new Date(),
1215
+ });
1216
+ }
1217
+ // For versioning, store the filter to fetch the document later
1218
+ if (!bypassVersions && this.useVersions) {
1219
+ versionOps.push({
1220
+ filter: doc.filter,
1221
+ });
1222
+ }
1223
+ // No need to modify the operation
1224
+ }
1225
+ else {
1226
+ throw new Error("Unsupported operation type: ".concat(opType));
1227
+ }
1228
+ }
1229
+ }
1230
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1231
+ finally {
1232
+ try {
1233
+ if (batchOps_1_1 && !batchOps_1_1.done && (_e = batchOps_1.return)) _e.call(batchOps_1);
1234
+ }
1235
+ finally { if (e_4) throw e_4.error; }
1236
+ }
1237
+ affectedDocs = [];
1238
+ if (!(!bypassVersions && this.useVersions && versionOps.length > 0)) return [3 /*break*/, 10];
1239
+ _f.label = 2;
1240
+ case 2:
1241
+ _f.trys.push([2, 9, , 10]);
1242
+ versionFilters = versionOps.map(function (v) { return v.filter; });
1243
+ if (!versionFilters.length) return [3 /*break*/, 4];
1244
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName).find({ $or: versionFilters }, { session: session }).toArray()];
1245
+ case 3:
1246
+ affectedDocs = _f.sent();
1247
+ _f.label = 4;
1248
+ case 4:
1249
+ versionInserts = affectedDocs.map(function (doc) { return ({
1250
+ insertOne: {
1251
+ document: __assign(__assign({}, doc), { _id: { _id: doc._id, __v: doc.__v } }),
1252
+ },
1253
+ }); });
1254
+ if (!(versionInserts.length > 0)) return [3 /*break*/, 8];
1255
+ _f.label = 5;
1256
+ case 5:
1257
+ _f.trys.push([5, 7, , 8]);
1258
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).bulkWrite(versionInserts)];
1259
+ case 6:
1260
+ _f.sent();
1261
+ return [3 /*break*/, 8];
1262
+ case 7:
1263
+ _b = _f.sent();
1264
+ return [3 /*break*/, 8];
1265
+ case 8: return [3 /*break*/, 10];
1266
+ case 9:
1267
+ _c = _f.sent();
1268
+ return [3 /*break*/, 10];
1269
+ case 10:
1270
+ monitor = monitor_manager_1.MonitorMongo.create('bulkWrite', this.collectionName, JSON.stringify([batchOps, safeOptions]));
1271
+ _f.label = 11;
1272
+ case 11:
1273
+ _f.trys.push([11, 13, 14, 16]);
1274
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName).bulkWrite(batchOps, options)];
1275
+ case 12:
1276
+ _f.sent();
1277
+ return [3 /*break*/, 16];
1278
+ case 13:
1279
+ err_7 = _f.sent();
1280
+ console.log(JSON.stringify([new Date(), 'Error Bulk Write', this.collectionName, operations, safeOptions, {
1281
+ code: err_7.code,
1282
+ codeName: err_7.codeName,
1283
+ message: err_7.message,
1284
+ stack: err_7.stack
1285
+ }], null, 2));
1286
+ err_7.message = "Error in Bulk Write: ".concat(this.collectionName, " => ").concat(err_7.codeName || 'NoCodeName', " => ").concat(err_7.message);
1287
+ throw err_7;
1288
+ case 14: return [4 /*yield*/, monitor.finish()];
1289
+ case 15:
1290
+ _f.sent();
1291
+ return [7 /*endfinally*/];
1292
+ case 16:
1293
+ if (!(!bypassLogs && this.createLogs && logs.length > 0)) return [3 /*break*/, 19];
1294
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
1295
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 17];
1296
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLogs(logs.map(function (a) {
1297
+ return {
1298
+ type: 'log',
1299
+ data: a
1300
+ };
1301
+ }));
1302
+ return [3 /*break*/, 19];
1303
+ case 17:
1304
+ bwOptions = null;
1305
+ bwOptions = { session: session, ordered: false };
1306
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').bulkWrite(logs.map(function (a) {
1307
+ return {
1308
+ insertOne: {
1309
+ document: a
1310
+ }
1311
+ };
1312
+ }), bwOptions)];
1313
+ case 18:
1314
+ _f.sent();
1315
+ _f.label = 19;
1316
+ case 19:
1317
+ if (!(!bypassVersions && this.useVersions)) return [3 /*break*/, 25];
1318
+ _f.label = 20;
1319
+ case 20:
1320
+ _f.trys.push([20, 24, , 25]);
1321
+ affectedDocIds = affectedDocs.map(function (doc) { return doc._id; });
1322
+ pipeline = [
1323
+ {
1324
+ $match: { '_id._id': { $in: affectedDocIds } },
1325
+ },
1326
+ {
1327
+ $sort: { '_id._id': 1, '_id.__v': -1 },
1328
+ },
1329
+ {
1330
+ $group: {
1331
+ _id: '$_id._id',
1332
+ versions: { $push: '$_id' },
1333
+ },
1334
+ },
1335
+ {
1336
+ $project: {
1337
+ versionsToDelete: { $slice: ['$versions', 5, { $size: '$versions' }] },
1338
+ },
1339
+ },
1340
+ { $unwind: '$versionsToDelete' },
1341
+ {
1342
+ $replaceRoot: { newRoot: { _id: '$versionsToDelete' } },
1343
+ },
1344
+ ];
1345
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).aggregate(pipeline).toArray()];
1346
+ case 21:
1347
+ oldVersions = _f.sent();
1348
+ if (!(oldVersions.length > 0)) return [3 /*break*/, 23];
1349
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.versionCollection).deleteMany({ _id: { $in: oldVersions.map(function (v) { return v._id; }) } })];
1350
+ case 22:
1351
+ _f.sent();
1352
+ _f.label = 23;
1353
+ case 23: return [3 /*break*/, 25];
1354
+ case 24:
1355
+ _d = _f.sent();
1356
+ return [3 /*break*/, 25];
1357
+ case 25:
1358
+ opIndex += BATCH_SIZE;
1359
+ // Yield to the event loop
1360
+ // eslint-disable-next-line no-restricted-syntax
1361
+ return [4 /*yield*/, new Promise(function (resolve) { return setImmediate(resolve); })];
1362
+ case 26:
1363
+ // Yield to the event loop
1364
+ // eslint-disable-next-line no-restricted-syntax
1365
+ _f.sent();
1366
+ // Invalidate cache
1367
+ if (!this.skipCache) {
1368
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
1369
+ }
1370
+ return [3 /*break*/, 1];
1371
+ case 27: return [2 /*return*/, { ok: 1 }]; // Adjust return value as per your requirements
1372
+ }
1373
+ });
1374
+ });
1375
+ };
1376
+ MongoManagerCollection.prototype.countDocuments = function (filter, options, skipCache) {
1377
+ if (filter === void 0) { filter = {}; }
1378
+ if (skipCache === void 0) { skipCache = false; }
1379
+ return __awaiter(this, void 0, void 0, function () {
1380
+ var _a, session, safeOptions, isUnfiltered, monitor, res, err_8;
1381
+ return __generator(this, function (_b) {
1382
+ switch (_b.label) {
1383
+ case 0:
1384
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1385
+ isUnfiltered = Object.keys(filter).length === 0;
1386
+ if (!isUnfiltered) return [3 /*break*/, 1];
1387
+ // Use collection stats for an unfiltered count
1388
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).estimatedDocumentCount(safeOptions)];
1389
+ case 1:
1390
+ if (!(!skipCache && !this.skipCache)) return [3 /*break*/, 2];
1391
+ // Use cached count if skipCache is false
1392
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().countDocuments(this.collectionName, filter, safeOptions)];
1393
+ case 2:
1394
+ monitor = monitor_manager_1.MonitorMongo.create('countDocuments', this.collectionName, JSON.stringify([filter, safeOptions]));
1395
+ _b.label = 3;
1396
+ case 3:
1397
+ _b.trys.push([3, 5, 6, 8]);
1398
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).countDocuments(filter, safeOptions)];
1399
+ case 4:
1400
+ res = _b.sent();
1401
+ return [2 /*return*/, res];
1402
+ case 5:
1403
+ err_8 = _b.sent();
1404
+ console.log(JSON.stringify([new Date(), 'Error Count Documents', this.collectionName, filter, safeOptions, {
1405
+ code: err_8.code,
1406
+ codeName: err_8.codeName,
1407
+ message: err_8.message,
1408
+ stack: err_8.stack
1409
+ }], null, 2));
1410
+ err_8.message = "Error in Count Documents: ".concat(this.collectionName, " => ").concat(err_8.codeName || 'NoCodeName', " => ").concat(err_8.message);
1411
+ throw err_8;
1412
+ case 6: return [4 /*yield*/, monitor.finish()];
1413
+ case 7:
1414
+ _b.sent();
1415
+ return [7 /*endfinally*/];
1416
+ case 8: return [2 /*return*/];
1417
+ }
1418
+ });
1419
+ });
1420
+ };
1421
+ //Helper Function (1 or Many) - Not Real Mongo Function
1422
+ MongoManagerCollection.prototype.create = function (f_docs, options) {
1423
+ if (!Array.isArray(f_docs)) {
1424
+ return this.insertOne(f_docs, options);
1425
+ }
1426
+ else if (f_docs.length === 1) {
1427
+ return this.insertOne(f_docs[0], options);
1428
+ }
1429
+ return this.insertMany(f_docs, options);
1430
+ };
1431
+ MongoManagerCollection.prototype.createIndex = function (fieldOrSpec, options) {
1432
+ return __awaiter(this, void 0, void 0, function () {
1433
+ var dbCollection, existingIndexes, indexExists, _a;
1434
+ return __generator(this, function (_b) {
1435
+ switch (_b.label) {
1436
+ case 0:
1437
+ _b.trys.push([0, 2, , 3]);
1438
+ dbCollection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);
1439
+ return [4 /*yield*/, dbCollection.indexes()];
1440
+ case 1:
1441
+ existingIndexes = _b.sent();
1442
+ indexExists = existingIndexes.some(function (index) {
1443
+ return JSON.stringify(index.key) === JSON.stringify(fieldOrSpec);
1444
+ });
1445
+ if (indexExists) {
1446
+ return [2 /*return*/, 'Index already exists']; // Skip creation if index exists
1447
+ }
1448
+ return [2 /*return*/, dbCollection.createIndex(fieldOrSpec, options)];
1449
+ case 2:
1450
+ _a = _b.sent();
1451
+ return [3 /*break*/, 3];
1452
+ case 3: return [2 /*return*/, 'Index creation queued'];
1453
+ }
1454
+ });
1455
+ });
1456
+ };
1457
+ MongoManagerCollection.prototype.createIndexes = function (indexSpecs, options) {
1458
+ return __awaiter(this, void 0, void 0, function () {
1459
+ var dbCollection, existingIndexes_1, indexesToCreate, _a;
1460
+ return __generator(this, function (_b) {
1461
+ switch (_b.label) {
1462
+ case 0:
1463
+ _b.trys.push([0, 2, , 3]);
1464
+ dbCollection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions);
1465
+ return [4 /*yield*/, dbCollection.indexes()];
1466
+ case 1:
1467
+ existingIndexes_1 = _b.sent();
1468
+ indexesToCreate = indexSpecs.filter(function (indexSpec) {
1469
+ return !existingIndexes_1.some(function (existingIndex) {
1470
+ return JSON.stringify(existingIndex.key) === JSON.stringify(indexSpec.key);
1471
+ });
1472
+ });
1473
+ // If no new indexes to create, resolve early
1474
+ if (indexesToCreate.length === 0) {
1475
+ return [2 /*return*/, ['All indexes already exist']];
1476
+ }
1477
+ return [2 /*return*/, dbCollection.createIndexes(indexSpecs, options)];
1478
+ case 2:
1479
+ _a = _b.sent();
1480
+ return [3 /*break*/, 3];
1481
+ case 3: return [2 /*return*/, ['Index creation queued']];
1482
+ }
1483
+ });
1484
+ });
1485
+ };
1486
+ MongoManagerCollection.prototype.deleteMany = function (filter, options, bypassLogs, bypassSession) {
1487
+ if (filter === void 0) { filter = {}; }
1488
+ if (bypassLogs === void 0) { bypassLogs = false; }
1489
+ if (bypassSession === void 0) { bypassSession = false; }
1490
+ return __awaiter(this, void 0, void 0, function () {
1491
+ var mongoSession, _a, session, safeOptions, docs, i, doc, versionDoc, _b, monitor, res, err_9;
1492
+ return __generator(this, function (_c) {
1493
+ switch (_c.label) {
1494
+ case 0:
1495
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1496
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1497
+ if (!options) {
1498
+ options = { session: mongoSession };
1499
+ }
1500
+ else {
1501
+ options.session = mongoSession;
1502
+ }
1503
+ }
1504
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1505
+ if (!((this.createLogs && !bypassLogs) || this.useVersions)) return [3 /*break*/, 11];
1506
+ return [4 /*yield*/, this.find(filter, { session: session })];
1507
+ case 1:
1508
+ docs = _c.sent();
1509
+ i = 0;
1510
+ _c.label = 2;
1511
+ case 2:
1512
+ if (!(i < docs.length)) return [3 /*break*/, 11];
1513
+ doc = docs[i];
1514
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 5];
1515
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
1516
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 3];
1517
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
1518
+ type: 'log',
1519
+ data: {
1520
+ _id: (0, common_1.objectIdHexString)(),
1521
+ type: 'document',
1522
+ collection: this.collectionName,
1523
+ id_document: doc._id,
1524
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
1525
+ method: 'deleteMany',
1526
+ id_user: '',
1527
+ user: '',
1528
+ messageId: 0,
1529
+ route: '',
1530
+ createdAt: new Date()
1531
+ }
1532
+ });
1533
+ return [3 /*break*/, 5];
1534
+ case 3: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
1535
+ _id: (0, common_1.objectIdHexString)(),
1536
+ type: 'document',
1537
+ collection: this.collectionName,
1538
+ id_document: doc._id,
1539
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
1540
+ method: 'deleteMany',
1541
+ id_user: '',
1542
+ user: '',
1543
+ messageId: 0,
1544
+ route: '',
1545
+ createdAt: new Date()
1546
+ }, { session: session })];
1547
+ case 4:
1548
+ _c.sent();
1549
+ _c.label = 5;
1550
+ case 5:
1551
+ if (!this.useVersions) return [3 /*break*/, 10];
1552
+ _c.label = 6;
1553
+ case 6:
1554
+ _c.trys.push([6, 9, , 10]);
1555
+ versionDoc = (0, common_1.deepCopy)(doc);
1556
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
1557
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
1558
+ case 7:
1559
+ _c.sent();
1560
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({ $and: [{ '_id._id': doc._id }, { '_id.__v': { $lt: doc.__v - 1 } }] })];
1561
+ case 8:
1562
+ _c.sent();
1563
+ return [3 /*break*/, 10];
1564
+ case 9:
1565
+ _b = _c.sent();
1566
+ return [3 /*break*/, 10];
1567
+ case 10:
1568
+ i++;
1569
+ return [3 /*break*/, 2];
1570
+ case 11:
1571
+ monitor = monitor_manager_1.MonitorMongo.create('deleteMany', this.collectionName, JSON.stringify([filter, safeOptions]));
1572
+ _c.label = 12;
1573
+ case 12:
1574
+ _c.trys.push([12, 14, 15, 17]);
1575
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).deleteMany(filter, options)];
1576
+ case 13:
1577
+ res = _c.sent();
1578
+ if (!this.skipCache) {
1579
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
1580
+ }
1581
+ return [2 /*return*/, res];
1582
+ case 14:
1583
+ err_9 = _c.sent();
1584
+ console.log(JSON.stringify([new Date(), 'Error Delete Many', this.collectionName, filter, safeOptions, {
1585
+ code: err_9.code,
1586
+ codeName: err_9.codeName,
1587
+ message: err_9.message,
1588
+ stack: err_9.stack
1589
+ }], null, 2));
1590
+ err_9.message = "Error in Delete Many: ".concat(this.collectionName, " => ").concat(err_9.codeName || 'NoCodeName', " => ").concat(err_9.message);
1591
+ throw err_9;
1592
+ case 15: return [4 /*yield*/, monitor.finish()];
1593
+ case 16:
1594
+ _c.sent();
1595
+ return [7 /*endfinally*/];
1596
+ case 17: return [2 /*return*/];
1597
+ }
1598
+ });
1599
+ });
1600
+ };
1601
+ MongoManagerCollection.prototype.deleteOne = function (filter, options, bypassLogs, bypassSession) {
1602
+ if (filter === void 0) { filter = {}; }
1603
+ if (bypassLogs === void 0) { bypassLogs = false; }
1604
+ if (bypassSession === void 0) { bypassSession = false; }
1605
+ return __awaiter(this, void 0, void 0, function () {
1606
+ var mongoSession, _a, session, safeOptions, monitor, res, doc, versionDoc, _b, err_10, monitor, res, err_11;
1607
+ return __generator(this, function (_c) {
1608
+ switch (_c.label) {
1609
+ case 0:
1610
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1611
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1612
+ if (!options) {
1613
+ options = { session: mongoSession };
1614
+ }
1615
+ else {
1616
+ options.session = mongoSession;
1617
+ }
1618
+ }
1619
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1620
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 17];
1621
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));
1622
+ _c.label = 1;
1623
+ case 1:
1624
+ _c.trys.push([1, 13, 14, 16]);
1625
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).deleteOne(filter, options)];
1626
+ case 2:
1627
+ res = _c.sent();
1628
+ return [4 /*yield*/, this.findOne(filter, options)];
1629
+ case 3:
1630
+ doc = _c.sent();
1631
+ if (!doc) return [3 /*break*/, 12];
1632
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 6];
1633
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
1634
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 4];
1635
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
1636
+ type: 'log',
1637
+ data: {
1638
+ _id: (0, common_1.objectIdHexString)(),
1639
+ type: 'document',
1640
+ collection: this.collectionName,
1641
+ id_document: doc._id,
1642
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
1643
+ method: 'deleteOne',
1644
+ id_user: '',
1645
+ user: '',
1646
+ messageId: 0,
1647
+ route: '',
1648
+ createdAt: new Date()
1649
+ }
1650
+ });
1651
+ return [3 /*break*/, 6];
1652
+ case 4: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
1653
+ _id: (0, common_1.objectIdHexString)(),
1654
+ type: 'document',
1655
+ collection: this.collectionName,
1656
+ id_document: doc._id,
1657
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
1658
+ method: 'deleteOne',
1659
+ id_user: '',
1660
+ user: '',
1661
+ messageId: 0,
1662
+ route: '',
1663
+ createdAt: new Date()
1664
+ }, { session: session })];
1665
+ case 5:
1666
+ _c.sent();
1667
+ _c.label = 6;
1668
+ case 6:
1669
+ if (!this.useVersions) return [3 /*break*/, 11];
1670
+ _c.label = 7;
1671
+ case 7:
1672
+ _c.trys.push([7, 10, , 11]);
1673
+ versionDoc = (0, common_1.deepCopy)(doc);
1674
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
1675
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
1676
+ case 8:
1677
+ _c.sent();
1678
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({ $and: [{ '_id._id': doc._id }, { '_id.__v': { $lt: doc.__v - 1 } }] })];
1679
+ case 9:
1680
+ _c.sent();
1681
+ return [3 /*break*/, 11];
1682
+ case 10:
1683
+ _b = _c.sent();
1684
+ return [3 /*break*/, 11];
1685
+ case 11:
1686
+ if (!this.skipCache) {
1687
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
1688
+ }
1689
+ _c.label = 12;
1690
+ case 12: return [2 /*return*/, res];
1691
+ case 13:
1692
+ err_10 = _c.sent();
1693
+ console.log(JSON.stringify([new Date(), 'Error Delete One (Find One And Delete)', this.collectionName, filter, safeOptions, {
1694
+ code: err_10.code,
1695
+ codeName: err_10.codeName,
1696
+ message: err_10.message,
1697
+ stack: err_10.stack
1698
+ }], null, 2));
1699
+ err_10.message = "Error in Delete One (Find One And Delete): ".concat(this.collectionName, " => ").concat(err_10.codeName || 'NoCodeName', " => ").concat(err_10.message);
1700
+ throw err_10;
1701
+ case 14: return [4 /*yield*/, monitor.finish()];
1702
+ case 15:
1703
+ _c.sent();
1704
+ return [7 /*endfinally*/];
1705
+ case 16: return [3 /*break*/, 23];
1706
+ case 17:
1707
+ monitor = monitor_manager_1.MonitorMongo.create('deleteOne', this.collectionName, JSON.stringify([filter, safeOptions]));
1708
+ _c.label = 18;
1709
+ case 18:
1710
+ _c.trys.push([18, 20, 21, 23]);
1711
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).deleteOne(filter, options)];
1712
+ case 19:
1713
+ res = _c.sent();
1714
+ if (!this.skipCache) {
1715
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
1716
+ }
1717
+ return [2 /*return*/, res];
1718
+ case 20:
1719
+ err_11 = _c.sent();
1720
+ console.log(JSON.stringify([new Date(), 'Error Delete One', this.collectionName, filter, safeOptions, {
1721
+ code: err_11.code,
1722
+ codeName: err_11.codeName,
1723
+ message: err_11.message,
1724
+ stack: err_11.stack
1725
+ }], null, 2));
1726
+ err_11.message = "Error in Delete One: ".concat(this.collectionName, " => ").concat(err_11.codeName || 'NoCodeName', " => ").concat(err_11.message);
1727
+ throw err_11;
1728
+ case 21: return [4 /*yield*/, monitor.finish()];
1729
+ case 22:
1730
+ _c.sent();
1731
+ return [7 /*endfinally*/];
1732
+ case 23: return [2 /*return*/];
1733
+ }
1734
+ });
1735
+ });
1736
+ };
1737
+ MongoManagerCollection.prototype.distinct = function (key, filter, options, bypassSession) {
1738
+ if (bypassSession === void 0) { bypassSession = false; }
1739
+ return __awaiter(this, void 0, void 0, function () {
1740
+ var mongoSession, _a, session, safeOptions, monitor, res, err_12;
1741
+ return __generator(this, function (_b) {
1742
+ switch (_b.label) {
1743
+ case 0:
1744
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1745
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1746
+ if (!options) {
1747
+ options = {
1748
+ session: mongoSession
1749
+ };
1750
+ }
1751
+ else {
1752
+ options.session = mongoSession;
1753
+ }
1754
+ }
1755
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1756
+ monitor = monitor_manager_1.MonitorMongo.create('distinct', this.collectionName, JSON.stringify([key, filter, safeOptions]));
1757
+ _b.label = 1;
1758
+ case 1:
1759
+ _b.trys.push([1, 3, 4, 6]);
1760
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).distinct(key, filter, options)];
1761
+ case 2:
1762
+ res = _b.sent();
1763
+ return [2 /*return*/, res];
1764
+ case 3:
1765
+ err_12 = _b.sent();
1766
+ console.log(JSON.stringify([new Date(), 'Error Distinct', this.collectionName, filter, safeOptions, {
1767
+ code: err_12.code,
1768
+ codeName: err_12.codeName,
1769
+ message: err_12.message,
1770
+ stack: err_12.stack
1771
+ }], null, 2));
1772
+ err_12.message = "Error in Distinct: ".concat(this.collectionName, " => ").concat(err_12.codeName || 'NoCodeName', " => ").concat(err_12.message);
1773
+ throw err_12;
1774
+ case 4: return [4 /*yield*/, monitor.finish()];
1775
+ case 5:
1776
+ _b.sent();
1777
+ return [7 /*endfinally*/];
1778
+ case 6: return [2 /*return*/];
1779
+ }
1780
+ });
1781
+ });
1782
+ };
1783
+ MongoManagerCollection.prototype.drop = function (options, bypassSession) {
1784
+ if (bypassSession === void 0) { bypassSession = false; }
1785
+ return __awaiter(this, void 0, void 0, function () {
1786
+ var mongoSession, _a, session, safeOptions, monitor, res, err_13;
1787
+ return __generator(this, function (_b) {
1788
+ switch (_b.label) {
1789
+ case 0:
1790
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1791
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1792
+ if (!options) {
1793
+ options = {
1794
+ session: mongoSession
1795
+ };
1796
+ }
1797
+ else {
1798
+ options.session = mongoSession;
1799
+ }
1800
+ }
1801
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1802
+ monitor = monitor_manager_1.MonitorMongo.create('drop', this.collectionName, JSON.stringify([safeOptions]));
1803
+ _b.label = 1;
1804
+ case 1:
1805
+ _b.trys.push([1, 3, 4, 6]);
1806
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).drop(options)];
1807
+ case 2:
1808
+ res = _b.sent();
1809
+ return [2 /*return*/, res];
1810
+ case 3:
1811
+ err_13 = _b.sent();
1812
+ console.log(JSON.stringify([new Date(), 'Error Drop Collection', this.collectionName, safeOptions, {
1813
+ code: err_13.code,
1814
+ codeName: err_13.codeName,
1815
+ message: err_13.message,
1816
+ stack: err_13.stack
1817
+ }], null, 2));
1818
+ err_13.message = "Error in Drop Collection: ".concat(this.collectionName, " => ").concat(err_13.codeName || 'NoCodeName', " => ").concat(err_13.message);
1819
+ throw err_13;
1820
+ case 4: return [4 /*yield*/, monitor.finish()];
1821
+ case 5:
1822
+ _b.sent();
1823
+ return [7 /*endfinally*/];
1824
+ case 6: return [2 /*return*/];
1825
+ }
1826
+ });
1827
+ });
1828
+ };
1829
+ MongoManagerCollection.prototype.dropIndex = function (indexName, options, bypassSession) {
1830
+ if (bypassSession === void 0) { bypassSession = false; }
1831
+ return __awaiter(this, void 0, void 0, function () {
1832
+ var mongoSession, _a, session, safeOptions, monitor, res, err_14;
1833
+ return __generator(this, function (_b) {
1834
+ switch (_b.label) {
1835
+ case 0:
1836
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1837
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1838
+ if (!options) {
1839
+ options = {
1840
+ session: mongoSession
1841
+ };
1842
+ }
1843
+ else {
1844
+ options.session = mongoSession;
1845
+ }
1846
+ }
1847
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1848
+ monitor = monitor_manager_1.MonitorMongo.create('dropIndex', this.collectionName, JSON.stringify([indexName, safeOptions]));
1849
+ _b.label = 1;
1850
+ case 1:
1851
+ _b.trys.push([1, 3, 4, 6]);
1852
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).dropIndex(indexName, options)];
1853
+ case 2:
1854
+ res = _b.sent();
1855
+ return [2 /*return*/, res];
1856
+ case 3:
1857
+ err_14 = _b.sent();
1858
+ console.log(JSON.stringify([new Date(), 'Error Drop Index', this.collectionName, indexName, safeOptions, {
1859
+ code: err_14.code,
1860
+ codeName: err_14.codeName,
1861
+ message: err_14.message,
1862
+ stack: err_14.stack
1863
+ }], null, 2));
1864
+ err_14.message = "Error in Drop Index: ".concat(this.collectionName, " => ").concat(err_14.codeName || 'NoCodeName', " => ").concat(err_14.message);
1865
+ throw err_14;
1866
+ case 4: return [4 /*yield*/, monitor.finish()];
1867
+ case 5:
1868
+ _b.sent();
1869
+ return [7 /*endfinally*/];
1870
+ case 6: return [2 /*return*/];
1871
+ }
1872
+ });
1873
+ });
1874
+ };
1875
+ MongoManagerCollection.prototype.dropIndexes = function (options, bypassSession) {
1876
+ if (bypassSession === void 0) { bypassSession = false; }
1877
+ return __awaiter(this, void 0, void 0, function () {
1878
+ var mongoSession, _a, session, safeOptions, monitor, res, err_15;
1879
+ return __generator(this, function (_b) {
1880
+ switch (_b.label) {
1881
+ case 0:
1882
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1883
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1884
+ if (!options) {
1885
+ options = {
1886
+ session: mongoSession
1887
+ };
1888
+ }
1889
+ else {
1890
+ options.session = mongoSession;
1891
+ }
1892
+ }
1893
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1894
+ monitor = monitor_manager_1.MonitorMongo.create('dropIndexes', this.collectionName, JSON.stringify([safeOptions]));
1895
+ _b.label = 1;
1896
+ case 1:
1897
+ _b.trys.push([1, 3, 4, 6]);
1898
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).dropIndexes(options)];
1899
+ case 2:
1900
+ res = _b.sent();
1901
+ return [2 /*return*/, res];
1902
+ case 3:
1903
+ err_15 = _b.sent();
1904
+ console.log(JSON.stringify([new Date(), 'Error Drop Indexes', this.collectionName, safeOptions, {
1905
+ code: err_15.code,
1906
+ codeName: err_15.codeName,
1907
+ message: err_15.message,
1908
+ stack: err_15.stack
1909
+ }], null, 2));
1910
+ err_15.message = "Error in Drop Indexes: ".concat(this.collectionName, " => ").concat(err_15.codeName || 'NoCodeName', " => ").concat(err_15.message);
1911
+ throw err_15;
1912
+ case 4: return [4 /*yield*/, monitor.finish()];
1913
+ case 5:
1914
+ _b.sent();
1915
+ return [7 /*endfinally*/];
1916
+ case 6: return [2 /*return*/];
1917
+ }
1918
+ });
1919
+ });
1920
+ };
1921
+ MongoManagerCollection.prototype.find = function (filter, options, skipCache, bypassSession) {
1922
+ if (filter === void 0) { filter = {}; }
1923
+ if (skipCache === void 0) { skipCache = false; }
1924
+ if (bypassSession === void 0) { bypassSession = false; }
1925
+ return __awaiter(this, void 0, void 0, function () {
1926
+ var mongoSession, _a, session, safeOptions, monitor, res, err_16;
1927
+ return __generator(this, function (_b) {
1928
+ switch (_b.label) {
1929
+ case 0:
1930
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1931
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1932
+ if (!options) {
1933
+ options = {
1934
+ session: mongoSession
1935
+ };
1936
+ }
1937
+ else {
1938
+ options.session = mongoSession;
1939
+ }
1940
+ }
1941
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1942
+ if (!(!skipCache && !this.skipCache)) return [3 /*break*/, 1];
1943
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().find(this.collectionName, filter, options)];
1944
+ case 1:
1945
+ monitor = monitor_manager_1.MonitorMongo.create('find', this.collectionName, JSON.stringify([filter, safeOptions]));
1946
+ _b.label = 2;
1947
+ case 2:
1948
+ _b.trys.push([2, 4, 5, 7]);
1949
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).find(filter, options).toArray()];
1950
+ case 3:
1951
+ res = _b.sent();
1952
+ return [2 /*return*/, res];
1953
+ case 4:
1954
+ err_16 = _b.sent();
1955
+ console.log(JSON.stringify([new Date(), 'Error Find', this.collectionName, filter, safeOptions, {
1956
+ code: err_16.code,
1957
+ codeName: err_16.codeName,
1958
+ message: err_16.message,
1959
+ stack: err_16.stack
1960
+ }], null, 2));
1961
+ err_16.message = "Error in Find: ".concat(this.collectionName, " => ").concat(err_16.codeName || 'NoCodeName', " => ").concat(err_16.message);
1962
+ throw err_16;
1963
+ case 5: return [4 /*yield*/, monitor.finish()];
1964
+ case 6:
1965
+ _b.sent();
1966
+ return [7 /*endfinally*/];
1967
+ case 7: return [2 /*return*/];
1968
+ }
1969
+ });
1970
+ });
1971
+ };
1972
+ MongoManagerCollection.prototype.findById = function (id, options, skipCache, bypassSession) {
1973
+ if (skipCache === void 0) { skipCache = false; }
1974
+ if (bypassSession === void 0) { bypassSession = false; }
1975
+ return __awaiter(this, void 0, void 0, function () {
1976
+ var mongoSession, _a, session, safeOptions, monitor, res, err_17;
1977
+ return __generator(this, function (_b) {
1978
+ switch (_b.label) {
1979
+ case 0:
1980
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
1981
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
1982
+ if (!options) {
1983
+ options = {
1984
+ session: mongoSession
1985
+ };
1986
+ }
1987
+ else {
1988
+ options.session = mongoSession;
1989
+ }
1990
+ }
1991
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
1992
+ if (!(!skipCache && !this.skipCache)) return [3 /*break*/, 1];
1993
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().findOne(this.collectionName, { _id: id }, options)];
1994
+ case 1:
1995
+ monitor = monitor_manager_1.MonitorMongo.create('findById', this.collectionName, JSON.stringify([{ _id: id }, safeOptions]));
1996
+ _b.label = 2;
1997
+ case 2:
1998
+ _b.trys.push([2, 4, 5, 7]);
1999
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOne({ _id: id }, options)];
2000
+ case 3:
2001
+ res = _b.sent();
2002
+ return [2 /*return*/, res];
2003
+ case 4:
2004
+ err_17 = _b.sent();
2005
+ console.log(JSON.stringify([new Date(), 'Error Find By ID', this.collectionName, id, safeOptions, {
2006
+ code: err_17.code,
2007
+ codeName: err_17.codeName,
2008
+ message: err_17.message,
2009
+ stack: err_17.stack
2010
+ }], null, 2));
2011
+ err_17.message = "Error in Find By ID: ".concat(this.collectionName, " => ").concat(err_17.codeName || 'NoCodeName', " => ").concat(err_17.message);
2012
+ throw err_17;
2013
+ case 5: return [4 /*yield*/, monitor.finish()];
2014
+ case 6:
2015
+ _b.sent();
2016
+ return [7 /*endfinally*/];
2017
+ case 7: return [2 /*return*/];
2018
+ }
2019
+ });
2020
+ });
2021
+ };
2022
+ MongoManagerCollection.prototype.findCount = function (filter, options, bypassSession) {
2023
+ if (filter === void 0) { filter = {}; }
2024
+ if (bypassSession === void 0) { bypassSession = false; }
2025
+ return __awaiter(this, void 0, void 0, function () {
2026
+ var mongoSession, _a, session, safeOptions, monitor, res, err_18;
2027
+ return __generator(this, function (_b) {
2028
+ switch (_b.label) {
2029
+ case 0:
2030
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2031
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2032
+ if (!options) {
2033
+ options = {
2034
+ session: mongoSession
2035
+ };
2036
+ }
2037
+ else {
2038
+ options.session = mongoSession;
2039
+ }
2040
+ }
2041
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2042
+ monitor = monitor_manager_1.MonitorMongo.create('findCount', this.collectionName, JSON.stringify([filter, safeOptions]));
2043
+ _b.label = 1;
2044
+ case 1:
2045
+ _b.trys.push([1, 3, 4, 6]);
2046
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).find(filter, options).count()];
2047
+ case 2:
2048
+ res = _b.sent();
2049
+ return [2 /*return*/, res];
2050
+ case 3:
2051
+ err_18 = _b.sent();
2052
+ console.log(JSON.stringify([new Date(), 'Error Find Count', this.collectionName, filter, safeOptions, {
2053
+ code: err_18.code,
2054
+ codeName: err_18.codeName,
2055
+ message: err_18.message,
2056
+ stack: err_18.stack
2057
+ }], null, 2));
2058
+ err_18.message = "Error in Find Count: ".concat(this.collectionName, " => ").concat(err_18.codeName || 'NoCodeName', " => ").concat(err_18.message);
2059
+ throw err_18;
2060
+ case 4: return [4 /*yield*/, monitor.finish()];
2061
+ case 5:
2062
+ _b.sent();
2063
+ return [7 /*endfinally*/];
2064
+ case 6: return [2 /*return*/];
2065
+ }
2066
+ });
2067
+ });
2068
+ };
2069
+ MongoManagerCollection.prototype.findCursor = function (filter, options, bypassSession) {
2070
+ var _this = this;
2071
+ if (filter === void 0) { filter = {}; }
2072
+ if (bypassSession === void 0) { bypassSession = false; }
2073
+ var mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2074
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2075
+ if (!options) {
2076
+ options = { session: mongoSession };
2077
+ }
2078
+ else {
2079
+ options.session = mongoSession;
2080
+ }
2081
+ }
2082
+ // eslint-disable-next-line no-unused-vars
2083
+ var _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2084
+ var monitor = monitor_manager_1.MonitorMongo.create('findCursor', this.collectionName, JSON.stringify([filter, safeOptions]));
2085
+ var cursor = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).find(filter, options);
2086
+ cursor.on('close', function (ev) { return __awaiter(_this, void 0, void 0, function () {
2087
+ return __generator(this, function (_a) {
2088
+ switch (_a.label) {
2089
+ case 0: return [4 /*yield*/, monitor.finish()];
2090
+ case 1:
2091
+ _a.sent();
2092
+ cursor.removeAllListeners();
2093
+ return [2 /*return*/, ev];
2094
+ }
2095
+ });
2096
+ }); });
2097
+ return cursor;
2098
+ };
2099
+ MongoManagerCollection.prototype.findStream = function (filter, options, streamOptions, bypassSession) {
2100
+ var _this = this;
2101
+ if (filter === void 0) { filter = {}; }
2102
+ if (bypassSession === void 0) { bypassSession = false; }
2103
+ var mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2104
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2105
+ if (!options) {
2106
+ options = { session: mongoSession };
2107
+ }
2108
+ else {
2109
+ options.session = mongoSession;
2110
+ }
2111
+ }
2112
+ // eslint-disable-next-line no-unused-vars
2113
+ var _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2114
+ var monitor = monitor_manager_1.MonitorMongo.create('findStream', this.collectionName, JSON.stringify([filter, safeOptions, streamOptions]));
2115
+ var stream = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).find(filter, options).stream(streamOptions).on('close', function (ev) { return __awaiter(_this, void 0, void 0, function () {
2116
+ return __generator(this, function (_a) {
2117
+ switch (_a.label) {
2118
+ case 0: return [4 /*yield*/, monitor.finish()];
2119
+ case 1:
2120
+ _a.sent();
2121
+ return [2 /*return*/, ev];
2122
+ }
2123
+ });
2124
+ }); });
2125
+ return stream;
2126
+ };
2127
+ MongoManagerCollection.prototype.findOne = function (filter, options, skipCache, bypassSession) {
2128
+ if (filter === void 0) { filter = {}; }
2129
+ if (skipCache === void 0) { skipCache = false; }
2130
+ if (bypassSession === void 0) { bypassSession = false; }
2131
+ return __awaiter(this, void 0, void 0, function () {
2132
+ var mongoSession, _a, session, safeOptions, monitor, res, err_19;
2133
+ return __generator(this, function (_b) {
2134
+ switch (_b.label) {
2135
+ case 0:
2136
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2137
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2138
+ if (!options) {
2139
+ options = {
2140
+ session: mongoSession
2141
+ };
2142
+ }
2143
+ else {
2144
+ options.session = mongoSession;
2145
+ }
2146
+ }
2147
+ if (!(!skipCache && !this.skipCache)) return [3 /*break*/, 1];
2148
+ return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().findOne(this.collectionName, filter, options)];
2149
+ case 1:
2150
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2151
+ monitor = monitor_manager_1.MonitorMongo.create('findOne', this.collectionName, JSON.stringify([filter, safeOptions]));
2152
+ _b.label = 2;
2153
+ case 2:
2154
+ _b.trys.push([2, 4, 5, 7]);
2155
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOne(filter, options)];
2156
+ case 3:
2157
+ res = _b.sent();
2158
+ return [2 /*return*/, res];
2159
+ case 4:
2160
+ err_19 = _b.sent();
2161
+ console.log(JSON.stringify([new Date(), 'Error Find One', this.collectionName, filter, safeOptions, {
2162
+ code: err_19.code,
2163
+ codeName: err_19.codeName,
2164
+ message: err_19.message,
2165
+ stack: err_19.stack
2166
+ }], null, 2));
2167
+ err_19.message = "Error in Find One: ".concat(this.collectionName, " => ").concat(err_19.codeName || 'NoCodeName', " => ").concat(err_19.message);
2168
+ throw err_19;
2169
+ case 5: return [4 /*yield*/, monitor.finish()];
2170
+ case 6:
2171
+ _b.sent();
2172
+ return [7 /*endfinally*/];
2173
+ case 7: return [2 /*return*/];
2174
+ }
2175
+ });
2176
+ });
2177
+ };
2178
+ MongoManagerCollection.prototype.findOneAndDelete = function (filter, options, bypassLogs, bypassSession) {
2179
+ if (filter === void 0) { filter = {}; }
2180
+ if (bypassLogs === void 0) { bypassLogs = false; }
2181
+ if (bypassSession === void 0) { bypassSession = false; }
2182
+ return __awaiter(this, void 0, void 0, function () {
2183
+ var mongoSession, _a, session, safeOptions, monitor, res, doc, versionDoc, _b, err_20;
2184
+ return __generator(this, function (_c) {
2185
+ switch (_c.label) {
2186
+ case 0:
2187
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2188
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2189
+ if (!options) {
2190
+ options = { session: mongoSession };
2191
+ }
2192
+ else {
2193
+ options.session = mongoSession;
2194
+ }
2195
+ }
2196
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2197
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndDelete', this.collectionName, JSON.stringify([filter, safeOptions]));
2198
+ _c.label = 1;
2199
+ case 1:
2200
+ _c.trys.push([1, 12, 13, 15]);
2201
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndDelete(filter, options)];
2202
+ case 2:
2203
+ res = _c.sent();
2204
+ doc = res.value;
2205
+ if (!doc) return [3 /*break*/, 10];
2206
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 5];
2207
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
2208
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 3];
2209
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2210
+ type: 'log',
2211
+ data: {
2212
+ _id: (0, common_1.objectIdHexString)(),
2213
+ type: 'document',
2214
+ collection: this.collectionName,
2215
+ id_document: doc._id,
2216
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
2217
+ method: 'findOneAndDelete',
2218
+ id_user: '',
2219
+ user: '',
2220
+ messageId: 0,
2221
+ route: '',
2222
+ createdAt: new Date()
2223
+ }
2224
+ });
2225
+ return [3 /*break*/, 5];
2226
+ case 3: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
2227
+ _id: (0, common_1.objectIdHexString)(),
2228
+ type: 'document',
2229
+ collection: this.collectionName,
2230
+ id_document: doc._id,
2231
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, safeOptions], null, 2) : 'Too Big',
2232
+ method: 'findOneAndDelete',
2233
+ id_user: '',
2234
+ user: '',
2235
+ messageId: 0,
2236
+ route: '',
2237
+ createdAt: new Date()
2238
+ }, { session: session })];
2239
+ case 4:
2240
+ _c.sent();
2241
+ _c.label = 5;
2242
+ case 5:
2243
+ if (!this.useVersions) return [3 /*break*/, 9];
2244
+ _c.label = 6;
2245
+ case 6:
2246
+ _c.trys.push([6, 8, , 9]);
2247
+ versionDoc = (0, common_1.deepCopy)(doc);
2248
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
2249
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
2250
+ case 7:
2251
+ _c.sent();
2252
+ return [3 /*break*/, 9];
2253
+ case 8:
2254
+ _b = _c.sent();
2255
+ return [3 /*break*/, 9];
2256
+ case 9:
2257
+ if (!this.skipCache) {
2258
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
2259
+ }
2260
+ return [2 /*return*/, doc];
2261
+ case 10: return [2 /*return*/, null];
2262
+ case 11: return [3 /*break*/, 15];
2263
+ case 12:
2264
+ err_20 = _c.sent();
2265
+ console.log(JSON.stringify([new Date(), 'Error Find One And Delete', this.collectionName, filter, safeOptions, {
2266
+ code: err_20.code,
2267
+ codeName: err_20.codeName,
2268
+ message: err_20.message,
2269
+ stack: err_20.stack
2270
+ }], null, 2));
2271
+ err_20.message = "Error in Find One And Delete: ".concat(this.collectionName, " => ").concat(err_20.codeName || 'NoCodeName', " => ").concat(err_20.message);
2272
+ throw err_20;
2273
+ case 13: return [4 /*yield*/, monitor.finish()];
2274
+ case 14:
2275
+ _c.sent();
2276
+ return [7 /*endfinally*/];
2277
+ case 15: return [2 /*return*/];
2278
+ }
2279
+ });
2280
+ });
2281
+ };
2282
+ MongoManagerCollection.prototype.findOneAndReplace = function (filter, replacement, options, bypassLogs, bypassCheckSchema, bypassSession) {
2283
+ if (filter === void 0) { filter = {}; }
2284
+ if (bypassLogs === void 0) { bypassLogs = false; }
2285
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
2286
+ if (bypassSession === void 0) { bypassSession = false; }
2287
+ return __awaiter(this, void 0, void 0, function () {
2288
+ var validation, isValid, date, mongoSession, _a, session, safeOptions, monitor, res, doc, versionDoc, _b, err_21;
2289
+ return __generator(this, function (_c) {
2290
+ switch (_c.label) {
2291
+ case 0:
2292
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
2293
+ validation = this.simplschema.newContext();
2294
+ isValid = validation.validate(replacement);
2295
+ if (!!isValid) return [3 /*break*/, 2];
2296
+ console.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());
2297
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on findOneAndReplace - ' + this.collectionName, JSON.stringify([validation.validationErrors(), replacement], null, 2))];
2298
+ case 1:
2299
+ _c.sent();
2300
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
2301
+ case 2:
2302
+ date = new Date();
2303
+ if (this.timestamps) {
2304
+ replacement.updatedAt = date;
2305
+ }
2306
+ if (options && options.upsert) {
2307
+ if (!replacement._id) {
2308
+ replacement._id = (0, common_1.objectIdHexString)();
2309
+ }
2310
+ if (this.useVersions) {
2311
+ replacement.__v = 0;
2312
+ }
2313
+ if (this.timestamps && !replacement.createdAt) {
2314
+ replacement.createdAt = date;
2315
+ }
2316
+ }
2317
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2318
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2319
+ if (!options) {
2320
+ options = { session: mongoSession };
2321
+ }
2322
+ else {
2323
+ options.session = mongoSession;
2324
+ }
2325
+ }
2326
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2327
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));
2328
+ _c.label = 3;
2329
+ case 3:
2330
+ _c.trys.push([3, 14, 15, 17]);
2331
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndReplace(filter, replacement, options)];
2332
+ case 4:
2333
+ res = _c.sent();
2334
+ doc = res.value;
2335
+ if (!doc) return [3 /*break*/, 12];
2336
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 7];
2337
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
2338
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 5];
2339
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2340
+ type: 'log',
2341
+ data: {
2342
+ _id: (0, common_1.objectIdHexString)(),
2343
+ type: 'document',
2344
+ collection: this.collectionName,
2345
+ id_document: doc._id,
2346
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',
2347
+ method: 'findOneAndReplace',
2348
+ id_user: '',
2349
+ user: '',
2350
+ messageId: 0,
2351
+ route: '',
2352
+ createdAt: new Date()
2353
+ }
2354
+ });
2355
+ return [3 /*break*/, 7];
2356
+ case 5: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
2357
+ _id: (0, common_1.objectIdHexString)(),
2358
+ type: 'document',
2359
+ collection: this.collectionName,
2360
+ id_document: doc._id,
2361
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',
2362
+ method: 'findOneAndReplace',
2363
+ id_user: '',
2364
+ user: '',
2365
+ messageId: 0,
2366
+ route: '',
2367
+ createdAt: new Date()
2368
+ }, { session: session })];
2369
+ case 6:
2370
+ _c.sent();
2371
+ _c.label = 7;
2372
+ case 7:
2373
+ if (!this.useVersions) return [3 /*break*/, 11];
2374
+ _c.label = 8;
2375
+ case 8:
2376
+ _c.trys.push([8, 10, , 11]);
2377
+ versionDoc = (0, common_1.deepCopy)(doc);
2378
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
2379
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
2380
+ case 9:
2381
+ _c.sent();
2382
+ return [3 /*break*/, 11];
2383
+ case 10:
2384
+ _b = _c.sent();
2385
+ return [3 /*break*/, 11];
2386
+ case 11:
2387
+ if (!this.skipCache) {
2388
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
2389
+ }
2390
+ return [2 /*return*/, doc];
2391
+ case 12: return [2 /*return*/, null];
2392
+ case 13: return [3 /*break*/, 17];
2393
+ case 14:
2394
+ err_21 = _c.sent();
2395
+ console.log(JSON.stringify([new Date(), 'Error Find One And Replace', this.collectionName, filter, safeOptions, {
2396
+ code: err_21.code,
2397
+ codeName: err_21.codeName,
2398
+ message: err_21.message,
2399
+ stack: err_21.stack
2400
+ }], null, 2));
2401
+ err_21.message = "Error in Find One And Replace: ".concat(this.collectionName, " => ").concat(err_21.codeName || 'NoCodeName', " => ").concat(err_21.message);
2402
+ throw err_21;
2403
+ case 15: return [4 /*yield*/, monitor.finish()];
2404
+ case 16:
2405
+ _c.sent();
2406
+ return [7 /*endfinally*/];
2407
+ case 17: return [2 /*return*/];
2408
+ }
2409
+ });
2410
+ });
2411
+ };
2412
+ MongoManagerCollection.prototype.findOneAndUpdate = function (filter, update, options, bypassLogs, bypassCheckSchema, bypassSession) {
2413
+ if (filter === void 0) { filter = {}; }
2414
+ if (bypassLogs === void 0) { bypassLogs = false; }
2415
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
2416
+ if (bypassSession === void 0) { bypassSession = false; }
2417
+ return __awaiter(this, void 0, void 0, function () {
2418
+ var validation, isValid, date, mongoSession, _a, session, safeOptions, monitor, res, doc, versionDoc, _b, err_22;
2419
+ return __generator(this, function (_c) {
2420
+ switch (_c.label) {
2421
+ case 0:
2422
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
2423
+ validation = this.simplschema.newContext();
2424
+ isValid = validation.validate(update, { modifier: true });
2425
+ if (!!isValid) return [3 /*break*/, 2];
2426
+ console.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());
2427
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on findOneAndUpdate - ' + this.collectionName, JSON.stringify([validation.validationErrors(), update], null, 2))];
2428
+ case 1:
2429
+ _c.sent();
2430
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
2431
+ case 2:
2432
+ if (this.timestamps) {
2433
+ date = new Date();
2434
+ if (!update.$set) {
2435
+ update.$set = { updatedAt: date };
2436
+ }
2437
+ else {
2438
+ update.$set.updatedAt = date;
2439
+ }
2440
+ }
2441
+ if (options && options.upsert) {
2442
+ if (!update.$setOnInsert) {
2443
+ if (this.timestamps) {
2444
+ update.$setOnInsert = {
2445
+ _id: (0, common_1.objectIdHexString)(),
2446
+ createdAt: new Date()
2447
+ };
2448
+ }
2449
+ else {
2450
+ update.$setOnInsert = {
2451
+ _id: (0, common_1.objectIdHexString)()
2452
+ };
2453
+ }
2454
+ }
2455
+ else {
2456
+ if (!update.$setOnInsert._id) {
2457
+ update.$setOnInsert._id = (0, common_1.objectIdHexString)();
2458
+ }
2459
+ if (this.timestamps && !update.$setOnInsert.createdAt) {
2460
+ update.$setOnInsert.createdAt = new Date();
2461
+ }
2462
+ }
2463
+ }
2464
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2465
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2466
+ if (!options) {
2467
+ options = { session: mongoSession };
2468
+ }
2469
+ else {
2470
+ options.session = mongoSession;
2471
+ }
2472
+ }
2473
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2474
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));
2475
+ _c.label = 3;
2476
+ case 3:
2477
+ _c.trys.push([3, 14, 15, 17]);
2478
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(filter, update, options)];
2479
+ case 4:
2480
+ res = _c.sent();
2481
+ doc = res.value;
2482
+ if (!doc) return [3 /*break*/, 12];
2483
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 7];
2484
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
2485
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 5];
2486
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2487
+ type: 'log',
2488
+ data: {
2489
+ _id: (0, common_1.objectIdHexString)(),
2490
+ type: 'document',
2491
+ collection: this.collectionName,
2492
+ id_document: doc._id,
2493
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
2494
+ method: 'findOneAndUpdate',
2495
+ id_user: '',
2496
+ user: '',
2497
+ messageId: 0,
2498
+ route: '',
2499
+ createdAt: new Date()
2500
+ }
2501
+ });
2502
+ return [3 /*break*/, 7];
2503
+ case 5: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
2504
+ _id: (0, common_1.objectIdHexString)(),
2505
+ type: 'document',
2506
+ collection: this.collectionName,
2507
+ id_document: doc._id,
2508
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
2509
+ method: 'findOneAndUpdate',
2510
+ id_user: '',
2511
+ user: '',
2512
+ messageId: 0,
2513
+ route: '',
2514
+ createdAt: new Date()
2515
+ }, { session: session })];
2516
+ case 6:
2517
+ _c.sent();
2518
+ _c.label = 7;
2519
+ case 7:
2520
+ if (!this.useVersions) return [3 /*break*/, 11];
2521
+ _c.label = 8;
2522
+ case 8:
2523
+ _c.trys.push([8, 10, , 11]);
2524
+ versionDoc = (0, common_1.deepCopy)(doc);
2525
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
2526
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
2527
+ case 9:
2528
+ _c.sent();
2529
+ return [3 /*break*/, 11];
2530
+ case 10:
2531
+ _b = _c.sent();
2532
+ return [3 /*break*/, 11];
2533
+ case 11:
2534
+ if (!this.skipCache) {
2535
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
2536
+ }
2537
+ return [2 /*return*/, doc];
2538
+ case 12: return [2 /*return*/, null];
2539
+ case 13: return [3 /*break*/, 17];
2540
+ case 14:
2541
+ err_22 = _c.sent();
2542
+ console.log(JSON.stringify([new Date(), 'Error Find One And Update', this.collectionName, filter, safeOptions, {
2543
+ code: err_22.code,
2544
+ codeName: err_22.codeName,
2545
+ message: err_22.message,
2546
+ stack: err_22.stack
2547
+ }], null, 2));
2548
+ err_22.message = "Error in Find One And Update: ".concat(this.collectionName, " => ").concat(err_22.codeName || 'NoCodeName', " => ").concat(err_22.message);
2549
+ throw err_22;
2550
+ case 15: return [4 /*yield*/, monitor.finish()];
2551
+ case 16:
2552
+ _c.sent();
2553
+ return [7 /*endfinally*/];
2554
+ case 17: return [2 /*return*/];
2555
+ }
2556
+ });
2557
+ });
2558
+ };
2559
+ MongoManagerCollection.prototype.indexes = function (options) {
2560
+ return __awaiter(this, void 0, void 0, function () {
2561
+ var _a, session, safeOptions, monitor, res, err_23;
2562
+ return __generator(this, function (_b) {
2563
+ switch (_b.label) {
2564
+ case 0:
2565
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2566
+ monitor = monitor_manager_1.MonitorMongo.create('indexes', this.collectionName, JSON.stringify([safeOptions]));
2567
+ _b.label = 1;
2568
+ case 1:
2569
+ _b.trys.push([1, 3, 4, 6]);
2570
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).indexes(options)];
2571
+ case 2:
2572
+ res = _b.sent();
2573
+ return [2 /*return*/, res];
2574
+ case 3:
2575
+ err_23 = _b.sent();
2576
+ console.log(JSON.stringify([new Date(), 'Error Indexes', this.collectionName, safeOptions, {
2577
+ code: err_23.code,
2578
+ codeName: err_23.codeName,
2579
+ message: err_23.message,
2580
+ stack: err_23.stack
2581
+ }], null, 2));
2582
+ err_23.message = "Error in Indexes: ".concat(this.collectionName, " => ").concat(err_23.codeName || 'NoCodeName', " => ").concat(err_23.message);
2583
+ throw err_23;
2584
+ case 4: return [4 /*yield*/, monitor.finish()];
2585
+ case 5:
2586
+ _b.sent();
2587
+ return [7 /*endfinally*/];
2588
+ case 6: return [2 /*return*/];
2589
+ }
2590
+ });
2591
+ });
2592
+ };
2593
+ MongoManagerCollection.prototype.indexExists = function (indexes, options) {
2594
+ return __awaiter(this, void 0, void 0, function () {
2595
+ var _a, session, safeOptions, monitor, res, err_24;
2596
+ return __generator(this, function (_b) {
2597
+ switch (_b.label) {
2598
+ case 0:
2599
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2600
+ monitor = monitor_manager_1.MonitorMongo.create('indexExists', this.collectionName, JSON.stringify([indexes, safeOptions]));
2601
+ _b.label = 1;
2602
+ case 1:
2603
+ _b.trys.push([1, 3, 4, 6]);
2604
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).indexExists(indexes, options)];
2605
+ case 2:
2606
+ res = _b.sent();
2607
+ return [2 /*return*/, res];
2608
+ case 3:
2609
+ err_24 = _b.sent();
2610
+ console.log(JSON.stringify([new Date(), 'Error Index Exists', this.collectionName, indexes, safeOptions, {
2611
+ code: err_24.code,
2612
+ codeName: err_24.codeName,
2613
+ message: err_24.message,
2614
+ stack: err_24.stack
2615
+ }], null, 2));
2616
+ err_24.message = "Error in Index Exists: ".concat(this.collectionName, " => ").concat(err_24.codeName || 'NoCodeName', " => ").concat(err_24.message);
2617
+ throw err_24;
2618
+ case 4: return [4 /*yield*/, monitor.finish()];
2619
+ case 5:
2620
+ _b.sent();
2621
+ return [7 /*endfinally*/];
2622
+ case 6: return [2 /*return*/];
2623
+ }
2624
+ });
2625
+ });
2626
+ };
2627
+ MongoManagerCollection.prototype.insertMany = function (docs, options, bypassLogs, bypassCheckSchema, bypassMonitor, bypassSession) {
2628
+ if (bypassLogs === void 0) { bypassLogs = false; }
2629
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
2630
+ if (bypassMonitor === void 0) { bypassMonitor = false; }
2631
+ if (bypassSession === void 0) { bypassSession = false; }
2632
+ return __awaiter(this, void 0, void 0, function () {
2633
+ var validationResults, docs_1, docs_1_1, doc, validation, isValid, e_5_1, validDocs, mongoSession, _a, session, safeOptions, i, doc, date, monitor, err_25;
2634
+ var e_5, _b;
2635
+ return __generator(this, function (_c) {
2636
+ switch (_c.label) {
2637
+ case 0:
2638
+ if (!docs.length) {
2639
+ return [2 /*return*/, []];
2640
+ }
2641
+ validationResults = [];
2642
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 9];
2643
+ _c.label = 1;
2644
+ case 1:
2645
+ _c.trys.push([1, 7, 8, 9]);
2646
+ docs_1 = __values(docs), docs_1_1 = docs_1.next();
2647
+ _c.label = 2;
2648
+ case 2:
2649
+ if (!!docs_1_1.done) return [3 /*break*/, 6];
2650
+ doc = docs_1_1.value;
2651
+ validation = this.simplschema.newContext();
2652
+ isValid = validation.validate(doc);
2653
+ if (!!isValid) return [3 /*break*/, 4];
2654
+ console.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());
2655
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on insertMany - ' + this.collectionName, JSON.stringify([validation.validationErrors(), doc], null, 2))];
2656
+ case 3:
2657
+ _c.sent();
2658
+ validationResults.push(false);
2659
+ return [3 /*break*/, 5];
2660
+ case 4:
2661
+ validationResults.push(true);
2662
+ _c.label = 5;
2663
+ case 5:
2664
+ docs_1_1 = docs_1.next();
2665
+ return [3 /*break*/, 2];
2666
+ case 6: return [3 /*break*/, 9];
2667
+ case 7:
2668
+ e_5_1 = _c.sent();
2669
+ e_5 = { error: e_5_1 };
2670
+ return [3 /*break*/, 9];
2671
+ case 8:
2672
+ try {
2673
+ if (docs_1_1 && !docs_1_1.done && (_b = docs_1.return)) _b.call(docs_1);
2674
+ }
2675
+ finally { if (e_5) throw e_5.error; }
2676
+ return [7 /*endfinally*/];
2677
+ case 9:
2678
+ validDocs = this.checkSchema ? docs.filter(function (a, idx) { return validationResults[idx]; }) : docs;
2679
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2680
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2681
+ if (!options) {
2682
+ options = { session: mongoSession };
2683
+ }
2684
+ else {
2685
+ options.session = mongoSession;
2686
+ }
2687
+ }
2688
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2689
+ i = 0;
2690
+ _c.label = 10;
2691
+ case 10:
2692
+ if (!(i < validDocs.length)) return [3 /*break*/, 14];
2693
+ doc = validDocs[i];
2694
+ if (!doc._id) {
2695
+ doc._id = (0, common_1.objectIdHexString)();
2696
+ }
2697
+ if (this.timestamps) {
2698
+ date = new Date();
2699
+ if (!doc.createdAt) {
2700
+ doc.createdAt = date;
2701
+ }
2702
+ if (!doc.updatedAt) {
2703
+ doc.updatedAt = date;
2704
+ }
2705
+ }
2706
+ if (this.useVersions && !doc.hasOwnProperty('__v')) {
2707
+ doc.__v = 0;
2708
+ }
2709
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 13];
2710
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
2711
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 11];
2712
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2713
+ type: 'log',
2714
+ data: {
2715
+ _id: (0, common_1.objectIdHexString)(),
2716
+ type: 'document',
2717
+ collection: this.collectionName,
2718
+ id_document: doc._id,
2719
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',
2720
+ method: 'insertMany',
2721
+ id_user: '',
2722
+ user: '',
2723
+ messageId: 0,
2724
+ route: '',
2725
+ createdAt: new Date()
2726
+ }
2727
+ });
2728
+ return [3 /*break*/, 13];
2729
+ case 11: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
2730
+ _id: (0, common_1.objectIdHexString)(),
2731
+ type: 'document',
2732
+ collection: this.collectionName,
2733
+ id_document: doc._id,
2734
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',
2735
+ method: 'insertMany',
2736
+ id_user: '',
2737
+ user: '',
2738
+ messageId: 0,
2739
+ route: '',
2740
+ createdAt: new Date()
2741
+ }, { session: session })];
2742
+ case 12:
2743
+ _c.sent();
2744
+ _c.label = 13;
2745
+ case 13:
2746
+ i++;
2747
+ return [3 /*break*/, 10];
2748
+ case 14:
2749
+ if (!validDocs.length) return [3 /*break*/, 19];
2750
+ monitor = null;
2751
+ if (!bypassMonitor) {
2752
+ monitor = monitor_manager_1.MonitorMongo.create('insertMany', this.collectionName, JSON.stringify([validDocs, safeOptions]));
2753
+ }
2754
+ _c.label = 15;
2755
+ case 15:
2756
+ _c.trys.push([15, 17, 18, 19]);
2757
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).insertMany(validDocs, options)];
2758
+ case 16:
2759
+ _c.sent();
2760
+ if (!this.skipCache) {
2761
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
2762
+ }
2763
+ return [2 /*return*/, validDocs];
2764
+ case 17:
2765
+ err_25 = _c.sent();
2766
+ console.log(JSON.stringify([new Date(), 'Error Insert Many', this.collectionName, docs, safeOptions, {
2767
+ code: err_25.code,
2768
+ codeName: err_25.codeName,
2769
+ message: err_25.message,
2770
+ stack: err_25.stack
2771
+ }], null, 2));
2772
+ err_25.message = "Error in Insert Many: ".concat(this.collectionName, " => ").concat(err_25.codeName || 'NoCodeName', " => ").concat(err_25.message);
2773
+ throw err_25;
2774
+ case 18:
2775
+ if (monitor) {
2776
+ monitor.finish();
2777
+ }
2778
+ return [7 /*endfinally*/];
2779
+ case 19: return [2 /*return*/, []];
2780
+ }
2781
+ });
2782
+ });
2783
+ };
2784
+ MongoManagerCollection.prototype.insertOne = function (doc, options, bypassLogs, bypassCheckSchema, bypassSession) {
2785
+ if (bypassLogs === void 0) { bypassLogs = false; }
2786
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
2787
+ if (bypassSession === void 0) { bypassSession = false; }
2788
+ return __awaiter(this, void 0, void 0, function () {
2789
+ var validation, isValid, date, mongoSession, _a, session, safeOptions, monitor, err_26;
2790
+ return __generator(this, function (_b) {
2791
+ switch (_b.label) {
2792
+ case 0:
2793
+ if (!doc._id) {
2794
+ doc._id = (0, common_1.objectIdHexString)();
2795
+ }
2796
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
2797
+ validation = this.simplschema.newContext();
2798
+ isValid = validation.validate(doc);
2799
+ if (!!isValid) return [3 /*break*/, 2];
2800
+ console.log(new Date(), this.collectionName, 'Schema Errors - insertOne', validation.validationErrors());
2801
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on insertOne - ' + this.collectionName, JSON.stringify([validation.validationErrors(), doc], null, 2))];
2802
+ case 1:
2803
+ _b.sent();
2804
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
2805
+ case 2:
2806
+ if (this.timestamps) {
2807
+ date = new Date();
2808
+ if (!doc.createdAt) {
2809
+ doc.createdAt = date;
2810
+ }
2811
+ if (!doc.updatedAt) {
2812
+ doc.updatedAt = date;
2813
+ }
2814
+ }
2815
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2816
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2817
+ if (!options) {
2818
+ options = { session: mongoSession };
2819
+ }
2820
+ else {
2821
+ options.session = mongoSession;
2822
+ }
2823
+ }
2824
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2825
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 5];
2826
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
2827
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 3];
2828
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
2829
+ type: 'log',
2830
+ data: {
2831
+ _id: (0, common_1.objectIdHexString)(),
2832
+ type: 'document',
2833
+ collection: this.collectionName,
2834
+ id_document: doc._id,
2835
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',
2836
+ method: 'insertOne',
2837
+ id_user: '',
2838
+ user: '',
2839
+ messageId: 0,
2840
+ route: '',
2841
+ createdAt: new Date()
2842
+ }
2843
+ });
2844
+ return [3 /*break*/, 5];
2845
+ case 3: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
2846
+ _id: (0, common_1.objectIdHexString)(),
2847
+ type: 'document',
2848
+ collection: this.collectionName,
2849
+ id_document: doc._id,
2850
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, safeOptions])) < 1000000 ? JSON.stringify([doc, safeOptions], null, 2) : 'Too Big',
2851
+ method: 'insertOne',
2852
+ id_user: '',
2853
+ user: '',
2854
+ messageId: 0,
2855
+ route: '',
2856
+ createdAt: new Date()
2857
+ }, { session: session })];
2858
+ case 4:
2859
+ _b.sent();
2860
+ _b.label = 5;
2861
+ case 5:
2862
+ if (this.useVersions && !doc.hasOwnProperty('__v')) {
2863
+ doc.__v = 0;
2864
+ }
2865
+ monitor = monitor_manager_1.MonitorMongo.create('insertOne', this.collectionName, JSON.stringify([doc, safeOptions]));
2866
+ _b.label = 6;
2867
+ case 6:
2868
+ _b.trys.push([6, 8, 9, 11]);
2869
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).insertOne(doc, options)];
2870
+ case 7:
2871
+ _b.sent();
2872
+ if (!this.skipCache) {
2873
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
2874
+ }
2875
+ return [2 /*return*/, doc];
2876
+ case 8:
2877
+ err_26 = _b.sent();
2878
+ console.log(JSON.stringify([new Date(), 'Error Insert One', this.collectionName, doc, safeOptions, {
2879
+ code: err_26.code,
2880
+ codeName: err_26.codeName,
2881
+ message: err_26.message,
2882
+ stack: err_26.stack
2883
+ }], null, 2));
2884
+ err_26.message = "Error in Insert One: ".concat(this.collectionName, " => ").concat(err_26.codeName || 'NoCodeName', " => ").concat(err_26.message);
2885
+ throw err_26;
2886
+ case 9: return [4 /*yield*/, monitor.finish()];
2887
+ case 10:
2888
+ _b.sent();
2889
+ return [7 /*endfinally*/];
2890
+ case 11: return [2 /*return*/];
2891
+ }
2892
+ });
2893
+ });
2894
+ };
2895
+ MongoManagerCollection.prototype.listIndexes = function (options, bypassSession) {
2896
+ var _this = this;
2897
+ if (bypassSession === void 0) { bypassSession = false; }
2898
+ var mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2899
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2900
+ if (!options) {
2901
+ options = { session: mongoSession };
2902
+ }
2903
+ else {
2904
+ options.session = mongoSession;
2905
+ }
2906
+ }
2907
+ // eslint-disable-next-line no-unused-vars
2908
+ var _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2909
+ var monitor = monitor_manager_1.MonitorMongo.create('listIndexes', this.collectionName, JSON.stringify([safeOptions]));
2910
+ var cursor = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).listIndexes(options);
2911
+ cursor.on('close', function (ev) { return __awaiter(_this, void 0, void 0, function () {
2912
+ return __generator(this, function (_a) {
2913
+ switch (_a.label) {
2914
+ case 0: return [4 /*yield*/, monitor.finish()];
2915
+ case 1:
2916
+ _a.sent();
2917
+ return [2 /*return*/, ev];
2918
+ }
2919
+ });
2920
+ }); });
2921
+ return cursor;
2922
+ };
2923
+ MongoManagerCollection.prototype.rename = function (newName, options, bypassSession) {
2924
+ if (bypassSession === void 0) { bypassSession = false; }
2925
+ return __awaiter(this, void 0, void 0, function () {
2926
+ var mongoSession, _a, session, safeOptions, monitor, res, err_27;
2927
+ return __generator(this, function (_b) {
2928
+ switch (_b.label) {
2929
+ case 0:
2930
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2931
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2932
+ if (!options) {
2933
+ options = {
2934
+ session: mongoSession
2935
+ };
2936
+ }
2937
+ else {
2938
+ options.session = mongoSession;
2939
+ }
2940
+ }
2941
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
2942
+ monitor = monitor_manager_1.MonitorMongo.create('rename', this.collectionName, JSON.stringify([newName, safeOptions]));
2943
+ _b.label = 1;
2944
+ case 1:
2945
+ _b.trys.push([1, 3, 4, 6]);
2946
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).rename(newName, options)];
2947
+ case 2:
2948
+ res = _b.sent();
2949
+ return [2 /*return*/, res];
2950
+ case 3:
2951
+ err_27 = _b.sent();
2952
+ console.log(JSON.stringify([new Date(), 'Error Rename', this.collectionName, newName, safeOptions, {
2953
+ code: err_27.code,
2954
+ codeName: err_27.codeName,
2955
+ message: err_27.message,
2956
+ stack: err_27.stack
2957
+ }], null, 2));
2958
+ err_27.message = "Error in Rename: ".concat(this.collectionName, " => ").concat(err_27.codeName || 'NoCodeName', " => ").concat(err_27.message);
2959
+ throw err_27;
2960
+ case 4: return [4 /*yield*/, monitor.finish()];
2961
+ case 5:
2962
+ _b.sent();
2963
+ return [7 /*endfinally*/];
2964
+ case 6: return [2 /*return*/];
2965
+ }
2966
+ });
2967
+ });
2968
+ };
2969
+ MongoManagerCollection.prototype.replaceOne = function (filter, replacement, options, bypassLogs, bypassCheckSchema, doc, bypassSession) {
2970
+ if (bypassLogs === void 0) { bypassLogs = false; }
2971
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
2972
+ if (doc === void 0) { doc = null; }
2973
+ if (bypassSession === void 0) { bypassSession = false; }
2974
+ return __awaiter(this, void 0, void 0, function () {
2975
+ var validation, isValid, date, mongoSession, _a, session, safeOptions, versionDoc, _b, monitor, res, err_28, prevDoc, docId, docVersion, updatedDoc, monitor, res, err_29, monitor, res, err_30, _c, session_1, safeOptions_1, monitor, res, doc_1, err_31, monitor, res, err_32;
2976
+ return __generator(this, function (_d) {
2977
+ switch (_d.label) {
2978
+ case 0:
2979
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
2980
+ validation = this.simplschema.newContext();
2981
+ isValid = validation.validate(replacement);
2982
+ if (!!isValid) return [3 /*break*/, 2];
2983
+ console.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());
2984
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on replaceOne - ' + this.collectionName, JSON.stringify([validation.validationErrors(), replacement], null, 2))];
2985
+ case 1:
2986
+ _d.sent();
2987
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
2988
+ case 2:
2989
+ date = new Date();
2990
+ if (this.timestamps) {
2991
+ replacement.updatedAt = date;
2992
+ }
2993
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
2994
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
2995
+ if (!options) {
2996
+ options = { session: mongoSession };
2997
+ }
2998
+ else {
2999
+ options.session = mongoSession;
3000
+ }
3001
+ console.log('Replace One', 'Has Session', this.collectionName, JSON.stringify(filter, null, 2), JSON.stringify(replacement, null, 2));
3002
+ }
3003
+ else {
3004
+ console.log('Replace One', 'No Session', this.collectionName, JSON.stringify(filter, null, 2), JSON.stringify(replacement, null, 2));
3005
+ }
3006
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
3007
+ if (!this.useVersions) return [3 /*break*/, 45];
3008
+ if (!!doc) return [3 /*break*/, 4];
3009
+ return [4 /*yield*/, this.findOne(filter, { session: session }, true)];
3010
+ case 3:
3011
+ doc = _d.sent();
3012
+ _d.label = 4;
3013
+ case 4:
3014
+ if (!doc) return [3 /*break*/, 33];
3015
+ if (this.timestamps && !replacement.createdAt && doc.createdAt) {
3016
+ replacement.createdAt = doc.createdAt;
3017
+ }
3018
+ if (!(doc.__v === replacement.__v)) return [3 /*break*/, 20];
3019
+ _d.label = 5;
3020
+ case 5:
3021
+ _d.trys.push([5, 9, , 10]);
3022
+ replacement.__v += 1;
3023
+ versionDoc = (0, common_1.deepCopy)(doc);
3024
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
3025
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
3026
+ case 6:
3027
+ _d.sent();
3028
+ if (!(doc.__v >= 4)) return [3 /*break*/, 8];
3029
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({ $and: [{ '_id._id': doc._id }, { '_id.__v': { $lt: doc.__v - 4 } }] })];
3030
+ case 7:
3031
+ _d.sent();
3032
+ _d.label = 8;
3033
+ case 8: return [3 /*break*/, 10];
3034
+ case 9:
3035
+ _b = _d.sent();
3036
+ return [3 /*break*/, 10];
3037
+ case 10:
3038
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 13];
3039
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3040
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 11];
3041
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3042
+ type: 'log',
3043
+ data: {
3044
+ _id: (0, common_1.objectIdHexString)(),
3045
+ type: 'document',
3046
+ collection: this.collectionName,
3047
+ id_document: doc._id,
3048
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',
3049
+ method: 'replaceOne',
3050
+ id_user: '',
3051
+ user: '',
3052
+ messageId: 0,
3053
+ route: '',
3054
+ createdAt: new Date()
3055
+ }
3056
+ });
3057
+ return [3 /*break*/, 13];
3058
+ case 11: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3059
+ _id: (0, common_1.objectIdHexString)(),
3060
+ type: 'document',
3061
+ collection: this.collectionName,
3062
+ id_document: doc._id,
3063
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, replacement, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, replacement, safeOptions], null, 2) : 'Too Big',
3064
+ method: 'replaceOne',
3065
+ id_user: '',
3066
+ user: '',
3067
+ messageId: 0,
3068
+ route: '',
3069
+ createdAt: new Date()
3070
+ }, { session: session })];
3071
+ case 12:
3072
+ _d.sent();
3073
+ _d.label = 13;
3074
+ case 13:
3075
+ monitor = monitor_manager_1.MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));
3076
+ _d.label = 14;
3077
+ case 14:
3078
+ _d.trys.push([14, 16, 17, 19]);
3079
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).replaceOne(filter, replacement, options)];
3080
+ case 15:
3081
+ res = _d.sent();
3082
+ if (!this.skipCache) {
3083
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3084
+ }
3085
+ return [2 /*return*/, res];
3086
+ case 16:
3087
+ err_28 = _d.sent();
3088
+ console.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {
3089
+ code: err_28.code,
3090
+ codeName: err_28.codeName,
3091
+ message: err_28.message,
3092
+ stack: err_28.stack
3093
+ }], null, 2));
3094
+ err_28.message = "Error in Replace One: ".concat(this.collectionName, " => ").concat(err_28.codeName || 'NoCodeName', " => ").concat(err_28.message);
3095
+ throw err_28;
3096
+ case 17: return [4 /*yield*/, monitor.finish()];
3097
+ case 18:
3098
+ _d.sent();
3099
+ return [7 /*endfinally*/];
3100
+ case 19: return [3 /*break*/, 32];
3101
+ case 20:
3102
+ console.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);
3103
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({
3104
+ _id: {
3105
+ _id: doc._id,
3106
+ __v: replacement.__v
3107
+ }
3108
+ }, null, true)];
3109
+ case 21:
3110
+ prevDoc = _d.sent();
3111
+ if (!prevDoc) return [3 /*break*/, 31];
3112
+ docId = doc._id;
3113
+ docVersion = doc.__v;
3114
+ updatedDoc = (0, common_1.getMongoMergeUpdatedDoc)(replacement, doc, prevDoc);
3115
+ updatedDoc._id = docId;
3116
+ updatedDoc.__v = docVersion + 1;
3117
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 24];
3118
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3119
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 22];
3120
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3121
+ type: 'log',
3122
+ data: {
3123
+ _id: (0, common_1.objectIdHexString)(),
3124
+ type: 'document',
3125
+ collection: this.collectionName,
3126
+ id_document: docId,
3127
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',
3128
+ method: 'replaceOne',
3129
+ id_user: '',
3130
+ user: '',
3131
+ messageId: 0,
3132
+ route: '',
3133
+ createdAt: new Date()
3134
+ }
3135
+ });
3136
+ return [3 /*break*/, 24];
3137
+ case 22: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3138
+ _id: (0, common_1.objectIdHexString)(),
3139
+ type: 'document',
3140
+ collection: this.collectionName,
3141
+ id_document: docId,
3142
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions])) < 1000000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, safeOptions], null, 2) : 'Too Big',
3143
+ method: 'replaceOne',
3144
+ id_user: '',
3145
+ user: '',
3146
+ messageId: 0,
3147
+ route: '',
3148
+ createdAt: new Date()
3149
+ }, { session: session })];
3150
+ case 23:
3151
+ _d.sent();
3152
+ _d.label = 24;
3153
+ case 24:
3154
+ monitor = monitor_manager_1.MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, safeOptions]));
3155
+ _d.label = 25;
3156
+ case 25:
3157
+ _d.trys.push([25, 27, 28, 30]);
3158
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).replaceOne(filter, updatedDoc, options)];
3159
+ case 26:
3160
+ res = _d.sent();
3161
+ if (!this.skipCache) {
3162
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3163
+ }
3164
+ return [2 /*return*/, res.acknowledged];
3165
+ case 27:
3166
+ err_29 = _d.sent();
3167
+ console.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {
3168
+ code: err_29.code,
3169
+ codeName: err_29.codeName,
3170
+ message: err_29.message,
3171
+ stack: err_29.stack
3172
+ }], null, 2));
3173
+ err_29.message = "Error in Replace One: ".concat(this.collectionName, " => ").concat(err_29.codeName || 'NoCodeName', " => ").concat(err_29.message);
3174
+ throw err_29;
3175
+ case 28: return [4 /*yield*/, monitor.finish()];
3176
+ case 29:
3177
+ _d.sent();
3178
+ return [7 /*endfinally*/];
3179
+ case 30: return [3 /*break*/, 32];
3180
+ case 31: throw new Error('Error in Replace One: Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);
3181
+ case 32: return [3 /*break*/, 44];
3182
+ case 33:
3183
+ if (!(options && options.upsert)) return [3 /*break*/, 43];
3184
+ if (this.timestamps) {
3185
+ replacement.createdAt = date;
3186
+ }
3187
+ if (!replacement._id) {
3188
+ replacement._id = (0, common_1.objectIdHexString)();
3189
+ }
3190
+ replacement.__v = 0;
3191
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 36];
3192
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3193
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 34];
3194
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3195
+ type: 'log',
3196
+ data: {
3197
+ _id: (0, common_1.objectIdHexString)(),
3198
+ type: 'document',
3199
+ collection: this.collectionName,
3200
+ id_document: replacement._id,
3201
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',
3202
+ method: 'replaceOne',
3203
+ id_user: '',
3204
+ user: '',
3205
+ messageId: 0,
3206
+ route: '',
3207
+ createdAt: new Date()
3208
+ }
3209
+ });
3210
+ return [3 /*break*/, 36];
3211
+ case 34: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3212
+ _id: (0, common_1.objectIdHexString)(),
3213
+ type: 'document',
3214
+ collection: this.collectionName,
3215
+ id_document: replacement._id,
3216
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, replacement, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions], null, 2) : 'Too Big',
3217
+ method: 'replaceOne',
3218
+ id_user: '',
3219
+ user: '',
3220
+ messageId: 0,
3221
+ route: '',
3222
+ createdAt: new Date()
3223
+ }, { session: session })];
3224
+ case 35:
3225
+ _d.sent();
3226
+ _d.label = 36;
3227
+ case 36:
3228
+ monitor = monitor_manager_1.MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));
3229
+ _d.label = 37;
3230
+ case 37:
3231
+ _d.trys.push([37, 39, 40, 42]);
3232
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).replaceOne(filter, replacement, options)];
3233
+ case 38:
3234
+ res = _d.sent();
3235
+ if (!this.skipCache) {
3236
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3237
+ }
3238
+ return [2 /*return*/, res.acknowledged];
3239
+ case 39:
3240
+ err_30 = _d.sent();
3241
+ console.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {
3242
+ code: err_30.code,
3243
+ codeName: err_30.codeName,
3244
+ message: err_30.message,
3245
+ stack: err_30.stack
3246
+ }], null, 2));
3247
+ err_30.message = "Error in Replace One: ".concat(this.collectionName, " => ").concat(err_30.codeName || 'NoCodeName', " => ").concat(err_30.message);
3248
+ throw err_30;
3249
+ case 40: return [4 /*yield*/, monitor.finish()];
3250
+ case 41:
3251
+ _d.sent();
3252
+ return [7 /*endfinally*/];
3253
+ case 42: return [3 /*break*/, 44];
3254
+ case 43: return [2 /*return*/, {
3255
+ acknowledged: false,
3256
+ matchedCount: 0,
3257
+ modifiedCount: 0,
3258
+ upsertedCount: 0,
3259
+ upsertedId: null
3260
+ }];
3261
+ case 44: return [3 /*break*/, 66];
3262
+ case 45:
3263
+ if (options && options.upsert) {
3264
+ if (this.timestamps && !replacement.createdAt) {
3265
+ replacement.createdAt = date;
3266
+ }
3267
+ if (!replacement._id) {
3268
+ replacement._id = (0, common_1.objectIdHexString)();
3269
+ }
3270
+ replacement.__v = 0;
3271
+ }
3272
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 60];
3273
+ if (!options) {
3274
+ options = { returnDocument: 'before' };
3275
+ }
3276
+ else {
3277
+ options.returnDocument = 'before';
3278
+ }
3279
+ _c = options || {}, session_1 = _c.session, safeOptions_1 = __rest(_c, ["session"]);
3280
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, safeOptions_1]));
3281
+ _d.label = 46;
3282
+ case 46:
3283
+ _d.trys.push([46, 56, 57, 59]);
3284
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).replaceOne(filter, replacement, options)];
3285
+ case 47:
3286
+ res = _d.sent();
3287
+ return [4 /*yield*/, this.findOne(filter, options)];
3288
+ case 48:
3289
+ doc_1 = _d.sent();
3290
+ if (!doc_1) return [3 /*break*/, 52];
3291
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3292
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 49];
3293
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3294
+ type: 'log',
3295
+ data: {
3296
+ _id: (0, common_1.objectIdHexString)(),
3297
+ type: 'document',
3298
+ collection: this.collectionName,
3299
+ id_document: doc_1._id,
3300
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc_1, filter, replacement, safeOptions_1])) < 1000000 ? JSON.stringify([doc_1, filter, replacement, safeOptions_1], null, 2) : 'Too Big',
3301
+ method: 'replaceOne',
3302
+ id_user: '',
3303
+ user: '',
3304
+ messageId: 0,
3305
+ route: '',
3306
+ createdAt: new Date()
3307
+ }
3308
+ });
3309
+ return [3 /*break*/, 51];
3310
+ case 49: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3311
+ _id: (0, common_1.objectIdHexString)(),
3312
+ type: 'document',
3313
+ collection: this.collectionName,
3314
+ id_document: doc_1._id,
3315
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc_1, filter, replacement, safeOptions_1])) < 1000000 ? JSON.stringify([doc_1, filter, replacement, safeOptions_1], null, 2) : 'Too Big',
3316
+ method: 'replaceOne',
3317
+ id_user: '',
3318
+ user: '',
3319
+ messageId: 0,
3320
+ route: '',
3321
+ createdAt: new Date()
3322
+ }, { session: session_1 })];
3323
+ case 50:
3324
+ _d.sent();
3325
+ _d.label = 51;
3326
+ case 51: return [3 /*break*/, 55];
3327
+ case 52:
3328
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3329
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 53];
3330
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3331
+ type: 'log',
3332
+ data: {
3333
+ _id: (0, common_1.objectIdHexString)(),
3334
+ type: 'document',
3335
+ collection: this.collectionName,
3336
+ id_document: replacement._id,
3337
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, replacement, safeOptions_1])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions_1], null, 2) : 'Too Big',
3338
+ method: 'replaceOne',
3339
+ id_user: '',
3340
+ user: '',
3341
+ messageId: 0,
3342
+ route: '',
3343
+ createdAt: new Date()
3344
+ }
3345
+ });
3346
+ return [3 /*break*/, 55];
3347
+ case 53: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3348
+ _id: (0, common_1.objectIdHexString)(),
3349
+ type: 'document',
3350
+ collection: this.collectionName,
3351
+ id_document: replacement._id,
3352
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, replacement, safeOptions_1])) < 1000000 ? JSON.stringify(['upsert', filter, replacement, safeOptions_1], null, 2) : 'Too Big',
3353
+ method: 'replaceOne',
3354
+ id_user: '',
3355
+ user: '',
3356
+ messageId: 0,
3357
+ route: '',
3358
+ createdAt: new Date()
3359
+ }, { session: session_1 })];
3360
+ case 54:
3361
+ _d.sent();
3362
+ _d.label = 55;
3363
+ case 55:
3364
+ if (!this.skipCache) {
3365
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3366
+ }
3367
+ return [2 /*return*/, res];
3368
+ case 56:
3369
+ err_31 = _d.sent();
3370
+ console.log(JSON.stringify([new Date(), 'Error Replace One (Find One And Replace)', this.collectionName, filter, safeOptions_1, {
3371
+ code: err_31.code,
3372
+ codeName: err_31.codeName,
3373
+ message: err_31.message,
3374
+ stack: err_31.stack
3375
+ }], null, 2));
3376
+ err_31.message = "Error in Replace One (Find One And Replace): ".concat(this.collectionName, " => ").concat(err_31.codeName || 'NoCodeName', " => ").concat(err_31.message);
3377
+ throw err_31;
3378
+ case 57: return [4 /*yield*/, monitor.finish()];
3379
+ case 58:
3380
+ _d.sent();
3381
+ return [7 /*endfinally*/];
3382
+ case 59: return [3 /*break*/, 66];
3383
+ case 60:
3384
+ monitor = monitor_manager_1.MonitorMongo.create('replaceOne', this.collectionName, JSON.stringify([filter, replacement, safeOptions]));
3385
+ _d.label = 61;
3386
+ case 61:
3387
+ _d.trys.push([61, 63, 64, 66]);
3388
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).replaceOne(filter, replacement, options)];
3389
+ case 62:
3390
+ res = _d.sent();
3391
+ if (!this.skipCache) {
3392
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3393
+ }
3394
+ return [2 /*return*/, res.acknowledged];
3395
+ case 63:
3396
+ err_32 = _d.sent();
3397
+ console.log(JSON.stringify([new Date(), 'Error Replace One', this.collectionName, filter, replacement, safeOptions, {
3398
+ code: err_32.code,
3399
+ codeName: err_32.codeName,
3400
+ message: err_32.message,
3401
+ stack: err_32.stack
3402
+ }], null, 2));
3403
+ err_32.message = "Error in Replace One: ".concat(this.collectionName, " => ").concat(err_32.codeName || 'NoCodeName', " => ").concat(err_32.message);
3404
+ throw err_32;
3405
+ case 64: return [4 /*yield*/, monitor.finish()];
3406
+ case 65:
3407
+ _d.sent();
3408
+ return [7 /*endfinally*/];
3409
+ case 66: return [2 /*return*/];
3410
+ }
3411
+ });
3412
+ });
3413
+ };
3414
+ MongoManagerCollection.prototype.updateMany = function (filter, update, options, bypassLogs, bypassCheckSchema, bypassVersions, bypassSession) {
3415
+ if (bypassLogs === void 0) { bypassLogs = false; }
3416
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
3417
+ if (bypassVersions === void 0) { bypassVersions = false; }
3418
+ if (bypassSession === void 0) { bypassSession = false; }
3419
+ return __awaiter(this, void 0, void 0, function () {
3420
+ var isEmptyUpdate, allEmpty, date, validation, isValid, mongoSession, _a, session, safeOptions, docs, i, doc, versionDoc, _b, monitor, res, err_33;
3421
+ return __generator(this, function (_c) {
3422
+ switch (_c.label) {
3423
+ case 0:
3424
+ isEmptyUpdate = !update.$set && !update.$unset && !update.$inc && !update.$setOnInsert && !update.$push && !update.$pull && !update.$addToSet && !update.$min && !update.$max && !update.$currentDate && !update.$mul && !update.$rename;
3425
+ allEmpty = isEmptyUpdate ||
3426
+ Object.values(update).every(function (op) {
3427
+ return !op || JSON.stringify(op) === '{}';
3428
+ });
3429
+ if (allEmpty) {
3430
+ return [2 /*return*/, {
3431
+ acknowledged: false,
3432
+ matchedCount: 0,
3433
+ modifiedCount: 0,
3434
+ upsertedCount: 0,
3435
+ upsertedId: null
3436
+ }];
3437
+ }
3438
+ if (this.timestamps) {
3439
+ date = new Date();
3440
+ if (!update.$set) {
3441
+ update.$set = { updatedAt: date };
3442
+ }
3443
+ else {
3444
+ update.$set.updatedAt = date;
3445
+ }
3446
+ }
3447
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
3448
+ validation = this.simplschema.newContext();
3449
+ isValid = validation.validate(update, { modifier: true });
3450
+ if (!!isValid) return [3 /*break*/, 2];
3451
+ console.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());
3452
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on updateMany - ' + this.collectionName, JSON.stringify([validation.validationErrors(), update], null, 2))];
3453
+ case 1:
3454
+ _c.sent();
3455
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
3456
+ case 2:
3457
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
3458
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
3459
+ if (!options) {
3460
+ options = { session: mongoSession };
3461
+ }
3462
+ else {
3463
+ options.session = mongoSession;
3464
+ }
3465
+ }
3466
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
3467
+ if (!((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs))) return [3 /*break*/, 15];
3468
+ return [4 /*yield*/, this.find(filter, { session: session })];
3469
+ case 3:
3470
+ docs = _c.sent();
3471
+ i = 0;
3472
+ _c.label = 4;
3473
+ case 4:
3474
+ if (!(i < docs.length)) return [3 /*break*/, 15];
3475
+ doc = docs[i];
3476
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 7];
3477
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3478
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 5];
3479
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3480
+ type: 'log',
3481
+ data: {
3482
+ _id: (0, common_1.objectIdHexString)(),
3483
+ type: 'document',
3484
+ collection: this.collectionName,
3485
+ id_document: doc._id,
3486
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3487
+ method: 'updateMany',
3488
+ id_user: '',
3489
+ user: '',
3490
+ messageId: 0,
3491
+ route: '',
3492
+ createdAt: new Date()
3493
+ }
3494
+ });
3495
+ return [3 /*break*/, 7];
3496
+ case 5: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3497
+ _id: (0, common_1.objectIdHexString)(),
3498
+ type: 'document',
3499
+ collection: this.collectionName,
3500
+ id_document: doc._id,
3501
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3502
+ method: 'updateMany',
3503
+ id_user: '',
3504
+ user: '',
3505
+ messageId: 0,
3506
+ route: '',
3507
+ createdAt: new Date()
3508
+ }, { session: session })];
3509
+ case 6:
3510
+ _c.sent();
3511
+ _c.label = 7;
3512
+ case 7:
3513
+ if (!this.useVersions) return [3 /*break*/, 14];
3514
+ _c.label = 8;
3515
+ case 8:
3516
+ _c.trys.push([8, 12, , 13]);
3517
+ versionDoc = (0, common_1.deepCopy)(doc);
3518
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
3519
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
3520
+ case 9:
3521
+ _c.sent();
3522
+ if (!(doc.__v >= 4)) return [3 /*break*/, 11];
3523
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({ $and: [{ '_id._id': doc._id }, { '_id.__v': { $lt: doc.__v - 4 } }] })];
3524
+ case 10:
3525
+ _c.sent();
3526
+ _c.label = 11;
3527
+ case 11: return [3 /*break*/, 13];
3528
+ case 12:
3529
+ _b = _c.sent();
3530
+ return [3 /*break*/, 13];
3531
+ case 13:
3532
+ if (!update.$inc) {
3533
+ update.$inc = {};
3534
+ }
3535
+ if (typeof update.$inc.__v !== 'number') {
3536
+ update.$inc.__v = 1;
3537
+ }
3538
+ // If someone mistakenly put __v in $set, remove it
3539
+ if (update.$set && '__v' in update.$set) {
3540
+ delete update.$set.__v;
3541
+ if (Object.keys(update.$set).length === 0) {
3542
+ delete update.$set;
3543
+ }
3544
+ }
3545
+ _c.label = 14;
3546
+ case 14:
3547
+ i++;
3548
+ return [3 /*break*/, 4];
3549
+ case 15:
3550
+ monitor = monitor_manager_1.MonitorMongo.create('updateMany', this.collectionName, JSON.stringify([filter, update, safeOptions]));
3551
+ _c.label = 16;
3552
+ case 16:
3553
+ _c.trys.push([16, 18, 19, 21]);
3554
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(filter, update, options)];
3555
+ case 17:
3556
+ res = _c.sent();
3557
+ if (!this.skipCache) {
3558
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3559
+ }
3560
+ return [2 /*return*/, res];
3561
+ case 18:
3562
+ err_33 = _c.sent();
3563
+ console.log(JSON.stringify([new Date(), 'Error Update Many', this.collectionName, filter, update, safeOptions, {
3564
+ code: err_33.code,
3565
+ codeName: err_33.codeName,
3566
+ message: err_33.message,
3567
+ stack: err_33.stack
3568
+ }], null, 2));
3569
+ err_33.message = "Error in Update Many: ".concat(this.collectionName, " => ").concat(err_33.codeName || 'NoCodeName', " => ").concat(err_33.message);
3570
+ throw err_33;
3571
+ case 19: return [4 /*yield*/, monitor.finish()];
3572
+ case 20:
3573
+ _c.sent();
3574
+ return [7 /*endfinally*/];
3575
+ case 21: return [2 /*return*/];
3576
+ }
3577
+ });
3578
+ });
3579
+ };
3580
+ MongoManagerCollection.prototype.updateOne = function (filter, update, options, bypassLogs, bypassCheckSchema, bypassSession) {
3581
+ if (bypassLogs === void 0) { bypassLogs = false; }
3582
+ if (bypassCheckSchema === void 0) { bypassCheckSchema = false; }
3583
+ if (bypassSession === void 0) { bypassSession = false; }
3584
+ return __awaiter(this, void 0, void 0, function () {
3585
+ var validation, isValid, isEmptyUpdate, allEmpty, date, mongoSession, _a, session, safeOptions, doc, versionDoc, _b, monitor, res, err_34, monitor, res, err_35, monitor, res, doc, err_36, monitor, res, err_37;
3586
+ return __generator(this, function (_c) {
3587
+ switch (_c.label) {
3588
+ case 0:
3589
+ if (!(this.checkSchema && !bypassCheckSchema)) return [3 /*break*/, 2];
3590
+ validation = this.simplschema.newContext();
3591
+ isValid = validation.validate(update, { modifier: true });
3592
+ if (!!isValid) return [3 /*break*/, 2];
3593
+ console.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());
3594
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainServer().getMethodManager().callMethod('insertErrorLog', 'Schema Failed on updateOne - ' + this.collectionName, JSON.stringify([validation.validationErrors(), update], null, 2))];
3595
+ case 1:
3596
+ _c.sent();
3597
+ throw new Error(JSON.stringify(validation.validationErrors(), null, 2));
3598
+ case 2:
3599
+ isEmptyUpdate = !update.$set && !update.$unset && !update.$inc && !update.$setOnInsert && !update.$push && !update.$pull && !update.$addToSet && !update.$min && !update.$max && !update.$currentDate && !update.$mul && !update.$rename;
3600
+ allEmpty = isEmptyUpdate ||
3601
+ Object.values(update).every(function (op) {
3602
+ return !op || JSON.stringify(op) === '{}';
3603
+ });
3604
+ if (allEmpty) {
3605
+ return [2 /*return*/, {
3606
+ acknowledged: false,
3607
+ matchedCount: 0,
3608
+ modifiedCount: 0,
3609
+ upsertedCount: 0,
3610
+ upsertedId: null
3611
+ }];
3612
+ }
3613
+ date = new Date();
3614
+ if (this.timestamps) {
3615
+ if (!update.$set) {
3616
+ update.$set = { updatedAt: date };
3617
+ }
3618
+ else {
3619
+ update.$set.updatedAt = date;
3620
+ }
3621
+ }
3622
+ mongoSession = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
3623
+ if (mongoSession && !bypassSession && !this.bypassSession && (!options || ((!options.readPreference || options.readPreference === 'primary') && !options.session))) {
3624
+ if (!options) {
3625
+ options = { session: mongoSession };
3626
+ }
3627
+ else {
3628
+ options.session = mongoSession;
3629
+ }
3630
+ console.log('Update One', 'Has Session', this.collectionName, JSON.stringify(filter, null, 2), JSON.stringify(update, null, 2));
3631
+ }
3632
+ else {
3633
+ console.log('Update One', 'No Session', this.collectionName, JSON.stringify(filter, null, 2), JSON.stringify(update, null, 2));
3634
+ }
3635
+ _a = options || {}, session = _a.session, safeOptions = __rest(_a, ["session"]);
3636
+ if (!this.useVersions) return [3 /*break*/, 30];
3637
+ return [4 /*yield*/, this.findOne(filter, { session: session }, true)];
3638
+ case 3:
3639
+ doc = _c.sent();
3640
+ if (!doc) return [3 /*break*/, 18];
3641
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 6];
3642
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3643
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 4];
3644
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3645
+ type: 'log',
3646
+ data: {
3647
+ _id: (0, common_1.objectIdHexString)(),
3648
+ type: 'document',
3649
+ collection: this.collectionName,
3650
+ id_document: doc._id,
3651
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3652
+ method: 'updateOne',
3653
+ id_user: '',
3654
+ user: '',
3655
+ messageId: 0,
3656
+ route: '',
3657
+ createdAt: new Date()
3658
+ }
3659
+ });
3660
+ return [3 /*break*/, 6];
3661
+ case 4: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3662
+ _id: (0, common_1.objectIdHexString)(),
3663
+ type: 'document',
3664
+ collection: this.collectionName,
3665
+ id_document: doc._id,
3666
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3667
+ method: 'updateOne',
3668
+ id_user: '',
3669
+ user: '',
3670
+ messageId: 0,
3671
+ route: '',
3672
+ createdAt: new Date()
3673
+ }, { session: session })];
3674
+ case 5:
3675
+ _c.sent();
3676
+ _c.label = 6;
3677
+ case 6:
3678
+ _c.trys.push([6, 10, , 11]);
3679
+ versionDoc = (0, common_1.deepCopy)(doc);
3680
+ versionDoc._id = { _id: doc._id, __v: doc.__v };
3681
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne({ _id: { _id: doc._id, __v: doc.__v } }, versionDoc, { upsert: true })];
3682
+ case 7:
3683
+ _c.sent();
3684
+ if (!(doc.__v >= 4)) return [3 /*break*/, 9];
3685
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany({ $and: [{ '_id._id': doc._id }, { '_id.__v': { $lt: doc.__v - 4 } }] })];
3686
+ case 8:
3687
+ _c.sent();
3688
+ _c.label = 9;
3689
+ case 9: return [3 /*break*/, 11];
3690
+ case 10:
3691
+ _b = _c.sent();
3692
+ return [3 /*break*/, 11];
3693
+ case 11:
3694
+ if (!update.$inc) {
3695
+ update.$inc = {};
3696
+ }
3697
+ if (typeof update.$inc.__v !== 'number') {
3698
+ update.$inc.__v = 1;
3699
+ }
3700
+ // If someone mistakenly put __v in $set, remove it
3701
+ if (update.$set && '__v' in update.$set) {
3702
+ delete update.$set.__v;
3703
+ if (Object.keys(update.$set).length === 0) {
3704
+ delete update.$set;
3705
+ }
3706
+ }
3707
+ monitor = monitor_manager_1.MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));
3708
+ _c.label = 12;
3709
+ case 12:
3710
+ _c.trys.push([12, 14, 15, 17]);
3711
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(filter, update, options)];
3712
+ case 13:
3713
+ res = _c.sent();
3714
+ if (!this.skipCache) {
3715
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3716
+ }
3717
+ return [2 /*return*/, res];
3718
+ case 14:
3719
+ err_34 = _c.sent();
3720
+ console.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {
3721
+ code: err_34.code,
3722
+ codeName: err_34.codeName,
3723
+ message: err_34.message,
3724
+ stack: err_34.stack
3725
+ }], null, 2));
3726
+ err_34.message = "Error in Update One: ".concat(this.collectionName, " => ").concat(err_34.codeName || 'NoCodeName', " => ").concat(err_34.message);
3727
+ throw err_34;
3728
+ case 15: return [4 /*yield*/, monitor.finish()];
3729
+ case 16:
3730
+ _c.sent();
3731
+ return [7 /*endfinally*/];
3732
+ case 17: return [3 /*break*/, 29];
3733
+ case 18:
3734
+ if (!(options && options.upsert)) return [3 /*break*/, 28];
3735
+ if (!update.$setOnInsert) {
3736
+ if (this.timestamps) {
3737
+ update.$setOnInsert = {
3738
+ _id: (0, common_1.objectIdHexString)(),
3739
+ __v: 0,
3740
+ createdAt: new Date()
3741
+ };
3742
+ }
3743
+ else {
3744
+ update.$setOnInsert = {
3745
+ _id: (0, common_1.objectIdHexString)(),
3746
+ __v: 0
3747
+ };
3748
+ }
3749
+ }
3750
+ else {
3751
+ if (!update.$setOnInsert._id) {
3752
+ update.$setOnInsert._id = (0, common_1.objectIdHexString)();
3753
+ }
3754
+ if (this.timestamps && !update.$setOnInsert.createdAt) {
3755
+ update.$setOnInsert.createdAt = new Date();
3756
+ }
3757
+ }
3758
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 21];
3759
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3760
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 19];
3761
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3762
+ type: 'log',
3763
+ data: {
3764
+ _id: (0, common_1.objectIdHexString)(),
3765
+ type: 'document',
3766
+ collection: this.collectionName,
3767
+ id_document: update.$setOnInsert._id,
3768
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',
3769
+ method: 'updateOne',
3770
+ id_user: '',
3771
+ user: '',
3772
+ messageId: 0,
3773
+ route: '',
3774
+ createdAt: new Date()
3775
+ }
3776
+ });
3777
+ return [3 /*break*/, 21];
3778
+ case 19: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3779
+ _id: (0, common_1.objectIdHexString)(),
3780
+ type: 'document',
3781
+ collection: this.collectionName,
3782
+ id_document: update.$setOnInsert._id,
3783
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',
3784
+ method: 'updateOne',
3785
+ id_user: '',
3786
+ user: '',
3787
+ messageId: 0,
3788
+ route: '',
3789
+ createdAt: new Date()
3790
+ }, { session: session })];
3791
+ case 20:
3792
+ _c.sent();
3793
+ _c.label = 21;
3794
+ case 21:
3795
+ monitor = monitor_manager_1.MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));
3796
+ _c.label = 22;
3797
+ case 22:
3798
+ _c.trys.push([22, 24, 25, 27]);
3799
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(filter, update, options)];
3800
+ case 23:
3801
+ res = _c.sent();
3802
+ if (!this.skipCache) {
3803
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3804
+ }
3805
+ return [2 /*return*/, res];
3806
+ case 24:
3807
+ err_35 = _c.sent();
3808
+ console.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, safeOptions, {
3809
+ code: err_35.code,
3810
+ codeName: err_35.codeName,
3811
+ message: err_35.message,
3812
+ stack: err_35.stack
3813
+ }], null, 2));
3814
+ err_35.message = "Error in Update One: ".concat(this.collectionName, " => ").concat(err_35.codeName || 'NoCodeName', " => ").concat(err_35.message);
3815
+ throw err_35;
3816
+ case 25: return [4 /*yield*/, monitor.finish()];
3817
+ case 26:
3818
+ _c.sent();
3819
+ return [7 /*endfinally*/];
3820
+ case 27: return [3 /*break*/, 29];
3821
+ case 28: return [2 /*return*/, {
3822
+ acknowledged: false,
3823
+ matchedCount: 0,
3824
+ modifiedCount: 0,
3825
+ upsertedCount: 0,
3826
+ upsertedId: null
3827
+ }];
3828
+ case 29: return [3 /*break*/, 52];
3829
+ case 30:
3830
+ if (options && options.upsert) {
3831
+ if (!update.$setOnInsert) {
3832
+ if (this.timestamps) {
3833
+ update.$setOnInsert = {
3834
+ _id: (0, common_1.objectIdHexString)(),
3835
+ createdAt: new Date()
3836
+ };
3837
+ }
3838
+ else {
3839
+ update.$setOnInsert = {
3840
+ _id: (0, common_1.objectIdHexString)()
3841
+ };
3842
+ }
3843
+ }
3844
+ else {
3845
+ if (!update.$setOnInsert._id) {
3846
+ update.$setOnInsert._id = (0, common_1.objectIdHexString)();
3847
+ }
3848
+ if (this.timestamps && !update.$setOnInsert.createdAt) {
3849
+ update.$setOnInsert.createdAt = new Date();
3850
+ }
3851
+ }
3852
+ }
3853
+ if (!(this.createLogs && !bypassLogs)) return [3 /*break*/, 46];
3854
+ if (!options) {
3855
+ options = { returnDocument: 'before' };
3856
+ }
3857
+ else {
3858
+ options.returnDocument = 'before';
3859
+ }
3860
+ monitor = monitor_manager_1.MonitorMongo.create('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, safeOptions]));
3861
+ _c.label = 31;
3862
+ case 31:
3863
+ _c.trys.push([31, 42, 43, 45]);
3864
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(filter, update, options)];
3865
+ case 32:
3866
+ res = _c.sent();
3867
+ return [4 /*yield*/, this.findOne(filter, options)];
3868
+ case 33:
3869
+ doc = _c.sent();
3870
+ if (!doc) return [3 /*break*/, 37];
3871
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3872
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 34];
3873
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3874
+ type: 'log',
3875
+ data: {
3876
+ _id: (0, common_1.objectIdHexString)(),
3877
+ type: 'document',
3878
+ collection: this.collectionName,
3879
+ id_document: doc._id,
3880
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3881
+ method: 'updateOne',
3882
+ id_user: '',
3883
+ user: '',
3884
+ messageId: 0,
3885
+ route: '',
3886
+ createdAt: new Date()
3887
+ }
3888
+ });
3889
+ return [3 /*break*/, 36];
3890
+ case 34: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3891
+ _id: (0, common_1.objectIdHexString)(),
3892
+ type: 'document',
3893
+ collection: this.collectionName,
3894
+ id_document: doc._id,
3895
+ payload: (0, common_1.getBinarySize)(JSON.stringify([doc, filter, update, safeOptions])) < 1000000 ? JSON.stringify([doc, filter, update, safeOptions], null, 2) : 'Too Big',
3896
+ method: 'updateOne',
3897
+ id_user: '',
3898
+ user: '',
3899
+ messageId: 0,
3900
+ route: '',
3901
+ createdAt: new Date()
3902
+ }, { session: session })];
3903
+ case 35:
3904
+ _c.sent();
3905
+ _c.label = 36;
3906
+ case 36: return [2 /*return*/, res];
3907
+ case 37:
3908
+ if (!update.$setOnInsert) return [3 /*break*/, 41];
3909
+ if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'
3910
+ && resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 38];
3911
+ resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({
3912
+ type: 'log',
3913
+ data: {
3914
+ _id: (0, common_1.objectIdHexString)(),
3915
+ type: 'document',
3916
+ collection: this.collectionName,
3917
+ id_document: update.$setOnInsert._id,
3918
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',
3919
+ method: 'updateOne',
3920
+ id_user: '',
3921
+ user: '',
3922
+ messageId: 0,
3923
+ route: '',
3924
+ createdAt: new Date()
3925
+ }
3926
+ });
3927
+ return [3 /*break*/, 40];
3928
+ case 38: return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection('logs').insertOne({
3929
+ _id: (0, common_1.objectIdHexString)(),
3930
+ type: 'document',
3931
+ collection: this.collectionName,
3932
+ id_document: update.$setOnInsert._id,
3933
+ payload: (0, common_1.getBinarySize)(JSON.stringify(['upsert', filter, update, safeOptions])) < 1000000 ? JSON.stringify(['upsert', filter, update, safeOptions], null, 2) : 'Too Big',
3934
+ method: 'updateOne',
3935
+ id_user: '',
3936
+ user: '',
3937
+ messageId: 0,
3938
+ route: '',
3939
+ createdAt: new Date()
3940
+ })];
3941
+ case 39:
3942
+ _c.sent();
3943
+ _c.label = 40;
3944
+ case 40:
3945
+ if (!this.skipCache) {
3946
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3947
+ }
3948
+ _c.label = 41;
3949
+ case 41: return [2 /*return*/, res];
3950
+ case 42:
3951
+ err_36 = _c.sent();
3952
+ console.log(JSON.stringify([new Date(), 'Error Update One (Find One And Update)', this.collectionName, filter, safeOptions, {
3953
+ code: err_36.code,
3954
+ codeName: err_36.codeName,
3955
+ message: err_36.message,
3956
+ stack: err_36.stack
3957
+ }], null, 2));
3958
+ err_36.message = "Error in Update One (Find One And Update): ".concat(this.collectionName, " => ").concat(err_36.codeName || 'NoCodeName', " => ").concat(err_36.message);
3959
+ throw err_36;
3960
+ case 43: return [4 /*yield*/, monitor.finish()];
3961
+ case 44:
3962
+ _c.sent();
3963
+ return [7 /*endfinally*/];
3964
+ case 45: return [3 /*break*/, 52];
3965
+ case 46:
3966
+ monitor = monitor_manager_1.MonitorMongo.create('updateOne', this.collectionName, JSON.stringify([filter, update, safeOptions]));
3967
+ _c.label = 47;
3968
+ case 47:
3969
+ _c.trys.push([47, 49, 50, 52]);
3970
+ return [4 /*yield*/, resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(filter, update, options)];
3971
+ case 48:
3972
+ res = _c.sent();
3973
+ if (!this.skipCache) {
3974
+ resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);
3975
+ }
3976
+ return [2 /*return*/, res];
3977
+ case 49:
3978
+ err_37 = _c.sent();
3979
+ console.log(JSON.stringify([new Date(), 'Error Update One', this.collectionName, filter, update, safeOptions, {
3980
+ code: err_37.code,
3981
+ codeName: err_37.codeName,
3982
+ message: err_37.message,
3983
+ stack: err_37.stack
3984
+ }], null, 2));
3985
+ err_37.message = "Error in Update One: ".concat(this.collectionName, " => ").concat(err_37.codeName || 'NoCodeName', " => ").concat(err_37.message);
3986
+ throw err_37;
3987
+ case 50: return [4 /*yield*/, monitor.finish()];
3988
+ case 51:
3989
+ _c.sent();
3990
+ return [7 /*endfinally*/];
3991
+ case 52: return [2 /*return*/];
3992
+ }
3993
+ });
3994
+ });
3995
+ };
3996
+ MongoManagerCollection.prototype.watchCollection = function (pipeline, options, bypassSession) {
3997
+ if (pipeline === void 0) { pipeline = []; }
3998
+ if (bypassSession === void 0) { bypassSession = false; }
3999
+ var session = resolveio_server_app_1.ResolveIOServer.getMongoManager().getSession();
4000
+ if (session && !bypassSession && !this.bypassSession) {
4001
+ if (!options) {
4002
+ options = { session: session };
4003
+ }
4004
+ else {
4005
+ options.session = session;
4006
+ }
4007
+ }
4008
+ var stream = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).watch(pipeline, options);
4009
+ return stream;
4010
+ };
4011
+ return MongoManagerCollection;
4012
+ }());
4013
+ exports.MongoManagerCollection = MongoManagerCollection;
4014
+ var MongoManagerUserCollection = /** @class */ (function (_super) {
4015
+ __extends(MongoManagerUserCollection, _super);
4016
+ function MongoManagerUserCollection() {
4017
+ return _super !== null && _super.apply(this, arguments) || this;
4018
+ }
4019
+ MongoManagerUserCollection.create = function (options) {
4020
+ var mongoManagerCollection = new MongoManagerUserCollection();
4021
+ mongoManagerCollection.initialize(options);
4022
+ return mongoManagerCollection;
4023
+ };
4024
+ MongoManagerUserCollection.prototype.authenticate = function (user, password) {
4025
+ return __awaiter(this, void 0, void 0, function () {
4026
+ var attemptsInterval, calculatedInterval, hashBuffer, err_38;
4027
+ return __generator(this, function (_a) {
4028
+ switch (_a.label) {
4029
+ case 0:
4030
+ attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));
4031
+ calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;
4032
+ if (!user.last) return [3 /*break*/, 3];
4033
+ if (!(Date.now() - user.last.getTime() < calculatedInterval)) return [3 /*break*/, 2];
4034
+ user.last = new Date();
4035
+ return [4 /*yield*/, user_collection_1.Users.updateOne({ _id: user._id }, { $set: { last: user.last } })];
4036
+ case 1:
4037
+ _a.sent();
4038
+ return [2 /*return*/, {
4039
+ data: null,
4040
+ error: 'Attempt Too Soon'
4041
+ }];
4042
+ case 2: return [3 /*break*/, 4];
4043
+ case 3:
4044
+ user.last = new Date();
4045
+ _a.label = 4;
4046
+ case 4:
4047
+ if (user.attempts >= 5) {
4048
+ return [2 /*return*/, {
4049
+ data: null,
4050
+ error: 'Too Many Attempts'
4051
+ }];
4052
+ }
4053
+ if (!user.salt) {
4054
+ return [2 /*return*/, {
4055
+ data: null,
4056
+ error: 'No Salt Value Stored'
4057
+ }];
4058
+ }
4059
+ _a.label = 5;
4060
+ case 5:
4061
+ _a.trys.push([5, 11, , 12]);
4062
+ return [4 /*yield*/, pbkdf2Promisified(password, user.salt, {
4063
+ iterations: 25000,
4064
+ keylen: 512,
4065
+ digestAlgorithm: 'sha256'
4066
+ })];
4067
+ case 6:
4068
+ hashBuffer = _a.sent();
4069
+ if (!scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) return [3 /*break*/, 8];
4070
+ user.last = new Date();
4071
+ user.attempts = 0;
4072
+ return [4 /*yield*/, user_collection_1.Users.updateOne({ _id: user._id }, { $set: { last: user.last, attempts: user.attempts } })];
4073
+ case 7:
4074
+ _a.sent();
4075
+ return [2 /*return*/, {
4076
+ data: user,
4077
+ error: ''
4078
+ }];
4079
+ case 8:
4080
+ user.last = new Date();
4081
+ user.attempts = user.attempts + 1;
4082
+ return [4 /*yield*/, user_collection_1.Users.updateOne({ _id: user._id }, { $set: { last: user.last, attempts: user.attempts } })];
4083
+ case 9:
4084
+ _a.sent();
4085
+ if (user.attempts >= 5) {
4086
+ return [2 /*return*/, {
4087
+ data: null,
4088
+ error: 'Too Many Attempts'
4089
+ }];
4090
+ }
4091
+ else {
4092
+ return [2 /*return*/, {
4093
+ data: null,
4094
+ error: 'Invalid Username And Password'
4095
+ }];
4096
+ }
4097
+ _a.label = 10;
4098
+ case 10: return [3 /*break*/, 12];
4099
+ case 11:
4100
+ err_38 = _a.sent();
4101
+ err_38.message = "Error in User Authenticate: ".concat(JSON.stringify(user, null, 2), " - ").concat(err_38.message);
4102
+ throw err_38;
4103
+ case 12: return [2 /*return*/];
4104
+ }
4105
+ });
4106
+ });
4107
+ };
4108
+ MongoManagerUserCollection.prototype.serializeUser = function () {
4109
+ return function (user, cb) {
4110
+ cb(null, user.username);
4111
+ };
4112
+ };
4113
+ MongoManagerUserCollection.prototype.deserializeUser = function () {
4114
+ var _this = this;
4115
+ return function (username) { return __awaiter(_this, void 0, void 0, function () {
4116
+ return __generator(this, function (_a) {
4117
+ return [2 /*return*/, user_collection_1.Users.findOne({ username: username })];
4118
+ });
4119
+ }); };
4120
+ };
4121
+ MongoManagerUserCollection.prototype.setPassword = function (user, password) {
4122
+ return __awaiter(this, void 0, void 0, function () {
4123
+ var saltBuffer, salt, hashRaw, hash, err_39;
4124
+ return __generator(this, function (_a) {
4125
+ switch (_a.label) {
4126
+ case 0:
4127
+ if (!!user) return [3 /*break*/, 1];
4128
+ throw new Error('Error In User Set Password: No User');
4129
+ case 1:
4130
+ if (!!password) return [3 /*break*/, 2];
4131
+ throw new Error('Error In User Set Password: No Password');
4132
+ case 2: return [4 /*yield*/, randomBytes(32)];
4133
+ case 3:
4134
+ saltBuffer = _a.sent();
4135
+ salt = saltBuffer.toString('hex');
4136
+ _a.label = 4;
4137
+ case 4:
4138
+ _a.trys.push([4, 6, , 7]);
4139
+ return [4 /*yield*/, pbkdf2Promisified(password, salt, {
4140
+ iterations: 25000,
4141
+ keylen: 512,
4142
+ digestAlgorithm: 'sha256'
4143
+ })];
4144
+ case 5:
4145
+ hashRaw = _a.sent();
4146
+ hash = Buffer.from(hashRaw, 'binary').toString('hex');
4147
+ return [2 /*return*/, user_collection_1.Users.updateOne({ _id: user._id }, { $set: { hash: hash, salt: salt, services: {}, attempts: 0 } })];
4148
+ case 6:
4149
+ err_39 = _a.sent();
4150
+ err_39.message = "Error in User Set Password: ".concat(JSON.stringify(user, null, 2), " - ").concat(err_39.message);
4151
+ throw err_39;
4152
+ case 7: return [2 /*return*/];
4153
+ }
4154
+ });
4155
+ });
4156
+ };
4157
+ ;
4158
+ MongoManagerUserCollection.prototype.changePassword = function (user, oldPassword, newPassword) {
4159
+ return __awaiter(this, void 0, void 0, function () {
4160
+ var authUser;
4161
+ return __generator(this, function (_a) {
4162
+ switch (_a.label) {
4163
+ case 0:
4164
+ if (!!user) return [3 /*break*/, 1];
4165
+ throw new Error('Error in User Change Password: Missing User');
4166
+ case 1:
4167
+ if (!(!oldPassword || !newPassword)) return [3 /*break*/, 2];
4168
+ throw new Error('Error in User Change Password: Missing Password');
4169
+ case 2: return [4 /*yield*/, this.authenticate(user, oldPassword)];
4170
+ case 3:
4171
+ authUser = _a.sent();
4172
+ if (!authUser['data']) {
4173
+ throw authUser['error'];
4174
+ }
4175
+ else {
4176
+ return [2 /*return*/, this.setPassword(user, newPassword)];
4177
+ }
4178
+ _a.label = 4;
4179
+ case 4: return [2 /*return*/];
4180
+ }
4181
+ });
4182
+ });
4183
+ };
4184
+ MongoManagerUserCollection.prototype.register = function (user, password) {
4185
+ return __awaiter(this, void 0, void 0, function () {
4186
+ var dbUser;
4187
+ return __generator(this, function (_a) {
4188
+ switch (_a.label) {
4189
+ case 0:
4190
+ if (!!user.username) return [3 /*break*/, 1];
4191
+ throw new Error('Error in User Register: Missing Username');
4192
+ case 1: return [4 /*yield*/, user_collection_1.Users.findOne({ username: user.username })];
4193
+ case 2:
4194
+ dbUser = _a.sent();
4195
+ if (!dbUser) return [3 /*break*/, 3];
4196
+ throw new Error('Error in User Register: Username Exists');
4197
+ case 3: return [4 /*yield*/, user_collection_1.Users.findOne({ email: user.email })];
4198
+ case 4:
4199
+ dbUser = _a.sent();
4200
+ if (dbUser) {
4201
+ throw new Error('Error in User Register: Email Exists');
4202
+ }
4203
+ else {
4204
+ user.setPassword(password);
4205
+ return [2 /*return*/, user];
4206
+ }
4207
+ _a.label = 5;
4208
+ case 5: return [2 /*return*/];
4209
+ }
4210
+ });
4211
+ });
4212
+ };
4213
+ MongoManagerUserCollection.prototype.resetAttempts = function (user) {
4214
+ return user_collection_1.Users.updateOne({ _id: user._id }, { $set: { attempts: 0 } });
4215
+ };
4216
+ return MongoManagerUserCollection;
4217
+ }(MongoManagerCollection));
4218
+ exports.MongoManagerUserCollection = MongoManagerUserCollection;
4219
+ function pbkdf2(password, salt, options, callback) {
4220
+ crypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);
4221
+ }
4222
+ ;
4223
+ function pbkdf2Promisified(password, salt, options) {
4224
+ // eslint-disable-next-line no-restricted-syntax
4225
+ return new Promise(function (resolve, reject) { return pbkdf2(password, salt, options, function (err, hashRaw) { return (err ? reject(err) : resolve(hashRaw)); }); });
4226
+ }
4227
+ function randomBytes(saltlen) {
4228
+ // eslint-disable-next-line no-restricted-syntax
4229
+ return new Promise(function (resolve, reject) { return crypto.randomBytes(saltlen, function (err, saltBuffer) { return (err ? reject(err) : resolve(saltBuffer)); }); });
4230
+ }
4231
+
2
4232
  //# sourceMappingURL=mongo.manager.js.map