@resolveio/client-lib-core 16.0.0 → 21.0.1

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 (217) hide show
  1. package/fesm2022/resolveio-client-lib-core.min.mjs +1 -0
  2. package/package.json +10 -8
  3. package/types/resolveio-client-lib-core.d.ts +1904 -0
  4. package/esm2022/lib/account-manager.service.mjs +0 -229
  5. package/esm2022/lib/auth/auth-guard.service.mjs +0 -174
  6. package/esm2022/lib/auth/auth-permissions.service.mjs +0 -23
  7. package/esm2022/lib/auth/auth.service.mjs +0 -251
  8. package/esm2022/lib/auth/auth365.component.mjs +0 -51
  9. package/esm2022/lib/auth/can-deactivate-guard.service.mjs +0 -13
  10. package/esm2022/lib/auth/enroll.component.mjs +0 -88
  11. package/esm2022/lib/auth/forgot-password.component.mjs +0 -89
  12. package/esm2022/lib/core.component.mjs +0 -404
  13. package/esm2022/lib/core.module.mjs +0 -176
  14. package/esm2022/lib/core.service.mjs +0 -88
  15. package/esm2022/lib/directive/focus.mjs +0 -24
  16. package/esm2022/lib/directive/scroll.mjs +0 -54
  17. package/esm2022/lib/home/home.component.mjs +0 -84
  18. package/esm2022/lib/logger/logger.component.mjs +0 -229
  19. package/esm2022/lib/models/app-status.model.mjs +0 -2
  20. package/esm2022/lib/models/collection-document.model.mjs +0 -2
  21. package/esm2022/lib/models/cron-job.model.mjs +0 -2
  22. package/esm2022/lib/models/dialog.model.mjs +0 -2
  23. package/esm2022/lib/models/file.model.mjs +0 -2
  24. package/esm2022/lib/models/log-method-latency.model.mjs +0 -2
  25. package/esm2022/lib/models/navbar-main-tab.model.mjs +0 -2
  26. package/esm2022/lib/models/pagination.model.mjs +0 -2
  27. package/esm2022/lib/models/permission.model.mjs +0 -2
  28. package/esm2022/lib/models/select-data-label.model.mjs +0 -2
  29. package/esm2022/lib/models/subscription.model.mjs +0 -2
  30. package/esm2022/lib/models/support-ticket.model.mjs +0 -2
  31. package/esm2022/lib/models/user-group.model.mjs +0 -2
  32. package/esm2022/lib/models/user.model.mjs +0 -2
  33. package/esm2022/lib/offline-db.mjs +0 -519
  34. package/esm2022/lib/offline-manager.service.mjs +0 -109
  35. package/esm2022/lib/pipes/domsanitizor.pipe.mjs +0 -29
  36. package/esm2022/lib/pipes/filter.pipe.mjs +0 -36
  37. package/esm2022/lib/pipes/json-parse.pipe.mjs +0 -29
  38. package/esm2022/lib/pipes/minus-currency.pipe.mjs +0 -16
  39. package/esm2022/lib/pipes/phone.pipe.mjs +0 -47
  40. package/esm2022/lib/pipes/pipe.module.mjs +0 -54
  41. package/esm2022/lib/pipes/reverse-list.pipe.mjs +0 -17
  42. package/esm2022/lib/pipes/titlecase.pipe.mjs +0 -22
  43. package/esm2022/lib/report-builder.permission.mjs +0 -13
  44. package/esm2022/lib/resolveio-class.mjs +0 -50
  45. package/esm2022/lib/shared/shared.module.mjs +0 -96
  46. package/esm2022/lib/socket-manager.service.mjs +0 -340
  47. package/esm2022/lib/socket.service.mjs +0 -200
  48. package/esm2022/lib/super-admin.permission.mjs +0 -9
  49. package/esm2022/lib/support-ticket/detail/support-ticket-detail.component.mjs +0 -211
  50. package/esm2022/lib/support-ticket/edit/support-ticket-edit.component.mjs +0 -131
  51. package/esm2022/lib/support-ticket/list/support-ticket-list.component.mjs +0 -142
  52. package/esm2022/lib/support-ticket/new/support-ticket-new.component.mjs +0 -121
  53. package/esm2022/lib/support-ticket/support-ticket.component.mjs +0 -67
  54. package/esm2022/lib/support-ticket/support-ticket.module.mjs +0 -50
  55. package/esm2022/lib/support-ticket/support-ticket.routing.mjs +0 -20
  56. package/esm2022/lib/support-ticket/support-ticket.service.mjs +0 -16
  57. package/esm2022/lib/token-manager.service.mjs +0 -25
  58. package/esm2022/lib/user-settings/settings/users-settings.component.mjs +0 -302
  59. package/esm2022/lib/user-settings/user-settings.component.mjs +0 -61
  60. package/esm2022/lib/user-settings/user-settings.module.mjs +0 -41
  61. package/esm2022/lib/user-settings/user-settings.permission.mjs +0 -10
  62. package/esm2022/lib/user-settings/user-settings.routing.mjs +0 -14
  63. package/esm2022/lib/user-settings/user-settings.service.mjs +0 -16
  64. package/esm2022/lib/util/action-name.helper.mjs +0 -9
  65. package/esm2022/lib/util/aws.service.mjs +0 -80
  66. package/esm2022/lib/util/common.helper.mjs +0 -133
  67. package/esm2022/lib/util/validation.service.mjs +0 -185
  68. package/esm2022/lib/util/window-resize.service.mjs +0 -38
  69. package/esm2022/lib/util/window.service.mjs +0 -16
  70. package/esm2022/lib/widgets/alert/alert.model.mjs +0 -2
  71. package/esm2022/lib/widgets/alert/alert.service.mjs +0 -79
  72. package/esm2022/lib/widgets/collapse-table/collapse-table.component.mjs +0 -83
  73. package/esm2022/lib/widgets/collapse-table/collapse-table.module.mjs +0 -34
  74. package/esm2022/lib/widgets/data-table/data-table.component.mjs +0 -84
  75. package/esm2022/lib/widgets/data-table/data-table.model.mjs +0 -2
  76. package/esm2022/lib/widgets/data-table/data-table.module.mjs +0 -41
  77. package/esm2022/lib/widgets/date-shortcut/date-shortcut.component.mjs +0 -198
  78. package/esm2022/lib/widgets/date-shortcut/date-shortcut.module.mjs +0 -32
  79. package/esm2022/lib/widgets/dialog/dialog.confirm.content.mjs +0 -67
  80. package/esm2022/lib/widgets/dialog/dialog.error.content.mjs +0 -60
  81. package/esm2022/lib/widgets/dialog/dialog.input.content.mjs +0 -200
  82. package/esm2022/lib/widgets/dialog/dialog.login.content.mjs +0 -354
  83. package/esm2022/lib/widgets/dialog/dialog.notify.content.mjs +0 -60
  84. package/esm2022/lib/widgets/dialog/dialog.register.content.mjs +0 -333
  85. package/esm2022/lib/widgets/dialog/dialog.select-array-objs.content.mjs +0 -203
  86. package/esm2022/lib/widgets/dialog/dialog.select-array.content.mjs +0 -310
  87. package/esm2022/lib/widgets/dialog/dialog.select-data-labels.content.mjs +0 -196
  88. package/esm2022/lib/widgets/dialog/dialog.select-datetime.content.mjs +0 -191
  89. package/esm2022/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +0 -166
  90. package/esm2022/lib/widgets/dialog/dialog.service.mjs +0 -98
  91. package/esm2022/lib/widgets/file/file-upload.component.mjs +0 -433
  92. package/esm2022/lib/widgets/file/file-upload.module.mjs +0 -48
  93. package/esm2022/lib/widgets/form-button/form-button.component.mjs +0 -97
  94. package/esm2022/lib/widgets/form-button/form-button.module.mjs +0 -28
  95. package/esm2022/lib/widgets/navbar-main/navbar-main.component.mjs +0 -222
  96. package/esm2022/lib/widgets/navbar-module/navbar-module.component.mjs +0 -108
  97. package/esm2022/lib/widgets/navbar-module/navbar-module.model.mjs +0 -2
  98. package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +0 -41
  99. package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +0 -24
  100. package/esm2022/lib/widgets/scheduler/scheduler.component.mjs +0 -186
  101. package/esm2022/lib/widgets/scheduler/scheduler.module.mjs +0 -37
  102. package/esm2022/lib/widgets/sort-table/sort-table-header.component.mjs +0 -72
  103. package/esm2022/lib/widgets/sort-table/sort-table-ngfor.component.mjs +0 -49
  104. package/esm2022/lib/widgets/sort-table/sort-table.directive.mjs +0 -177
  105. package/esm2022/lib/widgets/sort-table/sort-table.module.mjs +0 -38
  106. package/esm2022/lib/widgets/user-role/user-role.component.mjs +0 -29
  107. package/esm2022/lib/widgets/user-role/user-role.module.mjs +0 -24
  108. package/esm2022/public_api.mjs +0 -91
  109. package/esm2022/resolveio-client-lib-core.mjs +0 -5
  110. package/fesm2022/resolveio-client-lib-core.mjs +0 -9019
  111. package/fesm2022/resolveio-client-lib-core.mjs.map +0 -1
  112. package/index.d.ts +0 -5
  113. package/lib/account-manager.service.d.ts +0 -41
  114. package/lib/auth/auth-guard.service.d.ts +0 -26
  115. package/lib/auth/auth-permissions.service.d.ts +0 -10
  116. package/lib/auth/auth.service.d.ts +0 -30
  117. package/lib/auth/auth365.component.d.ts +0 -20
  118. package/lib/auth/can-deactivate-guard.service.d.ts +0 -10
  119. package/lib/auth/enroll.component.d.ts +0 -28
  120. package/lib/auth/forgot-password.component.d.ts +0 -28
  121. package/lib/core.component.d.ts +0 -63
  122. package/lib/core.module.d.ts +0 -34
  123. package/lib/core.service.d.ts +0 -49
  124. package/lib/directive/focus.d.ts +0 -10
  125. package/lib/directive/scroll.d.ts +0 -20
  126. package/lib/home/home.component.d.ts +0 -28
  127. package/lib/logger/logger.component.d.ts +0 -37
  128. package/lib/models/app-status.model.d.ts +0 -4
  129. package/lib/models/collection-document.model.d.ts +0 -6
  130. package/lib/models/cron-job.model.d.ts +0 -13
  131. package/lib/models/dialog.model.d.ts +0 -23
  132. package/lib/models/file.model.d.ts +0 -9
  133. package/lib/models/log-method-latency.model.d.ts +0 -7
  134. package/lib/models/navbar-main-tab.model.d.ts +0 -14
  135. package/lib/models/pagination.model.d.ts +0 -17
  136. package/lib/models/permission.model.d.ts +0 -14
  137. package/lib/models/select-data-label.model.d.ts +0 -9
  138. package/lib/models/subscription.model.d.ts +0 -19
  139. package/lib/models/support-ticket.model.d.ts +0 -71
  140. package/lib/models/user-group.model.d.ts +0 -19
  141. package/lib/models/user.model.d.ts +0 -70
  142. package/lib/offline-db.d.ts +0 -28
  143. package/lib/offline-manager.service.d.ts +0 -23
  144. package/lib/pipes/domsanitizor.pipe.d.ts +0 -10
  145. package/lib/pipes/filter.pipe.d.ts +0 -12
  146. package/lib/pipes/json-parse.pipe.d.ts +0 -7
  147. package/lib/pipes/minus-currency.pipe.d.ts +0 -7
  148. package/lib/pipes/phone.pipe.d.ts +0 -7
  149. package/lib/pipes/pipe.module.d.ts +0 -13
  150. package/lib/pipes/reverse-list.pipe.d.ts +0 -6
  151. package/lib/pipes/titlecase.pipe.d.ts +0 -7
  152. package/lib/report-builder.permission.d.ts +0 -2
  153. package/lib/resolveio-class.d.ts +0 -26
  154. package/lib/shared/shared.module.d.ts +0 -17
  155. package/lib/socket-manager.service.d.ts +0 -36
  156. package/lib/socket.service.d.ts +0 -38
  157. package/lib/super-admin.permission.d.ts +0 -2
  158. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +0 -32
  159. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +0 -30
  160. package/lib/support-ticket/list/support-ticket-list.component.d.ts +0 -26
  161. package/lib/support-ticket/new/support-ticket-new.component.d.ts +0 -26
  162. package/lib/support-ticket/support-ticket.component.d.ts +0 -20
  163. package/lib/support-ticket/support-ticket.module.d.ts +0 -15
  164. package/lib/support-ticket/support-ticket.routing.d.ts +0 -3
  165. package/lib/support-ticket/support-ticket.service.d.ts +0 -9
  166. package/lib/token-manager.service.d.ts +0 -11
  167. package/lib/user-settings/settings/users-settings.component.d.ts +0 -54
  168. package/lib/user-settings/user-settings.component.d.ts +0 -20
  169. package/lib/user-settings/user-settings.module.d.ts +0 -12
  170. package/lib/user-settings/user-settings.permission.d.ts +0 -2
  171. package/lib/user-settings/user-settings.routing.d.ts +0 -3
  172. package/lib/user-settings/user-settings.service.d.ts +0 -9
  173. package/lib/util/action-name.helper.d.ts +0 -1
  174. package/lib/util/aws.service.d.ts +0 -16
  175. package/lib/util/common.helper.d.ts +0 -12
  176. package/lib/util/validation.service.d.ts +0 -88
  177. package/lib/util/window-resize.service.d.ts +0 -13
  178. package/lib/util/window.service.d.ts +0 -6
  179. package/lib/widgets/alert/alert.model.d.ts +0 -1
  180. package/lib/widgets/alert/alert.service.d.ts +0 -11
  181. package/lib/widgets/collapse-table/collapse-table.component.d.ts +0 -23
  182. package/lib/widgets/collapse-table/collapse-table.module.d.ts +0 -9
  183. package/lib/widgets/data-table/data-table.component.d.ts +0 -23
  184. package/lib/widgets/data-table/data-table.model.d.ts +0 -13
  185. package/lib/widgets/data-table/data-table.module.d.ts +0 -12
  186. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +0 -20
  187. package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +0 -10
  188. package/lib/widgets/dialog/dialog.confirm.content.d.ts +0 -12
  189. package/lib/widgets/dialog/dialog.error.content.d.ts +0 -11
  190. package/lib/widgets/dialog/dialog.input.content.d.ts +0 -18
  191. package/lib/widgets/dialog/dialog.login.content.d.ts +0 -17
  192. package/lib/widgets/dialog/dialog.notify.content.d.ts +0 -11
  193. package/lib/widgets/dialog/dialog.register.content.d.ts +0 -13
  194. package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +0 -23
  195. package/lib/widgets/dialog/dialog.select-array.content.d.ts +0 -31
  196. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +0 -22
  197. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +0 -21
  198. package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +0 -25
  199. package/lib/widgets/dialog/dialog.service.d.ts +0 -21
  200. package/lib/widgets/file/file-upload.component.d.ts +0 -49
  201. package/lib/widgets/file/file-upload.module.d.ts +0 -14
  202. package/lib/widgets/form-button/form-button.component.d.ts +0 -15
  203. package/lib/widgets/form-button/form-button.module.d.ts +0 -9
  204. package/lib/widgets/navbar-main/navbar-main.component.d.ts +0 -52
  205. package/lib/widgets/navbar-module/navbar-module.component.d.ts +0 -24
  206. package/lib/widgets/navbar-module/navbar-module.model.d.ts +0 -13
  207. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +0 -17
  208. package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +0 -8
  209. package/lib/widgets/scheduler/scheduler.component.d.ts +0 -50
  210. package/lib/widgets/scheduler/scheduler.module.d.ts +0 -11
  211. package/lib/widgets/sort-table/sort-table-header.component.d.ts +0 -23
  212. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +0 -17
  213. package/lib/widgets/sort-table/sort-table.directive.d.ts +0 -48
  214. package/lib/widgets/sort-table/sort-table.module.d.ts +0 -11
  215. package/lib/widgets/user-role/user-role.component.d.ts +0 -10
  216. package/lib/widgets/user-role/user-role.module.d.ts +0 -8
  217. package/public_api.d.ts +0 -87
