@resolveio/server-lib 1.0.0-rc4 → 1.0.0-rc5

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 (157) hide show
  1. package/collections/active-subscription.collection.d.ts +8 -0
  2. package/collections/active-subscription.collection.js +68 -2
  3. package/collections/app-status.collection.d.ts +8 -0
  4. package/collections/app-status.collection.js +43 -2
  5. package/collections/app-version.collection.d.ts +8 -0
  6. package/collections/app-version.collection.js +56 -2
  7. package/collections/counter.collection.d.ts +10 -0
  8. package/collections/counter.collection.js +73 -2
  9. package/collections/cron-job-history.collection.d.ts +8 -0
  10. package/collections/cron-job-history.collection.js +86 -2
  11. package/collections/cron-job.collection.d.ts +8 -0
  12. package/collections/cron-job.collection.js +89 -2
  13. package/collections/file.collection.d.ts +10 -0
  14. package/collections/file.collection.js +73 -2
  15. package/collections/flag.collection.d.ts +8 -0
  16. package/collections/flag.collection.js +47 -2
  17. package/collections/log.collection.d.ts +8 -0
  18. package/collections/log.collection.js +64 -2
  19. package/collections/logged-in-users.collection.d.ts +8 -0
  20. package/collections/logged-in-users.collection.js +70 -2
  21. package/collections/method-call.collection.d.ts +7 -0
  22. package/collections/method-call.collection.js +44 -2
  23. package/collections/method-response.collection.d.ts +7 -0
  24. package/collections/method-response.collection.js +48 -2
  25. package/collections/queue-flag.collection.d.ts +8 -0
  26. package/collections/queue-flag.collection.js +41 -2
  27. package/collections/queue-method.collection.d.ts +8 -0
  28. package/collections/queue-method.collection.js +116 -2
  29. package/collections/queue-response.collection.d.ts +8 -0
  30. package/collections/queue-response.collection.js +78 -2
  31. package/collections/support-ticket.collection.d.ts +8 -0
  32. package/collections/support-ticket.collection.js +146 -2
  33. package/collections/user.collection.d.ts +9 -0
  34. package/collections/user.collection.js +108 -2
  35. package/cron/cron.d.ts +6 -0
  36. package/cron/cron.js +160 -2
  37. package/fixtures/cron-jobs.d.ts +2 -0
  38. package/fixtures/cron-jobs.js +72 -2
  39. package/fixtures/init.d.ts +2 -0
  40. package/fixtures/init.js +73 -2
  41. package/http/auth.d.ts +3 -0
  42. package/http/auth.js +472 -2
  43. package/http/health.d.ts +2 -0
  44. package/http/health.js +8 -2
  45. package/index.d.ts +53 -0
  46. package/index.js +123 -2
  47. package/managers/cron.manager.d.ts +17 -0
  48. package/managers/cron.manager.js +193 -2
  49. package/managers/method.manager.d.ts +27 -0
  50. package/managers/method.manager.js +513 -2
  51. package/managers/queue-method.manager.d.ts +14 -0
  52. package/managers/queue-method.manager.js +239 -2
  53. package/managers/subscription.manager.d.ts +27 -0
  54. package/managers/subscription.manager.js +700 -2
  55. package/managers/support.manager.d.ts +18 -0
  56. package/managers/support.manager.js +208 -2
  57. package/methods/accounts.d.ts +3 -0
  58. package/methods/accounts.js +253 -2
  59. package/methods/aws.d.ts +3 -0
  60. package/methods/aws.js +323 -2
  61. package/methods/cloudconvert.d.ts +3 -0
  62. package/methods/cloudconvert.js +37 -2
  63. package/methods/collections.d.ts +3 -0
  64. package/methods/collections.js +738 -2
  65. package/methods/counters.d.ts +3 -0
  66. package/methods/counters.js +404 -2
  67. package/methods/cron-jobs.d.ts +3 -0
  68. package/methods/cron-jobs.js +63 -2
  69. package/methods/flags.d.ts +3 -0
  70. package/methods/flags.js +6 -2
  71. package/methods/logs.d.ts +3 -0
  72. package/methods/logs.js +29 -2
  73. package/methods/pdf.d.ts +3 -0
  74. package/methods/pdf.js +303 -2
  75. package/models/active-subscription.model.d.ts +14 -0
  76. package/models/active-subscription.model.js +2 -2
  77. package/models/app-status.model.d.ts +5 -0
  78. package/models/app-status.model.js +2 -2
  79. package/models/app-version.model.d.ts +5 -0
  80. package/models/app-version.model.js +2 -2
  81. package/models/collection-document.model.d.ts +7 -0
  82. package/models/collection-document.model.js +2 -2
  83. package/models/counter.model.d.ts +6 -0
  84. package/models/counter.model.js +2 -2
  85. package/models/cron-job-history.model.d.ts +13 -0
  86. package/models/cron-job-history.model.js +2 -2
  87. package/models/cron-job.model.d.ts +14 -0
  88. package/models/cron-job.model.js +2 -2
  89. package/models/dialog.model.d.ts +24 -0
  90. package/models/dialog.model.js +2 -2
  91. package/models/file.model.d.ts +10 -0
  92. package/models/file.model.js +2 -2
  93. package/models/flag.model.d.ts +6 -0
  94. package/models/flag.model.js +2 -2
  95. package/models/log.model.d.ts +12 -0
  96. package/models/log.model.js +2 -2
  97. package/models/logged-in-users.model.d.ts +10 -0
  98. package/models/logged-in-users.model.js +2 -2
  99. package/models/method-call.model.d.ts +8 -0
  100. package/models/method-call.model.js +2 -2
  101. package/models/method-response.model.d.ts +9 -0
  102. package/models/method-response.model.js +2 -2
  103. package/models/method.model.d.ts +11 -0
  104. package/models/method.model.js +2 -2
  105. package/models/pagination.model.d.ts +12 -0
  106. package/models/pagination.model.js +20 -2
  107. package/models/permission.model.d.ts +13 -0
  108. package/models/permission.model.js +2 -2
  109. package/models/queue-method.model.d.ts +10 -0
  110. package/models/queue-method.model.js +2 -2
  111. package/models/queue-response.model.d.ts +11 -0
  112. package/models/queue-response.model.js +2 -2
  113. package/models/select-data-label.model.d.ts +10 -0
  114. package/models/select-data-label.model.js +2 -2
  115. package/models/server-response.model.d.ts +6 -0
  116. package/models/server-response.model.js +2 -2
  117. package/models/subscription.model.d.ts +31 -0
  118. package/models/subscription.model.js +2 -2
  119. package/models/support-method.model.d.ts +10 -0
  120. package/models/support-method.model.js +2 -2
  121. package/models/support-ticket.model.d.ts +40 -0
  122. package/models/support-ticket.model.js +2 -2
  123. package/models/user.model.d.ts +15 -0
  124. package/models/user.model.js +2 -2
  125. package/package.json +3 -1
  126. package/publications/app-status.d.ts +3 -0
  127. package/publications/app-status.js +14 -2
  128. package/publications/app-version.d.ts +3 -0
  129. package/publications/app-version.js +14 -2
  130. package/publications/cron-jobs.d.ts +3 -0
  131. package/publications/cron-jobs.js +14 -2
  132. package/publications/files.d.ts +3 -0
  133. package/publications/files.js +71 -2
  134. package/publications/flags.d.ts +3 -0
  135. package/publications/flags.js +23 -2
  136. package/publications/logs.d.ts +3 -0
  137. package/publications/logs.js +26 -2
  138. package/publications/method-calls.d.ts +3 -0
  139. package/publications/method-calls.js +14 -2
  140. package/publications/method-responses.d.ts +3 -0
  141. package/publications/method-responses.js +14 -2
  142. package/publications/super-admin.d.ts +3 -0
  143. package/publications/super-admin.js +21 -2
  144. package/publications/support-tickets.d.ts +2 -0
  145. package/publications/support-tickets.js +118 -2
  146. package/server-app.d.ts +33 -0
  147. package/server-app.js +598 -2
  148. package/support-methods/aws.d.ts +3 -0
  149. package/support-methods/aws.js +276 -2
  150. package/support-methods/collections.d.ts +3 -0
  151. package/support-methods/collections.js +471 -2
  152. package/support-methods/counters.d.ts +3 -0
  153. package/support-methods/counters.js +189 -2
  154. package/support-methods/support.d.ts +3 -0
  155. package/support-methods/support.js +19 -2
  156. package/util/common.d.ts +15 -0
  157. package/util/common.js +334 -2
