@hahnpro/hpc-api 6.0.0 → 2024.4.0-0

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 (178) hide show
  1. package/package.json +8 -24
  2. package/src/index.d.ts +20 -0
  3. package/src/index.js +20 -0
  4. package/{dist → src/lib}/Queue.js +2 -7
  5. package/src/lib/api-base.js +6 -0
  6. package/src/lib/api.js +60 -0
  7. package/src/lib/asset.interface.js +1 -0
  8. package/{dist → src/lib}/asset.service.js +21 -17
  9. package/src/lib/assettypes.service.js +24 -0
  10. package/{dist → src/lib}/content.interface.js +2 -5
  11. package/src/lib/content.service.js +49 -0
  12. package/src/lib/data.interface.js +3 -0
  13. package/{dist → src/lib}/data.service.js +18 -11
  14. package/src/lib/endpoint.interface.js +1 -0
  15. package/{dist → src/lib}/endpoint.service.d.ts +2 -2
  16. package/{dist → src/lib}/endpoint.service.js +2 -6
  17. package/src/lib/events.interface.js +1 -0
  18. package/src/lib/events.service.js +9 -0
  19. package/src/lib/flow-deployment.interface.js +1 -0
  20. package/src/lib/flow-deployment.service.js +68 -0
  21. package/src/lib/flow-function.interface.js +1 -0
  22. package/{dist → src/lib}/flow-function.service.js +3 -6
  23. package/src/lib/flow-module.interface.js +1 -0
  24. package/{dist → src/lib}/flow-module.service.js +8 -7
  25. package/src/lib/flow.interface.js +1 -0
  26. package/{dist → src/lib}/flow.service.js +15 -20
  27. package/src/lib/http.service.js +179 -0
  28. package/src/lib/label.interface.js +1 -0
  29. package/{dist → src/lib}/label.service.js +2 -6
  30. package/src/lib/mock/api-base.mock.js +7 -0
  31. package/src/lib/mock/api.mock.js +199 -0
  32. package/{dist → src/lib}/mock/asset.mock.service.js +30 -41
  33. package/{dist → src/lib}/mock/assetTypes.mock.service.js +19 -27
  34. package/{dist → src/lib}/mock/content.mock.service.js +21 -24
  35. package/src/lib/mock/data.mock.service.js +93 -0
  36. package/{dist → src/lib}/mock/endpoint.mock.service.js +2 -6
  37. package/src/lib/mock/events.mock.service.js +10 -0
  38. package/src/lib/mock/flow-deployment.mock.service.js +118 -0
  39. package/{dist → src/lib}/mock/flow-functions.mock.service.js +12 -21
  40. package/src/lib/mock/flow-modules.mock.service.js +20 -0
  41. package/src/lib/mock/flow.mock.service.js +81 -0
  42. package/src/lib/mock/index.js +11 -0
  43. package/src/lib/mock/label.mock.service.js +13 -0
  44. package/src/lib/mock/notification.mock.service.js +7 -0
  45. package/src/lib/mock/secret.mock.service.js +28 -0
  46. package/src/lib/mock/task.mock.service.js +32 -0
  47. package/{dist → src/lib}/mock/timeseries.mock.service.js +40 -49
  48. package/{dist → src/lib}/mock/trash.mock.service.js +8 -15
  49. package/src/lib/mock/user.mock.service.js +10 -0
  50. package/{dist → src/lib}/mock/vault.mock.service.js +2 -6
  51. package/src/lib/notification.interface.js +1 -0
  52. package/src/lib/notification.service.js +6 -0
  53. package/{dist → src/lib}/proxy.service.js +1 -5
  54. package/src/lib/resource.interface.js +1 -0
  55. package/src/lib/schema.interface.js +1 -0
  56. package/src/lib/secret.interface.js +1 -0
  57. package/src/lib/secret.service.js +15 -0
  58. package/src/lib/storage.interface.js +1 -0
  59. package/src/lib/task.interface.js +1 -0
  60. package/src/lib/task.service.js +19 -0
  61. package/src/lib/timeseries.interface.js +1 -0
  62. package/src/lib/timeseries.service.js +92 -0
  63. package/{dist → src/lib}/token-set.js +3 -7
  64. package/{dist → src/lib}/trash.service.js +2 -6
  65. package/src/lib/user-settings.interface.js +1 -0
  66. package/src/lib/user.service.js +26 -0
  67. package/src/lib/vault.interface.js +1 -0
  68. package/src/lib/vault.service.js +10 -0
  69. package/LICENSE +0 -21
  70. package/dist/api-base.js +0 -10
  71. package/dist/api.js +0 -62
  72. package/dist/asset.interface.js +0 -2
  73. package/dist/assettypes.service.js +0 -28
  74. package/dist/content.service.js +0 -50
  75. package/dist/data.interface.js +0 -6
  76. package/dist/endpoint.interface.js +0 -2
  77. package/dist/events.interface.js +0 -2
  78. package/dist/events.service.js +0 -13
  79. package/dist/flow-deployment.interface.js +0 -2
  80. package/dist/flow-deployment.service.js +0 -74
  81. package/dist/flow-function.interface.js +0 -2
  82. package/dist/flow-module.interface.js +0 -2
  83. package/dist/flow.interface.js +0 -2
  84. package/dist/http.service.js +0 -182
  85. package/dist/index.d.ts +0 -20
  86. package/dist/index.js +0 -23
  87. package/dist/label.interface.js +0 -2
  88. package/dist/mock/api-base.mock.js +0 -11
  89. package/dist/mock/api.mock.js +0 -128
  90. package/dist/mock/data.mock.service.js +0 -96
  91. package/dist/mock/events.mock.service.js +0 -14
  92. package/dist/mock/flow-deployment.mock.service.js +0 -142
  93. package/dist/mock/flow-modules.mock.service.js +0 -27
  94. package/dist/mock/flow.mock.service.js +0 -93
  95. package/dist/mock/index.js +0 -14
  96. package/dist/mock/label.mock.service.js +0 -17
  97. package/dist/mock/notification.mock.service.js +0 -11
  98. package/dist/mock/secret.mock.service.js +0 -31
  99. package/dist/mock/task.mock.service.js +0 -37
  100. package/dist/mock/user.mock.service.js +0 -14
  101. package/dist/notification.interface.js +0 -2
  102. package/dist/notification.service.js +0 -10
  103. package/dist/resource.interface.js +0 -2
  104. package/dist/schema.interface.js +0 -2
  105. package/dist/secret.interface.js +0 -2
  106. package/dist/secret.service.js +0 -19
  107. package/dist/storage.interface.js +0 -2
  108. package/dist/task.interface.js +0 -2
  109. package/dist/task.service.js +0 -22
  110. package/dist/timeseries.interface.js +0 -2
  111. package/dist/timeseries.service.js +0 -56
  112. package/dist/user-settings.interface.js +0 -2
  113. package/dist/user.service.js +0 -33
  114. package/dist/vault.interface.js +0 -2
  115. package/dist/vault.service.js +0 -14
  116. package/{dist → src/lib}/Queue.d.ts +0 -0
  117. package/{dist → src/lib}/api-base.d.ts +0 -0
  118. package/{dist → src/lib}/api.d.ts +6 -6
  119. package/{dist → src/lib}/asset.interface.d.ts +0 -0
  120. package/{dist → src/lib}/asset.service.d.ts +0 -0
  121. package/{dist → src/lib}/assettypes.service.d.ts +0 -0
  122. package/{dist → src/lib}/content.interface.d.ts +0 -0
  123. package/{dist → src/lib}/content.service.d.ts +1 -1
  124. package/{dist → src/lib}/data.interface.d.ts +0 -0
  125. package/{dist → src/lib}/data.service.d.ts +0 -0
  126. package/{dist → src/lib}/endpoint.interface.d.ts +0 -0
  127. package/{dist → src/lib}/events.interface.d.ts +0 -0
  128. package/{dist → src/lib}/events.service.d.ts +0 -0
  129. package/{dist → src/lib}/flow-deployment.interface.d.ts +1 -1
  130. package/{dist → src/lib}/flow-deployment.service.d.ts +0 -0
  131. package/{dist → src/lib}/flow-function.interface.d.ts +0 -0
  132. package/{dist → src/lib}/flow-function.service.d.ts +1 -1
  133. package/{dist → src/lib}/flow-module.interface.d.ts +0 -0
  134. package/{dist → src/lib}/flow-module.service.d.ts +1 -1
  135. package/{dist → src/lib}/flow.interface.d.ts +1 -1
  136. package/{dist → src/lib}/flow.service.d.ts +1 -1
  137. package/{dist → src/lib}/http.service.d.ts +0 -0
  138. package/{dist → src/lib}/label.interface.d.ts +0 -0
  139. package/{dist → src/lib}/label.service.d.ts +0 -0
  140. package/{dist → src/lib}/mock/api-base.mock.d.ts +0 -0
  141. package/{dist → src/lib}/mock/api.mock.d.ts +18 -18
  142. package/{dist → src/lib}/mock/asset.mock.service.d.ts +1 -1
  143. package/{dist → src/lib}/mock/assetTypes.mock.service.d.ts +0 -0
  144. package/{dist → src/lib}/mock/content.mock.service.d.ts +1 -1
  145. package/{dist → src/lib}/mock/data.mock.service.d.ts +0 -0
  146. package/{dist → src/lib}/mock/endpoint.mock.service.d.ts +0 -0
  147. package/{dist → src/lib}/mock/events.mock.service.d.ts +0 -0
  148. package/{dist → src/lib}/mock/flow-deployment.mock.service.d.ts +2 -2
  149. package/{dist → src/lib}/mock/flow-functions.mock.service.d.ts +1 -1
  150. package/{dist → src/lib}/mock/flow-modules.mock.service.d.ts +2 -2
  151. package/{dist → src/lib}/mock/flow.mock.service.d.ts +1 -1
  152. package/{dist → src/lib}/mock/index.d.ts +0 -0
  153. package/{dist → src/lib}/mock/label.mock.service.d.ts +1 -1
  154. package/{dist → src/lib}/mock/notification.mock.service.d.ts +1 -1
  155. package/{dist → src/lib}/mock/secret.mock.service.d.ts +1 -1
  156. package/{dist → src/lib}/mock/task.mock.service.d.ts +0 -0
  157. package/{dist → src/lib}/mock/timeseries.mock.service.d.ts +0 -0
  158. package/{dist → src/lib}/mock/trash.mock.service.d.ts +1 -1
  159. package/{dist → src/lib}/mock/user.mock.service.d.ts +0 -0
  160. package/{dist → src/lib}/mock/vault.mock.service.d.ts +1 -1
  161. package/{dist → src/lib}/notification.interface.d.ts +0 -0
  162. package/{dist → src/lib}/notification.service.d.ts +1 -1
  163. package/{dist → src/lib}/proxy.service.d.ts +0 -0
  164. package/{dist → src/lib}/resource.interface.d.ts +0 -0
  165. package/{dist → src/lib}/schema.interface.d.ts +0 -0
  166. package/{dist → src/lib}/secret.interface.d.ts +0 -0
  167. package/{dist → src/lib}/secret.service.d.ts +0 -0
  168. package/{dist → src/lib}/storage.interface.d.ts +0 -0
  169. package/{dist → src/lib}/task.interface.d.ts +0 -0
  170. package/{dist → src/lib}/task.service.d.ts +0 -0
  171. package/{dist → src/lib}/timeseries.interface.d.ts +0 -0
  172. package/{dist → src/lib}/timeseries.service.d.ts +0 -0
  173. package/{dist → src/lib}/token-set.d.ts +0 -0
  174. package/{dist → src/lib}/trash.service.d.ts +0 -0
  175. package/{dist → src/lib}/user-settings.interface.d.ts +0 -0
  176. package/{dist → src/lib}/user.service.d.ts +0 -0
  177. package/{dist → src/lib}/vault.interface.d.ts +0 -0
  178. package/{dist → src/lib}/vault.service.d.ts +1 -1