@@ -1,340 +0,0 @@
1
- import { SocketService } from './socket.service';
2
- import { Injectable } from '@angular/core';
3
- import { Subject } from 'rxjs';
4
- import { finalize } from 'rxjs/operators';
5
- import { deepCopy } from './util/common.helper';
6
- import { OfflineManagerService } from './offline-manager.service';
7
- import { AlertService } from './widgets/alert/alert.service';
8
- import { Router } from '@angular/router';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./socket.service";
11
- import * as i2 from "./offline-manager.service";
12
- import * as i3 from "./widgets/alert/alert.service";
13
- import * as i4 from "@angular/router";
14
- export class SocketManagerService {
15
- _socket;
16
- _offline;
17
- _alert;
18
- _router;
19
- socketStatus;
20
- messageId = 0;
21
- _cbArray = [];
22
- _subArray = [];
23
- _sendQueue = [];
24
- _offlineUpdates = [];
25
- _runningQueue = false;
26
- initConnection = false;
27
- _connectionDelayTimeout = null;
28
- onerror = function () { };
29
- constructor(_socket, _offline, _alert, _router) {
30
- this._socket = _socket;
31
- this._offline = _offline;
32
- this._alert = _alert;
33
- this._router = _router;
34
- }
35
- getSubArray() {
36
- return this._subArray;
37
- }
38
- initSocketManager() {
39
- this._socket.readyState$.subscribe(socketStatus => {
40
- this.socketStatus = socketStatus;
41
- });
42
- this._socket.onmessage = (event) => {
43
- this.handleMessage(event);
44
- };
45
- this._socket.onopen = (event) => {
46
- this._connectionDelayTimeout = setTimeout(() => {
47
- this._connectionDelayTimeout = null;
48
- this._offline.setOffline(false);
49
- let collectionUpdates = this._offline.find('collectionUpdate', {});
50
- collectionUpdates.forEach(update => {
51
- let messageId = this.messageId++;
52
- this._offlineUpdates.push({
53
- id_offline_doc: update._id,
54
- messageId: messageId,
55
- type: 'collectionUpdate'
56
- });
57
- update.data[2] = messageId;
58
- if (update.type === 'updateDocument') {
59
- update.data[4] = 'updateDocumentOffline';
60
- update.data[0] = 'Offline - ' + update.data[0];
61
- }
62
- else if (update.type === 'updateDocumentProps') {
63
- update.data[4] = 'updateDocumentPropsOffline';
64
- update.data[0] = 'Offline - ' + update.data[0];
65
- }
66
- else {
67
- update.data[0] = 'Offline - ' + update.data[0];
68
- }
69
- });
70
- if (collectionUpdates.length) {
71
- this.send('Offline Updates', new Date(), this.messageId++, 'offline', collectionUpdates.sort((a, b) => a.date.getTime() - b.date.getTime()));
72
- }
73
- this._subArray.forEach(sub => {
74
- this.send(sub.messageRoute, new Date(), sub.messageId, 'subscription', 'sub', sub.subscription, ...sub.parameters);
75
- });
76
- this.initConnection = true;
77
- }, 1000);
78
- };
79
- this._socket.onerror = (ev) => {
80
- if (this._connectionDelayTimeout) {
81
- clearTimeout(this._connectionDelayTimeout);
82
- }
83
- console.log(new Date(), 'SOCKET ERROR', ev);
84
- this.onerror();
85
- };
86
- this._socket.onclose = (ev) => {
87
- if (this._connectionDelayTimeout) {
88
- clearTimeout(this._connectionDelayTimeout);
89
- }
90
- };
91
- setInterval(() => {
92
- if (this.initConnection) {
93
- if (!this._runningQueue) {
94
- if (this._sendQueue.length) {
95
- this._runningQueue = true;
96
- if (this._socket && this._socket.ws) {
97
- let nextSendItem = this._sendQueue[this._sendQueue.length - 1];
98
- let sendStatus = this._socket.send(...nextSendItem);
99
- if (sendStatus) {
100
- this._sendQueue.pop();
101
- }
102
- }
103
- this._runningQueue = false;
104
- }
105
- }
106
- }
107
- }, 25);
108
- }
109
- handleMessage(resData) {
110
- if (resData.data === 'reloadWSCommand') {
111
- window.location.href = window.location.href + '?forceReload=true';
112
- }
113
- else if (resData.data === 'reconnectWSCommand') {
114
- this._socket.reconnect();
115
- }
116
- else if (resData.data === 'disconnectWSCommand') {
117
- this.closeSocket();
118
- }
119
- let offlineIndex = this._offlineUpdates.findIndex(a => a.messageId === resData.messageId);
120
- if (offlineIndex >= 0) {
121
- this._offline.removeDocument(this._offlineUpdates[offlineIndex].type, this._offlineUpdates[offlineIndex].id_offline_doc);
122
- this._offlineUpdates.splice(offlineIndex, 1);
123
- }
124
- if (resData.data !== 'ACK' && resData.data !== 'NACK') {
125
- if (this._cbArray.map(a => a.messageId).includes(resData.messageId)) {
126
- let index = this._cbArray.findIndex(a => a.messageId === resData.messageId);
127
- if (index >= 0) {
128
- clearInterval(this._cbArray[index].timerId);
129
- if (this._cbArray[index].cb) {
130
- this._cbArray[index].cb(resData.hasError ? resData.data : null, resData.hasError ? null : resData.data);
131
- this._cbArray[index].resolveFn(resData.hasError ? resData.data : null);
132
- }
133
- else {
134
- if (resData.hasError) {
135
- this._cbArray[index].rejectFn(resData.data);
136
- }
137
- else {
138
- this._cbArray[index].resolveFn(resData.data);
139
- }
140
- }
141
- this._cbArray.splice(index, 1);
142
- }
143
- }
144
- else if (this._subArray.map(a => a.messageId).includes(resData.messageId)) {
145
- let index = this._subArray.findIndex(a => a.messageId === resData.messageId);
146
- if (index >= 0) {
147
- this._subArray[index].subject.next(resData.data);
148
- }
149
- }
150
- }
151
- }
152
- openSocket(environment, protocols) {
153
- this._socket.openSocket(environment, protocols);
154
- }
155
- closeSocket() {
156
- this._socket.close();
157
- }
158
- call(method, ...parameters) {
159
- let resolveFn = null;
160
- let rejectFn = null;
161
- let promise = new Promise((resolve, reject) => {
162
- resolveFn = resolve;
163
- rejectFn = reject;
164
- });
165
- let messageId = this.messageId++;
166
- let timerId = setInterval(() => {
167
- if (this._cbArray.filter(a => a.messageId === messageId)[0]) {
168
- this.send((this._router.url.includes('?') ? this._router.url.substring(0, this._router.url.indexOf('?')) : this._router.url), new Date(), messageId, 'methodResponse', method, ...parameters);
169
- }
170
- else {
171
- clearInterval(timerId);
172
- }
173
- }, 5000);
174
- if (parameters[parameters.length - 1] && typeof (parameters[parameters.length - 1]) === 'function') {
175
- this._cbArray.push({
176
- messageId: messageId,
177
- cb: parameters.pop(),
178
- resolveFn: resolveFn,
179
- rejectFn: rejectFn,
180
- timerId: timerId,
181
- retryCnt: 0
182
- });
183
- }
184
- else {
185
- this._cbArray.push({
186
- messageId: messageId,
187
- cb: null,
188
- resolveFn: resolveFn,
189
- rejectFn: rejectFn,
190
- timerId: timerId,
191
- retryCnt: 0
192
- });
193
- }
194
- let cnt = parameters.length;
195
- while ((parameters[parameters.length - 1] === undefined || parameters[parameters.length - 1] === null) && cnt > 0) {
196
- parameters.pop();
197
- cnt = parameters.length;
198
- }
199
- this.send((this._router.url.includes('?') ? this._router.url.substring(0, this._router.url.indexOf('?')) : this._router.url), new Date(), messageId, 'method', method, ...parameters);
200
- return promise;
201
- }
202
- subscribe(subscription, ...parameters) {
203
- const copyParameters = deepCopy(parameters);
204
- const newSubject = new Subject();
205
- let messageId = this.messageId++;
206
- this._subArray.push({
207
- messageId: messageId,
208
- messageRoute: (this._router.url.includes('?') ? this._router.url.substring(0, this._router.url.indexOf('?')) : this._router.url),
209
- subscription: subscription,
210
- parameters: copyParameters,
211
- subject: newSubject
212
- });
213
- const observable = newSubject.pipe(finalize(() => {
214
- this.unsubscribe(messageId, subscription, ...copyParameters);
215
- this._subArray.splice(this._subArray.map(a => a.messageId).indexOf(messageId), 1);
216
- }));
217
- this.send((this._router.url.includes('?') ? this._router.url.substring(0, this._router.url.indexOf('?')) : this._router.url), new Date(), messageId, 'subscription', 'sub', subscription, ...copyParameters);
218
- return observable;
219
- }
220
- subscribeBypassRoute(subscription, ...parameters) {
221
- const copyParameters = deepCopy(parameters);
222
- const newSubject = new Subject();
223
- let messageId = this.messageId++;
224
- this._subArray.push({
225
- messageId: messageId,
226
- messageRoute: 'Bypass',
227
- subscription: subscription,
228
- parameters: copyParameters,
229
- subject: newSubject
230
- });
231
- const observable = newSubject.pipe(finalize(() => {
232
- this.unsubscribe(messageId, subscription, ...copyParameters);
233
- this._subArray.splice(this._subArray.map(a => a.messageId).indexOf(messageId), 1);
234
- }));
235
- this.send('Bypass', new Date(), messageId, 'subscription', 'sub', subscription, ...copyParameters);
236
- return observable;
237
- }
238
- unsubscribe(messageId, subscription, ...parameters) {
239
- this.send((this._router.url.includes('?') ? this._router.url.substring(0, this._router.url.indexOf('?')) : this._router.url), new Date(), messageId, 'subscription', 'unsub', subscription, ...parameters);
240
- }
241
- send(...data) {
242
- if (data[3] === 'subscription') {
243
- this._socket.send(...data);
244
- }
245
- else if (data[3] === 'method') {
246
- if (this.socketStatus === WebSocket.OPEN) {
247
- if (!this._sendQueue.filter(a => JSON.stringify(a) === JSON.stringify(data)).length) {
248
- this._sendQueue.splice(0, 0, data);
249
- }
250
- }
251
- else {
252
- if (data[4] === 'insertDocument') {
253
- if (data[5] !== 'driver-gps') {
254
- this._alert.setAlert('warning', 'This insert command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!');
255
- }
256
- this._offline.insertDocument('collectionUpdate', {
257
- type: 'insert',
258
- data: data,
259
- date: new Date()
260
- });
261
- let res = this._offline.insertDocument(data[5], data[6]);
262
- let cb = this._cbArray.filter(a => a.messageId === data[2])[0];
263
- if (cb && cb.cb) {
264
- cb.cb(null, res);
265
- this._cbArray.splice(this._cbArray.findIndex(a => a.messageId === data[2]), 1);
266
- }
267
- }
268
- else if (data[4] === 'updateDocument') {
269
- this._alert.setAlert('warning', 'This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!');
270
- this._offline.insertDocument('collectionUpdate', {
271
- type: 'updateDocument',
272
- data: data,
273
- date: new Date()
274
- });
275
- if (this._offline.findOne(data[5], { _id: data[6]._id })) {
276
- this._offline.updateDocument(data[5], data[6]);
277
- }
278
- else {
279
- console.log('Could not find Offline data', data[5], data[6]);
280
- }
281
- let cb = this._cbArray.filter(a => a.messageId === data[2])[0];
282
- if (cb && cb.cb) {
283
- cb.cb(null, 1);
284
- this._cbArray.splice(this._cbArray.findIndex(a => a.messageId === data[2]), 1);
285
- }
286
- }
287
- else if (data[4] === 'updateDocumentProps') {
288
- this._alert.setAlert('warning', 'This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!');
289
- this._offline.insertDocument('collectionUpdate', {
290
- type: 'updateDocumentProps',
291
- data: data,
292
- date: new Date()
293
- });
294
- if (this._offline.findOne(data[5], { _id: data[6] })) {
295
- this._offline.updateDocumentProps(data[5], data[6], data[7], data[8]);
296
- }
297
- else {
298
- console.log('Could not find Offline data', data[5], data[6]);
299
- }
300
- let cb = this._cbArray.filter(a => a.messageId === data[2])[0];
301
- if (cb && cb.cb) {
302
- cb.cb(null, 1);
303
- this._cbArray.splice(this._cbArray.findIndex(a => a.messageId === data[2]), 1);
304
- }
305
- }
306
- else if (data[4] === 'removeDocument') {
307
- this._alert.setAlert('warning', 'This remove command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!');
308
- this._offline.insertDocument('collectionUpdate', {
309
- type: 'removeDocument',
310
- data: data,
311
- date: new Date()
312
- });
313
- if (this._offline.findOne(data[5], { _id: data[6] })) {
314
- this._offline.removeDocument(data[5], data[6]);
315
- }
316
- else {
317
- console.log('Could not find Offline data', data[5], data[6]);
318
- }
319
- let cb = this._cbArray.filter(a => a.messageId === data[2])[0];
320
- if (cb && cb.cb) {
321
- cb.cb(null, 1);
322
- this._cbArray.splice(this._cbArray.findIndex(a => a.messageId === data[2]), 1);
323
- }
324
- }
325
- }
326
- }
327
- else if (data[3] === 'offline') {
328
- this._socket.send(...data);
329
- }
330
- }
331
- getStatus() {
332
- return this._socket.readyState$;
333
- }
334
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketManagerService, deps: [{ token: i1.SocketService }, { token: i2.OfflineManagerService }, { token: i3.AlertService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable });
335
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketManagerService });
336
- }
337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketManagerService, decorators: [{
338
- type: Injectable
339
- }], ctorParameters: function () { return [{ type: i1.SocketService }, { type: i2.OfflineManagerService }, { type: i3.AlertService }, { type: i4.Router }]; } });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zb2NrZXQtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBZSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHekMsTUFBTSxPQUFPLG9CQUFvQjtJQWdCWjtJQUFnQztJQUF5QztJQUE4QjtJQWZuSCxZQUFZLENBQUM7SUFFYixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFNBQVMsR0FBb0MsRUFBRSxDQUFDO0lBQ2hELFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUVyQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFdkIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBRWhDLE9BQU8sR0FBZSxjQUFhLENBQUMsQ0FBQztJQUU1QyxZQUFvQixPQUFzQixFQUFVLFFBQStCLEVBQVUsTUFBb0IsRUFBVSxPQUFlO1FBQXRILFlBQU8sR0FBUCxPQUFPLENBQWU7UUFBVSxhQUFRLEdBQVIs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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDaEIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUMvRTtpQkFDRDthQUNEO1NBQ0Q7YUFDSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFFRCxTQUFTO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNqQyxDQUFDO3dHQXhYVyxvQkFBb0I7NEdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuL3NvY2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aXZlQ2xpZW50U3Vic2NyaXB0aW9uTW9kZWwgfSBmcm9tICcuL21vZGVscy9zdWJzY3JpcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgZGF0ZVJldml2ZXIsIGRlZXBDb3B5IH0gZnJvbSAnLi91dGlsL2NvbW1vbi5oZWxwZXInO1xuaW1wb3J0IHsgT2ZmbGluZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9vZmZsaW5lLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuL3dpZGdldHMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU29ja2V0TWFuYWdlclNlcnZpY2Uge1xuXHRwcml2YXRlIHNvY2tldFN0YXR1cztcblxuXHRwcml2YXRlIG1lc3NhZ2VJZCA9IDA7XG5cdHByaXZhdGUgX2NiQXJyYXkgPSBbXTtcblx0cHJpdmF0ZSBfc3ViQXJyYXk6IEFjdGl2ZUNsaWVudFN1YnNjcmlwdGlvbk1vZGVsW10gPSBbXTtcblx0cHJpdmF0ZSBfc2VuZFF1ZXVlID0gW107XG5cdHByaXZhdGUgX29mZmxpbmVVcGRhdGVzID0gW107XG5cblx0cHJpdmF0ZSBfcnVubmluZ1F1ZXVlID0gZmFsc2U7XG5cdHByaXZhdGUgaW5pdENvbm5lY3Rpb24gPSBmYWxzZTtcblxuXHRwcml2YXRlIF9jb25uZWN0aW9uRGVsYXlUaW1lb3V0ID0gbnVsbDtcblxuXHRwdWJsaWMgb25lcnJvcjogKCkgPT4gdm9pZCA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3NvY2tldDogU29ja2V0U2VydmljZSwgcHJpdmF0ZSBfb2ZmbGluZTogT2ZmbGluZU1hbmFnZXJTZXJ2aWNlLCBwcml2YXRlIF9hbGVydDogQWxlcnRTZXJ2aWNlLCBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcikge31cblxuXHRwdWJsaWMgZ2V0U3ViQXJyYXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N1YkFycmF5O1xuXHR9XG5cblx0cHVibGljIGluaXRTb2NrZXRNYW5hZ2VyKCk6IHZvaWQge1xuXHRcdHRoaXMuX3NvY2tldC5yZWFkeVN0YXRlJC5zdWJzY3JpYmUoc29ja2V0U3RhdHVzID0+IHtcblx0XHRcdHRoaXMuc29ja2V0U3RhdHVzID0gc29ja2V0U3RhdHVzO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fc29ja2V0Lm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzLmhhbmRsZU1lc3NhZ2UoZXZlbnQpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9zb2NrZXQub25vcGVuID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0dGhpcy5fY29ubmVjdGlvbkRlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9jb25uZWN0aW9uRGVsYXlUaW1lb3V0ID0gbnVsbDtcblxuXHRcdFx0XHR0aGlzLl9vZmZsaW5lLnNldE9mZmxpbmUoZmFsc2UpO1xuXHRcdFx0XHRcblx0XHRcdFx0bGV0IGNvbGxlY3Rpb25VcGRhdGVzID0gdGhpcy5fb2ZmbGluZS5maW5kKCdjb2xsZWN0aW9uVXBkYXRlJywge30pO1xuXG5cdFx0XHRcdGNvbGxlY3Rpb25VcGRhdGVzLmZvckVhY2godXBkYXRlID0+IHtcblx0XHRcdFx0XHRsZXQgbWVzc2FnZUlkID0gdGhpcy5tZXNzYWdlSWQrKztcblxuXHRcdFx0XHRcdHRoaXMuX29mZmxpbmVVcGRhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0aWRfb2ZmbGluZV9kb2M6IHVwZGF0ZS5faWQsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHRcdHR5cGU6ICdjb2xsZWN0aW9uVXBkYXRlJ1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dXBkYXRlLmRhdGFbMl0gPSBtZXNzYWdlSWQ7XG5cblx0XHRcdFx0XHRpZiAodXBkYXRlLnR5cGUgPT09ICd1cGRhdGVEb2N1bWVudCcpIHtcblx0XHRcdFx0XHRcdHVwZGF0ZS5kYXRhWzRdID0gJ3VwZGF0ZURvY3VtZW50T2ZmbGluZSc7XG5cdFx0XHRcdFx0XHR1cGRhdGUuZGF0YVswXSA9ICdPZmZsaW5lIC0gJyArIHVwZGF0ZS5kYXRhWzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICh1cGRhdGUudHlwZSA9PT0gJ3VwZGF0ZURvY3VtZW50UHJvcHMnKSB7XG5cdFx0XHRcdFx0XHR1cGRhdGUuZGF0YVs0XSA9ICd1cGRhdGVEb2N1bWVudFByb3BzT2ZmbGluZSc7XG5cdFx0XHRcdFx0XHR1cGRhdGUuZGF0YVswXSA9ICdPZmZsaW5lIC0gJyArIHVwZGF0ZS5kYXRhWzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdHVwZGF0ZS5kYXRhWzBdID0gJ09mZmxpbmUgLSAnICsgdXBkYXRlLmRhdGFbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvblVwZGF0ZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5zZW5kKCdPZmZsaW5lIFVwZGF0ZXMnLCBuZXcgRGF0ZSgpLCB0aGlzLm1lc3NhZ2VJZCsrLCAnb2ZmbGluZScsIGNvbGxlY3Rpb25VcGRhdGVzLnNvcnQoKGEsIGIpID0+IGEuZGF0ZS5nZXRUaW1lKCkgLSBiLmRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9zdWJBcnJheS5mb3JFYWNoKHN1YiA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zZW5kKHN1Yi5tZXNzYWdlUm91dGUsIG5ldyBEYXRlKCksIHN1Yi5tZXNzYWdlSWQsICdzdWJzY3JpcHRpb24nLCAnc3ViJywgc3ViLnN1YnNjcmlwdGlvbiwgLi4uc3ViLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmluaXRDb25uZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH07XG5cblx0XHR0aGlzLl9zb2NrZXQub25lcnJvciA9IChldjogRXJyb3JFdmVudCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX2Nvbm5lY3Rpb25EZWxheVRpbWVvdXQpIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2Nvbm5lY3Rpb25EZWxheVRpbWVvdXQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc29sZS5sb2cobmV3IERhdGUoKSwgJ1NPQ0tFVCBFUlJPUicsIGV2KTtcblx0XHRcdHRoaXMub25lcnJvcigpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9zb2NrZXQub25jbG9zZSA9IChldjogQ2xvc2VFdmVudCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX2Nvbm5lY3Rpb25EZWxheVRpbWVvdXQpIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2Nvbm5lY3Rpb25EZWxheVRpbWVvdXQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmluaXRDb25uZWN0aW9uKSB7XG5cdFx0XHRcdGlmICghdGhpcy5fcnVubmluZ1F1ZXVlKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuX3NlbmRRdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3J1bm5pbmdRdWV1ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmICh0aGlzLl9zb2NrZXQgJiYgdGhpcy5fc29ja2V0LndzKSB7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRsZXQgbmV4dFNlbmRJdGVtID0gdGhpcy5fc2VuZFF1ZXVlW3RoaXMuX3NlbmRRdWV1ZS5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdFx0bGV0IHNlbmRTdGF0dXMgPSB0aGlzLl9zb2NrZXQuc2VuZCguLi5uZXh0U2VuZEl0ZW0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzZW5kU3RhdHVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2VuZFF1ZXVlLnBvcCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuX3J1bm5pbmdRdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIDI1KTtcblx0fVxuXG5cdGhhbmRsZU1lc3NhZ2UocmVzRGF0YTogYW55KSB7XG5cdFx0aWYgKHJlc0RhdGEuZGF0YSA9PT0gJ3JlbG9hZFdTQ29tbWFuZCcpIHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWYgKyAnP2ZvcmNlUmVsb2FkPXRydWUnO1xuXHRcdH1cblx0XHRlbHNlIGlmIChyZXNEYXRhLmRhdGEgPT09ICdyZWNvbm5lY3RXU0NvbW1hbmQnKSB7XG5cdFx0XHR0aGlzLl9zb2NrZXQucmVjb25uZWN0KCk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHJlc0RhdGEuZGF0YSA9PT0gJ2Rpc2Nvbm5lY3RXU0NvbW1hbmQnKSB7XG5cdFx0XHR0aGlzLmNsb3NlU29ja2V0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IG9mZmxpbmVJbmRleCA9IHRoaXMuX29mZmxpbmVVcGRhdGVzLmZpbmRJbmRleChhID0+IGEubWVzc2FnZUlkID09PSByZXNEYXRhLm1lc3NhZ2VJZCk7XG5cdFx0aWYgKG9mZmxpbmVJbmRleCA+PSAwKSB7XG5cdFx0XHR0aGlzLl9vZmZsaW5lLnJlbW92ZURvY3VtZW50KHRoaXMuX29mZmxpbmVVcGRhdGVzW29mZmxpbmVJbmRleF0udHlwZSwgdGhpcy5fb2ZmbGluZVVwZGF0ZXNbb2ZmbGluZUluZGV4XS5pZF9vZmZsaW5lX2RvYyk7XG5cdFx0XHR0aGlzLl9vZmZsaW5lVXBkYXRlcy5zcGxpY2Uob2ZmbGluZUluZGV4LCAxKTtcblx0XHR9XG5cblx0XHRpZiAocmVzRGF0YS5kYXRhICE9PSAnQUNLJyAmJiByZXNEYXRhLmRhdGEgIT09ICdOQUNLJykge1xuXHRcdFx0aWYgKHRoaXMuX2NiQXJyYXkubWFwKGEgPT4gYS5tZXNzYWdlSWQpLmluY2x1ZGVzKHJlc0RhdGEubWVzc2FnZUlkKSkge1x0XG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMuX2NiQXJyYXkuZmluZEluZGV4KGEgPT4gYS5tZXNzYWdlSWQgPT09IHJlc0RhdGEubWVzc2FnZUlkKTtcblx0XHRcdFx0XG5cdFx0XHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLl9jYkFycmF5W2luZGV4XS50aW1lcklkKTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLl9jYkFycmF5W2luZGV4XS5jYikge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2JBcnJheVtpbmRleF0uY2IocmVzRGF0YS5oYXNFcnJvciA/IHJlc0RhdGEuZGF0YSA6IG51bGwsIHJlc0RhdGEuaGFzRXJyb3IgPyBudWxsIDogcmVzRGF0YS5kYXRhKTtcblx0XHRcdFx0XHRcdHRoaXMuX2NiQXJyYXlbaW5kZXhdLnJlc29sdmVGbihyZXNEYXRhLmhhc0Vycm9yID8gcmVzRGF0YS5kYXRhIDogbnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHJlc0RhdGEuaGFzRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fY2JBcnJheVtpbmRleF0ucmVqZWN0Rm4ocmVzRGF0YS5kYXRhKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9jYkFycmF5W2luZGV4XS5yZXNvbHZlRm4ocmVzRGF0YS5kYXRhKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dGhpcy5fY2JBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0aGlzLl9zdWJBcnJheS5tYXAoYSA9PiBhLm1lc3NhZ2VJZCkuaW5jbHVkZXMocmVzRGF0YS5tZXNzYWdlSWQpKSB7XHRcblx0XHRcdFx0bGV0IGluZGV4ID0gdGhpcy5fc3ViQXJyYXkuZmluZEluZGV4KGEgPT4gYS5tZXNzYWdlSWQgPT09IHJlc0RhdGEubWVzc2FnZUlkKTtcblx0XHRcdFx0XG5cdFx0XHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3ViQXJyYXlbaW5kZXhdLnN1YmplY3QubmV4dChyZXNEYXRhLmRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIG9wZW5Tb2NrZXQoZW52aXJvbm1lbnQsIHByb3RvY29scykge1xuXHRcdHRoaXMuX3NvY2tldC5vcGVuU29ja2V0KGVudmlyb25tZW50LCBwcm90b2NvbHMpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlU29ja2V0KCkge1xuXHRcdHRoaXMuX3NvY2tldC5jbG9zZSgpO1xuXHR9XG5cblx0cHVibGljIGNhbGwobWV0aG9kOiBzdHJpbmcsIC4uLnBhcmFtZXRlcnM6IGFueVtdKSB7XG5cdFx0bGV0IHJlc29sdmVGbiA9IG51bGw7XG5cdFx0bGV0IHJlamVjdEZuID0gbnVsbDtcblxuXHRcdGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0cmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXG5cdFx0bGV0IG1lc3NhZ2VJZCA9IHRoaXMubWVzc2FnZUlkKys7XG5cblx0XHRsZXQgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9jYkFycmF5LmZpbHRlcihhID0+IGEubWVzc2FnZUlkID09PSBtZXNzYWdlSWQpWzBdKSB7XG5cdFx0XHRcdHRoaXMuc2VuZCgodGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcygnPycpID8gdGhpcy5fcm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5fcm91dGVyLnVybC5pbmRleE9mKCc/JykpIDogdGhpcy5fcm91dGVyLnVybCksIG5ldyBEYXRlKCksIG1lc3NhZ2VJZCwgJ21ldGhvZFJlc3BvbnNlJywgbWV0aG9kLCAuLi5wYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVySWQpO1xuXHRcdFx0fVxuXHRcdH0sIDUwMDApO1xuXG5cdFx0aWYgKHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXSAmJiB0eXBlb2YocGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdKSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5fY2JBcnJheS5wdXNoKHtcblx0XHRcdFx0bWVzc2FnZUlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdGNiOiBwYXJhbWV0ZXJzLnBvcCgpLFxuXHRcdFx0XHRyZXNvbHZlRm46IHJlc29sdmVGbixcblx0XHRcdFx0cmVqZWN0Rm46IHJlamVjdEZuLFxuXHRcdFx0XHR0aW1lcklkOiB0aW1lcklkLFxuXHRcdFx0XHRyZXRyeUNudDogMFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5fY2JBcnJheS5wdXNoKHtcblx0XHRcdFx0bWVzc2FnZUlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdGNiOiBudWxsLFxuXHRcdFx0XHRyZXNvbHZlRm46IHJlc29sdmVGbixcblx0XHRcdFx0cmVqZWN0Rm46IHJlamVjdEZuLFxuXHRcdFx0XHR0aW1lcklkOiB0aW1lcklkLFxuXHRcdFx0XHRyZXRyeUNudDogMFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNudCA9IHBhcmFtZXRlcnMubGVuZ3RoO1xuXHRcdHdoaWxlICgocGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQgfHwgcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdID09PSBudWxsKSAmJiBjbnQgPiAwKSB7XG5cdFx0XHRwYXJhbWV0ZXJzLnBvcCgpO1xuXHRcdFx0Y250ID0gcGFyYW1ldGVycy5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZW5kKCh0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKCc/JykgPyB0aGlzLl9yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLl9yb3V0ZXIudXJsLmluZGV4T2YoJz8nKSkgOiB0aGlzLl9yb3V0ZXIudXJsKSwgbmV3IERhdGUoKSwgbWVzc2FnZUlkLCAnbWV0aG9kJywgbWV0aG9kLCAuLi5wYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cHVibGljIHN1YnNjcmliZShzdWJzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGNvcHlQYXJhbWV0ZXJzID0gZGVlcENvcHkocGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbmV3U3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuXHRcdGxldCBtZXNzYWdlSWQgPSB0aGlzLm1lc3NhZ2VJZCsrO1xuXG5cdFx0dGhpcy5fc3ViQXJyYXkucHVzaCh7XG5cdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2VJZCxcblx0XHRcdG1lc3NhZ2VSb3V0ZTogKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJz8nKSA/IHRoaXMuX3JvdXRlci51cmwuc3Vic3RyaW5nKDAsIHRoaXMuX3JvdXRlci51cmwuaW5kZXhPZignPycpKSA6IHRoaXMuX3JvdXRlci51cmwpLFxuXHRcdFx0c3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb24sXG5cdFx0XHRwYXJhbWV0ZXJzOiBjb3B5UGFyYW1ldGVycyxcblx0XHRcdHN1YmplY3Q6IG5ld1N1YmplY3Rcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9ic2VydmFibGUgPSBuZXdTdWJqZWN0LnBpcGUoZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0dGhpcy51bnN1YnNjcmliZShtZXNzYWdlSWQsIHN1YnNjcmlwdGlvbiwgLi4uY29weVBhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy5fc3ViQXJyYXkuc3BsaWNlKHRoaXMuX3N1YkFycmF5Lm1hcChhID0+IGEubWVzc2FnZUlkKS5pbmRleE9mKG1lc3NhZ2VJZCksIDEpO1xuXHRcdH0pKTtcblxuXHRcdHRoaXMuc2VuZCgodGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcygnPycpID8gdGhpcy5fcm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5fcm91dGVyLnVybC5pbmRleE9mKCc/JykpIDogdGhpcy5fcm91dGVyLnVybCksIG5ldyBEYXRlKCksIG1lc3NhZ2VJZCwgJ3N1YnNjcmlwdGlvbicsICdzdWInLCBzdWJzY3JpcHRpb24sIC4uLmNvcHlQYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBvYnNlcnZhYmxlO1xuXHR9XG5cblx0cHVibGljIHN1YnNjcmliZUJ5cGFzc1JvdXRlKHN1YnNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgY29weVBhcmFtZXRlcnMgPSBkZWVwQ29weShwYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBuZXdTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5cdFx0bGV0IG1lc3NhZ2VJZCA9IHRoaXMubWVzc2FnZUlkKys7XG5cblx0XHR0aGlzLl9zdWJBcnJheS5wdXNoKHtcblx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0bWVzc2FnZVJvdXRlOiAnQnlwYXNzJyxcblx0XHRcdHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLFxuXHRcdFx0cGFyYW1ldGVyczogY29weVBhcmFtZXRlcnMsXG5cdFx0XHRzdWJqZWN0OiBuZXdTdWJqZWN0XG5cdFx0fSk7XG5cblx0XHRjb25zdCBvYnNlcnZhYmxlID0gbmV3U3ViamVjdC5waXBlKGZpbmFsaXplKCgpID0+IHtcblx0XHRcdHRoaXMudW5zdWJzY3JpYmUobWVzc2FnZUlkLCBzdWJzY3JpcHRpb24sIC4uLmNvcHlQYXJhbWV0ZXJzKTtcblx0XHRcdHRoaXMuX3N1YkFycmF5LnNwbGljZSh0aGlzLl9zdWJBcnJheS5tYXAoYSA9PiBhLm1lc3NhZ2VJZCkuaW5kZXhPZihtZXNzYWdlSWQpLCAxKTtcblx0XHR9KSk7XG5cblx0XHR0aGlzLnNlbmQoJ0J5cGFzcycsIG5ldyBEYXRlKCksIG1lc3NhZ2VJZCwgJ3N1YnNjcmlwdGlvbicsICdzdWInLCBzdWJzY3JpcHRpb24sIC4uLmNvcHlQYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBvYnNlcnZhYmxlO1xuXHR9XG5cblx0cHVibGljIHVuc3Vic2NyaWJlKG1lc3NhZ2VJZCwgc3Vic2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtZXRlcnMpIHtcblx0XHR0aGlzLnNlbmQoKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJz8nKSA/IHRoaXMuX3JvdXRlci51cmwuc3Vic3RyaW5nKDAsIHRoaXMuX3JvdXRlci51cmwuaW5kZXhPZignPycpKSA6IHRoaXMuX3JvdXRlci51cmwpLCBuZXcgRGF0ZSgpLCBtZXNzYWdlSWQsICdzdWJzY3JpcHRpb24nLCAndW5zdWInLCBzdWJzY3JpcHRpb24sIC4uLnBhcmFtZXRlcnMpO1xuXHR9XG5cdFxuXHRwcml2YXRlIHNlbmQoLi4uZGF0YTogYW55W10pIHtcblx0XHRpZiAoZGF0YVszXSA9PT0gJ3N1YnNjcmlwdGlvbicpIHtcblx0XHRcdHRoaXMuX3NvY2tldC5zZW5kKC4uLmRhdGEpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChkYXRhWzNdID09PSAnbWV0aG9kJykge1xuXHRcdFx0aWYgKHRoaXMuc29ja2V0U3RhdHVzID09PSBXZWJTb2NrZXQuT1BFTikge1xuXHRcdFx0XHRpZiAoIXRoaXMuX3NlbmRRdWV1ZS5maWx0ZXIoYSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoZGF0YSkpLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRoaXMuX3NlbmRRdWV1ZS5zcGxpY2UoMCwgMCwgZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAoZGF0YVs0XSA9PT0gJ2luc2VydERvY3VtZW50Jykge1xuXHRcdFx0XHRcdGlmIChkYXRhWzVdICE9PSAnZHJpdmVyLWdwcycpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2FsZXJ0LnNldEFsZXJ0KCd3YXJuaW5nJywgJ1RoaXMgaW5zZXJ0IGNvbW1hbmQgaGFzIG5vdCB0YWtlbiBwbGFjZSBvbiB0aGUgc2VydmVyIHlldCBiZWNhdXNlIHlvdSBhcmUgb2ZmbGluZS4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBzeW5jIHVwIG5leHQgdGltZSB5b3UgYXJlIG9ubGluZSBhcyBsb25nIGFzIHlvdSBkbyBub3QgY2xlYXIgeW91ciBjYWNoZSEnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9vZmZsaW5lLmluc2VydERvY3VtZW50KCdjb2xsZWN0aW9uVXBkYXRlJywge1xuXHRcdFx0XHRcdFx0dHlwZTogJ2luc2VydCcsXG5cdFx0XHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0bGV0IHJlcyA9IHRoaXMuX29mZmxpbmUuaW5zZXJ0RG9jdW1lbnQoZGF0YVs1XSwgZGF0YVs2XSk7XG5cblx0XHRcdFx0XHRsZXQgY2IgPSB0aGlzLl9jYkFycmF5LmZpbHRlcihhID0+IGEubWVzc2FnZUlkID09PSBkYXRhWzJdKVswXTtcblx0XHRcdFx0XHRpZiAoY2IgJiYgY2IuY2IpIHtcblx0XHRcdFx0XHRcdGNiLmNiKG51bGwsIHJlcyk7XG5cblx0XHRcdFx0XHRcdHRoaXMuX2NiQXJyYXkuc3BsaWNlKHRoaXMuX2NiQXJyYXkuZmluZEluZGV4KGEgPT4gYS5tZXNzYWdlSWQgPT09IGRhdGFbMl0pLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZGF0YVs0XSA9PT0gJ3VwZGF0ZURvY3VtZW50Jykge1xuXHRcdFx0XHRcdHRoaXMuX2FsZXJ0LnNldEFsZXJ0KCd3YXJuaW5nJywgJ1RoaXMgdXBkYXRlIGNvbW1hbmQgaGFzIG5vdCB0YWtlbiBwbGFjZSBvbiB0aGUgc2VydmVyIHlldCBiZWNhdXNlIHlvdSBhcmUgb2ZmbGluZS4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBzeW5jIHVwIG5leHQgdGltZSB5b3UgYXJlIG9ubGluZSBhcyBsb25nIGFzIHlvdSBkbyBub3QgY2xlYXIgeW91ciBjYWNoZSEnKTtcblx0XHRcdFx0XHR0aGlzLl9vZmZsaW5lLmluc2VydERvY3VtZW50KCdjb2xsZWN0aW9uVXBkYXRlJywge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3VwZGF0ZURvY3VtZW50Jyxcblx0XHRcdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdFx0XHRkYXRlOiBuZXcgRGF0ZSgpXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5fb2ZmbGluZS5maW5kT25lKGRhdGFbNV0sIHtfaWQ6IGRhdGFbNl0uX2lkfSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuX29mZmxpbmUudXBkYXRlRG9jdW1lbnQoZGF0YVs1XSwgZGF0YVs2XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0NvdWxkIG5vdCBmaW5kIE9mZmxpbmUgZGF0YScsIGRhdGFbNV0sIGRhdGFbNl0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxldCBjYiA9IHRoaXMuX2NiQXJyYXkuZmlsdGVyKGEgPT4gYS5tZXNzYWdlSWQgPT09IGRhdGFbMl0pWzBdO1xuXHRcdFx0XHRcdGlmIChjYiAmJiBjYi5jYikge1xuXHRcdFx0XHRcdFx0Y2IuY2IobnVsbCwgMSk7XG5cdFx0XHRcdFx0XHR0aGlzLl9jYkFycmF5LnNwbGljZSh0aGlzLl9jYkFycmF5LmZpbmRJbmRleChhID0+IGEubWVzc2FnZUlkID09PSBkYXRhWzJdKSwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGRhdGFbNF0gPT09ICd1cGRhdGVEb2N1bWVudFByb3BzJykge1xuXHRcdFx0XHRcdHRoaXMuX2FsZXJ0LnNldEFsZXJ0KCd3YXJuaW5nJywgJ1RoaXMgdXBkYXRlIGNvbW1hbmQgaGFzIG5vdCB0YWtlbiBwbGFjZSBvbiB0aGUgc2VydmVyIHlldCBiZWNhdXNlIHlvdSBhcmUgb2ZmbGluZS4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBzeW5jIHVwIG5leHQgdGltZSB5b3UgYXJlIG9ubGluZSBhcyBsb25nIGFzIHlvdSBkbyBub3QgY2xlYXIgeW91ciBjYWNoZSEnKTtcblx0XHRcdFx0XHR0aGlzLl9vZmZsaW5lLmluc2VydERvY3VtZW50KCdjb2xsZWN0aW9uVXBkYXRlJywge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3VwZGF0ZURvY3VtZW50UHJvcHMnLFxuXHRcdFx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0XHRcdGRhdGU6IG5ldyBEYXRlKClcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLl9vZmZsaW5lLmZpbmRPbmUoZGF0YVs1XSwge19pZDogZGF0YVs2XX0pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9vZmZsaW5lLnVwZGF0ZURvY3VtZW50UHJvcHMoZGF0YVs1XSwgZGF0YVs2XSwgZGF0YVs3XSwgZGF0YVs4XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0NvdWxkIG5vdCBmaW5kIE9mZmxpbmUgZGF0YScsIGRhdGFbNV0sIGRhdGFbNl0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxldCBjYiA9IHRoaXMuX2NiQXJyYXkuZmlsdGVyKGEgPT4gYS5tZXNzYWdlSWQgPT09IGRhdGFbMl0pWzBdO1xuXHRcdFx0XHRcdGlmIChjYiAmJiBjYi5jYikge1xuXHRcdFx0XHRcdFx0Y2IuY2IobnVsbCwgMSk7XG5cdFx0XHRcdFx0XHR0aGlzLl9jYkFycmF5LnNwbGljZSh0aGlzLl9jYkFycmF5LmZpbmRJbmRleChhID0+IGEubWVzc2FnZUlkID09PSBkYXRhWzJdKSwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGRhdGFbNF0gPT09ICdyZW1vdmVEb2N1bWVudCcpIHtcblx0XHRcdFx0XHR0aGlzLl9hbGVydC5zZXRBbGVydCgnd2FybmluZycsICdUaGlzIHJlbW92ZSBjb21tYW5kIGhhcyBub3QgdGFrZW4gcGxhY2Ugb24gdGhlIHNlcnZlciB5ZXQgYmVjYXVzZSB5b3UgYXJlIG9mZmxpbmUuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgc3luYyB1cCBuZXh0IHRpbWUgeW91IGFyZSBvbmxpbmUgYXMgbG9uZyBhcyB5b3UgZG8gbm90IGNsZWFyIHlvdXIgY2FjaGUhJyk7XG5cdFx0XHRcdFx0dGhpcy5fb2ZmbGluZS5pbnNlcnREb2N1bWVudCgnY29sbGVjdGlvblVwZGF0ZScsIHtcblx0XHRcdFx0XHRcdHR5cGU6ICdyZW1vdmVEb2N1bWVudCcsXG5cdFx0XHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuX29mZmxpbmUuZmluZE9uZShkYXRhWzVdLCB7X2lkOiBkYXRhWzZdfSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuX29mZmxpbmUucmVtb3ZlRG9jdW1lbnQoZGF0YVs1XSwgZGF0YVs2XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0NvdWxkIG5vdCBmaW5kIE9mZmxpbmUgZGF0YScsIGRhdGFbNV0sIGRhdGFbNl0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxldCBjYiA9IHRoaXMuX2NiQXJyYXkuZmlsdGVyKGEgPT4gYS5tZXNzYWdlSWQgPT09IGRhdGFbMl0pWzBdO1xuXHRcdFx0XHRcdGlmIChjYiAmJiBjYi5jYikge1xuXHRcdFx0XHRcdFx0Y2IuY2IobnVsbCwgMSk7XG5cdFx0XHRcdFx0XHR0aGlzLl9jYkFycmF5LnNwbGljZSh0aGlzLl9jYkFycmF5LmZpbmRJbmRleChhID0+IGEubWVzc2FnZUlkID09PSBkYXRhWzJdKSwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2UgaWYgKGRhdGFbM10gPT09ICdvZmZsaW5lJykge1xuXHRcdFx0dGhpcy5fc29ja2V0LnNlbmQoLi4uZGF0YSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0U3RhdHVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9zb2NrZXQucmVhZHlTdGF0ZSQ7XG5cdH1cbn1cbiJdfQ==
@@ -1,200 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { LocalStorageService } from 'ngx-localstorage';
3
- import { BehaviorSubject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "ngx-localstorage";
6
- export class SocketService {
7
- _storage;
8
- //These can be altered by calling code
9
- debug = false;
10
- //Time to wait before attempting reconnect (after close)
11
- reconnectInterval = 1000;
12
- //Time to wait for WebSocket to open (before aborting and retrying)
13
- timeoutInterval = 5000;
14
- timeout = null;
15
- //Should only be used to read WebSocket readyState
16
- readyState;
17
- readyState$ = new BehaviorSubject(0);
18
- //List of WebSocket sub-protocols
19
- protocols = [];
20
- //The underlying WebSocket
21
- ws;
22
- url;
23
- pingInterval = null;
24
- pongTimeout = null;
25
- pingIntervalTime = 15000; // Time between each ping (e.g., 30 seconds)
26
- pongTimeoutTime = 12000; // Time to wait for pong before closing connection (e.g., 10 seconds)
27
- //Set up the default 'noop' event handlers
28
- onopen = function (event) { };
29
- onclose = function (event) { };
30
- onconnecting = function () { };
31
- onmessage = function (event) { };
32
- onerror = function (event) { };
33
- constructor(_storage) {
34
- this._storage = _storage;
35
- }
36
- openSocket(environment, protocols) {
37
- this.url = environment.WS_URL;
38
- this.protocols = protocols;
39
- this.connect();
40
- }
41
- connect() {
42
- if (!this.ws && this._storage.get('accessToken')) {
43
- if (this.timeout) {
44
- clearTimeout(this.timeout);
45
- }
46
- this.ws = new WebSocket(this.url, this.protocols);
47
- this.readyState = WebSocket.CONNECTING;
48
- this.readyState$.next(this.readyState);
49
- this.onconnecting();
50
- this.log(new Date(), 'WS', 'attempt-connect', this.url);
51
- this.timeout = setTimeout(() => {
52
- this.log(new Date(), 'WS', 'connection-timeout', this.url);
53
- this.close();
54
- }, this.timeoutInterval);
55
- this.ws.onopen = (event) => {
56
- clearTimeout(this.timeout);
57
- this.timeout = null;
58
- this.log(new Date(), 'WS', 'onopen', this.url);
59
- this.readyState = WebSocket.OPEN;
60
- this.readyState$.next(this.readyState);
61
- this.onopen(event);
62
- this.startPinging();
63
- };
64
- this.ws.onclose = (event) => {
65
- if (this.timeout) {
66
- clearTimeout(this.timeout);
67
- }
68
- this.timeout = null;
69
- this.ws = null;
70
- this.readyState = WebSocket.CLOSED;
71
- this.readyState$.next(this.readyState);
72
- this.log(new Date(), 'WS', 'onclose', this.url);
73
- this.onclose(event);
74
- setTimeout(() => {
75
- this.connect();
76
- }, this.reconnectInterval);
77
- this.stopPinging();
78
- };
79
- this.ws.onmessage = (event) => {
80
- if (event.data === 'pong') {
81
- this.log(new Date(), 'WS', 'pong received');
82
- clearTimeout(this.pongTimeout);
83
- }
84
- else {
85
- let messageData = JSON.parse(event.data);
86
- messageData = this.convertUTCDateToLocalDate(messageData);
87
- this.onmessage(messageData);
88
- }
89
- };
90
- this.ws.onerror = (event) => {
91
- this.log(new Date(), 'WS', 'onerror', this, event);
92
- this.onerror(event);
93
- this.reconnect();
94
- };
95
- }
96
- }
97
- convertUTCDateToLocalDate(data) {
98
- if (Array.isArray(data)) {
99
- return data.map(item => this.convertUTCDateToLocalDate(item));
100
- }
101
- else if (typeof data === 'object' && data !== null) {
102
- const keys = Object.keys(data);
103
- keys.forEach((key) => {
104
- data[key] = this.convertUTCDateToLocalDate(data[key]);
105
- });
106
- return data;
107
- }
108
- else if (typeof data === 'string') {
109
- // Check if the string is an ISO date format
110
- const datePattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/;
111
- if (datePattern.test(data)) {
112
- return new Date(data);
113
- }
114
- }
115
- return data;
116
- }
117
- startPinging() {
118
- this.pingInterval = setInterval(() => {
119
- if (this.ws && this.ws.readyState === WebSocket.OPEN) {
120
- this.send('ping');
121
- this.pongTimeout = setTimeout(() => {
122
- this.log(new Date(), 'WS', 'pong not received, closing connection');
123
- this.close();
124
- }, this.pongTimeoutTime);
125
- }
126
- }, this.pingIntervalTime);
127
- }
128
- stopPinging() {
129
- if (this.pingInterval) {
130
- clearInterval(this.pingInterval);
131
- }
132
- if (this.pongTimeout) {
133
- clearTimeout(this.pongTimeout);
134
- }
135
- }
136
- convertDatesToUTC(obj) {
137
- for (let key in obj) {
138
- if (obj.hasOwnProperty(key)) {
139
- if (obj[key] instanceof Date) {
140
- // Convert Date to UTC ISO String
141
- obj[key] = obj[key].toISOString();
142
- }
143
- else if (typeof obj[key] === 'object' && obj[key] !== null) {
144
- // Recursively look for Date objects within arrays or nested objects
145
- this.convertDatesToUTC(obj[key]);
146
- }
147
- }
148
- }
149
- }
150
- send(...data) {
151
- if (this.ws && this.ws.readyState === this.ws.OPEN) {
152
- data.forEach(item => this.convertDatesToUTC(item));
153
- this.ws.send(JSON.stringify(data));
154
- return true;
155
- }
156
- else {
157
- this.log(new Date(), 'WS', 'send error', this.readyState);
158
- this.reconnect();
159
- return false;
160
- }
161
- }
162
- close() {
163
- if (this.ws) {
164
- this.log(new Date(), 'WS', 'closing socket');
165
- this.readyState = WebSocket.CLOSING;
166
- this.readyState$.next(this.readyState);
167
- this.ws.close();
168
- return true;
169
- }
170
- return false;
171
- }
172
- reconnect() {
173
- this.log(new Date(), 'WS', 'reconnect', this.readyState);
174
- if (this.readyState === WebSocket.OPEN) {
175
- this.close();
176
- }
177
- else if (this.readyState === WebSocket.CLOSING || this.readyState === WebSocket.CLOSED) {
178
- this.connect();
179
- }
180
- }
181
- getBufferAmount() {
182
- if (this.ws) {
183
- return this.ws.bufferedAmount;
184
- }
185
- else {
186
- return 20480;
187
- }
188
- }
189
- log(...args) {
190
- if (this.debug) {
191
- console.log(...args);
192
- }
193
- }
194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketService, deps: [{ token: i1.LocalStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
195
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketService });
196
- }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SocketService, decorators: [{
198
- type: Injectable
199
- }], ctorParameters: function () { return [{ type: i1.LocalStorageService }]; } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFHdkMsTUFBTSxPQUFPLGFBQWE7SUFrQ0w7SUFqQ3BCLHNDQUFzQztJQUMvQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXJCLHdEQUF3RDtJQUNqRCxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFaEMsbUVBQW1FO0lBQzVELGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUV2QixrREFBa0Q7SUFDM0MsVUFBVSxDQUFTO0lBQ25CLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1QyxpQ0FBaUM7SUFDekIsU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUVqQywwQkFBMEI7SUFDbkIsRUFBRSxDQUFZO0lBQ2IsR0FBRyxDQUFTO0lBRVosWUFBWSxHQUFHLElBQUksQ0FBQztJQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRDQUE0QztJQUN0RSxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMscUVBQXFFO0lBRXpHLDBDQUEwQztJQUNuQyxNQUFNLEdBQXdCLFVBQVUsS0FBWSxJQUFHLENBQUMsQ0FBQztJQUN6RCxPQUFPLEdBQTZCLFVBQVUsS0FBaUIsSUFBRyxDQUFDLENBQUM7SUFDcEUsWUFBWSxHQUFlLGNBQWEsQ0FBQyxDQUFDO0lBQzFDLFNBQVMsR0FBK0IsVUFBVSxLQUFtQixJQUFHLENBQUMs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TSxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNmO0lBQ0YsQ0FBQztJQUVNLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztTQUM5QjthQUNJO1lBQ0osT0FBTyxLQUFLLENBQUM7U0FDYjtJQUNGLENBQUM7SUFFTyxHQUFHLENBQUMsR0FBRyxJQUFXO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNyQjtJQUNGLENBQUM7d0dBN05XLGFBQWE7NEdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICduZ3gtbG9jYWxzdG9yYWdlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU29ja2V0U2VydmljZSB7XG5cdC8vVGhlc2UgY2FuIGJlIGFsdGVyZWQgYnkgY2FsbGluZyBjb2RlXG5cdHB1YmxpYyBkZWJ1ZyA9IGZhbHNlO1xuXG5cdC8vVGltZSB0byB3YWl0IGJlZm9yZSBhdHRlbXB0aW5nIHJlY29ubmVjdCAoYWZ0ZXIgY2xvc2UpXG5cdHB1YmxpYyByZWNvbm5lY3RJbnRlcnZhbCA9IDEwMDA7XG5cdFxuXHQvL1RpbWUgdG8gd2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4gKGJlZm9yZSBhYm9ydGluZyBhbmQgcmV0cnlpbmcpXG5cdHB1YmxpYyB0aW1lb3V0SW50ZXJ2YWwgPSA1MDAwO1xuXHRwcml2YXRlIHRpbWVvdXQgPSBudWxsO1xuXG5cdC8vU2hvdWxkIG9ubHkgYmUgdXNlZCB0byByZWFkIFdlYlNvY2tldCByZWFkeVN0YXRlXG5cdHB1YmxpYyByZWFkeVN0YXRlOiBudW1iZXI7XG5cdHB1YmxpYyByZWFkeVN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cblx0Ly9MaXN0IG9mIFdlYlNvY2tldCBzdWItcHJvdG9jb2xzXG5cdHByaXZhdGUgcHJvdG9jb2xzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vVGhlIHVuZGVybHlpbmcgV2ViU29ja2V0XG5cdHB1YmxpYyB3czogV2ViU29ja2V0O1xuXHRwcml2YXRlIHVybDogc3RyaW5nO1xuXG5cdHByaXZhdGUgcGluZ0ludGVydmFsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0ID0gbnVsbDtcbiAgICBwcml2YXRlIHBpbmdJbnRlcnZhbFRpbWUgPSAxNTAwMDsgLy8gVGltZSBiZXR3ZWVuIGVhY2ggcGluZyAoZS5nLiwgMzAgc2Vjb25kcylcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0VGltZSA9IDEyMDAwOyAvLyBUaW1lIHRvIHdhaXQgZm9yIHBvbmcgYmVmb3JlIGNsb3NpbmcgY29ubmVjdGlvbiAoZS5nLiwgMTAgc2Vjb25kcylcblxuXHQvL1NldCB1cCB0aGUgZGVmYXVsdCAnbm9vcCcgZXZlbnQgaGFuZGxlcnNcblx0cHVibGljIG9ub3BlbjogKGV2OiBFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXZlbnQpIHt9O1xuXHRwdWJsaWMgb25jbG9zZTogKGV2OiBDbG9zZUV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBDbG9zZUV2ZW50KSB7fTtcblx0cHVibGljIG9uY29ubmVjdGluZzogKCkgPT4gdm9pZCA9IGZ1bmN0aW9uICgpIHt9O1xuXHRwdWJsaWMgb25tZXNzYWdlOiAoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogTWVzc2FnZUV2ZW50KSB7fTtcblx0cHVibGljIG9uZXJyb3I6IChldjogRXJyb3JFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXJyb3JFdmVudCkge307XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSkge31cblxuXHRwdWJsaWMgb3BlblNvY2tldChlbnZpcm9ubWVudCwgcHJvdG9jb2xzKSB7XG5cdFx0dGhpcy51cmwgPSBlbnZpcm9ubWVudC5XU19VUkw7XG5cdFx0dGhpcy5wcm90b2NvbHMgPSBwcm90b2NvbHM7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbm5lY3QoKSB7XG5cdFx0aWYgKCF0aGlzLndzICYmIHRoaXMuX3N0b3JhZ2UuZ2V0KCdhY2Nlc3NUb2tlbicpKSB7XG5cdFx0XHRpZiAodGhpcy50aW1lb3V0KSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLndzID0gbmV3IFdlYlNvY2tldCh0aGlzLnVybCwgdGhpcy5wcm90b2NvbHMpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcblx0XHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0dGhpcy5vbmNvbm5lY3RpbmcoKTtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdhdHRlbXB0LWNvbm5lY3QnLCB0aGlzLnVybCk7XG5cblx0XHRcdHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY29ubmVjdGlvbi10aW1lb3V0JywgdGhpcy51cmwpO1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9LCB0aGlzLnRpbWVvdXRJbnRlcnZhbCk7XG5cblx0XHRcdHRoaXMud3Mub25vcGVuID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0XHRcdFx0dGhpcy50aW1lb3V0ID0gbnVsbDtcblx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29ub3BlbicsIHRoaXMudXJsKTtcblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0Lk9QRU47XG5cdFx0XHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0XHR0aGlzLm9ub3BlbihldmVudCk7XG5cblx0XHRcdFx0dGhpcy5zdGFydFBpbmdpbmcoKTtcblx0XHRcdH07XG5cblx0XHRcdHRoaXMud3Mub25jbG9zZSA9IChldmVudDogQ2xvc2VFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50aW1lb3V0KSB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHRoaXMudGltZW91dCA9IG51bGw7XG5cblx0XHRcdFx0dGhpcy53cyA9IG51bGw7XG5cblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NFRDtcblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlJC5uZXh0KHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0XHRcdFxuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnb25jbG9zZScsIHRoaXMudXJsKTtcblx0XHRcdFx0dGhpcy5vbmNsb3NlKGV2ZW50KTtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRcdFx0fSwgdGhpcy5yZWNvbm5lY3RJbnRlcnZhbCk7XG5cblx0XHRcdFx0dGhpcy5zdG9wUGluZ2luZygpO1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy53cy5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YSA9PT0gJ3BvbmcnKSB7XG5cdFx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3BvbmcgcmVjZWl2ZWQnKTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wb25nVGltZW91dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0bGV0IG1lc3NhZ2VEYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblx0XHRcdFx0XHRtZXNzYWdlRGF0YSA9IHRoaXMuY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShtZXNzYWdlRGF0YSk7XG5cdFx0XHRcdFx0dGhpcy5vbm1lc3NhZ2UobWVzc2FnZURhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLndzLm9uZXJyb3IgPSAoZXZlbnQ6IEVycm9yRXZlbnQpID0+IHtcblx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29uZXJyb3InLCB0aGlzLCBldmVudCk7XG5cdFx0XHRcdHRoaXMub25lcnJvcihldmVudCk7XG5cdFx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShkYXRhKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcblx0XHQgIFx0cmV0dXJuIGRhdGEubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VVRDRGF0ZVRvTG9jYWxEYXRlKGl0ZW0pKTtcblx0XHR9IFxuXHRcdGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0XHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0XHRkYXRhW2tleV0gPSB0aGlzLmNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUoZGF0YVtrZXldKTtcblx0XHRcdH0pO1xuXHRcdCAgXHRyZXR1cm4gZGF0YTtcblx0XHR9IFxuXHRcdGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHN0cmluZyBpcyBhbiBJU08gZGF0ZSBmb3JtYXRcblx0XHRcdGNvbnN0IGRhdGVQYXR0ZXJuID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspP1okLztcblx0XHRcdGlmIChkYXRlUGF0dGVybi50ZXN0KGRhdGEpKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZShkYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdHByaXZhdGUgc3RhcnRQaW5naW5nKCkge1xuXHRcdHRoaXMucGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuXHRcdFx0XHR0aGlzLnNlbmQoJ3BpbmcnKTtcblxuXHRcdFx0XHR0aGlzLnBvbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3Bvbmcgbm90IHJlY2VpdmVkLCBjbG9zaW5nIGNvbm5lY3Rpb24nKTtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdH0sIHRoaXMucG9uZ1RpbWVvdXRUaW1lKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLnBpbmdJbnRlcnZhbFRpbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBzdG9wUGluZ2luZygpIHtcblx0XHRpZiAodGhpcy5waW5nSW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5waW5nSW50ZXJ2YWwpO1xuXHRcdH1cblx0XHRcblx0XHRpZiAodGhpcy5wb25nVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucG9uZ1RpbWVvdXQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY29udmVydERhdGVzVG9VVEMob2JqKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIG9iaikge1xuXHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0XHQvLyBDb252ZXJ0IERhdGUgdG8gVVRDIElTTyBTdHJpbmdcblx0XHRcdFx0XHRvYmpba2V5XSA9IG9ialtrZXldLnRvSVNPU3RyaW5nKCk7XG5cdFx0XHRcdH0gXG5cdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNpdmVseSBsb29rIGZvciBEYXRlIG9iamVjdHMgd2l0aGluIGFycmF5cyBvciBuZXN0ZWQgb2JqZWN0c1xuXHRcdFx0XHRcdHRoaXMuY29udmVydERhdGVzVG9VVEMob2JqW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNlbmQoLi4uZGF0YTogYW55W10pIHtcblx0XHRpZiAodGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGUgPT09IHRoaXMud3MuT1BFTikge1xuXHRcdFx0ZGF0YS5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5jb252ZXJ0RGF0ZXNUb1VUQyhpdGVtKSk7XG5cdFx0XHR0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdzZW5kIGVycm9yJywgdGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLndzKSB7XG5cdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY2xvc2luZyBzb2NrZXQnKTtcblx0XHRcdHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuXHRcdFx0dGhpcy5yZWFkeVN0YXRlJC5uZXh0KHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0XHR0aGlzLndzLmNsb3NlKCk7XG5cdFx0XHRcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgcmVjb25uZWN0KCkge1xuXHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdyZWNvbm5lY3QnLCB0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpcy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuQ0xPU0VEKSB7XG5cdFx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0QnVmZmVyQW1vdW50KCkge1xuXHRcdGlmICh0aGlzLndzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy53cy5idWZmZXJlZEFtb3VudDtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gMjA0ODA7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xuXHRcdFx0Y29uc29sZS5sb2coLi4uYXJncyk7XG5cdFx0fVxuXHR9XG59XG4iXX0=