@thzero/library_server 0.18.22 → 0.18.24

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 (53) hide show
  1. package/README.md +289 -112
  2. package/boot/index.js +529 -529
  3. package/boot/plugins/admin/index.js +6 -6
  4. package/boot/plugins/admin/news.js +33 -33
  5. package/boot/plugins/admin/users.js +33 -33
  6. package/boot/plugins/api.js +64 -64
  7. package/boot/plugins/apiFront.js +31 -31
  8. package/boot/plugins/index.js +70 -70
  9. package/boot/plugins/news.js +44 -44
  10. package/boot/plugins/users.js +46 -46
  11. package/boot/plugins/usersExtended.js +32 -32
  12. package/constants.js +45 -45
  13. package/data/baseNews.js +42 -42
  14. package/data/baseSettingsUser.js +9 -9
  15. package/data/baseUser.js +28 -28
  16. package/data/index.js +24 -24
  17. package/data/named.js +20 -20
  18. package/errors/tokenExpired.js +7 -7
  19. package/license.md +8 -8
  20. package/openSource.js +66 -66
  21. package/package.json +38 -38
  22. package/repository/index.js +182 -182
  23. package/repository/usageMetrics/devnull.js +16 -16
  24. package/routes/index.js +76 -76
  25. package/service/admin/baseNews.js +45 -45
  26. package/service/admin/index.js +130 -130
  27. package/service/admin/news.js +6 -6
  28. package/service/admin/users.js +107 -107
  29. package/service/baseSecurity.js +183 -183
  30. package/service/baseUser.js +122 -122
  31. package/service/communication.js +6 -6
  32. package/service/config.js +37 -37
  33. package/service/crypto.js +16 -16
  34. package/service/discovery/index.js +6 -6
  35. package/service/discovery/resources/index.js +101 -101
  36. package/service/external.js +19 -19
  37. package/service/externalRest.js +19 -19
  38. package/service/index.js +20 -20
  39. package/service/monitoring.js +12 -12
  40. package/service/news/base.js +59 -59
  41. package/service/news/index.js +6 -6
  42. package/service/news/validation/index.js +6 -6
  43. package/service/plans.js +31 -31
  44. package/service/restCommunication.js +21 -21
  45. package/service/usageMetrics.js +84 -84
  46. package/service/utility.js +190 -190
  47. package/service/version.js +37 -37
  48. package/utility/injector.js +59 -59
  49. package/utility/internalIp/index.js +48 -48
  50. package/utility/list/doubleLinked.js +88 -88
  51. package/utility/list/priorityQueue.js +109 -109
  52. package/utility/list/queue.js +72 -72
  53. package/utility/os.js +20 -20
package/service/plans.js CHANGED
@@ -1,32 +1,32 @@
1
- import LibraryServerConstants from '../constants.js';
2
-
3
- import Service from './index.js';
4
-
5
- class PlansService extends Service {
6
- constructor() {
7
- super();
8
-
9
- this._repositoryPlansI = null;
10
- }
11
-
12
- async init(injector) {
13
- await super.init(injector);
14
-
15
- this._repositoryPlansI = this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_PLANS);
16
- }
17
-
18
- async listing(correlationId) {
19
- try {
20
- return await this._repositoryPlans.listing(correlationId);
21
- }
22
- catch (err) {
23
- return this._error('PlansService', 'correlationId', null, err, null, null, correlationId);
24
- }
25
- }
26
-
27
- get _repositoryPlans() {
28
- return this._repositoryPlansI;
29
- }
30
- }
31
-
1
+ import LibraryServerConstants from '../constants.js';
2
+
3
+ import Service from './index.js';
4
+
5
+ class PlansService extends Service {
6
+ constructor() {
7
+ super();
8
+
9
+ this._repositoryPlansI = null;
10
+ }
11
+
12
+ async init(injector) {
13
+ await super.init(injector);
14
+
15
+ this._repositoryPlansI = this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_PLANS);
16
+ }
17
+
18
+ async listing(correlationId) {
19
+ try {
20
+ return await this._repositoryPlans.listing(correlationId);
21
+ }
22
+ catch (err) {
23
+ return this._error('PlansService', 'correlationId', null, err, null, null, correlationId);
24
+ }
25
+ }
26
+
27
+ get _repositoryPlans() {
28
+ return this._repositoryPlansI;
29
+ }
30
+ }
31
+
32
32
  export default PlansService;