@@ -1,2 +1,471 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var mongoose_1=require("mongoose"),common_1=require("../util/common"),simpl_schema_1=require("simpl-schema"),log_collection_1=require("../collections/log.collection"),pagination_model_1=require("../models/pagination.model"),__1=require("..");function loadSupportCollectionMethods(p){p.supportMethods({findOne:{check:new simpl_schema_1.default({collection:{type:String},query:{type:Object,blackbox:!0}}),function:function(e,t){return __1.default.getSupportDB().model(e).findOne(t).exec()}},find:{check:new simpl_schema_1.default({collection:{type:String},query:{type:Object,blackbox:!0},sort:{type:Object,blackbox:!0,optional:!0}}),function:function(e,t,o){return void 0===o&&(o={}),__1.default.getSupportDB().model(e).find(t).sort(o).exec()}},findWithOptions:{check:new simpl_schema_1.default({collection:{type:String},query:{type:Object,blackbox:!0},options:{type:pagination_model_1.PaginationOptionsSchema}}),function:function(e,t,o){return __1.default.getSupportDB().model(e).find(t).sort(o.sort).limit(o.limit).skip(o.skip).select(o.fields).exec()}},insertDocument:{check:new simpl_schema_1.default({collection:{type:String},document:{type:Object,blackbox:!0}}),function:function(i,d){var l=this;return new Promise(function(e,t){var o=null;try{__1.default.getSupportDB().model(i).simplschema.validate(d)}catch(e){o=e,p.getMainServer().getMethodManager().callMethodInternal("insertErrorLog","Schema Failed on insert - "+i,[o,d])}if(o)console.log(o),t("Schema Errors");else{common_1.getBinarySize(JSON.stringify(d))<2e5?log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Insert Document",message:"User: "+l.user+", Collection Type: "+i,payload:d,method:"insertDocument",user:l.user,messageId:""}):log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Insert Document",message:"User: "+l.user+", Collection Type: "+i,payload:"Too Big",method:"insertDocument",user:l.user,messageId:""});var n=mongoose_1.Types.ObjectId().toHexString();d._id=n,d.__v=0,__1.default.getSupportDB().model(i).create(d).then(function(){return e(n)},function(e){return t(e)})}})}},updateDocument:{check:new simpl_schema_1.default({collection:{type:String},f_document:{type:Object,blackbox:!0}}),function:function(_,c){var i=this;return new Promise(function(l,r){__1.default.getSupportDB().model(_).findOne({_id:c._id}).lean().exec(function(e,d){if(d)if(d.__v===c.__v){var t=common_1.deepCopy(d);t._id={_id:d._id,__v:d.__v};var o=null;try{__1.default.getSupportDB().model(_).simplschema.validate(c)}catch(e){o=e,p.getMainServer().getMethodManager().callMethodInternal("insertErrorLog","Schema Failed on updateDocument - "+_,[o,c])}if(o)console.log(o),r("Schema Errors");else{__1.default.getSupportDB().model(__1.default.getSupportDB().model(_).versionCollection).create(t).then(function(e){__1.default.getSupportDB().model(__1.default.getSupportDB().model(_).versionCollection).deleteMany({$and:[{"_id._id":d._id},{"_id.__v":{$lte:d.__v-4}}]}).exec()},function(e){console.log(e)});var n=common_1.getMongoUpdates(d,c,!0);n?__1.default.getSupportDB().model(_).updateOne({_id:c._id},n,{strict:!1}).exec().then(function(e){l(e.nModified)},function(e){return r(e)}):l(1),common_1.getBinarySize(JSON.stringify(c))<2e5?log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Update Document",message:"User: "+i.user+", Collection Type: "+_,payload:c,method:"updateDocument",user:i.user,messageId:""}):log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Update Document",message:"User: "+i.user+", Collection Type: "+_,payload:"Too Big",method:"updateDocument",user:i.user,messageId:""})}}else console.log("invalid version - "+_,d.__v,c.__v),__1.default.getSupportDB().model(__1.default.getSupportDB().model(_).versionCollection).findOne({$and:[{"_id._id":d._id},{"_id.__v":c.__v}]}).lean().exec(function(e,t){var o=d._id;if(t){var n=common_1.deepCopy(d);n._id={_id:d._id,__v:d.__v};var i=common_1.getMongoMergeUpdatedDoc(c,d,t);i._id=o,i.__v++,__1.default.getSupportDB().model(_).replaceOne({_id:o},i).exec().then(function(t){__1.default.getSupportDB().model(__1.default.getSupportDB().model(_).versionCollection).create(n).then(function(e){__1.default.getSupportDB().model(__1.default.getSupportDB().model(_).versionCollection).deleteMany({$and:[{"_id._id":n._id._id},{"_id.__v":{$lte:n._id.__v-4}}]}).exec(),l(t.nModified)})},function(e){return r(e)})}else r("Invalid Version And Could Not Find History - DB: "+d.__v+", Trying to update with :"+c.__v)});else r(e)})})}},updateDocumentProps:{check:new simpl_schema_1.default({collection:{type:String},doc_id:{type:String},updateParams:{type:Array},"updateParams.$":{type:Object,blackbox:!0},doc__v:{type:Number}}),function:function(c,i,a,u){var s=this;return new Promise(function(r,_){__1.default.getSupportDB().model(c).findOne({_id:i}).lean().exec(function(e,d){if(d){var l=common_1.deepCopy(d);if(a.forEach(function(e){l[e.prop]=e.data}),l.__v===u){var t=common_1.deepCopy(d);t._id={_id:d._id,__v:d.__v};var o=null;try{__1.default.getSupportDB().model(c).simplschema.validate(l)}catch(e){o=e,p.getMainServer().getMethodManager().callMethodInternal("insertErrorLog","Schema Failed on updateDocumentProps - "+c,[o,l])}if(o)console.log(o),_("Schema Errors");else{__1.default.getSupportDB().model(__1.default.getSupportDB().model(c).versionCollection).create(t).then(function(e){__1.default.getSupportDB().model(__1.default.getSupportDB().model(c).versionCollection).deleteMany({$and:[{"_id._id":d._id},{"_id.__v":{$lte:d.__v-4}}]}).exec()},function(e){console.log(e)});var n=common_1.getMongoUpdates(d,l,!0);n?__1.default.getSupportDB().model(c).updateOne({_id:l._id},n,{strict:!1}).exec().then(function(e){r(e.ok)},function(e){return _(e)}):r(1),common_1.getBinarySize(JSON.stringify(a))<2e5?log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Update Document Props",message:"User: "+s.user+", Collection Type: "+c+", Id: "+i+", Version: "+u,payload:a,method:"updateDocumentProps",user:s.user,messageId:""}):log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Update Document Props",message:"User: "+s.user+", Collection Type: "+c+", Id: "+i+", Version: "+u,payload:"Too Big",method:"updateDocumentProps",user:s.user,messageId:""})}}else console.log("invalid version - "+c,d.__v,u),__1.default.getSupportDB().model(__1.default.getSupportDB().model(c).versionCollection).findOne({$and:[{"_id._id":d._id},{"_id.__v":u}]}).lean().exec(function(e,t){var o=d._id;if(t){var n=common_1.deepCopy(d);n._id={_id:d._id,__v:d.__v};var i=common_1.getMongoMergeUpdatedDoc(l,d,t);i._id=o,i.__v++,__1.default.getSupportDB().model(c).replaceOne({_id:o},i).exec().then(function(e){__1.default.getSupportDB().model(__1.default.getSupportDB().model(c).versionCollection).create(n).then(function(e){__1.default.getSupportDB().model(__1.default.getSupportDB().model(c).versionCollection).deleteMany({$and:[{"_id._id":n._id._id},{"_id.__v":{$lte:n._id.__v-4}}]}).exec()},function(e){console.log(e)}),r(e.nModified)},function(e){return _(e)})}else _("Invalid Version And Could Not Find History Props - DB: "+d.__v+", Trying to update with :"+l.__v)})}else _(e)})})}},removeDocument:{check:new simpl_schema_1.default({collection:{type:String},doc_id:{type:String}}),function:function(e,t){var i=this;return new Promise(function(o,n){log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Remove Document",message:"User: "+i.user+", Collection Type: "+e,payload:{_id:t},method:"removeDocument",user:i.user,messageId:""}),__1.default.getSupportDB().model(e).deleteOne({_id:t}).exec(function(e,t){e?n(e):o(t.ok)})})}},removeDocumentWithQuery:{check:new simpl_schema_1.default({collection:{type:String},query:{type:Object,blackbox:!0}}),function:function(e,t){var i=this;return new Promise(function(o,n){log_collection_1.Logs.create({_id:mongoose_1.Types.ObjectId().toHexString(),date:new Date,type:"info",title:"Remove Document (Query)",message:"User: "+i.user+", Collection Type: "+e,payload:{_id:t},method:"removeDocumentWithQuery",user:i.user,messageId:""}),__1.default.getSupportDB().model(e).deleteOne(t).exec(function(e,t){e?n(e):o(t.ok)})})}}})}exports.loadSupportCollectionMethods=loadSupportCollectionMethods;
2
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdXBwb3J0LW1ldGhvZHMvY29sbGVjdGlvbnMudHMiXSwibmFtZXMiOlsibW9uZ29vc2VfMSIsInJlcXVpcmUiLCJjb21tb25fMSIsInNpbXBsX3NjaGVtYV8xIiwibG9nX2NvbGxlY3Rpb25fMSIsInBhZ2luYXRpb25fbW9kZWxfMSIsIl9fMSIsImxvYWRTdXBwb3J0Q29sbGVjdGlvbk1ldGhvZHMiLCJzdXBwb3J0TWFuYWdlciIsInN1cHBvcnRNZXRob2RzIiwiZmluZE9uZSIsImNoZWNrIiwiZGVmYXVsdCIsImNvbGxlY3Rpb24iLCJ0eXBlIiwiU3RyaW5nIiwicXVlcnkiLCJPYmplY3QiLCJibGFja2JveCIsImZ1bmN0aW9uIiwiZ2V0U3VwcG9ydERCIiwibW9kZWwiLCJleGVjIiwiZmluZCIsInNvcnQiLCJvcHRpb25hbCIsInNvcnRRdWVyeSIsImZpbmRXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJQYWdpbmF0aW9uT3B0aW9uc1NjaGVtYSIsImxpbWl0Iiwic2tpcCIsInNlbGVjdCIsImZpZWxkcyIsImluc2VydERvY3VtZW50IiwiZG9jdW1lbnQiLCJfdGhpcyIsInRoaXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNjaGVtYUVycm9ycyIsInZhbGlkYXRlIiwiZXJyb3JzIiwiZ2V0TWFpblNlcnZlciIsImdldE1ldGhvZE1hbmFnZXIiLCJjYWxsTWV0aG9kSW50ZXJuYWwiLCJjb25zb2xlIiwibG9nIiwiZ2V0QmluYXJ5U2l6ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJMb2dzIiwiY3JlYXRlIiwiX2lkIiwiVHlwZXMiLCJPYmplY3RJZCIsInRvSGV4U3RyaW5nIiwiZGF0ZSIsIkRhdGUiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJ1c2VyIiwicGF5bG9hZCIsIm1ldGhvZCIsIm1lc3NhZ2VJZCIsImlkXzEiLCJfX3YiLCJ0aGVuIiwiZXJyIiwidXBkYXRlRG9jdW1lbnQiLCJmX2RvY3VtZW50IiwibGVhbiIsImVyckRvYyIsImN1cnJEb2MiLCJ2ZXJzaW9uRG9jIiwiZGVlcENvcHkiLCJkb2MiLCJkZWxldGVNYW55IiwiJGFuZCIsIl9pZC5faWQiLCJfaWQuX192IiwiJGx0ZSIsInVwZGF0ZXMiLCJnZXRNb25nb1VwZGF0ZXMiLCJ1cGRhdGVPbmUiLCJzdHJpY3QiLCJyZXMiLCJuTW9kaWZpZWQiLCJlcnJPbGREb2MiLCJvbGREb2MiLCJuZXdDdXJyRG9jSWQiLCJ2ZXJzaW9uRG9jXzEiLCJ1cGRhdGVkRG9jIiwiZ2V0TW9uZ29NZXJnZVVwZGF0ZWREb2MiLCJyZXBsYWNlT25lIiwidXBkYXRlRG9jdW1lbnRQcm9wcyIsImRvY19pZCIsInVwZGF0ZVBhcmFtcyIsIkFycmF5IiwidXBkYXRlUGFyYW1zLiQiLCJkb2NfX3YiLCJOdW1iZXIiLCJtb2RpZmllZERvY18xIiwiZm9yRWFjaCIsImRhdGEiLCJwcm9wIiwib2siLCJ2ZXJzaW9uRG9jXzIiLCJyZW1vdmVEb2N1bWVudCIsImRlbGV0ZU9uZSIsInJlbW92ZURvY3VtZW50V2l0aFF1ZXJ5IiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Im9FQUFBLElBQUFBLFdBQUFDLFFBQUEsWUFDQUMsU0FBQUQsUUFBQSxrQkFDQUUsZUFBQUYsUUFBQSxnQkFDQUcsaUJBQUFILFFBQUEsaUNBQ0FJLG1CQUFBSixRQUFBLDhCQUVBSyxJQUFBTCxRQUFBLE1BRUEsU0FBZ0JNLDZCQUE2QkMsR0FDNUNBLEVBQWVDLGVBQWUsQ0FDN0JDLFFBQVMsQ0FDUkMsTUFBTyxJQUFJUixlQUFBUyxRQUFhLENBQ3ZCQyxXQUFZLENBQ1hDLEtBQU1DLFFBRVBDLE1BQU8sQ0FDTkYsS0FBTUcsT0FDTkMsVUFBVSxLQUdaQyxTQUFVLFNBQVNOLEVBQW9CRyxHQUN0QyxPQUFPVixJQUFBTSxRQUFnQlEsZUFBZUMsTUFBTVIsR0FBWUgsUUFBUU0sR0FBT00sU0FHekVDLEtBQU0sQ0FDTFosTUFBTyxJQUFJUixlQUFBUyxRQUFhLENBQ3ZCQyxXQUFZLENBQ1hDLEtBQU1DLFFBRVBDLE1BQU8sQ0FDTkYsS0FBTUcs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R0FDaEZsQixFQUNIN0IsRUFBTzZCLEdBR1A5QixFQUFRZ0QsRUFBSW9CLFVBTWpCSSx3QkFBeUIsQ0FDeEJwRyxNQUFPLElBQUlSLGVBQUFTLFFBQWEsQ0FDdkJDLFdBQVksQ0FDWEMsS0FBTUMsUUFFUEMsTUFBTyxDQUNORixLQUFNRyxPQUNOQyxVQUFVLEtBR1pDLFNBQVUsU0FBU04sRUFBb0JHLEdBQTdCLElBQUFvQixFQUFBQyxLQUNULE9BQU8sSUFBSUMsUUFBUSxTQUFDQyxFQUFTQyxHQUU1QnBDLGlCQUFBZ0QsS0FBS0MsT0FBTyxDQUNYQyxJQUFLdEQsV0FBQXVELE1BQU1DLFdBQVdDLGNBQ3RCQyxLQUFNLElBQUlDLEtBQ1Y3QyxLQUFNLE9BQ044QyxNQUFPLDBCQUNQQyxRQUFTLFNBQVd6QixFQUFLMEIsS0FBTyxzQkFBd0JqRCxFQUN4RGtELFFBQVMsQ0FBQ1QsSUFBS3RDLEdBQ2ZnRCxPQUFRLDBCQUNSRixLQUFNMUIsRUFBSzBCLEtBQ1hHLFVBQVcsS0FHWjNELElBQUFNLFFBQWdCUSxlQUFlQyxNQUFNUixHQUFZaUcsVUFBVTlGLEdBQU9NLEtBQUssU0FBQytDLEVBQUtrQixHQUN4RWxCLEVBQ0g3QixFQUFPNkIsR0FHUDlCLEVBQVFnRCxFQUFJb0IsWUFyZW5CSyxRQUFBekcsNkJBQUFBIiwiZmlsZSI6InN1cHBvcnQtbWV0aG9kcy9jb2xsZWN0aW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvY3VtZW50LCBUeXBlc30gZnJvbSAnbW9uZ29vc2UnO1xuaW1wb3J0IHsgZ2V0TW9uZ29VcGRhdGVzLCBkZWVwQ29weSwgZ2V0TW9uZ29NZXJnZVVwZGF0ZWREb2MsIGdldEJpbmFyeVNpemUgfSBmcm9tICcuLi91dGlsL2NvbW1vbic7XG5pbXBvcnQgU2ltcGxlU2NoZW1hIGZyb20gJ3NpbXBsLXNjaGVtYSc7XG5pbXBvcnQgeyBMb2dzIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvbG9nLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk9wdGlvbnNTY2hlbWEsIFBhZ2luYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2luYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgU3VwcG9ydE1hbmFnZXIgfSBmcm9tICcuLi9tYW5hZ2Vycy9zdXBwb3J0Lm1hbmFnZXInO1xuaW1wb3J0IFJlc29sdmVJT1NlcnZlciBmcm9tICcuLic7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VwcG9ydENvbGxlY3Rpb25NZXRob2RzKHN1cHBvcnRNYW5hZ2VyOiBTdXBwb3J0TWFuYWdlcikge1xuXHRzdXBwb3J0TWFuYWdlci5zdXBwb3J0TWV0aG9kcyh7XG5cdFx0ZmluZE9uZToge1xuXHRcdFx0Y2hlY2s6IG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRjb2xsZWN0aW9uOiB7XG5cdFx0XHRcdFx0dHlwZTogU3RyaW5nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXJ5OiB7XG5cdFx0XHRcdFx0dHlwZTogT2JqZWN0LFxuXHRcdFx0XHRcdGJsYWNrYm94OiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGNvbGxlY3Rpb246IHN0cmluZywgcXVlcnk6IE9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gUmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLmZpbmRPbmUocXVlcnkpLmV4ZWMoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbmQ6IHtcblx0XHRcdGNoZWNrOiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0Y29sbGVjdGlvbjoge1xuXHRcdFx0XHRcdHR5cGU6IFN0cmluZ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVyeToge1xuXHRcdFx0XHRcdHR5cGU6IE9iamVjdCxcblx0XHRcdFx0XHRibGFja2JveDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzb3J0OiB7XG5cdFx0XHRcdFx0dHlwZTogT2JqZWN0LFxuXHRcdFx0XHRcdGJsYWNrYm94OiB0cnVlLFxuXHRcdFx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGNvbGxlY3Rpb246IHN0cmluZywgcXVlcnk6IE9iamVjdCwgc29ydFF1ZXJ5OiBPYmplY3QgPSB7fSkge1xuXHRcdFx0XHRyZXR1cm4gUmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLmZpbmQocXVlcnkpLnNvcnQoc29ydFF1ZXJ5KS5leGVjKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRmaW5kV2l0aE9wdGlvbnM6IHtcblx0XHRcdGNoZWNrOiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0Y29sbGVjdGlvbjoge1xuXHRcdFx0XHRcdHR5cGU6IFN0cmluZ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVyeToge1xuXHRcdFx0XHRcdHR5cGU6IE9iamVjdCxcblx0XHRcdFx0XHRibGFja2JveDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0dHlwZTogUGFnaW5hdGlvbk9wdGlvbnNTY2hlbWFcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oY29sbGVjdGlvbjogc3RyaW5nLCBxdWVyeTogT2JqZWN0LCBvcHRpb25zOiBQYWdpbmF0aW9uT3B0aW9ucykge1xuXHRcdFx0XHRyZXR1cm4gUmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLmZpbmQocXVlcnkpLnNvcnQob3B0aW9ucy5zb3J0KS5saW1pdChvcHRpb25zLmxpbWl0KS5za2lwKG9wdGlvbnMuc2tpcCkuc2VsZWN0KG9wdGlvbnMuZmllbGRzKS5leGVjKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyBJbnNlcnQgMSBkb2N1bWVudFxuXHRcdC8vIEBJbnB1dHM6IGNvbGxlY3Rpb24sIGRvY3VtZW50XG5cdFx0Ly8gQE91dHB1dHM6IHJlcyA9IF9pZCBvZiBuZXcgZG9jdW1lbnQsIGVyciA9IG5vdCBpbnNlcnRlZFxuXHRcdGluc2VydERvY3VtZW50OiB7XG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGNvbGxlY3Rpb246IHtcblx0XHRcdFx0XHR0eXBlOiBTdHJpbmdcblx0XHRcdFx0fSxcblx0XHRcdFx0ZG9jdW1lbnQ6IHtcblx0XHRcdFx0XHR0eXBlOiBPYmplY3QsXG5cdFx0XHRcdFx0YmxhY2tib3g6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oY29sbGVjdGlvbjogc3RyaW5nLCBkb2N1bWVudDogRG9jdW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuXHRcdFx0XHRcdGxldCBzY2hlbWFFcnJvcnMgPSBudWxsO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsnc2ltcGxzY2hlbWEnXS52YWxpZGF0ZShkb2N1bWVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhdGNoIChlcnJvcnMpIHtcblx0XHRcdFx0XHRcdHNjaGVtYUVycm9ycyA9IGVycm9ycztcblx0XHRcdFx0XHRcdHN1cHBvcnRNYW5hZ2VyLmdldE1haW5TZXJ2ZXIoKS5nZXRNZXRob2RNYW5hZ2VyKCkuY2FsbE1ldGhvZEludGVybmFsKCdpbnNlcnRFcnJvckxvZycsICdTY2hlbWEgRmFpbGVkIG9uIGluc2VydCAtICcgKyBjb2xsZWN0aW9uLCBbc2NoZW1hRXJyb3JzLCBkb2N1bWVudF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAoc2NoZW1hRXJyb3JzKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhzY2hlbWFFcnJvcnMpO1xuXHRcdFx0XHRcdFx0cmVqZWN0KCdTY2hlbWEgRXJyb3JzJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQpKSA8IDIwMDAwMCkge1xuXHRcdFx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5mbycsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICdJbnNlcnQgRG9jdW1lbnQnLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgdGhpcy51c2VyICsgJywgQ29sbGVjdGlvbiBUeXBlOiAnICsgY29sbGVjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdFx0XHRtZXRob2Q6ICdpbnNlcnREb2N1bWVudCcsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcjogdGhpcy51c2VyLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogJydcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0TG9ncy5jcmVhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGU6IG5ldyBEYXRlKCksXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2luZm8nLFxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnSW5zZXJ0IERvY3VtZW50Jyxcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVXNlcjogJyArIHRoaXMudXNlciArICcsIENvbGxlY3Rpb24gVHlwZTogJyArIGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0cGF5bG9hZDogJ1RvbyBCaWcnLFxuXHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogJ2luc2VydERvY3VtZW50Jyxcblx0XHRcdFx0XHRcdFx0XHR1c2VyOiB0aGlzLnVzZXIsXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiAnJ1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGV0IGlkID0gVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpO1xuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuX2lkID0gaWQ7XG5cdFx0XHRcdFx0XHRkb2N1bWVudC5fX3YgPSAwO1xuXHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLmNyZWF0ZShkb2N1bWVudCkudGhlbigoKSA9PiByZXNvbHZlKGlkKSwgZXJyID0+IHJlamVjdChlcnIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gUmVwbGFjZXMgMSBkb2N1bWVudCB3aXRoIG5ldyBkb2N1bWVudCAoZnJvbSBfaWQpXG5cdFx0Ly8gQElucHV0czogY29sbGVjdGlvbiwgZG9jdW1lbnQgaWRcblx0XHQvLyBAT3V0cHV0czogcmVzID0gMSAodXBkYXRlZCAxKSwgcmVzID0gMCAobm90IHVwZGF0ZWQpLCBlcnIgPSBub3QgdXBkYXRlZC93cm9uZyB2ZXJzaW9uXG5cdFx0Ly8gU2VhcmNoIGZvciBkb2MsIGNoZWNrIHZlcnNpb24sIGlmIGZvdW5kIHRoZW4gdHJ5IGFuZCB1cGRhdGVcblx0XHR1cGRhdGVEb2N1bWVudDoge1xuXHRcdFx0Y2hlY2s6IG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRjb2xsZWN0aW9uOiB7XG5cdFx0XHRcdFx0dHlwZTogU3RyaW5nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZfZG9jdW1lbnQ6IHtcblx0XHRcdFx0XHR0eXBlOiBPYmplY3QsXG5cdFx0XHRcdFx0YmxhY2tib3g6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oY29sbGVjdGlvbjogc3RyaW5nLCBmX2RvY3VtZW50OiBEb2N1bWVudCkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKS5maW5kT25lKHtfaWQ6IGZfZG9jdW1lbnQuX2lkfSkubGVhbigpLmV4ZWMoKGVyckRvYywgY3VyckRvYykgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJEb2MpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGN1cnJEb2MuX192ID09PSBmX2RvY3VtZW50Ll9fdikge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2ZXJzaW9uRG9jID0gZGVlcENvcHkoY3VyckRvYyk7XG5cblx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uRG9jLl9pZCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdF9pZDogY3VyckRvYy5faWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRfX3Y6IGN1cnJEb2MuX192XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdGxldCBzY2hlbWFFcnJvcnMgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsnc2ltcGxzY2hlbWEnXS52YWxpZGF0ZShmX2RvY3VtZW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y2F0Y2ggKGVycm9ycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2NoZW1hRXJyb3JzID0gZXJyb3JzO1xuXHRcdFx0XHRcdFx0XHRcdFx0c3VwcG9ydE1hbmFnZXIuZ2V0TWFpblNlcnZlcigpLmdldE1ldGhvZE1hbmFnZXIoKS5jYWxsTWV0aG9kSW50ZXJuYWwoJ2luc2VydEVycm9yTG9nJywgJ1NjaGVtYSBGYWlsZWQgb24gdXBkYXRlRG9jdW1lbnQgLSAnICsgY29sbGVjdGlvbiwgW3NjaGVtYUVycm9ycywgZl9kb2N1bWVudF0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2NoZW1hRXJyb3JzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhzY2hlbWFFcnJvcnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KCdTY2hlbWEgRXJyb3JzJyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsndmVyc2lvbkNvbGxlY3Rpb24nXSkuY3JlYXRlKHZlcnNpb25Eb2MpLnRoZW4oZG9jID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsndmVyc2lvbkNvbGxlY3Rpb24nXSkuZGVsZXRlTWFueSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGFuZDogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eydfaWQuX2lkJzogY3VyckRvYy5faWR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eydfaWQuX192JzogeyRsdGU6IGN1cnJEb2MuX192IC0gNH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5leGVjKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LCBlcnIgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGxldCB1cGRhdGVzID0gZ2V0TW9uZ29VcGRhdGVzKGN1cnJEb2MsIGZfZG9jdW1lbnQsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodXBkYXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbikudXBkYXRlT25lKHtfaWQ6IGZfZG9jdW1lbnQuX2lkfSwgdXBkYXRlcywge3N0cmljdDogZmFsc2V9KS5leGVjKCkudGhlbihyZXMgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzLm5Nb2RpZmllZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sIGVyciA9PiByZWplY3QoZXJyKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgxKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoZl9kb2N1bWVudCkpIDwgMjAwMDAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZ3MuY3JlYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfaWQ6IFR5cGVzLk9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdpbmZvJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ1VwZGF0ZSBEb2N1bWVudCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VzZXI6ICcgKyB0aGlzLnVzZXIgKyAnLCBDb2xsZWN0aW9uIFR5cGU6ICcgKyBjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBheWxvYWQ6IGZfZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0aG9kOiAndXBkYXRlRG9jdW1lbnQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXI6IHRoaXMudXNlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSWQ6ICcnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZ3MuY3JlYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfaWQ6IFR5cGVzLk9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdpbmZvJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ1VwZGF0ZSBEb2N1bWVudCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VzZXI6ICcgKyB0aGlzLnVzZXIgKyAnLCBDb2xsZWN0aW9uIFR5cGU6ICcgKyBjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBheWxvYWQ6ICdUb28gQmlnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRob2Q6ICd1cGRhdGVEb2N1bWVudCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdGhpcy51c2VyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogJydcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdpbnZhbGlkIHZlcnNpb24gLSAnICsgY29sbGVjdGlvbiwgY3VyckRvYy5fX3YsIGZfZG9jdW1lbnQuX192KTtcblxuXHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbilbJ3ZlcnNpb25Db2xsZWN0aW9uJ10pLmZpbmRPbmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0JGFuZDogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7J19pZC5faWQnOiBjdXJyRG9jLl9pZH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9fdic6IGZfZG9jdW1lbnQuX192fVxuXHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdH0pLmxlYW4oKS5leGVjKChlcnJPbGREb2MsIG9sZERvYykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG5ld0N1cnJEb2NJZCA9IGN1cnJEb2MuX2lkO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob2xkRG9jKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2ZXJzaW9uRG9jID0gZGVlcENvcHkoY3VyckRvYyk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmVyc2lvbkRvYy5faWQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBjdXJyRG9jLl9pZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfX3Y6IGN1cnJEb2MuX192XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHVwZGF0ZWREb2MgPSBnZXRNb25nb01lcmdlVXBkYXRlZERvYyhmX2RvY3VtZW50LCBjdXJyRG9jLCBvbGREb2MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVkRG9jLl9pZCA9IG5ld0N1cnJEb2NJZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlZERvYy5fX3YrKztcblx0XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLnJlcGxhY2VPbmUoe19pZDogbmV3Q3VyckRvY0lkfSwgdXBkYXRlZERvYykuZXhlYygpLnRoZW4ocmVzID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoUmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pWyd2ZXJzaW9uQ29sbGVjdGlvbiddKS5jcmVhdGUodmVyc2lvbkRvYykudGhlbihkb2MgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsndmVyc2lvbkNvbGxlY3Rpb24nXSkuZGVsZXRlTWFueSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRhbmQ6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7J19pZC5faWQnOiB2ZXJzaW9uRG9jLl9pZC5faWR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9fdic6IHskbHRlOiB2ZXJzaW9uRG9jLl9pZC5fX3YgLSA0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkuZXhlYygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlcy5uTW9kaWZpZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LCBlcnIgPT4gcmVqZWN0KGVycikpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCgnSW52YWxpZCBWZXJzaW9uIEFuZCBDb3VsZCBOb3QgRmluZCBIaXN0b3J5IC0gREI6ICcgKyBjdXJyRG9jLl9fdiArICcsIFRyeWluZyB0byB1cGRhdGUgd2l0aCA6JyArIGZfZG9jdW1lbnQuX192KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnJEb2MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFVwZGF0ZXMgMSBkb2N1bWVudCdzIHByb3BzIChmcm9tIF9pZClcblx0XHQvLyBASW5wdXRzOiBjb2xsZWN0aW9uLCBkb2N1bWVudCBpZCwgZG9jdW1lbnQgdmVyc2lvbiwgdXBkYXRlIHBhcmFtdGVycyAoe3Byb3A6ICd4eHgnLCBkYXRhOiAneXl5fSlcblx0XHQvLyBAT3V0cHV0czogcmVzID0gMSAodXBkYXRlZCAxKSwgcmVzID0gMCAobm90IHVwZGF0ZWQpLCBlcnIgPSBub3QgdXBkYXRlZC93cm9uZyB2ZXJzaW9uXG5cdFx0Ly8gU2VhcmNoIGZvciBkb2MsIGNoZWNrIHZlcnNpb24sIGlmIGZvdW5kIHRoZW4gdHJ5IGFuZCB1cGRhdGUgcHJvcHNcblx0XHR1cGRhdGVEb2N1bWVudFByb3BzOiB7XG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGNvbGxlY3Rpb246IHtcblx0XHRcdFx0XHR0eXBlOiBTdHJpbmdcblx0XHRcdFx0fSxcblx0XHRcdFx0ZG9jX2lkOiB7XG5cdFx0XHRcdFx0dHlwZTogU3RyaW5nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVwZGF0ZVBhcmFtczoge1xuXHRcdFx0XHRcdHR5cGU6IEFycmF5XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd1cGRhdGVQYXJhbXMuJCc6IHtcblx0XHRcdFx0XHR0eXBlOiBPYmplY3QsXG5cdFx0XHRcdFx0YmxhY2tib3g6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0ZG9jX192OiB7XG5cdFx0XHRcdFx0dHlwZTogTnVtYmVyXG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGNvbGxlY3Rpb246IHN0cmluZywgZG9jX2lkOiBzdHJpbmcsIHVwZGF0ZVBhcmFtczogYW55W10sIGRvY19fdjogbnVtYmVyKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLmZpbmRPbmUoe19pZDogZG9jX2lkfSkubGVhbigpLmV4ZWMoKGVyckRvYywgY3VyckRvYzogRG9jdW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjdXJyRG9jKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBtb2RpZmllZERvYyA9IGRlZXBDb3B5KGN1cnJEb2MpO1xuXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVBhcmFtcy5mb3JFYWNoKGRhdGEgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdG1vZGlmaWVkRG9jW2RhdGEucHJvcF0gPSBkYXRhLmRhdGE7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChtb2RpZmllZERvYy5fX3YgPT09IGRvY19fdikge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2ZXJzaW9uRG9jID0gZGVlcENvcHkoY3VyckRvYyk7XG5cdFxuXHRcdFx0XHRcdFx0XHRcdHZlcnNpb25Eb2MuX2lkID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBjdXJyRG9jLl9pZCxcblx0XHRcdFx0XHRcdFx0XHRcdF9fdjogY3VyckRvYy5fX3Zcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2NoZW1hRXJyb3JzID0gbnVsbDtcblx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsnc2ltcGxzY2hlbWEnXS52YWxpZGF0ZShtb2RpZmllZERvYyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGNhdGNoIChlcnJvcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNjaGVtYUVycm9ycyA9IGVycm9ycztcblx0XHRcdFx0XHRcdFx0XHRcdHN1cHBvcnRNYW5hZ2VyLmdldE1haW5TZXJ2ZXIoKS5nZXRNZXRob2RNYW5hZ2VyKCkuY2FsbE1ldGhvZEludGVybmFsKCdpbnNlcnRFcnJvckxvZycsICdTY2hlbWEgRmFpbGVkIG9uIHVwZGF0ZURvY3VtZW50UHJvcHMgLSAnICsgY29sbGVjdGlvbiwgW3NjaGVtYUVycm9ycywgbW9kaWZpZWREb2NdKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNjaGVtYUVycm9ycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc2NoZW1hRXJyb3JzKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCgnU2NoZW1hIEVycm9ycycpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbilbJ3ZlcnNpb25Db2xsZWN0aW9uJ10pLmNyZWF0ZSh2ZXJzaW9uRG9jKS50aGVuKGRvYyA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbilbJ3ZlcnNpb25Db2xsZWN0aW9uJ10pLmRlbGV0ZU1hbnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRhbmQ6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9pZCc6IGN1cnJEb2MuX2lkfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9fdic6IHskbHRlOiBjdXJyRG9jLl9fdiAtIDR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkuZXhlYygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSwgZXJyID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgdXBkYXRlcyA9IGdldE1vbmdvVXBkYXRlcyhjdXJyRG9jLCBtb2RpZmllZERvYywgdHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICh1cGRhdGVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKS51cGRhdGVPbmUoe19pZDogbW9kaWZpZWREb2MuX2lkfSwgdXBkYXRlcywge3N0cmljdDogZmFsc2V9KS5leGVjKCkudGhlbihyZXMgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzLm9rKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSwgZXJyID0+IHJlamVjdChlcnIpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZ2V0QmluYXJ5U2l6ZShKU09OLnN0cmluZ2lmeSh1cGRhdGVQYXJhbXMpKSA8IDIwMDAwMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5mbycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICdVcGRhdGUgRG9jdW1lbnQgUHJvcHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgdGhpcy51c2VyICsgJywgQ29sbGVjdGlvbiBUeXBlOiAnICsgY29sbGVjdGlvbiArICcsIElkOiAnICsgZG9jX2lkICsgJywgJyArICdWZXJzaW9uOiAnICsgZG9jX192LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBheWxvYWQ6IHVwZGF0ZVBhcmFtcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRob2Q6ICd1cGRhdGVEb2N1bWVudFByb3BzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyOiB0aGlzLnVzZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5mbycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICdVcGRhdGUgRG9jdW1lbnQgUHJvcHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgdGhpcy51c2VyICsgJywgQ29sbGVjdGlvbiBUeXBlOiAnICsgY29sbGVjdGlvbiArICcsIElkOiAnICsgZG9jX2lkICsgJywgJyArICdWZXJzaW9uOiAnICsgZG9jX192LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBheWxvYWQ6ICdUb28gQmlnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRob2Q6ICd1cGRhdGVEb2N1bWVudFByb3BzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyOiB0aGlzLnVzZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiAnJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ2ludmFsaWQgdmVyc2lvbiAtICcgKyBjb2xsZWN0aW9uLCBjdXJyRG9jLl9fdiwgZG9jX192KTtcblxuXHRcdFx0XHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbilbJ3ZlcnNpb25Db2xsZWN0aW9uJ10pLmZpbmRPbmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0JGFuZDogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7J19pZC5faWQnOiBjdXJyRG9jLl9pZH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9fdic6IGRvY19fdn1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9KS5sZWFuKCkuZXhlYygoZXJyT2xkRG9jLCBvbGREb2MpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBuZXdDdXJyRG9jSWQgPSBjdXJyRG9jLl9pZDtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9sZERvYykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgdmVyc2lvbkRvYyA9IGRlZXBDb3B5KGN1cnJEb2MpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25Eb2MuX2lkID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF9pZDogY3VyckRvYy5faWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X192OiBjdXJyRG9jLl9fdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB1cGRhdGVkRG9jID0gZ2V0TW9uZ29NZXJnZVVwZGF0ZWREb2MobW9kaWZpZWREb2MsIGN1cnJEb2MsIG9sZERvYyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZWREb2MuX2lkID0gbmV3Q3VyckRvY0lkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVkRG9jLl9fdisrO1xuXHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pLnJlcGxhY2VPbmUoe19pZDogbmV3Q3VyckRvY0lkfSwgdXBkYXRlZERvYykuZXhlYygpLnRoZW4ocmVzID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoUmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKGNvbGxlY3Rpb24pWyd2ZXJzaW9uQ29sbGVjdGlvbiddKS5jcmVhdGUodmVyc2lvbkRvYykudGhlbihkb2MgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0UmVzb2x2ZUlPU2VydmVyLmdldFN1cHBvcnREQigpLm1vZGVsKFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKVsndmVyc2lvbkNvbGxlY3Rpb24nXSkuZGVsZXRlTWFueSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRhbmQ6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7J19pZC5faWQnOiB2ZXJzaW9uRG9jLl9pZC5faWR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsnX2lkLl9fdic6IHskbHRlOiB2ZXJzaW9uRG9jLl9pZC5fX3YgLSA0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkuZXhlYygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0sIGVyciA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzLm5Nb2RpZmllZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sIGVyciA9PiByZWplY3QoZXJyKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KCdJbnZhbGlkIFZlcnNpb24gQW5kIENvdWxkIE5vdCBGaW5kIEhpc3RvcnkgUHJvcHMgLSBEQjogJyArIGN1cnJEb2MuX192ICsgJywgVHJ5aW5nIHRvIHVwZGF0ZSB3aXRoIDonICsgbW9kaWZpZWREb2MuX192KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnJEb2MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFJlbW92ZXMgMSBkb2N1bWVudCAoZnJvbSBfaWQpXG5cdFx0Ly8gQElucHV0czogY29sbGVjdGlvbiwgZG9jdW1lbnQgaWRcblx0XHQvLyBAT3V0cHV0czogcmVzID0gMSAoZGVsZXRlZCksIHJlcyA9IDAgKG5vdCBkZWxldGVkKSwgZXJyID0gbm90IGRlbGV0ZWRcblx0XHQvLyBTZWFyY2ggZm9yIGRvYywgaWYgZm91bmQgdGhlbiB0cnkgYW5kIHJlbW92ZVxuXHRcdHJlbW92ZURvY3VtZW50OiB7XG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGNvbGxlY3Rpb246IHtcblx0XHRcdFx0XHR0eXBlOiBTdHJpbmdcblx0XHRcdFx0fSxcblx0XHRcdFx0ZG9jX2lkOiB7XG5cdFx0XHRcdFx0dHlwZTogU3RyaW5nXG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGNvbGxlY3Rpb246IHN0cmluZywgZG9jX2lkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuXHRcdFx0XHRcdExvZ3MuY3JlYXRlKHtcblx0XHRcdFx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdHR5cGU6ICdpbmZvJyxcblx0XHRcdFx0XHRcdHRpdGxlOiAnUmVtb3ZlIERvY3VtZW50Jyxcblx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgdGhpcy51c2VyICsgJywgQ29sbGVjdGlvbiBUeXBlOiAnICsgY29sbGVjdGlvbixcblx0XHRcdFx0XHRcdHBheWxvYWQ6IHtfaWQ6IGRvY19pZH0sXG5cdFx0XHRcdFx0XHRtZXRob2Q6ICdyZW1vdmVEb2N1bWVudCcsXG5cdFx0XHRcdFx0XHR1c2VyOiB0aGlzLnVzZXIsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSWQ6ICcnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRSZXNvbHZlSU9TZXJ2ZXIuZ2V0U3VwcG9ydERCKCkubW9kZWwoY29sbGVjdGlvbikuZGVsZXRlT25lKHtfaWQ6IGRvY19pZH0pLmV4ZWMoKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1x0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXMub2spO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlbW92ZURvY3VtZW50V2l0aFF1ZXJ5OiB7XG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGNvbGxlY3Rpb246IHtcblx0XHRcdFx0XHR0eXBlOiBTdHJpbmdcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0XHR0eXBlOiBPYmplY3QsXG5cdFx0XHRcdFx0YmxhY2tib3g6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oY29sbGVjdGlvbjogc3RyaW5nLCBxdWVyeTogT2JqZWN0KSB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cblx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRfaWQ6IFR5cGVzLk9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcblx0XHRcdFx0XHRcdGRhdGU6IG5ldyBEYXRlKCksXG5cdFx0XHRcdFx0XHR0eXBlOiAnaW5mbycsXG5cdFx0XHRcdFx0XHR0aXRsZTogJ1JlbW92ZSBEb2N1bWVudCAoUXVlcnkpJyxcblx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgdGhpcy51c2VyICsgJywgQ29sbGVjdGlvbiBUeXBlOiAnICsgY29sbGVjdGlvbixcblx0XHRcdFx0XHRcdHBheWxvYWQ6IHtfaWQ6IHF1ZXJ5fSxcblx0XHRcdFx0XHRcdG1ldGhvZDogJ3JlbW92ZURvY3VtZW50V2l0aFF1ZXJ5Jyxcblx0XHRcdFx0XHRcdHVzZXI6IHRoaXMudXNlcixcblx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogJydcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFJlc29sdmVJT1NlcnZlci5nZXRTdXBwb3J0REIoKS5tb2RlbChjb2xsZWN0aW9uKS5kZWxldGVPbmUocXVlcnkpLmV4ZWMoKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1x0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXMub2spO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufSJdfQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var mongoose_1 = require("mongoose");
4
+ var common_1 = require("../util/common");
5
+ var simpl_schema_1 = require("simpl-schema");
6
+ var log_collection_1 = require("../collections/log.collection");
7
+ var pagination_model_1 = require("../models/pagination.model");
8
+ var __1 = require("..");
9
+ function loadSupportCollectionMethods(supportManager) {
10
+ supportManager.supportMethods({
11
+ findOne: {
12
+ check: new simpl_schema_1.default({
13
+ collection: {
14
+ type: String
15
+ },
16
+ query: {
17
+ type: Object,
18
+ blackbox: true
19
+ }
20
+ }),
21
+ function: function (collection, query) {
22
+ return __1.default.getSupportDB().model(collection).findOne(query).exec();
23
+ }
24
+ },
25
+ find: {
26
+ check: new simpl_schema_1.default({
27
+ collection: {
28
+ type: String
29
+ },
30
+ query: {
31
+ type: Object,
32
+ blackbox: true
33
+ },
34
+ sort: {
35
+ type: Object,
36
+ blackbox: true,
37
+ optional: true
38
+ }
39
+ }),
40
+ function: function (collection, query, sortQuery) {
41
+ if (sortQuery === void 0) { sortQuery = {}; }
42
+ return __1.default.getSupportDB().model(collection).find(query).sort(sortQuery).exec();
43
+ }
44
+ },
45
+ findWithOptions: {
46
+ check: new simpl_schema_1.default({
47
+ collection: {
48
+ type: String
49
+ },
50
+ query: {
51
+ type: Object,
52
+ blackbox: true
53
+ },
54
+ options: {
55
+ type: pagination_model_1.PaginationOptionsSchema
56
+ }
57
+ }),
58
+ function: function (collection, query, options) {
59
+ return __1.default.getSupportDB().model(collection).find(query).sort(options.sort).limit(options.limit).skip(options.skip).select(options.fields).exec();
60
+ }
61
+ },
62
+ // Insert 1 document
63
+ // @Inputs: collection, document
64
+ // @Outputs: res = _id of new document, err = not inserted
65
+ insertDocument: {
66
+ check: new simpl_schema_1.default({
67
+ collection: {
68
+ type: String
69
+ },
70
+ document: {
71
+ type: Object,
72
+ blackbox: true
73
+ }
74
+ }),
75
+ function: function (collection, document) {
76
+ var _this = this;
77
+ return new Promise(function (resolve, reject) {
78
+ var schemaErrors = null;
79
+ try {
80
+ __1.default.getSupportDB().model(collection)['simplschema'].validate(document);
81
+ }
82
+ catch (errors) {
83
+ schemaErrors = errors;
84
+ supportManager.getMainServer().getMethodManager().callMethodInternal('insertErrorLog', 'Schema Failed on insert - ' + collection, [schemaErrors, document]);
85
+ }
86
+ if (schemaErrors) {
87
+ console.log(schemaErrors);
88
+ reject('Schema Errors');
89
+ }
90
+ else {
91
+ if (common_1.getBinarySize(JSON.stringify(document)) < 200000) {
92
+ log_collection_1.Logs.create({
93
+ _id: mongoose_1.Types.ObjectId().toHexString(),
94
+ date: new Date(),
95
+ type: 'info',
96
+ title: 'Insert Document',
97
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
98
+ payload: document,
99
+ method: 'insertDocument',
100
+ user: _this.user,
101
+ messageId: ''
102
+ });
103
+ }
104
+ else {
105
+ log_collection_1.Logs.create({
106
+ _id: mongoose_1.Types.ObjectId().toHexString(),
107
+ date: new Date(),
108
+ type: 'info',
109
+ title: 'Insert Document',
110
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
111
+ payload: 'Too Big',
112
+ method: 'insertDocument',
113
+ user: _this.user,
114
+ messageId: ''
115
+ });
116
+ }
117
+ var id_1 = mongoose_1.Types.ObjectId().toHexString();
118
+ document._id = id_1;
119
+ document.__v = 0;
120
+ __1.default.getSupportDB().model(collection).create(document).then(function () { return resolve(id_1); }, function (err) { return reject(err); });
121
+ }
122
+ });
123
+ }
124
+ },
125
+ // Replaces 1 document with new document (from _id)
126
+ // @Inputs: collection, document id
127
+ // @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version
128
+ // Search for doc, check version, if found then try and update
129
+ updateDocument: {
130
+ check: new simpl_schema_1.default({
131
+ collection: {
132
+ type: String
133
+ },
134
+ f_document: {
135
+ type: Object,
136
+ blackbox: true
137
+ }
138
+ }),
139
+ function: function (collection, f_document) {
140
+ var _this = this;
141
+ return new Promise(function (resolve, reject) {
142
+ __1.default.getSupportDB().model(collection).findOne({ _id: f_document._id }).lean().exec(function (errDoc, currDoc) {
143
+ if (currDoc) {
144
+ if (currDoc.__v === f_document.__v) {
145
+ var versionDoc = common_1.deepCopy(currDoc);
146
+ versionDoc._id = {
147
+ _id: currDoc._id,
148
+ __v: currDoc.__v
149
+ };
150
+ var schemaErrors = null;
151
+ try {
152
+ __1.default.getSupportDB().model(collection)['simplschema'].validate(f_document);
153
+ }
154
+ catch (errors) {
155
+ schemaErrors = errors;
156
+ supportManager.getMainServer().getMethodManager().callMethodInternal('insertErrorLog', 'Schema Failed on updateDocument - ' + collection, [schemaErrors, f_document]);
157
+ }
158
+ if (schemaErrors) {
159
+ console.log(schemaErrors);
160
+ reject('Schema Errors');
161
+ }
162
+ else {
163
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).create(versionDoc).then(function (doc) {
164
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).deleteMany({
165
+ $and: [
166
+ { '_id._id': currDoc._id },
167
+ { '_id.__v': { $lte: currDoc.__v - 4 } }
168
+ ]
169
+ }).exec();
170
+ }, function (err) {
171
+ console.log(err);
172
+ });
173
+ var updates = common_1.getMongoUpdates(currDoc, f_document, true);
174
+ if (updates) {
175
+ __1.default.getSupportDB().model(collection).updateOne({ _id: f_document._id }, updates, { strict: false }).exec().then(function (res) {
176
+ resolve(res.nModified);
177
+ }, function (err) { return reject(err); });
178
+ }
179
+ else {
180
+ resolve(1);
181
+ }
182
+ if (common_1.getBinarySize(JSON.stringify(f_document)) < 200000) {
183
+ log_collection_1.Logs.create({
184
+ _id: mongoose_1.Types.ObjectId().toHexString(),
185
+ date: new Date(),
186
+ type: 'info',
187
+ title: 'Update Document',
188
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
189
+ payload: f_document,
190
+ method: 'updateDocument',
191
+ user: _this.user,
192
+ messageId: ''
193
+ });
194
+ }
195
+ else {
196
+ log_collection_1.Logs.create({
197
+ _id: mongoose_1.Types.ObjectId().toHexString(),
198
+ date: new Date(),
199
+ type: 'info',
200
+ title: 'Update Document',
201
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
202
+ payload: 'Too Big',
203
+ method: 'updateDocument',
204
+ user: _this.user,
205
+ messageId: ''
206
+ });
207
+ }
208
+ }
209
+ }
210
+ else {
211
+ console.log('invalid version - ' + collection, currDoc.__v, f_document.__v);
212
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).findOne({
213
+ $and: [
214
+ { '_id._id': currDoc._id },
215
+ { '_id.__v': f_document.__v }
216
+ ]
217
+ }).lean().exec(function (errOldDoc, oldDoc) {
218
+ var newCurrDocId = currDoc._id;
219
+ if (oldDoc) {
220
+ var versionDoc_1 = common_1.deepCopy(currDoc);
221
+ versionDoc_1._id = {
222
+ _id: currDoc._id,
223
+ __v: currDoc.__v
224
+ };
225
+ var updatedDoc = common_1.getMongoMergeUpdatedDoc(f_document, currDoc, oldDoc);
226
+ updatedDoc._id = newCurrDocId;
227
+ updatedDoc.__v++;
228
+ __1.default.getSupportDB().model(collection).replaceOne({ _id: newCurrDocId }, updatedDoc).exec().then(function (res) {
229
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).create(versionDoc_1).then(function (doc) {
230
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).deleteMany({
231
+ $and: [
232
+ { '_id._id': versionDoc_1._id._id },
233
+ { '_id.__v': { $lte: versionDoc_1._id.__v - 4 } }
234
+ ]
235
+ }).exec();
236
+ resolve(res.nModified);
237
+ });
238
+ }, function (err) { return reject(err); });
239
+ }
240
+ else {
241
+ reject('Invalid Version And Could Not Find History - DB: ' + currDoc.__v + ', Trying to update with :' + f_document.__v);
242
+ }
243
+ });
244
+ }
245
+ }
246
+ else {
247
+ reject(errDoc);
248
+ }
249
+ });
250
+ });
251
+ }
252
+ },
253
+ // Updates 1 document's props (from _id)
254
+ // @Inputs: collection, document id, document version, update paramters ({prop: 'xxx', data: 'yyy})
255
+ // @Outputs: res = 1 (updated 1), res = 0 (not updated), err = not updated/wrong version
256
+ // Search for doc, check version, if found then try and update props
257
+ updateDocumentProps: {
258
+ check: new simpl_schema_1.default({
259
+ collection: {
260
+ type: String
261
+ },
262
+ doc_id: {
263
+ type: String
264
+ },
265
+ updateParams: {
266
+ type: Array
267
+ },
268
+ 'updateParams.$': {
269
+ type: Object,
270
+ blackbox: true
271
+ },
272
+ doc__v: {
273
+ type: Number
274
+ }
275
+ }),
276
+ function: function (collection, doc_id, updateParams, doc__v) {
277
+ var _this = this;
278
+ return new Promise(function (resolve, reject) {
279
+ __1.default.getSupportDB().model(collection).findOne({ _id: doc_id }).lean().exec(function (errDoc, currDoc) {
280
+ if (currDoc) {
281
+ var modifiedDoc_1 = common_1.deepCopy(currDoc);
282
+ updateParams.forEach(function (data) {
283
+ modifiedDoc_1[data.prop] = data.data;
284
+ });
285
+ if (modifiedDoc_1.__v === doc__v) {
286
+ var versionDoc = common_1.deepCopy(currDoc);
287
+ versionDoc._id = {
288
+ _id: currDoc._id,
289
+ __v: currDoc.__v
290
+ };
291
+ var schemaErrors = null;
292
+ try {
293
+ __1.default.getSupportDB().model(collection)['simplschema'].validate(modifiedDoc_1);
294
+ }
295
+ catch (errors) {
296
+ schemaErrors = errors;
297
+ supportManager.getMainServer().getMethodManager().callMethodInternal('insertErrorLog', 'Schema Failed on updateDocumentProps - ' + collection, [schemaErrors, modifiedDoc_1]);
298
+ }
299
+ if (schemaErrors) {
300
+ console.log(schemaErrors);
301
+ reject('Schema Errors');
302
+ }
303
+ else {
304
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).create(versionDoc).then(function (doc) {
305
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).deleteMany({
306
+ $and: [
307
+ { '_id._id': currDoc._id },
308
+ { '_id.__v': { $lte: currDoc.__v - 4 } }
309
+ ]
310
+ }).exec();
311
+ }, function (err) {
312
+ console.log(err);
313
+ });
314
+ var updates = common_1.getMongoUpdates(currDoc, modifiedDoc_1, true);
315
+ if (updates) {
316
+ __1.default.getSupportDB().model(collection).updateOne({ _id: modifiedDoc_1._id }, updates, { strict: false }).exec().then(function (res) {
317
+ resolve(res.ok);
318
+ }, function (err) { return reject(err); });
319
+ }
320
+ else {
321
+ resolve(1);
322
+ }
323
+ if (common_1.getBinarySize(JSON.stringify(updateParams)) < 200000) {
324
+ log_collection_1.Logs.create({
325
+ _id: mongoose_1.Types.ObjectId().toHexString(),
326
+ date: new Date(),
327
+ type: 'info',
328
+ title: 'Update Document Props',
329
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection + ', Id: ' + doc_id + ', ' + 'Version: ' + doc__v,
330
+ payload: updateParams,
331
+ method: 'updateDocumentProps',
332
+ user: _this.user,
333
+ messageId: ''
334
+ });
335
+ }
336
+ else {
337
+ log_collection_1.Logs.create({
338
+ _id: mongoose_1.Types.ObjectId().toHexString(),
339
+ date: new Date(),
340
+ type: 'info',
341
+ title: 'Update Document Props',
342
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection + ', Id: ' + doc_id + ', ' + 'Version: ' + doc__v,
343
+ payload: 'Too Big',
344
+ method: 'updateDocumentProps',
345
+ user: _this.user,
346
+ messageId: ''
347
+ });
348
+ }
349
+ }
350
+ }
351
+ else {
352
+ console.log('invalid version - ' + collection, currDoc.__v, doc__v);
353
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).findOne({
354
+ $and: [
355
+ { '_id._id': currDoc._id },
356
+ { '_id.__v': doc__v }
357
+ ]
358
+ }).lean().exec(function (errOldDoc, oldDoc) {
359
+ var newCurrDocId = currDoc._id;
360
+ if (oldDoc) {
361
+ var versionDoc_2 = common_1.deepCopy(currDoc);
362
+ versionDoc_2._id = {
363
+ _id: currDoc._id,
364
+ __v: currDoc.__v
365
+ };
366
+ var updatedDoc = common_1.getMongoMergeUpdatedDoc(modifiedDoc_1, currDoc, oldDoc);
367
+ updatedDoc._id = newCurrDocId;
368
+ updatedDoc.__v++;
369
+ __1.default.getSupportDB().model(collection).replaceOne({ _id: newCurrDocId }, updatedDoc).exec().then(function (res) {
370
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).create(versionDoc_2).then(function (doc) {
371
+ __1.default.getSupportDB().model(__1.default.getSupportDB().model(collection)['versionCollection']).deleteMany({
372
+ $and: [
373
+ { '_id._id': versionDoc_2._id._id },
374
+ { '_id.__v': { $lte: versionDoc_2._id.__v - 4 } }
375
+ ]
376
+ }).exec();
377
+ }, function (err) {
378
+ console.log(err);
379
+ });
380
+ resolve(res.nModified);
381
+ }, function (err) { return reject(err); });
382
+ }
383
+ else {
384
+ reject('Invalid Version And Could Not Find History Props - DB: ' + currDoc.__v + ', Trying to update with :' + modifiedDoc_1.__v);
385
+ }
386
+ });
387
+ }
388
+ }
389
+ else {
390
+ reject(errDoc);
391
+ }
392
+ });
393
+ });
394
+ }
395
+ },
396
+ // Removes 1 document (from _id)
397
+ // @Inputs: collection, document id
398
+ // @Outputs: res = 1 (deleted), res = 0 (not deleted), err = not deleted
399
+ // Search for doc, if found then try and remove
400
+ removeDocument: {
401
+ check: new simpl_schema_1.default({
402
+ collection: {
403
+ type: String
404
+ },
405
+ doc_id: {
406
+ type: String
407
+ }
408
+ }),
409
+ function: function (collection, doc_id) {
410
+ var _this = this;
411
+ return new Promise(function (resolve, reject) {
412
+ log_collection_1.Logs.create({
413
+ _id: mongoose_1.Types.ObjectId().toHexString(),
414
+ date: new Date(),
415
+ type: 'info',
416
+ title: 'Remove Document',
417
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
418
+ payload: { _id: doc_id },
419
+ method: 'removeDocument',
420
+ user: _this.user,
421
+ messageId: ''
422
+ });
423
+ __1.default.getSupportDB().model(collection).deleteOne({ _id: doc_id }).exec(function (err, res) {
424
+ if (err) {
425
+ reject(err);
426
+ }
427
+ else {
428
+ resolve(res.ok);
429
+ }
430
+ });
431
+ });
432
+ }
433
+ },
434
+ removeDocumentWithQuery: {
435
+ check: new simpl_schema_1.default({
436
+ collection: {
437
+ type: String
438
+ },
439
+ query: {
440
+ type: Object,
441
+ blackbox: true
442
+ }
443
+ }),
444
+ function: function (collection, query) {
445
+ var _this = this;
446
+ return new Promise(function (resolve, reject) {
447
+ log_collection_1.Logs.create({
448
+ _id: mongoose_1.Types.ObjectId().toHexString(),
449
+ date: new Date(),
450
+ type: 'info',
451
+ title: 'Remove Document (Query)',
452
+ message: 'User: ' + _this.user + ', Collection Type: ' + collection,
453
+ payload: { _id: query },
454
+ method: 'removeDocumentWithQuery',
455
+ user: _this.user,
456
+ messageId: ''
457
+ });
458
+ __1.default.getSupportDB().model(collection).deleteOne(query).exec(function (err, res) {
459
+ if (err) {
460
+ reject(err);
461
+ }
462
+ else {
463
+ resolve(res.ok);
464
+ }
465
+ });
466
+ });
467
+ }
468
+ }
469
+ });
470
+ }
471
+ exports.loadSupportCollectionMethods = loadSupportCollectionMethods;
@@ -0,0 +1,3 @@
1
+ import { SupportManager } from '../managers/support.manager';
2
+ export declare function loadCounterMethods(supportManager: SupportManager): void;
3
+ //# sourceMappingURL=counters.d.ts.map