@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.
- package/collections/active-subscription.collection.d.ts +8 -0
- package/collections/active-subscription.collection.js +68 -2
- package/collections/app-status.collection.d.ts +8 -0
- package/collections/app-status.collection.js +43 -2
- package/collections/app-version.collection.d.ts +8 -0
- package/collections/app-version.collection.js +56 -2
- package/collections/counter.collection.d.ts +10 -0
- package/collections/counter.collection.js +73 -2
- package/collections/cron-job-history.collection.d.ts +8 -0
- package/collections/cron-job-history.collection.js +86 -2
- package/collections/cron-job.collection.d.ts +8 -0
- package/collections/cron-job.collection.js +89 -2
- package/collections/file.collection.d.ts +10 -0
- package/collections/file.collection.js +73 -2
- package/collections/flag.collection.d.ts +8 -0
- package/collections/flag.collection.js +47 -2
- package/collections/log.collection.d.ts +8 -0
- package/collections/log.collection.js +64 -2
- package/collections/logged-in-users.collection.d.ts +8 -0
- package/collections/logged-in-users.collection.js +70 -2
- package/collections/method-call.collection.d.ts +7 -0
- package/collections/method-call.collection.js +44 -2
- package/collections/method-response.collection.d.ts +7 -0
- package/collections/method-response.collection.js +48 -2
- package/collections/queue-flag.collection.d.ts +8 -0
- package/collections/queue-flag.collection.js +41 -2
- package/collections/queue-method.collection.d.ts +8 -0
- package/collections/queue-method.collection.js +116 -2
- package/collections/queue-response.collection.d.ts +8 -0
- package/collections/queue-response.collection.js +78 -2
- package/collections/support-ticket.collection.d.ts +8 -0
- package/collections/support-ticket.collection.js +146 -2
- package/collections/user.collection.d.ts +9 -0
- package/collections/user.collection.js +108 -2
- package/cron/cron.d.ts +6 -0
- package/cron/cron.js +160 -2
- package/fixtures/cron-jobs.d.ts +2 -0
- package/fixtures/cron-jobs.js +72 -2
- package/fixtures/init.d.ts +2 -0
- package/fixtures/init.js +73 -2
- package/http/auth.d.ts +3 -0
- package/http/auth.js +472 -2
- package/http/health.d.ts +2 -0
- package/http/health.js +8 -2
- package/index.d.ts +53 -0
- package/index.js +123 -2
- package/managers/cron.manager.d.ts +17 -0
- package/managers/cron.manager.js +193 -2
- package/managers/method.manager.d.ts +27 -0
- package/managers/method.manager.js +513 -2
- package/managers/queue-method.manager.d.ts +14 -0
- package/managers/queue-method.manager.js +239 -2
- package/managers/subscription.manager.d.ts +27 -0
- package/managers/subscription.manager.js +700 -2
- package/managers/support.manager.d.ts +18 -0
- package/managers/support.manager.js +208 -2
- package/methods/accounts.d.ts +3 -0
- package/methods/accounts.js +253 -2
- package/methods/aws.d.ts +3 -0
- package/methods/aws.js +323 -2
- package/methods/cloudconvert.d.ts +3 -0
- package/methods/cloudconvert.js +37 -2
- package/methods/collections.d.ts +3 -0
- package/methods/collections.js +738 -2
- package/methods/counters.d.ts +3 -0
- package/methods/counters.js +404 -2
- package/methods/cron-jobs.d.ts +3 -0
- package/methods/cron-jobs.js +63 -2
- package/methods/flags.d.ts +3 -0
- package/methods/flags.js +6 -2
- package/methods/logs.d.ts +3 -0
- package/methods/logs.js +29 -2
- package/methods/pdf.d.ts +3 -0
- package/methods/pdf.js +303 -2
- package/models/active-subscription.model.d.ts +14 -0
- package/models/active-subscription.model.js +2 -2
- package/models/app-status.model.d.ts +5 -0
- package/models/app-status.model.js +2 -2
- package/models/app-version.model.d.ts +5 -0
- package/models/app-version.model.js +2 -2
- package/models/collection-document.model.d.ts +7 -0
- package/models/collection-document.model.js +2 -2
- package/models/counter.model.d.ts +6 -0
- package/models/counter.model.js +2 -2
- package/models/cron-job-history.model.d.ts +13 -0
- package/models/cron-job-history.model.js +2 -2
- package/models/cron-job.model.d.ts +14 -0
- package/models/cron-job.model.js +2 -2
- package/models/dialog.model.d.ts +24 -0
- package/models/dialog.model.js +2 -2
- package/models/file.model.d.ts +10 -0
- package/models/file.model.js +2 -2
- package/models/flag.model.d.ts +6 -0
- package/models/flag.model.js +2 -2
- package/models/log.model.d.ts +12 -0
- package/models/log.model.js +2 -2
- package/models/logged-in-users.model.d.ts +10 -0
- package/models/logged-in-users.model.js +2 -2
- package/models/method-call.model.d.ts +8 -0
- package/models/method-call.model.js +2 -2
- package/models/method-response.model.d.ts +9 -0
- package/models/method-response.model.js +2 -2
- package/models/method.model.d.ts +11 -0
- package/models/method.model.js +2 -2
- package/models/pagination.model.d.ts +12 -0
- package/models/pagination.model.js +20 -2
- package/models/permission.model.d.ts +13 -0
- package/models/permission.model.js +2 -2
- package/models/queue-method.model.d.ts +10 -0
- package/models/queue-method.model.js +2 -2
- package/models/queue-response.model.d.ts +11 -0
- package/models/queue-response.model.js +2 -2
- package/models/select-data-label.model.d.ts +10 -0
- package/models/select-data-label.model.js +2 -2
- package/models/server-response.model.d.ts +6 -0
- package/models/server-response.model.js +2 -2
- package/models/subscription.model.d.ts +31 -0
- package/models/subscription.model.js +2 -2
- package/models/support-method.model.d.ts +10 -0
- package/models/support-method.model.js +2 -2
- package/models/support-ticket.model.d.ts +40 -0
- package/models/support-ticket.model.js +2 -2
- package/models/user.model.d.ts +15 -0
- package/models/user.model.js +2 -2
- package/package.json +3 -1
- package/publications/app-status.d.ts +3 -0
- package/publications/app-status.js +14 -2
- package/publications/app-version.d.ts +3 -0
- package/publications/app-version.js +14 -2
- package/publications/cron-jobs.d.ts +3 -0
- package/publications/cron-jobs.js +14 -2
- package/publications/files.d.ts +3 -0
- package/publications/files.js +71 -2
- package/publications/flags.d.ts +3 -0
- package/publications/flags.js +23 -2
- package/publications/logs.d.ts +3 -0
- package/publications/logs.js +26 -2
- package/publications/method-calls.d.ts +3 -0
- package/publications/method-calls.js +14 -2
- package/publications/method-responses.d.ts +3 -0
- package/publications/method-responses.js +14 -2
- package/publications/super-admin.d.ts +3 -0
- package/publications/super-admin.js +21 -2
- package/publications/support-tickets.d.ts +2 -0
- package/publications/support-tickets.js +118 -2
- package/server-app.d.ts +33 -0
- package/server-app.js +598 -2
- package/support-methods/aws.d.ts +3 -0
- package/support-methods/aws.js +276 -2
- package/support-methods/collections.d.ts +3 -0
- package/support-methods/collections.js +471 -2
- package/support-methods/counters.d.ts +3 -0
- package/support-methods/counters.js +189 -2
- package/support-methods/support.d.ts +3 -0
- package/support-methods/support.js +19 -2
- package/util/common.d.ts +15 -0
- package/util/common.js +334 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SupportMethodModel } from '../models/support-method.model';
|
|
2
|
+
import { ResolveIOMainServer } from '../server-app';
|
|
3
|
+
export declare class SupportManager {
|
|
4
|
+
private _mainServer;
|
|
5
|
+
_supportMethods: SupportMethodModel;
|
|
6
|
+
private _mailer;
|
|
7
|
+
private _aws;
|
|
8
|
+
private serverConfig;
|
|
9
|
+
private _sendQueue;
|
|
10
|
+
private _runningQueue;
|
|
11
|
+
constructor(mainServer: any, serverConfig: any);
|
|
12
|
+
getMainServer(): ResolveIOMainServer;
|
|
13
|
+
supportMethods(supportMethod: SupportMethodModel): void;
|
|
14
|
+
callSupportMethod(ws: WebSocket, messageId: any, supportMethod: any, ...methodData: any[]): void;
|
|
15
|
+
private sendWS;
|
|
16
|
+
sendEmail(sendTo: string, subject: string, text?: string, html?: string, attachments?: any[]): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=support.manager.d.ts.map
|
|
@@ -1,2 +1,208 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2Vycy9zdXBwb3J0Lm1hbmFnZXIudHMiXSwibmFtZXMiOlsibm9kZW1haWxlciIsInJlcXVpcmUiLCJhd3MiLCJjb2xsZWN0aW9uc18xIiwic3VwcG9ydF8xIiwiY291bnRlcnNfMSIsIm1vbmdvb3NlXzEiLCJjb21tb25fMSIsImxvZ19jb2xsZWN0aW9uXzEiLCJTdXBwb3J0TWFuYWdlciIsIm1haW5TZXJ2ZXIiLCJzZXJ2ZXJDb25maWciLCJfdGhpcyIsInRoaXMiLCJfc3VwcG9ydE1ldGhvZHMiLCJfc2VuZFF1ZXVlIiwiX3J1bm5pbmdRdWV1ZSIsIl9tYWluU2VydmVyIiwibG9hZFN1cHBvcnRDb2xsZWN0aW9uTWV0aG9kcyIsImxvYWRTdXBwb3J0TWV0aG9kcyIsImxvYWRDb3VudGVyTWV0aG9kcyIsIl9tYWlsZXIiLCJjcmVhdGVUcmFuc3BvcnQiLCJTRVMiLCJhcGlWZXJzaW9uIiwiYWNjZXNzS2V5SWQiLCJBV1NBQ0NFU1NLRVlJRCIsInNlY3JldEFjY2Vzc0tleSIsIkFXU1NFQ1JFVEFDQ0VTU0tFWSIsInJlZ2lvbiIsIkFXU1NFU19SRUdJT04iLCJfYXdzIiwiUzMiLCJBV1NSRUdJT04iLCJzZXRJbnRlcnZhbCIsImxlbmd0aCIsImkiLCJ3cyIsImdldFdTIiwiaWRfd3MiLCJyZWFkeVN0YXRlIiwiT1BFTiIsImJ1ZmZlcmVkQW1vdW50Iiwic2VuZEl0ZW0iLCJwb3AiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJlcnJvciIsImNvbnNvbGUiLCJsb2ciLCJ1bnN1YnNjcmliZVdTIiwiZ2V0QmluYXJ5U2l6ZSIsIm1ldGhvZERhdGEiLCJMb2dzIiwiY3JlYXRlIiwiX2lkIiwiVHlwZXMiLCJPYmplY3RJZCIsInRvSGV4U3RyaW5nIiwiZGF0ZSIsIkRhdGUiLCJ0eXBlIiwidGl0bGUiLCJtZXNzYWdlIiwibWVzc2FnZUlkIiwibWV0aG9kIiwicGF5bG9hZCIsInVzZXIiLCJzcGxpY2UiLCJwcm90b3R5cGUiLCJnZXRNYWluU2VydmVyIiwic3VwcG9ydE1ldGhvZHMiLCJzdXBwb3J0TWV0aG9kIiwiT2JqZWN0IiwiYXNzaWduIiwiY2FsbFN1cHBvcnRNZXRob2QiLCJfaSIsImFyZ3VtZW50cyIsInRoYXQiLCJjaGVjayIsInNlbmRFbWFpbCIsInNlcnZlclJlcyIsImhhc0Vycm9yIiwic2VuZFdTIiwiX3NjaGVtYSIsInZhbE9iaiIsInJvb3RLZXlzIiwia2V5cyIsImZpbHRlciIsImEiLCJpbmNsdWRlcyIsInZhbGlkYXRlIiwiZXJyb3JzIiwiX2EiLCJmdW5jdGlvbiIsImNhbGwiLCJhcHBseSIsImlkX3VzZXIiLCJjb25jYXQiLCJ0aGVuIiwicmVzIiwiZXJyIiwic2VuZFRvIiwic3ViamVjdCIsInRleHQiLCJodG1sIiwiYXR0YWNobWVudHMiLCJzZW5kTWFpbCIsInJlcGx5VG8iLCJ1bmRlZmluZWQiLCJmcm9tIiwiTUFJTF9GUk9NIiwidG8iLCJpbmZvIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Im9FQUNBLElBQUFBLFdBQUFDLFFBQUEsY0FDQUMsSUFBQUQsUUFBQSxXQUVBRSxjQUFBRixRQUFBLGtDQUNBRyxVQUFBSCxRQUFBLDhCQUNBSSxXQUFBSixRQUFBLCtCQUVBSyxXQUFBTCxRQUFBLFlBQ0FNLFNBQUFOLFFBQUEsa0JBQ0FPLGlCQUFBUCxRQUFBLGlDQUlBUSxlQUFBLFdBV0MsU0FBQUEsRUFBWUMsRUFBWUMsR0FBeEIsSUFBQUMsRUFBQUMsS0FST0EsS0FBQUMsZ0JBQXNDLEdBS3JDRCxLQUFBRSxXQUFhLEdBQ2JGLEtBQUFHLGVBQWdCLEVBR3ZCSCxLQUFLSSxZQUFjUCxFQUVuQkcsS0FBS0YsYUFBZUEsRUFFcEJSLGNBQUFlLDZCQUE2QkwsTUFDN0JULFVBQUFlLG1CQUFtQk4sTUFDbkJSLFdBQUFlLG1CQUFtQlAsTUFFbkJBLEtBQUtRLFFBQVVyQixXQUFXc0IsZ0JBQWdCLENBQ3pDQyxJQUFLLElBQUlyQixJQUFJcUIsSUFBSSxDQUNoQkMsV0FBWSxhQUNaQyxZQUFhZCxFQUFh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QUFBQSIsImZpbGUiOiJtYW5hZ2Vycy9zdXBwb3J0Lm1hbmFnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXJ2ZXJSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZlci1yZXNwb25zZS5tb2RlbCc7XG5pbXBvcnQgKiBhcyBub2RlbWFpbGVyIGZyb20gJ25vZGVtYWlsZXInO1xuaW1wb3J0ICogYXMgYXdzIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgU3VwcG9ydE1ldGhvZE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3N1cHBvcnQtbWV0aG9kLm1vZGVsJztcbmltcG9ydCB7IGxvYWRTdXBwb3J0Q29sbGVjdGlvbk1ldGhvZHMgfSBmcm9tICcuLi9zdXBwb3J0LW1ldGhvZHMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgbG9hZFN1cHBvcnRNZXRob2RzIH0gZnJvbSAnLi4vc3VwcG9ydC1tZXRob2RzL3N1cHBvcnQnO1xuaW1wb3J0IHsgbG9hZENvdW50ZXJNZXRob2RzIH0gZnJvbSAnLi4vc3VwcG9ydC1tZXRob2RzL2NvdW50ZXJzJztcblxuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICdtb25nb29zZSc7XG5pbXBvcnQgeyBnZXRCaW5hcnlTaXplIH0gZnJvbSAnLi4vdXRpbC9jb21tb24nO1xuaW1wb3J0IHsgTG9ncyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2xvZy5jb2xsZWN0aW9uJztcbmltcG9ydCB7IFJlc29sdmVJT01haW5TZXJ2ZXIgfSBmcm9tICcuLi9zZXJ2ZXItYXBwJztcblxuXG5leHBvcnQgY2xhc3MgU3VwcG9ydE1hbmFnZXIge1xuXG5cdHByaXZhdGUgX21haW5TZXJ2ZXI6IFJlc29sdmVJT01haW5TZXJ2ZXI7XG5cdHB1YmxpYyBfc3VwcG9ydE1ldGhvZHM6IFN1cHBvcnRNZXRob2RNb2RlbCA9IHt9O1xuXHRwcml2YXRlIF9tYWlsZXI6IG5vZGVtYWlsZXIuVHJhbnNwb3J0ZXI7XG5cdHByaXZhdGUgX2F3czogYXdzLlMzO1xuXHRwcml2YXRlIHNlcnZlckNvbmZpZztcblxuXHRwcml2YXRlIF9zZW5kUXVldWUgPSBbXTtcblx0cHJpdmF0ZSBfcnVubmluZ1F1ZXVlID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IobWFpblNlcnZlciwgc2VydmVyQ29uZmlnKSB7XG5cdFx0dGhpcy5fbWFpblNlcnZlciA9IG1haW5TZXJ2ZXI7XG5cblx0XHR0aGlzLnNlcnZlckNvbmZpZyA9IHNlcnZlckNvbmZpZztcblxuXHRcdGxvYWRTdXBwb3J0Q29sbGVjdGlvbk1ldGhvZHModGhpcyk7XG5cdFx0bG9hZFN1cHBvcnRNZXRob2RzKHRoaXMpO1xuXHRcdGxvYWRDb3VudGVyTWV0aG9kcyh0aGlzKTtcblxuXHRcdHRoaXMuX21haWxlciA9IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcblx0XHRcdFNFUzogbmV3IGF3cy5TRVMoe1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAnMjAxMC0xMi0wMScsXG5cdFx0XHRcdGFjY2Vzc0tleUlkOiBzZXJ2ZXJDb25maWcuQVdTQUNDRVNTS0VZSUQsXG5cdFx0XHRcdHNlY3JldEFjY2Vzc0tleTogc2VydmVyQ29uZmlnLkFXU1NFQ1JFVEFDQ0VTU0tFWSxcblx0XHRcdFx0cmVnaW9uOiBzZXJ2ZXJDb25maWcuQVdTU0VTX1JFR0lPTlxuXHRcdFx0fSlcblx0XHR9KTtcblxuXHRcdHRoaXMuX2F3cyA9IG5ldyBhd3MuUzMoe1xuXHRcdFx0YWNjZXNzS2V5SWQ6IHNlcnZlckNvbmZpZy5BV1NBQ0NFU1NLRVlJRCxcblx0XHRcdHNlY3JldEFjY2Vzc0tleTogc2VydmVyQ29uZmlnLkFXU1NFQ1JFVEFDQ0VTU0tFWSxcblx0XHRcdHJlZ2lvbjogc2VydmVyQ29uZmlnLkFXU1JFR0lPTlxuXHRcdH0pO1xuXG5cdFx0c2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLl9ydW5uaW5nUXVldWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3NlbmRRdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHR0aGlzLl9ydW5uaW5nUXVldWUgPSB0cnVlO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSB0aGlzLl9zZW5kUXVldWUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRcdGxldCB3cyA9IHRoaXMuX21haW5TZXJ2ZXIuZ2V0V1ModGhpcy5fc2VuZFF1ZXVlW2ldLmlkX3dzKTtcblx0XHRcdFx0XHRcdGlmICh3cyAmJiB3cy5yZWFkeVN0YXRlID09PSB3cy5PUEVOKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh3cy5idWZmZXJlZEFtb3VudCA8IDIwNDgwKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNlbmRJdGVtID0gdGhpcy5fc2VuZFF1ZXVlLnBvcCgpO1xuXHRcdFx0XHRcdFx0XHRcdHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0uZGF0YSksIChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBvbiBXUzogJywgZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tYWluU2VydmVyLnVuc3Vic2NyaWJlV1Mod3MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYgKHNlbmRJdGVtLm1ldGhvZCAhPT0gJ2NvdW50UXVlcnknICYmIHNlbmRJdGVtLm1ldGhvZCAhPT0gJ2NvdW50Q29sbGVjdGlvbldpdGhRdWVyeScgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZCcgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZE9uZScgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZFdpdGhPcHRpb25zJyAmJiBzZW5kSXRlbS5tZXRob2QgIT09ICdzZXRXU0FwcFZlcnNpb24nICYmIHNlbmRJdGVtLm1ldGhvZCAhPT0gJ3VwbG9hZEZpbGVBbmRTYXZlJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0ubWV0aG9kRGF0YSkpIDwgMjAwMDAwICYmIGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0uZGF0YSkpIDwgMjAwMDAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZ3MuY3JlYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfaWQ6IFR5cGVzLk9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjbGllbnQtcmVzcG9uc2UnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnQ2xpZW50IFJlc3BvbnNlIC0gU3VwcG9ydCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VzZXI6ICcgKyB3c1sndXNlciddICsgJywgTWVzc2FnZUlkOiAnICsgc2VuZEl0ZW0uZGF0YS5tZXNzYWdlSWQgKyAnLCBTdXBwb3J0IE1ldGhvZDogJyArIHNlbmRJdGVtLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkOiBbSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0ubWV0aG9kRGF0YSksIHNlbmRJdGVtLmRhdGFdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogc2VuZEl0ZW0ubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXI6IHdzWyd1c2VyJ10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiBzZW5kSXRlbS5kYXRhLm1lc3NhZ2VJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnY2xpZW50LXJlc3BvbnNlJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ0NsaWVudCBSZXNwb25zZSAtIFN1cHBvcnQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdVc2VyOiAnICsgd3NbJ3VzZXInXSArICcsIE1lc3NhZ2VJZDogJyArIHNlbmRJdGVtLmRhdGEubWVzc2FnZUlkICsgJywgU3VwcG9ydCBNZXRob2Q6ICcgKyBzZW5kSXRlbS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF5bG9hZDogJ1RvbyBCaWcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogc2VuZEl0ZW0ubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXI6IHdzWyd1c2VyJ10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiBzZW5kSXRlbS5kYXRhLm1lc3NhZ2VJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9zZW5kUXVldWUuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuX3J1bm5pbmdRdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgMjUwKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNYWluU2VydmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9tYWluU2VydmVyO1xuXHR9XG5cblx0Ly8gQWRkIG1ldGhvZHMgdG8gcHJpdmF0ZSBtZXRob2RzIG9iamVjdFxuXHRwdWJsaWMgc3VwcG9ydE1ldGhvZHMoc3VwcG9ydE1ldGhvZDogU3VwcG9ydE1ldGhvZE1vZGVsKSB7XG5cdFx0dGhpcy5fc3VwcG9ydE1ldGhvZHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX3N1cHBvcnRNZXRob2RzLCBzdXBwb3J0TWV0aG9kKTtcblx0fVxuXG5cdC8vIENhbGwvcnVuIG1ldGhvZCAoRW1pdCBvbiBTb2NrZXQpXG5cdHB1YmxpYyBjYWxsU3VwcG9ydE1ldGhvZCh3czogV2ViU29ja2V0LCBtZXNzYWdlSWQsIHN1cHBvcnRNZXRob2QsIC4uLm1ldGhvZERhdGE6IGFueVtdKSB7XG5cdFx0bGV0IHRoYXQgPSB0aGlzO1xuXG5cdFx0aWYgKCF0aGF0Ll9zdXBwb3J0TWV0aG9kc1tzdXBwb3J0TWV0aG9kXSkge1xuXHRcdFx0Y29uc29sZS5sb2coJ05vIFN1cHBvcnQgTWV0aG9kOiAnICsgc3VwcG9ydE1ldGhvZCk7XG5cblx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIFN1cHBvcnQgTWV0aG9kOiAnICsgc3VwcG9ydE1ldGhvZCk7XG5cdFx0XHRcblx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0ZGF0YTogJ0ludGVybmFsIEVycm9yJ1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5zZW5kV1Mod3MsIHN1cHBvcnRNZXRob2QsIG1ldGhvZERhdGEsIHNlcnZlclJlcyk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoKG1ldGhvZERhdGEubGVuZ3RoID4gMSB8fCBtZXRob2REYXRhWzBdKSkge1xuXHRcdFx0aWYgKCF0aGF0Ll9zdXBwb3J0TWV0aG9kc1tzdXBwb3J0TWV0aG9kXS5jaGVjaykge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdObyBDaGVjayBGdW5jdGlvbiBGb3IgU3VwcG9ydCBNZXRob2QgJyArIHN1cHBvcnRNZXRob2QpO1xuXG5cdFx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBTdXBwb3J0IE1ldGhvZCAnICsgc3VwcG9ydE1ldGhvZCk7XG5cdFx0XHRcdFxuXHRcdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdGRhdGE6ICdJbnRlcm5hbCBFcnJvcidcblx0XHRcdFx0fTtcblx0XG5cdFx0XHRcdHRoaXMuc2VuZFdTKHdzLCBzdXBwb3J0TWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIXRoYXQuX3N1cHBvcnRNZXRob2RzW3N1cHBvcnRNZXRob2RdLmNoZWNrLl9zY2hlbWEpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignTm8gQ2hlY2sgU2NoZW1hIEZvciBNZXRob2QgJyArIHN1cHBvcnRNZXRob2QpO1xuXG5cdFx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBTdXBwb3J0IE1ldGhvZCAnICsgc3VwcG9ydE1ldGhvZCk7XG5cdFx0XHRcdFxuXHRcdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdGRhdGE6ICdJbnRlcm5hbCBFcnJvcidcblx0XHRcdFx0fTtcblx0XG5cdFx0XHRcdHRoaXMuc2VuZFdTKHdzLCBzdXBwb3J0TWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGxldCB2YWxPYmogPSB7fTtcblx0XHRcdFx0bGV0IHZhbEtleXMgPSBPYmplY3Qua2V5cyh0aGF0Ll9zdXBwb3J0TWV0aG9kc1tzdXBwb3J0TWV0aG9kXS5jaGVjay5fc2NoZW1hKTtcblxuXHRcdFx0XHRsZXQgcm9vdEtleXMgPSB2YWxLZXlzLmZpbHRlcihhID0+ICFhLmluY2x1ZGVzKCcuJykpO1xuXHRcdFx0XHRcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2REYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFsT2JqW3Jvb3RLZXlzW2ldXSA9IG1ldGhvZERhdGFbaV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHRoYXQuX3N1cHBvcnRNZXRob2RzW3N1cHBvcnRNZXRob2RdLmNoZWNrLnZhbGlkYXRlKHZhbE9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2F0Y2ggKGVycm9ycykge1xuXHRcdFx0XHRcdGlmIChlcnJvcnMpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIFN1cHBvcnQgTWV0aG9kIENoZWNrICgnICsgc3VwcG9ydE1ldGhvZCArICcpJywgZXJyb3JzKTtcblxuXHRcdFx0XHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTWF0Y2ggRXJyb3IgT24gU3VwcG9ydCBNZXRob2QgJyArIHN1cHBvcnRNZXRob2QgKyAnXFxuXFxuRGF0YSBCZWluZyBDaGVja2VkXFxuJyArIEpTT04uc3RyaW5naWZ5KHZhbE9iaiwgbnVsbCwgMikgKyAnXFxuXFxuRXJyb3JzXFxuJyArIEpTT04uc3RyaW5naWZ5KGVycm9ycywgbnVsbCwgMikpO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHRcdFx0aGFzRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRhdGE6ICdJbnRlcm5hbCBFcnJvcidcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHRoaXMuc2VuZFdTKHdzLCBzdXBwb3J0TWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcdFx0XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHRoYXQuX3N1cHBvcnRNZXRob2RzW3N1cHBvcnRNZXRob2RdLmZ1bmN0aW9uLmNhbGwoT2JqZWN0LmFzc2lnbih7fSwgdGhhdCwge2lkX3VzZXI6IHdzWydpZF91c2VyJ10sIHVzZXI6IHdzWyd1c2VyJ10sIGlkX3dzOiB3c1snaWRfc29ja2V0J119KSwgLi4ubWV0aG9kRGF0YSkudGhlbihyZXMgPT4ge1xuXHRcdFx0bGV0IHNlcnZlclJlczogU2VydmVyUmVzcG9uc2VNb2RlbCA9IHtcblx0XHRcdFx0bWVzc2FnZUlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZSxcblx0XHRcdFx0ZGF0YTogcmVzXG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnNlbmRXUyh3cywgc3VwcG9ydE1ldGhvZCwgbWV0aG9kRGF0YSwgc2VydmVyUmVzKTtcblx0XHR9LCBlcnIgPT4ge1xuXHRcdFx0bGV0IHNlcnZlclJlczogU2VydmVyUmVzcG9uc2VNb2RlbCA9IHtcblx0XHRcdFx0bWVzc2FnZUlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRkYXRhOiBlcnJcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc2VuZFdTKHdzLCBzdXBwb3J0TWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzZW5kV1Mod3M6IFdlYlNvY2tldCwgbWV0aG9kOiBzdHJpbmcsIG1ldGhvZERhdGE6IGFueVtdLCBkYXRhOiBTZXJ2ZXJSZXNwb25zZU1vZGVsKSB7XG5cdFx0dGhpcy5fc2VuZFF1ZXVlLnNwbGljZSgwLCAwLCB7XG5cdFx0XHRpZF93czogd3NbJ2lkX3NvY2tldCddLFxuXHRcdFx0bWV0aG9kOiBtZXRob2QsXG5cdFx0XHRtZXRob2REYXRhOiBtZXRob2REYXRhLFxuXHRcdFx0ZGF0YTogZGF0YVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHNlbmRFbWFpbChzZW5kVG86IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCB0ZXh0Pzogc3RyaW5nLCBodG1sPzogc3RyaW5nLCBhdHRhY2htZW50cz86IGFueVtdKSB7XG5cdFx0dGhpcy5fbWFpbGVyLnNlbmRNYWlsKHtcblx0XHRcdHJlcGx5VG86IHVuZGVmaW5lZCxcblx0XHRcdGZyb206IHRoaXMuc2VydmVyQ29uZmlnLk1BSUxfRlJPTSxcblx0XHRcdHRvOiBzZW5kVG8sXG5cdFx0XHRzdWJqZWN0OiBzdWJqZWN0LFxuXHRcdFx0dGV4dDogdGV4dCxcblx0XHRcdGh0bWw6IGh0bWwsXG5cdFx0XHRhdHRhY2htZW50czogYXR0YWNobWVudHNcblx0XHR9LCAoZXJyLCBpbmZvKSA9PiB7XG5cdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0iXX0=
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var nodemailer = require("nodemailer");
|
|
4
|
+
var aws = require("aws-sdk");
|
|
5
|
+
var collections_1 = require("../support-methods/collections");
|
|
6
|
+
var support_1 = require("../support-methods/support");
|
|
7
|
+
var counters_1 = require("../support-methods/counters");
|
|
8
|
+
var mongoose_1 = require("mongoose");
|
|
9
|
+
var common_1 = require("../util/common");
|
|
10
|
+
var log_collection_1 = require("../collections/log.collection");
|
|
11
|
+
var SupportManager = /** @class */ (function () {
|
|
12
|
+
function SupportManager(mainServer, serverConfig) {
|
|
13
|
+
var _this = this;
|
|
14
|
+
this._supportMethods = {};
|
|
15
|
+
this._sendQueue = [];
|
|
16
|
+
this._runningQueue = false;
|
|
17
|
+
this._mainServer = mainServer;
|
|
18
|
+
this.serverConfig = serverConfig;
|
|
19
|
+
collections_1.loadSupportCollectionMethods(this);
|
|
20
|
+
support_1.loadSupportMethods(this);
|
|
21
|
+
counters_1.loadCounterMethods(this);
|
|
22
|
+
this._mailer = nodemailer.createTransport({
|
|
23
|
+
SES: new aws.SES({
|
|
24
|
+
apiVersion: '2010-12-01',
|
|
25
|
+
accessKeyId: serverConfig.AWSACCESSKEYID,
|
|
26
|
+
secretAccessKey: serverConfig.AWSSECRETACCESSKEY,
|
|
27
|
+
region: serverConfig.AWSSES_REGION
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
this._aws = new aws.S3({
|
|
31
|
+
accessKeyId: serverConfig.AWSACCESSKEYID,
|
|
32
|
+
secretAccessKey: serverConfig.AWSSECRETACCESSKEY,
|
|
33
|
+
region: serverConfig.AWSREGION
|
|
34
|
+
});
|
|
35
|
+
setInterval(function () {
|
|
36
|
+
if (!_this._runningQueue) {
|
|
37
|
+
if (_this._sendQueue.length) {
|
|
38
|
+
_this._runningQueue = true;
|
|
39
|
+
var _loop_1 = function (i) {
|
|
40
|
+
var ws = _this._mainServer.getWS(_this._sendQueue[i].id_ws);
|
|
41
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
42
|
+
if (ws.bufferedAmount < 20480) {
|
|
43
|
+
var sendItem = _this._sendQueue.pop();
|
|
44
|
+
ws.send(JSON.stringify(sendItem.data), function (error) {
|
|
45
|
+
if (error) {
|
|
46
|
+
console.log('Error on WS: ', error);
|
|
47
|
+
_this._mainServer.unsubscribeWS(ws);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// if (sendItem.method !== 'countQuery' && sendItem.method !== 'countCollectionWithQuery' && sendItem.method !== 'find' && sendItem.method !== 'findOne' && sendItem.method !== 'findWithOptions' && sendItem.method !== 'setWSAppVersion' && sendItem.method !== 'uploadFileAndSave') {
|
|
51
|
+
if (common_1.getBinarySize(JSON.stringify(sendItem.methodData)) < 200000 && common_1.getBinarySize(JSON.stringify(sendItem.data)) < 200000) {
|
|
52
|
+
log_collection_1.Logs.create({
|
|
53
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
54
|
+
date: new Date(),
|
|
55
|
+
type: 'client-response',
|
|
56
|
+
title: 'Client Response - Support',
|
|
57
|
+
message: 'User: ' + ws['user'] + ', MessageId: ' + sendItem.data.messageId + ', Support Method: ' + sendItem.method,
|
|
58
|
+
payload: [JSON.stringify(sendItem.methodData), sendItem.data],
|
|
59
|
+
method: sendItem.method,
|
|
60
|
+
user: ws['user'],
|
|
61
|
+
messageId: sendItem.data.messageId
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
log_collection_1.Logs.create({
|
|
66
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
67
|
+
date: new Date(),
|
|
68
|
+
type: 'client-response',
|
|
69
|
+
title: 'Client Response - Support',
|
|
70
|
+
message: 'User: ' + ws['user'] + ', MessageId: ' + sendItem.data.messageId + ', Support Method: ' + sendItem.method,
|
|
71
|
+
payload: 'Too Big',
|
|
72
|
+
method: sendItem.method,
|
|
73
|
+
user: ws['user'],
|
|
74
|
+
messageId: sendItem.data.messageId
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
_this._sendQueue.splice(i, 1);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
for (var i = _this._sendQueue.length - 1; i >= 0; i--) {
|
|
85
|
+
_loop_1(i);
|
|
86
|
+
}
|
|
87
|
+
_this._runningQueue = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}, 250);
|
|
91
|
+
}
|
|
92
|
+
SupportManager.prototype.getMainServer = function () {
|
|
93
|
+
return this._mainServer;
|
|
94
|
+
};
|
|
95
|
+
// Add methods to private methods object
|
|
96
|
+
SupportManager.prototype.supportMethods = function (supportMethod) {
|
|
97
|
+
this._supportMethods = Object.assign(this._supportMethods, supportMethod);
|
|
98
|
+
};
|
|
99
|
+
// Call/run method (Emit on Socket)
|
|
100
|
+
SupportManager.prototype.callSupportMethod = function (ws, messageId, supportMethod) {
|
|
101
|
+
var _this = this;
|
|
102
|
+
var methodData = [];
|
|
103
|
+
for (var _i = 3; _i < arguments.length; _i++) {
|
|
104
|
+
methodData[_i - 3] = arguments[_i];
|
|
105
|
+
}
|
|
106
|
+
var _a;
|
|
107
|
+
var that = this;
|
|
108
|
+
if (!that._supportMethods[supportMethod]) {
|
|
109
|
+
console.log('No Support Method: ' + supportMethod);
|
|
110
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Support Method: ' + supportMethod);
|
|
111
|
+
var serverRes = {
|
|
112
|
+
messageId: messageId,
|
|
113
|
+
hasError: true,
|
|
114
|
+
data: 'Internal Error'
|
|
115
|
+
};
|
|
116
|
+
this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if ((methodData.length > 1 || methodData[0])) {
|
|
120
|
+
if (!that._supportMethods[supportMethod].check) {
|
|
121
|
+
console.error('No Check Function For Support Method ' + supportMethod);
|
|
122
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Support Method ' + supportMethod);
|
|
123
|
+
var serverRes = {
|
|
124
|
+
messageId: messageId,
|
|
125
|
+
hasError: true,
|
|
126
|
+
data: 'Internal Error'
|
|
127
|
+
};
|
|
128
|
+
this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
else if (!that._supportMethods[supportMethod].check._schema) {
|
|
132
|
+
console.error('No Check Schema For Method ' + supportMethod);
|
|
133
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Support Method ' + supportMethod);
|
|
134
|
+
var serverRes = {
|
|
135
|
+
messageId: messageId,
|
|
136
|
+
hasError: true,
|
|
137
|
+
data: 'Internal Error'
|
|
138
|
+
};
|
|
139
|
+
this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
var valObj = {};
|
|
144
|
+
var valKeys = Object.keys(that._supportMethods[supportMethod].check._schema);
|
|
145
|
+
var rootKeys = valKeys.filter(function (a) { return !a.includes('.'); });
|
|
146
|
+
for (var i = 0; i < methodData.length; i++) {
|
|
147
|
+
valObj[rootKeys[i]] = methodData[i];
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
that._supportMethods[supportMethod].check.validate(valObj);
|
|
151
|
+
}
|
|
152
|
+
catch (errors) {
|
|
153
|
+
if (errors) {
|
|
154
|
+
console.error('Error in Support Method Check (' + supportMethod + ')', errors);
|
|
155
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'Match Error On Support Method ' + supportMethod + '\n\nData Being Checked\n' + JSON.stringify(valObj, null, 2) + '\n\nErrors\n' + JSON.stringify(errors, null, 2));
|
|
156
|
+
var serverRes = {
|
|
157
|
+
messageId: messageId,
|
|
158
|
+
hasError: true,
|
|
159
|
+
data: 'Internal Error'
|
|
160
|
+
};
|
|
161
|
+
this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
(_a = that._supportMethods[supportMethod].function).call.apply(_a, [Object.assign({}, that, { id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket'] })].concat(methodData)).then(function (res) {
|
|
168
|
+
var serverRes = {
|
|
169
|
+
messageId: messageId,
|
|
170
|
+
hasError: false,
|
|
171
|
+
data: res
|
|
172
|
+
};
|
|
173
|
+
_this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
174
|
+
}, function (err) {
|
|
175
|
+
var serverRes = {
|
|
176
|
+
messageId: messageId,
|
|
177
|
+
hasError: true,
|
|
178
|
+
data: err
|
|
179
|
+
};
|
|
180
|
+
_this.sendWS(ws, supportMethod, methodData, serverRes);
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
SupportManager.prototype.sendWS = function (ws, method, methodData, data) {
|
|
184
|
+
this._sendQueue.splice(0, 0, {
|
|
185
|
+
id_ws: ws['id_socket'],
|
|
186
|
+
method: method,
|
|
187
|
+
methodData: methodData,
|
|
188
|
+
data: data
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
SupportManager.prototype.sendEmail = function (sendTo, subject, text, html, attachments) {
|
|
192
|
+
this._mailer.sendMail({
|
|
193
|
+
replyTo: undefined,
|
|
194
|
+
from: this.serverConfig.MAIL_FROM,
|
|
195
|
+
to: sendTo,
|
|
196
|
+
subject: subject,
|
|
197
|
+
text: text,
|
|
198
|
+
html: html,
|
|
199
|
+
attachments: attachments
|
|
200
|
+
}, function (err, info) {
|
|
201
|
+
if (err) {
|
|
202
|
+
console.log(err);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
return SupportManager;
|
|
207
|
+
}());
|
|
208
|
+
exports.SupportManager = SupportManager;
|
package/methods/accounts.js
CHANGED
|
@@ -1,2 +1,253 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXRob2RzL2FjY291bnRzLnRzIl0sIm5hbWVzIjpbInNpbXBsX3NjaGVtYV8xIiwicmVxdWlyZSIsIm1vbmdvb3NlXzEiLCJ1c2VyX2NvbGxlY3Rpb25fMSIsImhhbmRsZWJhcnMiLCJqd3QiLCJsb2dnZWRfaW5fdXNlcnNfY29sbGVjdGlvbl8xIiwicXVldWVfcmVzcG9uc2VfY29sbGVjdGlvbl8xIiwiaW5kZXhfMSIsImxvYWRBY2NvdW50TWV0aG9kcyIsIm1ldGhvZE1hbmFnZXIiLCJtZXRob2RzIiwic2V0V1NBcHBWZXJzaW9uIiwic2tpcFF1ZXVlIiwiY2hlY2siLCJkZWZhdWx0IiwidmVyc2lvbiIsIk51bWJlciIsImZ1bmN0aW9uIiwiTG9nZ2VkSW5Vc2VycyIsInVwZGF0ZU9uZSIsImlkX3dzIiwidGhpcyIsIiRzZXQiLCJhcHBfdmVyc2lvbiIsImV4ZWMiLCJyZWxvYWRXUyIsIlN0cmluZyIsIl90aGlzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfX2F3YWl0ZXIiLCJRdWV1ZVJlc3BvbnNlcyIsImNyZWF0ZSIsIl9pZCIsIlR5cGVzIiwiT2JqZWN0SWQiLCJ0b0hleFN0cmluZyIsIl9fdiIsIm1ldGhvZCIsIm1ldGhvZF9kYXRhIiwibWVzc2FnZUlkIiwiaWRfdXNlciIsInVzZXIiLCJyZXNwb25zZSIsImhhc0Vycm9yIiwiZGF0YSIsInRoZW4iLCJ2YWwiLCJyZWNvbm5lY3RXUyIsImRpc2Nvbm5lY3RXUyIsImNyZWF0ZVVzZXJBbmRFbWFpbEVucm9sbG1lbnQiLCJ0eXBlIiwiVXNlcnMiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwiZnVsbG5hbWUiLCJyb2xlcyIsImFjdGl2ZSIsInJlYWRvbmx5Iiwic2VydmljZXMiLCJlbnJvbGxtZW50Iiwic2lnbiIsInNlcnZlckNvbmZpZyIsImV4cGlyZXNJbiIsInBob25lbnVtYmVyIiwiX2EiLCJzZW50Iiwic2V0UGFzc3dvcmQiLCJyYW5kb21TdHJpbmciLCJlcnIiLCJyZXMiLCJzYXZlIiwiZW1haWxEYXRhIiwidXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVhZEZpbGUiLCJodG1sIiwidGVtcGxhdGUiLCJjb21waWxlIiwicmVnaXN0ZXJIZWxwZXIiLCJhIiwiYiIsInNlbmRFbWFpbCIsImdldENsaWVudE5hbWUiLCJlcnJFbWFpbCIsInJlc2V0VXNlclBhc3N3b3JkIiwiZmluZE9uZSIsImZvcmdvdF9wYXNzd29yZCIsImVtYWlsRGF0YV8xIiwidXNlclRvQ2hhbmdlUGFzc3dvcmQiLCJ1c2VyV2hvUmVzZXRQYXNzd29yZCIsImxlbmd0aCIsImNoYXJzIiwicmVzdWx0IiwiaSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJvN0NBQUEsSUFBQUEsZUFBQUMsUUFBQSxnQkFDQUMsV0FBQUQsUUFBQSxZQUNBRSxrQkFBQUYsUUFBQSxrQ0FDQUcsV0FBQUgsUUFBQSxjQUNBSSxJQUFBSixRQUFBLGdCQUNBSyw2QkFBQUwsUUFBQSw2Q0FDQU0sNEJBQUFOLFFBQUEsNENBRUFPLFFBQUFQLFFBQUEsWUFFQSxTQUFnQlEsbUJBQW1CQyxHQUNsQ0EsRUFBY0MsUUFBUSxDQUNyQkMsZ0JBQWlCLENBQ2hCQyxXQUFXLEVBQ1hDLE1BQU8sSUFBSWQsZUFBQWUsUUFBYSxDQUN2QkMsUUFBU0MsU0FFVkMsU0FBVSxTQUFTRixHQUNsQixPQUFPViw2QkFBQWEsY0FBY0MsVUFBVSxDQUFDQyxNQUFPQyxLQUFLRCxPQUFRLENBQUNFLEtBQU0sQ0FBQ0MsWUFBYVIsS0FBV1MsU0FHdEZDLFNBQVUsQ0FDVGIsV0FBVyxFQUNYQyxNQUFPLElBQUlkLGVBQUFlLFFBQWEsQ0FDdkJNLE1BQU9NLFNBRVJULFNBQVUsU0FBU0csR0FBVCxJQUFBTyxFQUFBTixLQUNULE9BQU8sSUFBSU8sUUFBUSxTQUFPQyxFQUFTQyxHQUFNLE9BQUFDLFVBQUFKLE9BQUEsT0FBQSxFQUFBLHNEQUN4Q3JCLDRCQUFBMEIsZUFBZUMsT0FBTyxDQUNyQkMs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QUVqSDdELEdBQVEsSUFDTixTQUFBeUQsR0FBWSxPQUFBeEQsRUFBT3dELHVCQVM3QixTQUFTaEIsYUFBYXVCLEVBQVFDLEdBRTdCLElBREEsSUFBSUMsRUFBUyxHQUNKQyxFQUFJSCxFQUFZLEVBQUpHLElBQVNBLEVBQUtELEdBQVVELEVBQU1HLEtBQUtDLE1BQU1ELEtBQUtFLFNBQVdMLEVBQU1ELFNBQ3BGLE9BQU9FLEVBMUxSSyxRQUFBNUYsbUJBQUFBIiwiZmlsZSI6Im1ldGhvZHMvYWNjb3VudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2ltcGxlU2NoZW1hIGZyb20gJ3NpbXBsLXNjaGVtYSc7XG5pbXBvcnQgeyBUeXBlcyB9IGZyb20gJ21vbmdvb3NlJztcbmltcG9ydCB7IFVzZXJzIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvdXNlci5jb2xsZWN0aW9uJztcbmltcG9ydCAqIGFzIGhhbmRsZWJhcnMgZnJvbSAnaGFuZGxlYmFycyc7XG5pbXBvcnQgKiBhcyBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCB7IExvZ2dlZEluVXNlcnMgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9sb2dnZWQtaW4tdXNlcnMuY29sbGVjdGlvbic7XG5pbXBvcnQgeyBRdWV1ZVJlc3BvbnNlcyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL3F1ZXVlLXJlc3BvbnNlLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgTWV0aG9kTWFuYWdlciB9IGZyb20gJy4uL21hbmFnZXJzL21ldGhvZC5tYW5hZ2VyJztcbmltcG9ydCBSZXNvbHZlSU9TZXJ2ZXIgZnJvbSAnLi4vaW5kZXgnO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFjY291bnRNZXRob2RzKG1ldGhvZE1hbmFnZXI6IE1ldGhvZE1hbmFnZXIpIHtcblx0bWV0aG9kTWFuYWdlci5tZXRob2RzKHtcblx0XHRzZXRXU0FwcFZlcnNpb246IHtcblx0XHRcdHNraXBRdWV1ZTogdHJ1ZSxcblx0XHRcdGNoZWNrOiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0dmVyc2lvbjogTnVtYmVyXG5cdFx0XHR9KSxcblx0XHRcdGZ1bmN0aW9uOiBmdW5jdGlvbih2ZXJzaW9uKSB7XG5cdFx0XHRcdHJldHVybiBMb2dnZWRJblVzZXJzLnVwZGF0ZU9uZSh7aWRfd3M6IHRoaXMuaWRfd3N9LCB7JHNldDoge2FwcF92ZXJzaW9uOiB2ZXJzaW9ufX0pLmV4ZWMoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlbG9hZFdTOiB7XG5cdFx0XHRza2lwUXVldWU6IHRydWUsXG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGlkX3dzOiBTdHJpbmdcblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGlkX3dzKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0UXVldWVSZXNwb25zZXMuY3JlYXRlKHtcblx0XHRcdFx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0XHRcdFx0X192OiAwLFxuXHRcdFx0XHRcdFx0bWV0aG9kOiAncmVsb2FkV1NDb21tYW5kJyxcblx0XHRcdFx0XHRcdG1ldGhvZF9kYXRhOiBbXSxcblx0XHRcdFx0XHRcdGlkX3dzOiBpZF93cyxcblx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogMCxcblx0XHRcdFx0XHRcdGlkX3VzZXI6IHRoaXMuaWRfdXNlcixcblx0XHRcdFx0XHRcdHVzZXI6IHRoaXMudXNlcixcblx0XHRcdFx0XHRcdHJlc3BvbnNlOiB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogMCxcblx0XHRcdFx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRkYXRhOiAncmVsb2FkV1NDb21tYW5kJ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLnRoZW4odmFsID0+IHtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVjb25uZWN0V1M6IHtcblx0XHRcdHNraXBRdWV1ZTogdHJ1ZSxcblx0XHRcdGNoZWNrOiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0aWRfd3M6IFN0cmluZ1xuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oaWRfd3MpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRRdWV1ZVJlc3BvbnNlcy5jcmVhdGUoe1xuXHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRfX3Y6IDAsXG5cdFx0XHRcdFx0XHRtZXRob2Q6ICdyZWNvbm5lY3RXU0NvbW1hbmQnLFxuXHRcdFx0XHRcdFx0bWV0aG9kX2RhdGE6IFtdLFxuXHRcdFx0XHRcdFx0aWRfd3M6IGlkX3dzLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUlkOiAwLFxuXHRcdFx0XHRcdFx0aWRfdXNlcjogdGhpcy5pZF91c2VyLFxuXHRcdFx0XHRcdFx0dXNlcjogdGhpcy51c2VyLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2U6IHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiAwLFxuXHRcdFx0XHRcdFx0XHRoYXNFcnJvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRhdGE6ICdyZWNvbm5lY3RXU0NvbW1hbmQnXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlzY29ubmVjdFdTOiB7XG5cdFx0XHRza2lwUXVldWU6IHRydWUsXG5cdFx0XHRjaGVjazogbmV3IFNpbXBsZVNjaGVtYSh7XG5cdFx0XHRcdGlkX3dzOiBTdHJpbmdcblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKGlkX3dzKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0UXVldWVSZXNwb25zZXMuY3JlYXRlKHtcblx0XHRcdFx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0XHRcdFx0X192OiAwLFxuXHRcdFx0XHRcdFx0bWV0aG9kOiAnZGlzY29ubmVjdFdTQ29tbWFuZCcsXG5cdFx0XHRcdFx0XHRtZXRob2RfZGF0YTogW10sXG5cdFx0XHRcdFx0XHRpZF93czogaWRfd3MsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IDAsXG5cdFx0XHRcdFx0XHRpZF91c2VyOiB0aGlzLmlkX3VzZXIsXG5cdFx0XHRcdFx0XHR1c2VyOiB0aGlzLnVzZXIsXG5cdFx0XHRcdFx0XHRyZXNwb25zZToge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IDAsXG5cdFx0XHRcdFx0XHRcdGhhc0Vycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0ZGF0YTogJ2Rpc2Nvbm5lY3RXU0NvbW1hbmQnXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y3JlYXRlVXNlckFuZEVtYWlsRW5yb2xsbWVudDoge1xuXHRcdFx0Y2hlY2s6IG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0dHlwZTogVXNlcnNbJ3NpbXBsc2NoZW1hJ11cblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRmdW5jdGlvbjogZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdGxldCB1c2VySWQgPSBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCk7XG5cblx0XHRcdFx0XHRsZXQgdXNlciA9IGF3YWl0IFVzZXJzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRfaWQ6IHVzZXJJZCxcblx0XHRcdFx0XHRcdF9fdjogMCxcblx0XHRcdFx0XHRcdHVzZXJuYW1lOiBkYXRhLnVzZXJuYW1lLCBcblx0XHRcdFx0XHRcdGVtYWlsOiBkYXRhLmVtYWlsLFxuXHRcdFx0XHRcdFx0ZnVsbG5hbWU6IGRhdGEuZnVsbG5hbWUsXG5cdFx0XHRcdFx0XHRyb2xlczogW10sXG5cdFx0XHRcdFx0XHRhY3RpdmU6IHRydWUsXG5cdFx0XHRcdFx0XHRyZWFkb25seTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXJ2aWNlczoge1xuXHRcdFx0XHRcdFx0XHRlbnJvbGxtZW50OiBqd3Quc2lnbih7aWRfdXNlcjogdXNlcklkfSwgdGhpcy5zZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdGV4cGlyZXNJbiA6IDMgKiAyNCAqIDYwICogNjAgKiAxMDAwIC8vIDMgZGF5c1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHBob25lbnVtYmVyOiBkYXRhLnBob25lbnVtYmVyXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR1c2VyLnNldFBhc3N3b3JkKHJhbmRvbVN0cmluZygyMCwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyksICgoZXJyLCByZXMpID0+IHtcblx0XHRcdFx0XHRcdHVzZXIuc2F2ZSgpO1xuXG5cdFx0XHRcdFx0XHRsZXQgZW1haWxEYXRhID0ge1xuXHRcdFx0XHRcdFx0XHRmdWxsbmFtZTogdXNlci5mdWxsbmFtZSxcblx0XHRcdFx0XHRcdFx0dXNlcjogdGhpcy51c2VyLFxuXHRcdFx0XHRcdFx0XHR1cmw6IHRoaXMuc2VydmVyQ29uZmlnWydST09UX1VSTCddICsgJy9lbnJvbGwtYWNjb3VudD8nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VydmVyQ29uZmlnWydTRVJWRVJfVVJMJ10pICsgJyYnICsgdXNlci5zZXJ2aWNlcy5lbnJvbGxtZW50XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHR0aGlzLnJlYWRGaWxlKCdlbWFpbC10ZW1wbGF0ZXMvZW5yb2xsbWVudC5odG1sJykudGhlbihodG1sID0+IHtcblx0XHRcdFx0XHRcdFx0bGV0IHRlbXBsYXRlID0gaGFuZGxlYmFycy5jb21waWxlKGh0bWwpO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdlcXVhbHMnLCAoYSwgYikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kRW1haWwodXNlci5lbWFpbCwgJ1Jlc29sdmVJTyAoJyArIFJlc29sdmVJT1NlcnZlci5nZXRDbGllbnROYW1lKCkgKyAnKSAtIEVucm9sbG1lbnQgRW1haWwnLCAnJywgdGVtcGxhdGUoZW1haWxEYXRhKSk7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9LCBlcnJFbWFpbCA9PiByZWplY3QoZXJyRW1haWwpKTtcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVzZXRVc2VyUGFzc3dvcmQ6IHtcblx0XHRcdGNoZWNrOiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0dXNlcklkOiB7XG5cdFx0XHRcdFx0dHlwZTogU3RyaW5nXG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZnVuY3Rpb246IGZ1bmN0aW9uKHVzZXJJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgdXNlciA9IGF3YWl0IFVzZXJzLmZpbmRPbmUoe19pZDogdXNlcklkfSk7XG5cdFx0XG5cdFx0XHRcdFx0aWYgKHVzZXIpIHtcblxuXHRcdFx0XHRcdFx0dXNlci5zZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQgPSBqd3Quc2lnbih7aWRfdXNlcjogdXNlcklkfSwgdGhpcy5zZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSk7XG5cblx0XHRcdFx0XHRcdGxldCBlbWFpbERhdGEgPSB7XG5cdFx0XHRcdFx0XHRcdHVzZXJUb0NoYW5nZVBhc3N3b3JkOiB1c2VyLmZ1bGxuYW1lLFxuXHRcdFx0XHRcdFx0XHR1c2VyV2hvUmVzZXRQYXNzd29yZDogdGhpcy51c2VyLFxuXHRcdFx0XHRcdFx0XHR1cmw6IHRoaXMuc2VydmVyQ29uZmlnWydST09UX1VSTCddICsgJy9mb3Jnb3QtcGFzc3dvcmQ/JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlcnZlckNvbmZpZ1snU0VSVkVSX1VSTCddKSArICcmJyArIHVzZXIuc2VydmljZXMuZm9yZ290X3Bhc3N3b3JkXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRVc2Vycy51cGRhdGVPbmUoe19pZDogdXNlci5faWR9LCB7JHNldDoge3NlcnZpY2VzOiB1c2VyLnNlcnZpY2VzfX0pLmV4ZWMoKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVhZEZpbGUoJ2VtYWlsLXRlbXBsYXRlcy9mb3Jnb3QtcGFzc3dvcmQuaHRtbCcpLnRoZW4oaHRtbCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHRlbXBsYXRlID0gaGFuZGxlYmFycy5jb21waWxlKGh0bWwpO1xuXHRcdFx0XHRcdFx0XHRcdGhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2VxdWFscycsIChhLCBiKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZEVtYWlsKHVzZXIuZW1haWwsICdSZXNvbHZlSU8gKCcgKyBSZXNvbHZlSU9TZXJ2ZXIuZ2V0Q2xpZW50TmFtZSgpICsgJykgLSBGb3Jnb3QgUGFzc3dvcmQnLCAnJywgdGVtcGxhdGUoZW1haWxEYXRhKSk7XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9LCBlcnJFbWFpbCA9PiByZWplY3QoZXJyRW1haWwpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCwgY2hhcnMpIHtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRmb3IgKGxldCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7IHJlc3VsdCArPSBjaGFyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpXTsgfVxuXHRyZXR1cm4gcmVzdWx0O1xufSJdfQ==
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (_) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
var simpl_schema_1 = require("simpl-schema");
|
|
39
|
+
var mongoose_1 = require("mongoose");
|
|
40
|
+
var user_collection_1 = require("../collections/user.collection");
|
|
41
|
+
var handlebars = require("handlebars");
|
|
42
|
+
var jwt = require("jsonwebtoken");
|
|
43
|
+
var logged_in_users_collection_1 = require("../collections/logged-in-users.collection");
|
|
44
|
+
var queue_response_collection_1 = require("../collections/queue-response.collection");
|
|
45
|
+
var index_1 = require("../index");
|
|
46
|
+
function loadAccountMethods(methodManager) {
|
|
47
|
+
methodManager.methods({
|
|
48
|
+
setWSAppVersion: {
|
|
49
|
+
skipQueue: true,
|
|
50
|
+
check: new simpl_schema_1.default({
|
|
51
|
+
version: Number
|
|
52
|
+
}),
|
|
53
|
+
function: function (version) {
|
|
54
|
+
return logged_in_users_collection_1.LoggedInUsers.updateOne({ id_ws: this.id_ws }, { $set: { app_version: version } }).exec();
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
reloadWS: {
|
|
58
|
+
skipQueue: true,
|
|
59
|
+
check: new simpl_schema_1.default({
|
|
60
|
+
id_ws: String
|
|
61
|
+
}),
|
|
62
|
+
function: function (id_ws) {
|
|
63
|
+
var _this = this;
|
|
64
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
queue_response_collection_1.QueueResponses.create({
|
|
67
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
68
|
+
__v: 0,
|
|
69
|
+
method: 'reloadWSCommand',
|
|
70
|
+
method_data: [],
|
|
71
|
+
id_ws: id_ws,
|
|
72
|
+
messageId: 0,
|
|
73
|
+
id_user: this.id_user,
|
|
74
|
+
user: this.user,
|
|
75
|
+
response: {
|
|
76
|
+
messageId: 0,
|
|
77
|
+
hasError: false,
|
|
78
|
+
data: 'reloadWSCommand'
|
|
79
|
+
}
|
|
80
|
+
}).then(function (val) {
|
|
81
|
+
// console.log(val);
|
|
82
|
+
});
|
|
83
|
+
resolve();
|
|
84
|
+
return [2 /*return*/];
|
|
85
|
+
});
|
|
86
|
+
}); });
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
reconnectWS: {
|
|
90
|
+
skipQueue: true,
|
|
91
|
+
check: new simpl_schema_1.default({
|
|
92
|
+
id_ws: String
|
|
93
|
+
}),
|
|
94
|
+
function: function (id_ws) {
|
|
95
|
+
var _this = this;
|
|
96
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
97
|
+
return __generator(this, function (_a) {
|
|
98
|
+
queue_response_collection_1.QueueResponses.create({
|
|
99
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
100
|
+
__v: 0,
|
|
101
|
+
method: 'reconnectWSCommand',
|
|
102
|
+
method_data: [],
|
|
103
|
+
id_ws: id_ws,
|
|
104
|
+
messageId: 0,
|
|
105
|
+
id_user: this.id_user,
|
|
106
|
+
user: this.user,
|
|
107
|
+
response: {
|
|
108
|
+
messageId: 0,
|
|
109
|
+
hasError: false,
|
|
110
|
+
data: 'reconnectWSCommand'
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
resolve();
|
|
114
|
+
return [2 /*return*/];
|
|
115
|
+
});
|
|
116
|
+
}); });
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
disconnectWS: {
|
|
120
|
+
skipQueue: true,
|
|
121
|
+
check: new simpl_schema_1.default({
|
|
122
|
+
id_ws: String
|
|
123
|
+
}),
|
|
124
|
+
function: function (id_ws) {
|
|
125
|
+
var _this = this;
|
|
126
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
127
|
+
return __generator(this, function (_a) {
|
|
128
|
+
queue_response_collection_1.QueueResponses.create({
|
|
129
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
130
|
+
__v: 0,
|
|
131
|
+
method: 'disconnectWSCommand',
|
|
132
|
+
method_data: [],
|
|
133
|
+
id_ws: id_ws,
|
|
134
|
+
messageId: 0,
|
|
135
|
+
id_user: this.id_user,
|
|
136
|
+
user: this.user,
|
|
137
|
+
response: {
|
|
138
|
+
messageId: 0,
|
|
139
|
+
hasError: false,
|
|
140
|
+
data: 'disconnectWSCommand'
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
resolve();
|
|
144
|
+
return [2 /*return*/];
|
|
145
|
+
});
|
|
146
|
+
}); });
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
createUserAndEmailEnrollment: {
|
|
150
|
+
check: new simpl_schema_1.default({
|
|
151
|
+
data: {
|
|
152
|
+
type: user_collection_1.Users['simplschema']
|
|
153
|
+
}
|
|
154
|
+
}),
|
|
155
|
+
function: function (data) {
|
|
156
|
+
var _this = this;
|
|
157
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
158
|
+
var userId, user;
|
|
159
|
+
var _this = this;
|
|
160
|
+
return __generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0:
|
|
163
|
+
userId = mongoose_1.Types.ObjectId().toHexString();
|
|
164
|
+
return [4 /*yield*/, user_collection_1.Users.create({
|
|
165
|
+
_id: userId,
|
|
166
|
+
__v: 0,
|
|
167
|
+
username: data.username,
|
|
168
|
+
email: data.email,
|
|
169
|
+
fullname: data.fullname,
|
|
170
|
+
roles: [],
|
|
171
|
+
active: true,
|
|
172
|
+
readonly: false,
|
|
173
|
+
services: {
|
|
174
|
+
enrollment: jwt.sign({ id_user: userId }, this.serverConfig['JWT_SECRET'], {
|
|
175
|
+
expiresIn: 3 * 24 * 60 * 60 * 1000 // 3 days
|
|
176
|
+
})
|
|
177
|
+
},
|
|
178
|
+
phonenumber: data.phonenumber
|
|
179
|
+
})];
|
|
180
|
+
case 1:
|
|
181
|
+
user = _a.sent();
|
|
182
|
+
user.setPassword(randomString(20, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), (function (err, res) {
|
|
183
|
+
user.save();
|
|
184
|
+
var emailData = {
|
|
185
|
+
fullname: user.fullname,
|
|
186
|
+
user: _this.user,
|
|
187
|
+
url: _this.serverConfig['ROOT_URL'] + '/enroll-account?' + encodeURIComponent(_this.serverConfig['SERVER_URL']) + '&' + user.services.enrollment
|
|
188
|
+
};
|
|
189
|
+
_this.readFile('email-templates/enrollment.html').then(function (html) {
|
|
190
|
+
var template = handlebars.compile(html);
|
|
191
|
+
handlebars.registerHelper('equals', function (a, b) {
|
|
192
|
+
return a === b;
|
|
193
|
+
});
|
|
194
|
+
_this.sendEmail(user.email, 'ResolveIO (' + index_1.default.getClientName() + ') - Enrollment Email', '', template(emailData));
|
|
195
|
+
resolve(true);
|
|
196
|
+
}, function (errEmail) { return reject(errEmail); });
|
|
197
|
+
}));
|
|
198
|
+
return [2 /*return*/];
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}); });
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
resetUserPassword: {
|
|
205
|
+
check: new simpl_schema_1.default({
|
|
206
|
+
userId: {
|
|
207
|
+
type: String
|
|
208
|
+
}
|
|
209
|
+
}),
|
|
210
|
+
function: function (userId) {
|
|
211
|
+
var _this = this;
|
|
212
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
213
|
+
var user, emailData_1;
|
|
214
|
+
var _this = this;
|
|
215
|
+
return __generator(this, function (_a) {
|
|
216
|
+
switch (_a.label) {
|
|
217
|
+
case 0: return [4 /*yield*/, user_collection_1.Users.findOne({ _id: userId })];
|
|
218
|
+
case 1:
|
|
219
|
+
user = _a.sent();
|
|
220
|
+
if (user) {
|
|
221
|
+
user.services.forgot_password = jwt.sign({ id_user: userId }, this.serverConfig['JWT_SECRET']);
|
|
222
|
+
emailData_1 = {
|
|
223
|
+
userToChangePassword: user.fullname,
|
|
224
|
+
userWhoResetPassword: this.user,
|
|
225
|
+
url: this.serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + user.services.forgot_password
|
|
226
|
+
};
|
|
227
|
+
user_collection_1.Users.updateOne({ _id: user._id }, { $set: { services: user.services } }).exec(function (err, res) {
|
|
228
|
+
_this.readFile('email-templates/forgot-password.html').then(function (html) {
|
|
229
|
+
var template = handlebars.compile(html);
|
|
230
|
+
handlebars.registerHelper('equals', function (a, b) {
|
|
231
|
+
return a === b;
|
|
232
|
+
});
|
|
233
|
+
_this.sendEmail(user.email, 'ResolveIO (' + index_1.default.getClientName() + ') - Forgot Password', '', template(emailData_1));
|
|
234
|
+
resolve(true);
|
|
235
|
+
}, function (errEmail) { return reject(errEmail); });
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return [2 /*return*/];
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}); });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
exports.loadAccountMethods = loadAccountMethods;
|
|
247
|
+
function randomString(length, chars) {
|
|
248
|
+
var result = '';
|
|
249
|
+
for (var i = length; i > 0; --i) {
|
|
250
|
+
result += chars[Math.floor(Math.random() * chars.length)];
|
|
251
|
+
}
|
|
252
|
+
return result;
|
|
253
|
+
}
|
package/methods/aws.d.ts
ADDED