@@ -1,21 +1,21 @@
1
- import CommunicationService from './communication.js';
2
-
3
- class RestCommunicationService extends CommunicationService {
4
- // eslint-disable-next-line
5
- async get(key, url, options) {
6
- }
7
-
8
- // eslint-disable-next-line
9
- async getAuth(key, url, auth, options) {
10
- }
11
-
12
- // eslint-disable-next-line
13
- async post(key, url, body, options) {
14
- }
15
-
16
- // eslint-disable-next-line
17
- async postAuth(key, url, body, auth, options) {
18
- }
19
- }
20
-
21
- export default RestCommunicationService;
1
+ import CommunicationService from './communication.js';
2
+
3
+ class RestCommunicationService extends CommunicationService {
4
+ // eslint-disable-next-line
5
+ async get(key, url, options) {
6
+ }
7
+
8
+ // eslint-disable-next-line
9
+ async getAuth(key, url, auth, options) {
10
+ }
11
+
12
+ // eslint-disable-next-line
13
+ async post(key, url, body, options) {
14
+ }
15
+
16
+ // eslint-disable-next-line
17
+ async postAuth(key, url, body, auth, options) {
18
+ }
19
+ }
20
+
21
+ export default RestCommunicationService;
@@ -1,84 +1,84 @@
1
- import LibraryServerConstants from '../constants.js';
2
-
3
- import LibraryMomentUtility from '@thzero/library_common/utility/moment.js';
4
-
5
- import Service from './index.js';
6
-
7
- class UsageMetricsService extends Service {
8
- constructor() {
9
- super();
10
-
11
- this._ignore = [];
12
-
13
- this._repositoryUsageMetricsI = null;
14
- }
15
-
16
- async init(injector) {
17
- await super.init(injector);
18
-
19
- this._repositoryUsageMetricsI = this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_USAGE_METRIC);
20
- }
21
-
22
- async register(usageMetrics, err) {
23
- try {
24
- if (!usageMetrics)
25
- return;
26
-
27
- const url = usageMetrics.url;
28
- if (!String.isNullOrEmpty(url)) {
29
- for (const ignore of this._ignore) {
30
- if (url === ignore)
31
- return;
32
- }
33
- }
34
-
35
- usageMetrics.date = new Date(new Date(LibraryMomentUtility.getTimestamp()).toISOString());
36
-
37
- await this._repositoryUsageMetrics.register(usageMetrics);
38
- return this._success(usageMetrics.correlationId);
39
- }
40
- catch (err) {
41
- this._logger.exception('UsageMetricsService', 'register', err);
42
- }
43
- }
44
-
45
- registerIgnore(url) {
46
- if (this._ignore[url])
47
- return;
48
-
49
- this._ignore.push(url);
50
- }
51
-
52
- async listing(correlationId, user, params) {
53
- this._enforceNotNull('UsageMetricsService', 'listing', 'user', user, correlationId);
54
-
55
- const validationResponse = this._serviceValidation.check(correlationId, this._serviceValidation.usageMetricsMeasurementTagParams, params ?? {});
56
- if (this._hasFailed(validationResponse))
57
- return validationResponse;
58
-
59
- return await this._repositoryUsageMetrics.listing(correlationId, params);
60
- }
61
-
62
- async tag(correlationId, user, tag) {
63
- this._enforceNotNull('UsageMetricsService', 'tag', 'user', user, correlationId);
64
- this._enforceNotNull('UsageMetricsService', 'tag', 'tag', tag, correlationId);
65
-
66
- if (user) {
67
- const validationResponsUser = this._validateUser(correlationId, user);
68
- if (this._hasFailed(validationResponsUser))
69
- return validationResponsUser;
70
- }
71
-
72
- const validationResponse = this._serviceValidation.check(correlationId, this._serviceValidation.usageMetricsMeasurementTag, tag);
73
- if (this._hasFailed(validationResponse))
74
- return validationResponse;
75
-
76
- return await this._repositoryUsageMetrics.tag(correlationId, user ? user.id : null, tag);
77
- }
78
-
79
- get _repositoryUsageMetrics() {
80
- return this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_USAGE_METRIC)
81
- }
82
- }
83
-
84
- export default UsageMetricsService;
1
+ import LibraryServerConstants from '../constants.js';
2
+
3
+ import LibraryMomentUtility from '@thzero/library_common/utility/moment.js';
4
+
5
+ import Service from './index.js';
6
+
7
+ class UsageMetricsService extends Service {
8
+ constructor() {
9
+ super();
10
+
11
+ this._ignore = [];
12
+
13
+ this._repositoryUsageMetricsI = null;
14
+ }
15
+
16
+ async init(injector) {
17
+ await super.init(injector);
18
+
19
+ this._repositoryUsageMetricsI = this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_USAGE_METRIC);
20
+ }
21
+
22
+ async register(usageMetrics, err) {
23
+ try {
24
+ if (!usageMetrics)
25
+ return;
26
+
27
+ const url = usageMetrics.url;
28
+ if (!String.isNullOrEmpty(url)) {
29
+ for (const ignore of this._ignore) {
30
+ if (url === ignore)
31
+ return;
32
+ }
33
+ }
34
+
35
+ usageMetrics.date = new Date(new Date(LibraryMomentUtility.getTimestamp()).toISOString());
36
+
37
+ await this._repositoryUsageMetrics.register(usageMetrics);
38
+ return this._success(usageMetrics.correlationId);
39
+ }
40
+ catch (err) {
41
+ this._logger.exception('UsageMetricsService', 'register', err);
42
+ }
43
+ }
44
+
45
+ registerIgnore(url) {
46
+ if (this._ignore[url])
47
+ return;
48
+
49
+ this._ignore.push(url);
50
+ }
51
+
52
+ async listing(correlationId, user, params) {
53
+ this._enforceNotNull('UsageMetricsService', 'listing', 'user', user, correlationId);
54
+
55
+ const validationResponse = this._serviceValidation.check(correlationId, this._serviceValidation.usageMetricsMeasurementTagParams, params ?? {});
56
+ if (this._hasFailed(validationResponse))
57
+ return validationResponse;
58
+
59
+ return await this._repositoryUsageMetrics.listing(correlationId, params);
60
+ }
61
+
62
+ async tag(correlationId, user, tag) {
63
+ this._enforceNotNull('UsageMetricsService', 'tag', 'user', user, correlationId);
64
+ this._enforceNotNull('UsageMetricsService', 'tag', 'tag', tag, correlationId);
65
+
66
+ if (user) {
67
+ const validationResponsUser = this._validateUser(correlationId, user);
68
+ if (this._hasFailed(validationResponsUser))
69
+ return validationResponsUser;
70
+ }
71
+
72
+ const validationResponse = this._serviceValidation.check(correlationId, this._serviceValidation.usageMetricsMeasurementTag, tag);
73
+ if (this._hasFailed(validationResponse))
74
+ return validationResponse;
75
+
76
+ return await this._repositoryUsageMetrics.tag(correlationId, user ? user.id : null, tag);
77
+ }
78
+
79
+ get _repositoryUsageMetrics() {
80
+ return this._injector.getService(LibraryServerConstants.InjectorKeys.REPOSITORY_USAGE_METRIC)
81
+ }
82
+ }
83
+
84
+ export default UsageMetricsService;
@@ -1,190 +1,190 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { Mutex as asyncMutex } from 'async-mutex';
4
-
5
- import LibraryServerConstants from '@thzero/library_server/constants.js';
6
-
7
- import LibraryMomentUtility from '@thzero/library_common/utility/moment.js';
8
-
9
- import Service from './index.js';
10
-
11
- import Response from '@thzero/library_common/response/index.js';
12
-
13
- class UtilityService extends Service {
14
- constructor() {
15
- super();
16
-
17
- this._servicePlans = null;
18
- this._serviceVersion = null;
19
-
20
- this._openSourceResponse = null;
21
-
22
- this._initializeResponse = null;
23
- this._mutexInitialize = new asyncMutex();
24
- this._ttlInitialize = null;
25
- this._ttlInitializeDiff = 1000 * 30;
26
- }
27
-
28
- async init(injector) {
29
- await super.init(injector);
30
-
31
- this._servicePlans = this._injector.getService(LibraryServerConstants.InjectorKeys.SERVICE_PLANS);
32
- this._serviceVersion = this._injector.getService(LibraryServerConstants.InjectorKeys.SERVICE_VERSION);
33
-
34
- await this._initializeOopenSource();
35
- }
36
-
37
- async initialize(correlationId) {
38
- const now = LibraryMomentUtility.getTimestamp();
39
- const ttlInitialize = this._ttlInitialize ? this._ttlInitialize : 0;
40
- const delta = now - ttlInitialize;
41
- if (this._initializeResponse && (delta <= this._ttlInitializeDiff))
42
- return this._initializeResponse;
43
-
44
- const release = await this._mutexInitialize.acquire();
45
- try {
46
- if (this._initializeResponse)
47
- return this._initializeResponse;
48
-
49
- const response = this._initResponse(correlationId);
50
- response.results = {};
51
-
52
- const responsePlans = await this._servicePlans.listing(correlationId);
53
- if (this._hasFailed(responsePlans))
54
- return responsePlans;
55
-
56
- response.results.plans = responsePlans.results;
57
-
58
- const responseVersion = await this._serviceVersion.version(correlationId);
59
- if (this._hasFailed(responseVersion))
60
- return responseVersion;
61
-
62
- response.results.version = responseVersion.results;
63
-
64
- await this._intialize(correlationId, response);
65
-
66
- this._ttlInitialize = LibraryMomentUtility.getTimestamp();
67
- this._initializeResponse = response;
68
- return response;
69
- }
70
- catch (err) {
71
- return this._error('UtilityService', 'initialize', null, err, null, null, correlationId);
72
- }
73
- finally {
74
- release();
75
- }
76
- }
77
-
78
- async logger(content, correlationId) {
79
- try {
80
- if (!content)
81
- return this._error('UtilityService', 'logger');
82
-
83
- const type = content.type;
84
- switch(type) {
85
- case 'DEBUG':
86
- this._logger.debug('UtilityService', 'logger', content.message, content.data, correlationId, true);
87
- break;
88
- case 'ERROR':
89
- this._logger.error('UtilityService', 'logger', content.message, content.data, correlationId, true);
90
- break;
91
- case 'EXCEPTION':
92
- this._logger.exception('UtilityService', 'logger', content.ex, correlationId, true);
93
- break;
94
- case 'FATAL':
95
- this._logger.fatal('UtilityService', 'logger', content.message, content.data, correlationId, true);
96
- break;
97
- case 'INFO':
98
- this._logger.info('UtilityService', 'logger', content.message, content.data, correlationId, true);
99
- break;
100
- case 'TRACE':
101
- this._logger.trace('UtilityService', 'logger', content.message, content.data, correlationId, true);
102
- break;
103
- case 'WARN':
104
- this._logger.warn('UtilityService', 'logger', content.message, content.data, correlationId, true);
105
- break;
106
- }
107
-
108
- return this._success(correlationId);
109
- }
110
- catch (err) {
111
- console.log(`UtilityService.initialize - ${correlationId}`, err);
112
- return Response.error('ServerConfigService', 'getBackend', null, err, null, null, correlationId);
113
- }
114
- }
115
-
116
- async openSource(correlationId) {
117
- return this._openSourceResponse ? this._openSourceResponse : this._error();
118
- }
119
-
120
- _intialize(correlationId, response) {
121
- }
122
-
123
- async _initializeOopenSource(correlationId) {
124
- this._openSourceResponse = this._initResponse(correlationId);
125
- this._openSourceResponse.results = [];
126
-
127
- try {
128
- const __dirname = path.resolve();
129
- const dir = path.join(path.resolve(__dirname), 'node_modules', '@thzero');
130
- const dirs = await fs.promises.readdir(dir);
131
-
132
- console.log();
133
- console.log('\t----open.source.initialization-----------------');
134
-
135
- let file;
136
- let importPath;
137
- let fileI;
138
- let items;
139
- for (const item of dirs) {
140
- try {
141
- file = path.join(dir, item, 'openSource.js');
142
- console.log(`\t${file}...`);
143
- if (!fs.existsSync(file)){
144
- console.log(`\t...not found.`);
145
- continue;
146
- }
147
-
148
- importPath = ['@thzero', item, 'openSource.js'].join('/');
149
- console.log(`\t\t${importPath}...`);
150
- fileI = await import(importPath);
151
- if (!fileI.default) {
152
- console.log(`\t...failed to load.`);
153
- continue;
154
- }
155
-
156
- items = fileI.default();
157
- items.forEach(element => {
158
- if (element.category !== 'server')
159
- return;
160
- if (this._openSourceResponse.results.filter(l => l.name === element.name).length > 0)
161
- return;
162
- this._openSourceResponse.results.push(element);
163
- });
164
- console.log(`\t...processed.`);
165
- }
166
- catch(err) {
167
- console.log(`\t...failed.`, err);
168
- this._logger.warn('UtilityService', '_initializeOopenSource', null, err, correlationId);
169
- }
170
- }
171
- }
172
- catch(err) {
173
- this._logger.warn('UtilityService', '_initializeOopenSource', null, err, correlationId);
174
- }
175
- finally {
176
- console.log('\t----open.source.initialization.complete--------');
177
- console.log();
178
- }
179
-
180
- // response.results = await this._openSourceServer(correlationId);
181
- this._openSource(correlationId, this._openSourceResponse.results);
182
-
183
- this._openSourceResponse.results = this._openSourceResponse.results.sort((a, b) => a.name.localeCompare(b.name));
184
- }
185
-
186
- _openSource(correlationId, openSource) {
187
- }
188
- }
189
-
190
- export default UtilityService;
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { Mutex as asyncMutex } from 'async-mutex';
4
+
5
+ import LibraryServerConstants from '@thzero/library_server/constants.js';
6
+
7
+ import LibraryMomentUtility from '@thzero/library_common/utility/moment.js';
8
+
9
+ import Service from './index.js';
10
+
11
+ import Response from '@thzero/library_common/response/index.js';
12
+
13
+ class UtilityService extends Service {
14
+ constructor() {
15
+ super();
16
+
17
+ this._servicePlans = null;
18
+ this._serviceVersion = null;
19
+
20
+ this._openSourceResponse = null;
21
+
22
+ this._initializeResponse = null;
23
+ this._mutexInitialize = new asyncMutex();
24
+ this._ttlInitialize = null;
25
+ this._ttlInitializeDiff = 1000 * 30;
26
+ }
27
+
28
+ async init(injector) {
29
+ await super.init(injector);
30
+
31
+ this._servicePlans = this._injector.getService(LibraryServerConstants.InjectorKeys.SERVICE_PLANS);
32
+ this._serviceVersion = this._injector.getService(LibraryServerConstants.InjectorKeys.SERVICE_VERSION);
33
+
34
+ await this._initializeOopenSource();
35
+ }
36
+
37
+ async initialize(correlationId) {
38
+ const now = LibraryMomentUtility.getTimestamp();
39
+ const ttlInitialize = this._ttlInitialize ? this._ttlInitialize : 0;
40
+ const delta = now - ttlInitialize;
41
+ if (this._initializeResponse && (delta <= this._ttlInitializeDiff))
42
+ return this._initializeResponse;
43
+
44
+ const release = await this._mutexInitialize.acquire();
45
+ try {
46
+ if (this._initializeResponse)
47
+ return this._initializeResponse;
48
+
49
+ const response = this._initResponse(correlationId);
50
+ response.results = {};
51
+
52
+ const responsePlans = await this._servicePlans.listing(correlationId);
53
+ if (this._hasFailed(responsePlans))
54
+ return responsePlans;
55
+
56
+ response.results.plans = responsePlans.results;
57
+
58
+ const responseVersion = await this._serviceVersion.version(correlationId);
59
+ if (this._hasFailed(responseVersion))
60
+ return responseVersion;
61
+
62
+ response.results.version = responseVersion.results;
63
+
64
+ await this._intialize(correlationId, response);
65
+
66
+ this._ttlInitialize = LibraryMomentUtility.getTimestamp();
67
+ this._initializeResponse = response;
68
+ return response;
69
+ }
70
+ catch (err) {
71
+ return this._error('UtilityService', 'initialize', null, err, null, null, correlationId);
72
+ }
73
+ finally {
74
+ release();
75
+ }
76
+ }
77
+
78
+ async logger(content, correlationId) {
79
+ try {
80
+ if (!content)
81
+ return this._error('UtilityService', 'logger');
82
+
83
+ const type = content.type;
84
+ switch(type) {
85
+ case 'DEBUG':
86
+ this._logger.debug('UtilityService', 'logger', content.message, content.data, correlationId, true);
87
+ break;
88
+ case 'ERROR':
89
+ this._logger.error('UtilityService', 'logger', content.message, content.data, correlationId, true);
90
+ break;
91
+ case 'EXCEPTION':
92
+ this._logger.exception('UtilityService', 'logger', content.ex, correlationId, true);
93
+ break;
94
+ case 'FATAL':
95
+ this._logger.fatal('UtilityService', 'logger', content.message, content.data, correlationId, true);
96
+ break;
97
+ case 'INFO':
98
+ this._logger.info('UtilityService', 'logger', content.message, content.data, correlationId, true);
99
+ break;
100
+ case 'TRACE':
101
+ this._logger.trace('UtilityService', 'logger', content.message, content.data, correlationId, true);
102
+ break;
103
+ case 'WARN':
104
+ this._logger.warn('UtilityService', 'logger', content.message, content.data, correlationId, true);
105
+ break;
106
+ }
107
+
108
+ return this._success(correlationId);
109
+ }
110
+ catch (err) {
111
+ console.log(`UtilityService.initialize - ${correlationId}`, err);
112
+ return Response.error('ServerConfigService', 'getBackend', null, err, null, null, correlationId);
113
+ }
114
+ }
115
+
116
+ async openSource(correlationId) {
117
+ return this._openSourceResponse ? this._openSourceResponse : this._error();
118
+ }
119
+
120
+ _intialize(correlationId, response) {
121
+ }
122
+
123
+ async _initializeOopenSource(correlationId) {
124
+ this._openSourceResponse = this._initResponse(correlationId);
125
+ this._openSourceResponse.results = [];
126
+
127
+ try {
128
+ const __dirname = path.resolve();
129
+ const dir = path.join(path.resolve(__dirname), 'node_modules', '@thzero');
130
+ const dirs = await fs.promises.readdir(dir);
131
+
132
+ console.log();
133
+ console.log('\t----open.source.initialization-----------------');
134
+
135
+ let file;
136
+ let importPath;
137
+ let fileI;
138
+ let items;
139
+ for (const item of dirs) {
140
+ try {
141
+ file = path.join(dir, item, 'openSource.js');
142
+ console.log(`\t${file}...`);
143
+ if (!fs.existsSync(file)){
144
+ console.log(`\t...not found.`);
145
+ continue;
146
+ }
147
+
148
+ importPath = ['@thzero', item, 'openSource.js'].join('/');
149
+ console.log(`\t\t${importPath}...`);
150
+ fileI = await import(importPath);
151
+ if (!fileI.default) {
152
+ console.log(`\t...failed to load.`);
153
+ continue;
154
+ }
155
+
156
+ items = fileI.default();
157
+ items.forEach(element => {
158
+ if (element.category !== 'server')
159
+ return;
160
+ if (this._openSourceResponse.results.filter(l => l.name === element.name).length > 0)
161
+ return;
162
+ this._openSourceResponse.results.push(element);
163
+ });
164
+ console.log(`\t...processed.`);
165
+ }
166
+ catch(err) {
167
+ console.log(`\t...failed.`, err);
168
+ this._logger.warn('UtilityService', '_initializeOopenSource', null, err, correlationId);
169
+ }
170
+ }
171
+ }
172
+ catch(err) {
173
+ this._logger.warn('UtilityService', '_initializeOopenSource', null, err, correlationId);
174
+ }
175
+ finally {
176
+ console.log('\t----open.source.initialization.complete--------');
177
+ console.log();
178
+ }
179
+
180
+ // response.results = await this._openSourceServer(correlationId);
181
+ this._openSource(correlationId, this._openSourceResponse.results);
182
+
183
+ this._openSourceResponse.results = this._openSourceResponse.results.sort((a, b) => a.name.localeCompare(b.name));
184
+ }
185
+
186
+ _openSource(correlationId, openSource) {
187
+ }
188
+ }
189
+
190
+ export default UtilityService;