@@ -0,0 +1,179 @@
1
+ import { stringify } from 'querystring';
2
+ import axios from 'axios';
3
+ import EventSource from 'eventsource';
4
+ import { CompactSign, decodeJwt } from 'jose';
5
+ import { Queue } from './Queue';
6
+ import { TokenSet } from './token-set';
7
+ export class HttpClient {
8
+ constructor(baseURL, authBaseURL, realm, clientId, clientSecret, tokenSubject) {
9
+ this.baseURL = baseURL;
10
+ this.authBaseURL = authBaseURL;
11
+ this.realm = realm;
12
+ this.clientId = clientId;
13
+ this.clientSecret = clientSecret;
14
+ this.tokenSubject = tokenSubject;
15
+ this.discoveredIssuers = new Map();
16
+ this.eventSourcesMap = new Map();
17
+ this.getQueueStats = () => this.requestQueue?.getStats();
18
+ this.delete = (url, config) => this.request('DELETE', url, config);
19
+ this.get = (url, config) => this.request('GET', url, config);
20
+ this.post = (url, data, config) => this.request('POST', url, config, data);
21
+ this.put = (url, data, config) => this.request('PUT', url, config, data);
22
+ this.request = (method, url, config = {}, data) => {
23
+ return this.requestQueue.add(() => new Promise((resolve, reject) => {
24
+ const tokenP = config.token ? Promise.resolve(config.token) : this.getAccessToken();
25
+ tokenP
26
+ .then((token) => {
27
+ const headers = { Authorization: `Bearer ${token}`, ...config.headers };
28
+ return this.axiosInstance.request({ ...config, headers, method, url, data });
29
+ })
30
+ .then((response) => resolve(response.data))
31
+ .catch(reject);
32
+ }));
33
+ };
34
+ this.getAccessToken = async (forceRefresh = false) => {
35
+ let accessToken;
36
+ if (forceRefresh || !this.tokenSet || this.tokenSet.isExpired()) {
37
+ if (this.tokenSet?.provided) {
38
+ throw new Error('provided token is expired and cannot be refreshed, provide a new token.');
39
+ }
40
+ this.tokenSet = await this.requestAccessToken();
41
+ accessToken = this.tokenSet.accessToken;
42
+ }
43
+ else {
44
+ accessToken = this.tokenSet.accessToken;
45
+ }
46
+ if (this.tokenSubject) {
47
+ if (forceRefresh || !this.exchangedTokenSet || this.exchangedTokenSet.isExpired()) {
48
+ this.exchangedTokenSet = await this.exchangeAccessToken(accessToken);
49
+ }
50
+ return this.exchangedTokenSet.accessToken;
51
+ }
52
+ else {
53
+ return accessToken;
54
+ }
55
+ };
56
+ this.axiosInstance = axios.create({ baseURL, timeout: 60000 });
57
+ this.authAxiosInstance = axios.create({ baseURL: authBaseURL || baseURL, timeout: 10000 });
58
+ this.requestQueue = new Queue({ concurrency: 1, timeout: 70000, throwOnTimeout: true });
59
+ }
60
+ async addEventSource(url, listener, errorListener, options = {}) {
61
+ const id = generateUUID();
62
+ const errListener = errorListener
63
+ ? errorListener
64
+ : (event) => {
65
+ throw new Error(JSON.stringify(event, null, 2));
66
+ };
67
+ const token = options.token ? options.token : await this.getAccessToken();
68
+ const es = new EventSource(`${this.baseURL}${url}`, {
69
+ headers: { authorization: 'Bearer ' + token },
70
+ });
71
+ es.addEventListener('message', listener);
72
+ es.addEventListener('error', errListener);
73
+ // the listeners have to be saved otherwise they cannot be removed
74
+ this.eventSourcesMap.set(id, { eventSource: es, listener, errListener });
75
+ return id;
76
+ }
77
+ destroyEventSource(id) {
78
+ if (!this.eventSourcesMap.has(id)) {
79
+ return;
80
+ }
81
+ const es = this.eventSourcesMap.get(id);
82
+ // close and unbind listeners so that the process quits cleanly
83
+ es.eventSource.close();
84
+ es.eventSource.removeEventListener('message', es.listener);
85
+ es.eventSource.removeEventListener('error', es.errListener);
86
+ this.eventSourcesMap.delete(id);
87
+ }
88
+ destroyAllEventSources() {
89
+ for (const key of this.eventSourcesMap.keys()) {
90
+ this.destroyEventSource(key);
91
+ }
92
+ }
93
+ validateIssuer(issuer) {
94
+ if (!issuer.issuer ||
95
+ !issuer.grant_types_supported?.includes('client_credentials') ||
96
+ !issuer.token_endpoint_auth_methods_supported?.includes('client_secret_jwt')) {
97
+ throw new Error('Issuer does not support client_secret_jwt');
98
+ }
99
+ return issuer;
100
+ }
101
+ async discoverIssuer(uri) {
102
+ if (this.discoveredIssuers.has(uri)) {
103
+ return this.discoveredIssuers.get(uri);
104
+ }
105
+ const wellKnownUri = `${uri}/.well-known/openid-configuration`;
106
+ const issuerResponse = await this.authAxiosInstance.get(wellKnownUri, {
107
+ responseType: 'json',
108
+ headers: { Accept: 'application/json' },
109
+ });
110
+ const validIssuer = this.validateIssuer(issuerResponse.data);
111
+ this.discoveredIssuers.set(uri, validIssuer);
112
+ return validIssuer;
113
+ }
114
+ async requestAccessToken(additionalOpts = {}) {
115
+ const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
116
+ const timestamp = Date.now() / 1000;
117
+ const audience = [...new Set([issuer.issuer, issuer.token_endpoint].filter(Boolean))];
118
+ const assertionPayload = {
119
+ iat: timestamp,
120
+ exp: timestamp + 60,
121
+ jti: generateUUID(),
122
+ iss: this.clientId,
123
+ sub: this.clientId,
124
+ aud: audience,
125
+ };
126
+ const supportedAlgos = issuer.token_endpoint_auth_signing_alg_values_supported;
127
+ const alg = issuer.token_endpoint_auth_signing_alg ??
128
+ (Array.isArray(supportedAlgos) && supportedAlgos.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg)));
129
+ if (!alg) {
130
+ throw new Error('Issuer has to support HS256, HS384 or HS512');
131
+ }
132
+ const assertion = await new CompactSign(Buffer.from(JSON.stringify(assertionPayload)))
133
+ .setProtectedHeader({ alg })
134
+ .sign(new TextEncoder().encode(this.clientSecret));
135
+ const opts = {
136
+ client_id: this.clientId,
137
+ client_assertion: assertion,
138
+ client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
139
+ grant_type: 'client_credentials',
140
+ ...additionalOpts,
141
+ };
142
+ const authResponse = await this.authAxiosInstance.post(issuer.token_endpoint, stringify(opts), {
143
+ headers: { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' },
144
+ });
145
+ if (authResponse?.data?.access_token && authResponse.data.expires_in) {
146
+ return new TokenSet(authResponse.data.access_token, authResponse.data.expires_in);
147
+ }
148
+ else {
149
+ throw new Error('Invalid access token received');
150
+ }
151
+ }
152
+ async exchangeAccessToken(accessToken) {
153
+ if (!accessToken || !this.tokenSubject) {
154
+ throw new Error('Could not exchange access token');
155
+ }
156
+ const opts = {
157
+ grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
158
+ subject_token: accessToken,
159
+ audience: this.clientId,
160
+ requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',
161
+ requested_subject: this.tokenSubject,
162
+ };
163
+ return this.requestAccessToken(opts);
164
+ }
165
+ async provideExternalToken(token) {
166
+ const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
167
+ const { iss: providedIssuer, exp } = decodeJwt(token);
168
+ if (issuer.issuer !== providedIssuer) {
169
+ throw new Error(`Provided token is not issued by currently configured issuer. Provided token issued by ${providedIssuer}, but ${issuer.issuer} is configured.`);
170
+ }
171
+ this.tokenSet = new TokenSet(token, exp - Date.now() / 1000, true);
172
+ }
173
+ }
174
+ function generateUUID() {
175
+ if (typeof globalThis.crypto?.randomUUID === 'function') {
176
+ return globalThis.crypto.randomUUID();
177
+ }
178
+ throw new Error('randomUUID() not available in this environment. Please upgrade to Node 20+ or a modern browser.');
179
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LabelService = void 0;
4
- const data_service_1 = require("./data.service");
5
- class LabelService extends data_service_1.DataService {
1
+ import { DataService } from './data.service';
2
+ export class LabelService extends DataService {
6
3
  constructor(httpClient) {
7
4
  super(httpClient, '/labels');
8
5
  }
@@ -16,4 +13,3 @@ class LabelService extends data_service_1.DataService {
16
13
  return this.httpClient.get(`${this.basePath}/count`, options);
17
14
  }
18
15
  }
19
- exports.LabelService = LabelService;
@@ -0,0 +1,7 @@
1
+ import { APIBase } from '../api-base';
2
+ export class APIBaseMock extends APIBase {
3
+ constructor(data = []) {
4
+ super(null, null);
5
+ this.data = data;
6
+ }
7
+ }
@@ -0,0 +1,199 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { readFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { AssetMockService } from './asset.mock.service';
5
+ import { AssetTypesMockService } from './assetTypes.mock.service';
6
+ import { ContentMockService } from './content.mock.service';
7
+ import { EndpointMockService } from './endpoint.mock.service';
8
+ import { EventsMockService } from './events.mock.service';
9
+ import { FlowDeploymentMockService } from './flow-deployment.mock.service';
10
+ import { FlowFunctionsMockService } from './flow-functions.mock.service';
11
+ import { FlowModulesMockService } from './flow-modules.mock.service';
12
+ import { FlowMockService } from './flow.mock.service';
13
+ import { LabelMockService } from './label.mock.service';
14
+ import { NotificationMockService } from './notification.mock.service';
15
+ import { SecretMockService } from './secret.mock.service';
16
+ import { TaskMockService } from './task.mock.service';
17
+ import { TimeseriesMockService } from './timeseries.mock.service';
18
+ import { UserMockService } from './user.mock.service';
19
+ import { VaultMockService } from './vault.mock.service';
20
+ export class MockAPI {
21
+ constructor(initData) {
22
+ this.httpClient = null;
23
+ this.proxy = null;
24
+ const { assets = [], assetRevisions = [], contents = [], endpoints = [], secrets = [], timeSeries = [], tasks = [], events = [], users, flows = [], flowRevisions = [], deployments = [], functions = [], functionRevisions = [], modules = [], diagrams = [], labels = [], vault = [], notifications = [], } = initData;
25
+ // convert init data to normal data that the services usually use
26
+ const assetTypes = assets
27
+ .map((v) => v.type)
28
+ .map((v) => {
29
+ return typeof v === 'string'
30
+ ? v
31
+ : {
32
+ ...v,
33
+ readPermissions: v.readPermissions || [],
34
+ readWritePermissions: v.readWritePermissions || [],
35
+ typeSchema: v.typeSchema ?? {},
36
+ uiSchema: v.uiSchema ?? {},
37
+ };
38
+ });
39
+ const assets1 = assets.map((v, index) => ({
40
+ ...v,
41
+ readPermissions: v.readPermissions ?? [],
42
+ readWritePermissions: v.readWritePermissions ?? [],
43
+ type: assetTypes[index],
44
+ }));
45
+ const assetRevisions1 = assetRevisions.map((v, index) => ({
46
+ ...v,
47
+ readPermissions: v.readPermissions ?? [],
48
+ readWritePermissions: v.readWritePermissions ?? [],
49
+ type: assetTypes[index],
50
+ }));
51
+ const contents1 = contents.map((v) => ({
52
+ ...v,
53
+ readPermissions: v.readPermissions ?? [],
54
+ readWritePermissions: v.readWritePermissions ?? [],
55
+ size: v.size ?? 0,
56
+ fileId: v.fileId ?? '',
57
+ mimetype: v.mimetype ?? '',
58
+ }));
59
+ const contentData = contents.map((v) => (v.data ? v.data : readFileSync(join(v.filePath, v.filename))));
60
+ const secrets1 = secrets.map((v) => ({
61
+ ...v,
62
+ readPermissions: v.readPermissions ?? [],
63
+ readWritePermissions: v.readWritePermissions ?? [],
64
+ }));
65
+ const timeSeries1 = timeSeries.map((v) => ({
66
+ ...v,
67
+ description: v.description ?? '',
68
+ readPermissions: v.readPermissions ?? [],
69
+ readWritePermissions: v.readWritePermissions ?? [],
70
+ maxBucketTimeRange: v.maxBucketTimeRange ?? 0,
71
+ maxDate: v.maxDate,
72
+ minDate: v.minDate,
73
+ autoDelData: v.autoDelData ?? new Date(),
74
+ autoDelBucket: v.autoDelBucket ?? new Date(),
75
+ }));
76
+ const timeSeriesValues = timeSeries.map((v) => v.values);
77
+ const endpoint1 = endpoints.map((v) => ({
78
+ ...v,
79
+ status: v.status,
80
+ config: v.config,
81
+ notificationCheckInterval: v.notificationCheckInterval,
82
+ notificationPauseInterval: v.notificationPauseInterval,
83
+ nbOfNotificationsBetweenPauseInterval: v.nbOfNotificationsBetweenPauseInterval,
84
+ readPermissions: v.readPermissions ?? [],
85
+ readWritePermissions: v.readWritePermissions ?? [],
86
+ }));
87
+ // TODO: ...
88
+ const tasks1 = tasks.map((v) => ({
89
+ ...v,
90
+ id: v.id,
91
+ readPermissions: v.readPermissions ?? [],
92
+ readWritePermissions: v.readWritePermissions ?? [],
93
+ subTasks: v.subTasks ?? [],
94
+ }));
95
+ const events1 = events.map((v) => ({
96
+ ...v,
97
+ readPermissions: v.readPermissions ?? [],
98
+ readWritePermissions: v.readWritePermissions ?? [],
99
+ cause: v.cause,
100
+ level: v.level,
101
+ }));
102
+ const diagrams1 = diagrams.map((v) => ({
103
+ ...v,
104
+ json: v.json ?? '',
105
+ author: 'nobody',
106
+ }));
107
+ const flows1 = flows.map((v) => ({
108
+ ...v,
109
+ readPermissions: v.readPermissions ?? [],
110
+ readWritePermissions: v.readWritePermissions ?? [],
111
+ diagram: diagrams.find((v1) => v1.flow === v.id).id,
112
+ name: `flow-${v.id}`,
113
+ deployments: v.deployments ?? [],
114
+ }));
115
+ const flowRevisions1 = flowRevisions.map((v) => ({
116
+ ...v,
117
+ readPermissions: v.readPermissions ?? [],
118
+ readWritePermissions: v.readWritePermissions ?? [],
119
+ diagram: diagrams.find((v1) => v1.flow === v.originalId).id,
120
+ name: `flow-${v.id}`,
121
+ deployments: v.deployments ?? [],
122
+ }));
123
+ const deployments1 = deployments.map((v) => ({
124
+ ...v,
125
+ readPermissions: v.readPermissions ?? [],
126
+ readWritePermissions: v.readWritePermissions ?? [],
127
+ diagram: v.diagram ?? '',
128
+ artifact: v.artifact ?? null,
129
+ flowModel: v.flowModel ?? { connections: [], elements: [] },
130
+ desiredStatus: 'running',
131
+ actualStatus: 'generating queued',
132
+ target: 'executor',
133
+ name: `deployment-${v.id}`,
134
+ }));
135
+ const functions1 = functions.map((v) => ({
136
+ ...v,
137
+ category: 'task',
138
+ readPermissions: v.readPermissions ?? [],
139
+ readWritePermissions: v.readWritePermissions ?? [],
140
+ author: 'nobody',
141
+ }));
142
+ const functionRevisions1 = functionRevisions.map((v) => ({
143
+ ...v,
144
+ category: 'task',
145
+ readPermissions: v.readPermissions ?? [],
146
+ readWritePermissions: v.readWritePermissions ?? [],
147
+ author: 'nobody',
148
+ }));
149
+ const modules1 = modules.map((v, index) => ({
150
+ ...v,
151
+ artifacts: modules[index].artifacts.map((art) => ({
152
+ ...art,
153
+ version: '0.0.0',
154
+ id: randomUUID(),
155
+ mimetype: '',
156
+ size: 0,
157
+ createdAt: '' + Date.now(),
158
+ })) ?? [],
159
+ author: 'nobody',
160
+ functions: v.functions ?? [],
161
+ readPermissions: v.readPermissions ?? [],
162
+ readWritePermissions: v.readWritePermissions ?? [],
163
+ }));
164
+ const labels1 = labels.map((v) => ({
165
+ ...v,
166
+ color: v.color ?? '',
167
+ description: v.description ?? '',
168
+ readPermissions: v.readPermissions ?? [],
169
+ readWritePermissions: v.readWritePermissions ?? [],
170
+ }));
171
+ const vaultSecrets1 = vault.map((v) => ({
172
+ ...v,
173
+ readPermissions: v.readPermissions ?? [],
174
+ readWritePermissions: v.readWritePermissions ?? [],
175
+ }));
176
+ const notifications1 = notifications.map((v) => ({
177
+ ...v,
178
+ link: v.link ?? '',
179
+ description: v.description ?? '',
180
+ read: v.read ?? false,
181
+ }));
182
+ this.assets = new AssetMockService(this, assets1, assetRevisions1);
183
+ this.assetTypes = new AssetTypesMockService(assetTypes, []);
184
+ this.contents = new ContentMockService(contents1, contentData);
185
+ this.endpoints = new EndpointMockService(endpoint1);
186
+ this.secrets = new SecretMockService(secrets1);
187
+ this.timeSeries = new TimeseriesMockService(timeSeries1, timeSeriesValues);
188
+ this.tasks = new TaskMockService(tasks1);
189
+ this.events = new EventsMockService(events1);
190
+ this.users = new UserMockService(users);
191
+ this.flows = new FlowMockService(flows1, diagrams1, flowRevisions1);
192
+ this.flowDeployments = new FlowDeploymentMockService(deployments1, this);
193
+ this.flowFunctions = new FlowFunctionsMockService(functions1, functionRevisions1);
194
+ this.flowModules = new FlowModulesMockService(modules1);
195
+ this.labels = new LabelMockService(labels1);
196
+ this.vault = new VaultMockService(vaultSecrets1);
197
+ this.notifications = new NotificationMockService(notifications1);
198
+ }
199
+ }
@@ -1,17 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AssetMockService = void 0;
4
- const tslib_1 = require("tslib");
5
- const ts_mixer_1 = require("ts-mixer");
6
- const api_base_mock_1 = require("./api-base.mock");
7
- const data_mock_service_1 = require("./data.mock.service");
8
- const trash_mock_service_1 = require("./trash.mock.service");
9
- let BaseService = class BaseService extends api_base_mock_1.APIBaseMock {
1
+ import { __decorate } from "tslib";
2
+ import { mix } from 'ts-mixer';
3
+ import { APIBaseMock } from './api-base.mock';
4
+ import { DataMockService } from './data.mock.service';
5
+ import { TrashMockService } from './trash.mock.service';
6
+ let BaseService = class BaseService extends APIBaseMock {
10
7
  };
11
- BaseService = tslib_1.__decorate([
12
- (0, ts_mixer_1.mix)(data_mock_service_1.DataMockService, trash_mock_service_1.TrashMockService)
8
+ BaseService = __decorate([
9
+ mix(DataMockService, TrashMockService)
13
10
  ], BaseService);
14
- class AssetMockService extends BaseService {
11
+ export class AssetMockService extends BaseService {
15
12
  constructor(api, assets, revisions) {
16
13
  super(assets);
17
14
  this.api = api;
@@ -27,12 +24,13 @@ class AssetMockService extends BaseService {
27
24
  return page;
28
25
  }
29
26
  addOne(dto) {
30
- this.revisions.push(Object.assign(Object.assign({}, dto), { originalId: dto.id }));
27
+ this.revisions.push({ ...dto, originalId: dto.id });
31
28
  return super.addOne(dto);
32
29
  }
33
30
  deleteOne(assetId, force = false) {
34
31
  const asset = this.data.find((v) => v.id === assetId);
35
- if (!(asset === null || asset === void 0 ? void 0 : asset.deletedAt) && !force) {
32
+ if (!asset?.deletedAt && !force) {
33
+ // put asset in paper bin by setting deletedAt prop
36
34
  asset.deletedAt = new Date().toISOString();
37
35
  return Promise.resolve(asset);
38
36
  }
@@ -48,42 +46,34 @@ class AssetMockService extends BaseService {
48
46
  const page = this.getAssets(params, false);
49
47
  return Promise.resolve(page);
50
48
  }
51
- updateOne(assetId, dto) {
52
- const _super = Object.create(null, {
53
- deleteOne: { get: () => super.deleteOne }
54
- });
55
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
56
- yield _super.deleteOne.call(this, assetId);
57
- const asset = yield this.addOne(dto);
58
- return Promise.resolve(asset);
59
- });
49
+ async updateOne(assetId, dto) {
50
+ await super.deleteOne(assetId);
51
+ const asset = await this.addOne(dto);
52
+ return Promise.resolve(asset);
60
53
  }
61
- addAttachment(id, form) {
62
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
63
- const asset = this.data.find((v) => v.id === id);
64
- const content = yield this.api.contents.upload(form);
65
- asset.attachments.push(content.id);
66
- return Promise.resolve(asset);
67
- });
54
+ async addAttachment(id, form) {
55
+ const asset = this.data.find((v) => v.id === id);
56
+ const content = await this.api.contents.upload(form);
57
+ asset.attachments.push(content.id);
58
+ return Promise.resolve(asset);
68
59
  }
69
- getAttachments(assetId) {
70
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
71
- const contents = yield this.api.contents.getMany();
72
- const docs = contents.docs.filter((c) => { var _a, _b; return (_b = (_a = c.assets) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, assetId); });
73
- return { docs, total: docs.length, limit: 0 };
74
- });
60
+ async getAttachments(assetId) {
61
+ const contents = await this.api.contents.getMany();
62
+ const docs = contents.docs.filter((c) => c.assets?.includes?.(assetId));
63
+ return { docs, total: docs.length, limit: 0 };
75
64
  }
76
65
  getChildren(assetId, params = {}) {
77
66
  return this.getManyFiltered({ parent: assetId }, params);
78
67
  }
79
68
  getEventLevelOverride(ids, causes) {
80
69
  const eventCausesAssets = this.data.filter((v) => v.name.startsWith('hpc-event-causes-'));
81
- return Promise.resolve(ids.reduce((acc, id) => {
82
- var _a, _b;
83
- return (Object.assign(Object.assign({}, acc), { [id]: (_b = (_a = eventCausesAssets.find((v) => v.name.includes(id))) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {} }));
84
- }, {}));
70
+ return Promise.resolve(ids.reduce((acc, id) => ({
71
+ ...acc,
72
+ [id]: eventCausesAssets.find((v) => v.name.includes(id))?.data ?? {},
73
+ }), {}));
85
74
  }
86
75
  updateEventCausesAsset(id, dto) {
76
+ // simplified id and data
87
77
  const asset = this.data.find((v) => v.id === id);
88
78
  const eventCausesAsset = this.data.find((v) => v.name === 'hpc-event-causes-' + asset.id);
89
79
  if (eventCausesAsset) {
@@ -119,4 +109,3 @@ class AssetMockService extends BaseService {
119
109
  return Promise.resolve(revisionId);
120
110
  }
121
111
  }
122
- exports.AssetMockService = AssetMockService;
@@ -1,18 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AssetTypesMockService = void 0;
4
- const tslib_1 = require("tslib");
5
- const crypto_1 = require("crypto");
6
- const ts_mixer_1 = require("ts-mixer");
7
- const api_base_mock_1 = require("./api-base.mock");
8
- const data_mock_service_1 = require("./data.mock.service");
9
- const trash_mock_service_1 = require("./trash.mock.service");
10
- let BaseService = class BaseService extends api_base_mock_1.APIBaseMock {
1
+ import { __decorate } from "tslib";
2
+ import { randomUUID } from 'crypto';
3
+ import { mix } from 'ts-mixer';
4
+ import { APIBaseMock } from './api-base.mock';
5
+ import { DataMockService } from './data.mock.service';
6
+ import { TrashMockService } from './trash.mock.service';
7
+ let BaseService = class BaseService extends APIBaseMock {
11
8
  };
12
- BaseService = tslib_1.__decorate([
13
- (0, ts_mixer_1.mix)(data_mock_service_1.DataMockService, trash_mock_service_1.TrashMockService)
9
+ BaseService = __decorate([
10
+ mix(DataMockService, TrashMockService)
14
11
  ], BaseService);
15
- class AssetTypesMockService extends BaseService {
12
+ export class AssetTypesMockService extends BaseService {
16
13
  constructor(assetTypes, revisions) {
17
14
  const defaultTyp = {
18
15
  name: 'defaultType',
@@ -21,7 +18,7 @@ class AssetTypesMockService extends BaseService {
21
18
  typeSchema: { type: 'object' },
22
19
  uiSchema: {},
23
20
  };
24
- const types = assetTypes.map((type) => (typeof type === 'string' ? Object.assign({ id: type }, defaultTyp) : type));
21
+ const types = assetTypes.map((type) => (typeof type === 'string' ? { id: type, ...defaultTyp } : type));
25
22
  super(types);
26
23
  this.revisions = revisions;
27
24
  }
@@ -30,13 +27,14 @@ class AssetTypesMockService extends BaseService {
30
27
  return Promise.resolve(page);
31
28
  }
32
29
  addOne(dto) {
33
- const id = (0, crypto_1.randomUUID)();
34
- this.revisions.push(Object.assign(Object.assign({}, dto), { id, originalId: dto.id }));
30
+ const id = randomUUID();
31
+ this.revisions.push({ ...dto, id, originalId: dto.id });
35
32
  return super.addOne(dto);
36
33
  }
37
34
  deleteOne(id, force = false) {
38
35
  const assettype = this.data.find((v) => v.id === id);
39
- if (!(assettype === null || assettype === void 0 ? void 0 : assettype.deletedAt) && !force) {
36
+ if (!assettype?.deletedAt && !force) {
37
+ // put asset in paper bin by setting deletedAt prop
40
38
  assettype.deletedAt = new Date().toISOString();
41
39
  return Promise.resolve(assettype);
42
40
  }
@@ -48,15 +46,10 @@ class AssetTypesMockService extends BaseService {
48
46
  });
49
47
  return super.deleteOne(id);
50
48
  }
51
- updateOne(id, dto) {
52
- const _super = Object.create(null, {
53
- deleteOne: { get: () => super.deleteOne }
54
- });
55
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
56
- yield _super.deleteOne.call(this, id);
57
- const assetType = yield this.addOne(dto);
58
- return Promise.resolve(assetType);
59
- });
49
+ async updateOne(id, dto) {
50
+ await super.deleteOne(id);
51
+ const assetType = await this.addOne(dto);
52
+ return Promise.resolve(assetType);
60
53
  }
61
54
  getRevisions(id) {
62
55
  const revisions = this.revisions.filter((revision) => revision.originalId === id);
@@ -77,4 +70,3 @@ class AssetTypesMockService extends BaseService {
77
70
  return Promise.resolve(revisionId);
78
71
  }
79
72
  }
80
- exports.AssetTypesMockService = AssetTypesMockService;