@hahnpro/hpc-api 2024.4.0-1 → 2025.2.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 (133) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +502 -6
  3. package/package.json +7 -4
  4. package/src/index.js +27 -20
  5. package/src/index.js.map +1 -0
  6. package/src/lib/Queue.js +21 -10
  7. package/src/lib/Queue.js.map +1 -0
  8. package/src/lib/api-base.js +15 -3
  9. package/src/lib/api-base.js.map +1 -0
  10. package/src/lib/api.js +53 -42
  11. package/src/lib/api.js.map +1 -0
  12. package/src/lib/asset.interface.js +6 -1
  13. package/src/lib/asset.interface.js.map +1 -0
  14. package/src/lib/asset.service.js +45 -20
  15. package/src/lib/asset.service.js.map +1 -0
  16. package/src/lib/assettypes.service.js +26 -12
  17. package/src/lib/assettypes.service.js.map +1 -0
  18. package/src/lib/content.interface.js +15 -3
  19. package/src/lib/content.interface.js.map +1 -0
  20. package/src/lib/content.service.js +62 -32
  21. package/src/lib/content.service.js.map +1 -0
  22. package/src/lib/data.interface.js +13 -1
  23. package/src/lib/data.interface.js.map +1 -0
  24. package/src/lib/data.service.js +45 -24
  25. package/src/lib/data.service.js.map +1 -0
  26. package/src/lib/endpoint.interface.js +6 -1
  27. package/src/lib/endpoint.interface.js.map +1 -0
  28. package/src/lib/endpoint.service.js +16 -4
  29. package/src/lib/endpoint.service.js.map +1 -0
  30. package/src/lib/events.interface.js +6 -1
  31. package/src/lib/events.interface.js.map +1 -0
  32. package/src/lib/events.service.js +16 -4
  33. package/src/lib/events.service.js.map +1 -0
  34. package/src/lib/flow-deployment.interface.js +6 -1
  35. package/src/lib/flow-deployment.interface.js.map +1 -0
  36. package/src/lib/flow-deployment.service.js +58 -25
  37. package/src/lib/flow-deployment.service.js.map +1 -0
  38. package/src/lib/flow-function.interface.js +6 -1
  39. package/src/lib/flow-function.interface.js.map +1 -0
  40. package/src/lib/flow-function.service.js +20 -6
  41. package/src/lib/flow-function.service.js.map +1 -0
  42. package/src/lib/flow-module.interface.js +6 -1
  43. package/src/lib/flow-module.interface.js.map +1 -0
  44. package/src/lib/flow-module.service.js +20 -6
  45. package/src/lib/flow-module.service.js.map +1 -0
  46. package/src/lib/flow.interface.js +6 -1
  47. package/src/lib/flow.interface.js.map +1 -0
  48. package/src/lib/flow.service.js +27 -13
  49. package/src/lib/flow.service.js.map +1 -0
  50. package/src/lib/http.service.js +101 -66
  51. package/src/lib/http.service.js.map +1 -0
  52. package/src/lib/label.interface.js +6 -1
  53. package/src/lib/label.interface.js.map +1 -0
  54. package/src/lib/label.service.js +17 -5
  55. package/src/lib/label.service.js.map +1 -0
  56. package/src/lib/mock/api-base.mock.js +17 -6
  57. package/src/lib/mock/api-base.mock.js.map +1 -0
  58. package/src/lib/mock/api.mock.js +204 -193
  59. package/src/lib/mock/api.mock.js.map +1 -0
  60. package/src/lib/mock/asset.mock.service.js +55 -38
  61. package/src/lib/mock/asset.mock.service.js.map +1 -0
  62. package/src/lib/mock/assetTypes.mock.service.js +45 -27
  63. package/src/lib/mock/assetTypes.mock.service.js.map +1 -0
  64. package/src/lib/mock/content.mock.service.js +45 -37
  65. package/src/lib/mock/content.mock.service.js.map +1 -0
  66. package/src/lib/mock/data.mock.service.js +49 -40
  67. package/src/lib/mock/data.mock.service.js.map +1 -0
  68. package/src/lib/mock/endpoint.mock.service.js +17 -5
  69. package/src/lib/mock/endpoint.mock.service.js.map +1 -0
  70. package/src/lib/mock/events.mock.service.js +16 -4
  71. package/src/lib/mock/events.mock.service.js.map +1 -0
  72. package/src/lib/mock/flow-deployment.mock.service.js +81 -36
  73. package/src/lib/mock/flow-deployment.mock.service.js.map +1 -0
  74. package/src/lib/mock/flow-functions.mock.service.js +33 -20
  75. package/src/lib/mock/flow-functions.mock.service.js.map +1 -0
  76. package/src/lib/mock/flow-modules.mock.service.js +18 -6
  77. package/src/lib/mock/flow-modules.mock.service.js.map +1 -0
  78. package/src/lib/mock/flow.mock.service.js +44 -29
  79. package/src/lib/mock/flow.mock.service.js.map +1 -0
  80. package/src/lib/mock/index.js +18 -11
  81. package/src/lib/mock/index.js.map +1 -0
  82. package/src/lib/mock/label.mock.service.js +17 -5
  83. package/src/lib/mock/label.mock.service.js.map +1 -0
  84. package/src/lib/mock/notification.mock.service.js +16 -4
  85. package/src/lib/mock/notification.mock.service.js.map +1 -0
  86. package/src/lib/mock/secret.mock.service.js +24 -12
  87. package/src/lib/mock/secret.mock.service.js.map +1 -0
  88. package/src/lib/mock/task.mock.service.js +24 -12
  89. package/src/lib/mock/task.mock.service.js.map +1 -0
  90. package/src/lib/mock/timeseries.mock.service.js +88 -43
  91. package/src/lib/mock/timeseries.mock.service.js.map +1 -0
  92. package/src/lib/mock/trash.mock.service.js +28 -14
  93. package/src/lib/mock/trash.mock.service.js.map +1 -0
  94. package/src/lib/mock/user.mock.service.js +17 -6
  95. package/src/lib/mock/user.mock.service.js.map +1 -0
  96. package/src/lib/mock/vault.mock.service.js +17 -5
  97. package/src/lib/mock/vault.mock.service.js.map +1 -0
  98. package/src/lib/notification.interface.js +6 -1
  99. package/src/lib/notification.interface.js.map +1 -0
  100. package/src/lib/notification.service.js +16 -4
  101. package/src/lib/notification.service.js.map +1 -0
  102. package/src/lib/proxy.service.js +19 -7
  103. package/src/lib/proxy.service.js.map +1 -0
  104. package/src/lib/resource.interface.js +6 -1
  105. package/src/lib/resource.interface.js.map +1 -0
  106. package/src/lib/schema.interface.js +6 -1
  107. package/src/lib/schema.interface.js.map +1 -0
  108. package/src/lib/secret.interface.js +6 -1
  109. package/src/lib/secret.interface.js.map +1 -0
  110. package/src/lib/secret.service.js +23 -11
  111. package/src/lib/secret.service.js.map +1 -0
  112. package/src/lib/storage.interface.js +6 -1
  113. package/src/lib/storage.interface.js.map +1 -0
  114. package/src/lib/task.interface.js +6 -1
  115. package/src/lib/task.interface.js.map +1 -0
  116. package/src/lib/task.service.js +23 -11
  117. package/src/lib/task.service.js.map +1 -0
  118. package/src/lib/timeseries.interface.js +6 -1
  119. package/src/lib/timeseries.interface.js.map +1 -0
  120. package/src/lib/timeseries.service.js +97 -66
  121. package/src/lib/timeseries.service.js.map +1 -0
  122. package/src/lib/token-set.js +15 -3
  123. package/src/lib/token-set.js.map +1 -0
  124. package/src/lib/trash.service.js +23 -5
  125. package/src/lib/trash.service.js.map +1 -0
  126. package/src/lib/user-settings.interface.js +6 -1
  127. package/src/lib/user-settings.interface.js.map +1 -0
  128. package/src/lib/user.service.js +18 -7
  129. package/src/lib/user.service.js.map +1 -0
  130. package/src/lib/vault.interface.js +6 -1
  131. package/src/lib/vault.interface.js.map +1 -0
  132. package/src/lib/vault.service.js +23 -6
  133. package/src/lib/vault.service.js.map +1 -0
@@ -1,10 +1,21 @@
1
- import axios from 'axios';
2
- import { EventSource } from 'eventsource';
3
- import { CompactSign, decodeJwt } from 'jose';
4
- import { Queue } from './Queue';
5
- import { TokenSet } from './token-set';
6
- export class HttpClient {
7
- constructor(baseURL, authBaseURL, realm, clientId, clientSecret, tokenSubject) {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "HttpClient", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return HttpClient;
9
+ }
10
+ });
11
+ const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
12
+ const _axios = /*#__PURE__*/ _interop_require_default._(require("axios"));
13
+ const _eventsource = require("eventsource");
14
+ const _jose = require("jose");
15
+ const _Queue = require("./Queue");
16
+ const _tokenset = require("./token-set");
17
+ let HttpClient = class HttpClient {
18
+ constructor(baseURL, authBaseURL, realm, clientId, clientSecret, tokenSubject){
8
19
  this.baseURL = baseURL;
9
20
  this.authBaseURL = authBaseURL;
10
21
  this.realm = realm;
@@ -13,24 +24,30 @@ export class HttpClient {
13
24
  this.tokenSubject = tokenSubject;
14
25
  this.discoveredIssuers = new Map();
15
26
  this.eventSourcesMap = new Map();
16
- this.getQueueStats = () => this.requestQueue?.getStats();
17
- this.delete = (url, config) => this.request('DELETE', url, config);
18
- this.get = (url, config) => this.request('GET', url, config);
19
- this.post = (url, data, config) => this.request('POST', url, config, data);
20
- this.put = (url, data, config) => this.request('PUT', url, config, data);
21
- this.request = (method, url, config = {}, data) => {
22
- return this.requestQueue.add(() => new Promise((resolve, reject) => {
23
- const tokenP = config.token ? Promise.resolve(config.token) : this.getAccessToken();
24
- tokenP
25
- .then((token) => {
26
- const headers = { Authorization: `Bearer ${token}`, ...config.headers };
27
- return this.axiosInstance.request({ ...config, headers, method, url, data });
28
- })
29
- .then((response) => resolve(response.data))
30
- .catch(reject);
31
- }));
27
+ this.getQueueStats = ()=>this.requestQueue?.getStats();
28
+ this.delete = (url, config)=>this.request('DELETE', url, config);
29
+ this.get = (url, config)=>this.request('GET', url, config);
30
+ this.post = (url, data, config)=>this.request('POST', url, config, data);
31
+ this.put = (url, data, config)=>this.request('PUT', url, config, data);
32
+ this.request = (method, url, config = {}, data)=>{
33
+ return this.requestQueue.add(()=>new Promise((resolve, reject)=>{
34
+ const tokenP = config.token ? Promise.resolve(config.token) : this.getAccessToken();
35
+ tokenP.then((token)=>{
36
+ const headers = {
37
+ Authorization: `Bearer ${token}`,
38
+ ...config.headers
39
+ };
40
+ return this.axiosInstance.request({
41
+ ...config,
42
+ headers,
43
+ method,
44
+ url,
45
+ data
46
+ });
47
+ }).then((response)=>resolve(response.data)).catch(reject);
48
+ }));
32
49
  };
33
- this.getAccessToken = async (forceRefresh = false) => {
50
+ this.getAccessToken = async (forceRefresh = false)=>{
34
51
  let accessToken;
35
52
  if (forceRefresh || !this.tokenSet || this.tokenSet.isExpired()) {
36
53
  if (this.tokenSet?.provided) {
@@ -38,8 +55,7 @@ export class HttpClient {
38
55
  }
39
56
  this.tokenSet = await this.requestAccessToken();
40
57
  accessToken = this.tokenSet.accessToken;
41
- }
42
- else {
58
+ } else {
43
59
  accessToken = this.tokenSet.accessToken;
44
60
  }
45
61
  if (this.tokenSubject) {
@@ -47,36 +63,47 @@ export class HttpClient {
47
63
  this.exchangedTokenSet = await this.exchangeAccessToken(accessToken);
48
64
  }
49
65
  return this.exchangedTokenSet.accessToken;
50
- }
51
- else {
66
+ } else {
52
67
  return accessToken;
53
68
  }
54
69
  };
55
- this.axiosInstance = axios.create({ baseURL, timeout: 60000 });
56
- this.authAxiosInstance = axios.create({ baseURL: authBaseURL || baseURL, timeout: 10000 });
57
- this.requestQueue = new Queue({ concurrency: 1, timeout: 70000, throwOnTimeout: true });
70
+ this.axiosInstance = _axios.default.create({
71
+ baseURL,
72
+ timeout: 60000
73
+ });
74
+ this.authAxiosInstance = _axios.default.create({
75
+ baseURL: authBaseURL || baseURL,
76
+ timeout: 10000
77
+ });
78
+ this.requestQueue = new _Queue.Queue({
79
+ concurrency: 1,
80
+ timeout: 70000,
81
+ throwOnTimeout: true
82
+ });
58
83
  }
59
84
  async addEventSource(url, listener, errorListener, options = {}) {
60
85
  const id = generateUUID();
61
- const errListener = errorListener
62
- ? errorListener
63
- : (event) => {
64
- throw new Error(JSON.stringify(event, null, 2));
65
- };
86
+ const errListener = errorListener ? errorListener : (event)=>{
87
+ throw new Error(JSON.stringify(event, null, 2));
88
+ };
66
89
  const token = options.token ? options.token : await this.getAccessToken();
67
- const es = new EventSource(`${this.baseURL}${url}`, {
68
- fetch: (input, init) => fetch(input, {
69
- ...init,
70
- headers: {
71
- ...init.headers,
72
- Authorization: 'Bearer ' + token,
73
- },
74
- }),
90
+ const es = new _eventsource.EventSource(`${this.baseURL}${url}`, {
91
+ fetch: (input, init)=>fetch(input, {
92
+ ...init,
93
+ headers: {
94
+ ...init.headers,
95
+ Authorization: 'Bearer ' + token
96
+ }
97
+ })
75
98
  });
76
99
  es.addEventListener('message', listener);
77
100
  es.addEventListener('error', errListener);
78
101
  // the listeners have to be saved otherwise they cannot be removed
79
- this.eventSourcesMap.set(id, { eventSource: es, listener, errListener });
102
+ this.eventSourcesMap.set(id, {
103
+ eventSource: es,
104
+ listener,
105
+ errListener
106
+ });
80
107
  return id;
81
108
  }
82
109
  destroyEventSource(id) {
@@ -91,14 +118,12 @@ export class HttpClient {
91
118
  this.eventSourcesMap.delete(id);
92
119
  }
93
120
  destroyAllEventSources() {
94
- for (const key of this.eventSourcesMap.keys()) {
121
+ for (const key of this.eventSourcesMap.keys()){
95
122
  this.destroyEventSource(key);
96
123
  }
97
124
  }
98
125
  validateIssuer(issuer) {
99
- if (!issuer.issuer ||
100
- !issuer.grant_types_supported?.includes('client_credentials') ||
101
- !issuer.token_endpoint_auth_methods_supported?.includes('client_secret_jwt')) {
126
+ if (!issuer.issuer || !issuer.grant_types_supported?.includes('client_credentials') || !issuer.token_endpoint_auth_methods_supported?.includes('client_secret_jwt')) {
102
127
  throw new Error('Issuer does not support client_secret_jwt');
103
128
  }
104
129
  return issuer;
@@ -110,7 +135,9 @@ export class HttpClient {
110
135
  const wellKnownUri = `${uri}/.well-known/openid-configuration`;
111
136
  const issuerResponse = await this.authAxiosInstance.get(wellKnownUri, {
112
137
  responseType: 'json',
113
- headers: { Accept: 'application/json' },
138
+ headers: {
139
+ Accept: 'application/json'
140
+ }
114
141
  });
115
142
  const validIssuer = this.validateIssuer(issuerResponse.data);
116
143
  this.discoveredIssuers.set(uri, validIssuer);
@@ -119,38 +146,44 @@ export class HttpClient {
119
146
  async requestAccessToken(additionalOpts = {}) {
120
147
  const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
121
148
  const timestamp = Date.now() / 1000;
122
- const audience = [...new Set([issuer.issuer, issuer.token_endpoint].filter(Boolean))];
149
+ const audience = [
150
+ ...new Set([
151
+ issuer.issuer,
152
+ issuer.token_endpoint
153
+ ].filter(Boolean))
154
+ ];
123
155
  const assertionPayload = {
124
156
  iat: timestamp,
125
157
  exp: timestamp + 60,
126
158
  jti: generateUUID(),
127
159
  iss: this.clientId,
128
160
  sub: this.clientId,
129
- aud: audience,
161
+ aud: audience
130
162
  };
131
163
  const supportedAlgos = issuer.token_endpoint_auth_signing_alg_values_supported;
132
- const alg = issuer.token_endpoint_auth_signing_alg ??
133
- (Array.isArray(supportedAlgos) && supportedAlgos.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg)));
164
+ const alg = issuer.token_endpoint_auth_signing_alg ?? (Array.isArray(supportedAlgos) && supportedAlgos.find((signAlg)=>/^HS(?:256|384|512)/.test(signAlg)));
134
165
  if (!alg) {
135
166
  throw new Error('Issuer has to support HS256, HS384 or HS512');
136
167
  }
137
- const assertion = await new CompactSign(Buffer.from(JSON.stringify(assertionPayload)))
138
- .setProtectedHeader({ alg })
139
- .sign(new TextEncoder().encode(this.clientSecret));
168
+ const assertion = await new _jose.CompactSign(Buffer.from(JSON.stringify(assertionPayload))).setProtectedHeader({
169
+ alg
170
+ }).sign(new TextEncoder().encode(this.clientSecret));
140
171
  const opts = {
141
172
  client_id: this.clientId,
142
173
  client_assertion: assertion,
143
174
  client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
144
175
  grant_type: 'client_credentials',
145
- ...additionalOpts,
176
+ ...additionalOpts
146
177
  };
147
178
  const authResponse = await this.authAxiosInstance.post(issuer.token_endpoint, new URLSearchParams(opts).toString(), {
148
- headers: { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' },
179
+ headers: {
180
+ Accept: 'application/json',
181
+ 'Content-Type': 'application/x-www-form-urlencoded'
182
+ }
149
183
  });
150
184
  if (authResponse?.data?.access_token && authResponse.data.expires_in) {
151
- return new TokenSet(authResponse.data.access_token, authResponse.data.expires_in);
152
- }
153
- else {
185
+ return new _tokenset.TokenSet(authResponse.data.access_token, authResponse.data.expires_in);
186
+ } else {
154
187
  throw new Error('Invalid access token received');
155
188
  }
156
189
  }
@@ -163,22 +196,24 @@ export class HttpClient {
163
196
  subject_token: accessToken,
164
197
  audience: this.clientId,
165
198
  requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',
166
- requested_subject: this.tokenSubject,
199
+ requested_subject: this.tokenSubject
167
200
  };
168
201
  return this.requestAccessToken(opts);
169
202
  }
170
203
  async provideExternalToken(token) {
171
204
  const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
172
- const { iss: providedIssuer, exp } = decodeJwt(token);
205
+ const { iss: providedIssuer, exp } = (0, _jose.decodeJwt)(token);
173
206
  if (issuer.issuer !== providedIssuer) {
174
207
  throw new Error(`Provided token is not issued by currently configured issuer. Provided token issued by ${providedIssuer}, but ${issuer.issuer} is configured.`);
175
208
  }
176
- this.tokenSet = new TokenSet(token, exp - Date.now() / 1000, true);
209
+ this.tokenSet = new _tokenset.TokenSet(token, exp - Date.now() / 1000, true);
177
210
  }
178
- }
211
+ };
179
212
  function generateUUID() {
180
213
  if (typeof globalThis.crypto?.randomUUID === 'function') {
181
214
  return globalThis.crypto.randomUUID();
182
215
  }
183
216
  throw new Error('randomUUID() not available in this environment. Please upgrade to Node 20+ or a modern browser.');
184
217
  }
218
+
219
+ //# sourceMappingURL=http.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../lib/hpc-api/src/lib/http.service.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, Method, RawAxiosRequestHeaders } from 'axios';\nimport { EventSource } from 'eventsource';\nimport { CompactSign, decodeJwt } from 'jose';\n\nimport { Queue } from './Queue';\nimport { TokenSet } from './token-set';\n\nexport type TokenOption = { token?: string };\nexport type Config = TokenOption & AxiosRequestConfig;\n\nexport class HttpClient {\n protected readonly axiosInstance: AxiosInstance;\n protected readonly authAxiosInstance: AxiosInstance;\n protected readonly requestQueue: Queue;\n private tokenSet: TokenSet;\n private exchangedTokenSet: TokenSet;\n private discoveredIssuers = new Map<string, Issuer>();\n\n public eventSourcesMap: Map<\n string,\n { eventSource: EventSource; listener: (event: MessageEvent) => void; errListener: (event: MessageEvent) => void }\n > = new Map();\n\n constructor(\n protected readonly baseURL: string,\n protected readonly authBaseURL: string,\n protected readonly realm: string,\n protected readonly clientId: string,\n protected readonly clientSecret: string,\n protected readonly tokenSubject?: string,\n ) {\n this.axiosInstance = axios.create({ baseURL, timeout: 60000 });\n this.authAxiosInstance = axios.create({ baseURL: authBaseURL || baseURL, timeout: 10000 });\n this.requestQueue = new Queue({ concurrency: 1, timeout: 70000, throwOnTimeout: true });\n }\n\n public getQueueStats = () => this.requestQueue?.getStats();\n\n public delete = <T>(url: string, config?: Config) => this.request<T>('DELETE', url, config);\n public get = <T>(url: string, config?: Config) => this.request<T>('GET', url, config);\n public post = <T>(url: string, data: any, config?: Config) => this.request<T>('POST', url, config, data);\n public put = <T>(url: string, data: any, config?: Config) => this.request<T>('PUT', url, config, data);\n\n protected request = <T>(method: Method, url: string, config: Config = {}, data?): Promise<T> => {\n return this.requestQueue.add(\n () =>\n new Promise((resolve, reject) => {\n const tokenP = config.token ? Promise.resolve(config.token) : this.getAccessToken();\n tokenP\n .then((token) => {\n const headers = { Authorization: `Bearer ${token}`, ...config.headers } as RawAxiosRequestHeaders;\n return this.axiosInstance.request<T>({ ...config, headers, method, url, data });\n })\n .then((response) => resolve(response.data))\n .catch(reject);\n }),\n ) as Promise<T>;\n };\n\n public async addEventSource(\n url: string,\n listener: (event: MessageEvent) => void,\n errorListener?: (event: MessageEvent) => void,\n options: TokenOption = {},\n ) {\n const id = generateUUID();\n const errListener = errorListener\n ? errorListener\n : (event) => {\n throw new Error(JSON.stringify(event, null, 2));\n };\n const token = options.token ? options.token : await this.getAccessToken();\n const es = new EventSource(`${this.baseURL}${url}`, {\n fetch: (input, init) =>\n fetch(input, {\n ...init,\n headers: {\n ...init.headers,\n Authorization: 'Bearer ' + token,\n },\n }),\n });\n es.addEventListener('message', listener);\n es.addEventListener('error', errListener);\n // the listeners have to be saved otherwise they cannot be removed\n this.eventSourcesMap.set(id, { eventSource: es, listener, errListener });\n return id;\n }\n\n public destroyEventSource(id: string) {\n if (!this.eventSourcesMap.has(id)) {\n return;\n }\n const es = this.eventSourcesMap.get(id);\n // close and unbind listeners so that the process quits cleanly\n es.eventSource.close();\n es.eventSource.removeEventListener('message', es.listener);\n es.eventSource.removeEventListener('error', es.errListener);\n this.eventSourcesMap.delete(id);\n }\n\n public destroyAllEventSources() {\n for (const key of this.eventSourcesMap.keys()) {\n this.destroyEventSource(key);\n }\n }\n\n public getAccessToken = async (forceRefresh = false): Promise<string> => {\n let accessToken: string;\n if (forceRefresh || !this.tokenSet || this.tokenSet.isExpired()) {\n if (this.tokenSet?.provided) {\n throw new Error('provided token is expired and cannot be refreshed, provide a new token.');\n }\n this.tokenSet = await this.requestAccessToken();\n accessToken = this.tokenSet.accessToken;\n } else {\n accessToken = this.tokenSet.accessToken;\n }\n\n if (this.tokenSubject) {\n if (forceRefresh || !this.exchangedTokenSet || this.exchangedTokenSet.isExpired()) {\n this.exchangedTokenSet = await this.exchangeAccessToken(accessToken);\n }\n return this.exchangedTokenSet.accessToken;\n } else {\n return accessToken;\n }\n };\n\n protected validateIssuer(issuer: Issuer): Issuer {\n if (\n !issuer.issuer ||\n !issuer.grant_types_supported?.includes('client_credentials') ||\n !issuer.token_endpoint_auth_methods_supported?.includes('client_secret_jwt')\n ) {\n throw new Error('Issuer does not support client_secret_jwt');\n }\n\n return issuer;\n }\n\n protected async discoverIssuer(uri: string): Promise<Issuer> {\n if (this.discoveredIssuers.has(uri)) {\n return this.discoveredIssuers.get(uri);\n }\n const wellKnownUri = `${uri}/.well-known/openid-configuration`;\n const issuerResponse = await this.authAxiosInstance.get(wellKnownUri, {\n responseType: 'json',\n headers: { Accept: 'application/json' },\n });\n const validIssuer = this.validateIssuer(issuerResponse.data);\n this.discoveredIssuers.set(uri, validIssuer);\n return validIssuer;\n }\n\n protected async requestAccessToken(additionalOpts = {}): Promise<TokenSet> {\n const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);\n\n const timestamp = Date.now() / 1000;\n const audience = [...new Set([issuer.issuer, issuer.token_endpoint].filter(Boolean))];\n\n const assertionPayload = {\n iat: timestamp,\n exp: timestamp + 60,\n jti: generateUUID(),\n iss: this.clientId,\n sub: this.clientId,\n aud: audience,\n };\n\n const supportedAlgos = issuer.token_endpoint_auth_signing_alg_values_supported;\n const alg =\n issuer.token_endpoint_auth_signing_alg ??\n (Array.isArray(supportedAlgos) && supportedAlgos.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg)));\n\n if (!alg) {\n throw new Error('Issuer has to support HS256, HS384 or HS512');\n }\n\n const assertion = await new CompactSign(Buffer.from(JSON.stringify(assertionPayload)))\n .setProtectedHeader({ alg })\n .sign(new TextEncoder().encode(this.clientSecret));\n\n const opts = {\n client_id: this.clientId,\n client_assertion: assertion,\n client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n grant_type: 'client_credentials',\n ...additionalOpts,\n };\n const authResponse = await this.authAxiosInstance.post(issuer.token_endpoint, new URLSearchParams(opts).toString(), {\n headers: { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n\n if (authResponse?.data?.access_token && authResponse.data.expires_in) {\n return new TokenSet(authResponse.data.access_token, authResponse.data.expires_in);\n } else {\n throw new Error('Invalid access token received');\n }\n }\n\n protected async exchangeAccessToken(accessToken: string): Promise<TokenSet> {\n if (!accessToken || !this.tokenSubject) {\n throw new Error('Could not exchange access token');\n }\n\n const opts = {\n grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',\n subject_token: accessToken,\n audience: this.clientId,\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n requested_subject: this.tokenSubject,\n };\n return this.requestAccessToken(opts);\n }\n\n async provideExternalToken(token: string) {\n const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);\n\n const { iss: providedIssuer, exp } = decodeJwt(token);\n\n if (issuer.issuer !== providedIssuer) {\n throw new Error(\n `Provided token is not issued by currently configured issuer. Provided token issued by ${providedIssuer}, but ${issuer.issuer} is configured.`,\n );\n }\n\n this.tokenSet = new TokenSet(token, exp - Date.now() / 1000, true);\n }\n}\n\nfunction generateUUID(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n throw new Error('randomUUID() not available in this environment. Please upgrade to Node 20+ or a modern browser.');\n}\n\ninterface Issuer {\n issuer: string;\n token_endpoint: string;\n grant_types_supported: string[];\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg?: string;\n token_endpoint_auth_signing_alg_values_supported: string[];\n}\n"],"names":["HttpClient","constructor","baseURL","authBaseURL","realm","clientId","clientSecret","tokenSubject","discoveredIssuers","Map","eventSourcesMap","getQueueStats","requestQueue","getStats","delete","url","config","request","get","post","data","put","method","add","Promise","resolve","reject","tokenP","token","getAccessToken","then","headers","Authorization","axiosInstance","response","catch","forceRefresh","accessToken","tokenSet","isExpired","provided","Error","requestAccessToken","exchangedTokenSet","exchangeAccessToken","axios","create","timeout","authAxiosInstance","Queue","concurrency","throwOnTimeout","addEventSource","listener","errorListener","options","id","generateUUID","errListener","event","JSON","stringify","es","EventSource","fetch","input","init","addEventListener","set","eventSource","destroyEventSource","has","close","removeEventListener","destroyAllEventSources","key","keys","validateIssuer","issuer","grant_types_supported","includes","token_endpoint_auth_methods_supported","discoverIssuer","uri","wellKnownUri","issuerResponse","responseType","Accept","validIssuer","additionalOpts","timestamp","Date","now","audience","Set","token_endpoint","filter","Boolean","assertionPayload","iat","exp","jti","iss","sub","aud","supportedAlgos","token_endpoint_auth_signing_alg_values_supported","alg","token_endpoint_auth_signing_alg","Array","isArray","find","signAlg","test","assertion","CompactSign","Buffer","from","setProtectedHeader","sign","TextEncoder","encode","opts","client_id","client_assertion","client_assertion_type","grant_type","authResponse","URLSearchParams","toString","access_token","expires_in","TokenSet","subject_token","requested_token_type","requested_subject","provideExternalToken","providedIssuer","decodeJwt","globalThis","crypto","randomUUID"],"mappings":"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"}
@@ -1 +1,6 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=label.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../lib/hpc-api/src/lib/label.interface.ts"],"names":[],"mappings":""}
@@ -1,10 +1,20 @@
1
- import { DataService } from './data.service';
2
- export class LabelService extends DataService {
3
- constructor(httpClient) {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "LabelService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return LabelService;
9
+ }
10
+ });
11
+ const _dataservice = require("./data.service");
12
+ let LabelService = class LabelService extends _dataservice.DataService {
13
+ constructor(httpClient){
4
14
  super(httpClient, '/labels');
5
15
  }
6
16
  addMany(dtos, options = {}) {
7
- return Promise.all(dtos.map((dto) => this.addOne(dto, options)));
17
+ return Promise.all(dtos.map((dto)=>this.addOne(dto, options)));
8
18
  }
9
19
  getOneByName(name, options = {}) {
10
20
  return this.httpClient.get(`${this.basePath}/name/${name}`, options);
@@ -12,4 +22,6 @@ export class LabelService extends DataService {
12
22
  count(options = {}) {
13
23
  return this.httpClient.get(`${this.basePath}/count`, options);
14
24
  }
15
- }
25
+ };
26
+
27
+ //# sourceMappingURL=label.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../lib/hpc-api/src/lib/label.service.ts"],"sourcesContent":["import { DataService } from './data.service';\nimport { HttpClient, TokenOption } from './http.service';\nimport { Label } from './label.interface';\n\nexport class LabelService extends DataService<Label> {\n constructor(httpClient: HttpClient) {\n super(httpClient, '/labels');\n }\n\n public addMany(dtos: Label[], options: TokenOption = {}): Promise<Label[]> {\n return Promise.all(dtos.map((dto) => this.addOne(dto, options)));\n }\n\n public getOneByName(name: string, options: TokenOption = {}): Promise<Label> {\n return this.httpClient.get(`${this.basePath}/name/${name}`, options);\n }\n\n public count(options: TokenOption = {}): Promise<number> {\n return this.httpClient.get(`${this.basePath}/count`, options);\n }\n}\n"],"names":["LabelService","DataService","constructor","httpClient","addMany","dtos","options","Promise","all","map","dto","addOne","getOneByName","name","get","basePath","count"],"mappings":";;;;+BAIaA;;;eAAAA;;;6BAJe;AAIrB,IAAA,AAAMA,eAAN,MAAMA,qBAAqBC,wBAAW;IAC3CC,YAAYC,UAAsB,CAAE;QAClC,KAAK,CAACA,YAAY;IACpB;IAEOC,QAAQC,IAAa,EAAEC,UAAuB,CAAC,CAAC,EAAoB;QACzE,OAAOC,QAAQC,GAAG,CAACH,KAAKI,GAAG,CAAC,CAACC,MAAQ,IAAI,CAACC,MAAM,CAACD,KAAKJ;IACxD;IAEOM,aAAaC,IAAY,EAAEP,UAAuB,CAAC,CAAC,EAAkB;QAC3E,OAAO,IAAI,CAACH,UAAU,CAACW,GAAG,CAAC,GAAG,IAAI,CAACC,QAAQ,CAAC,MAAM,EAAEF,MAAM,EAAEP;IAC9D;IAEOU,MAAMV,UAAuB,CAAC,CAAC,EAAmB;QACvD,OAAO,IAAI,CAACH,UAAU,CAACW,GAAG,CAAC,GAAG,IAAI,CAACC,QAAQ,CAAC,MAAM,CAAC,EAAET;IACvD;AACF"}
@@ -1,7 +1,18 @@
1
- import { APIBase } from '../api-base';
2
- export class APIBaseMock extends APIBase {
3
- constructor(data = []) {
4
- super(null, null);
5
- this.data = data;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "APIBaseMock", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return APIBaseMock;
6
9
  }
7
- }
10
+ });
11
+ const _apibase = require("../api-base");
12
+ let APIBaseMock = class APIBaseMock extends _apibase.APIBase {
13
+ constructor(data = []){
14
+ super(null, null), this.data = data;
15
+ }
16
+ };
17
+
18
+ //# sourceMappingURL=api-base.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/api-base.mock.ts"],"sourcesContent":["import { APIBase } from '../api-base';\n\nexport class APIBaseMock<T> extends APIBase {\n constructor(public data: T[] = []) {\n super(null, null);\n }\n}\n"],"names":["APIBaseMock","APIBase","constructor","data"],"mappings":";;;;+BAEaA;;;eAAAA;;;yBAFW;AAEjB,IAAA,AAAMA,cAAN,MAAMA,oBAAuBC,gBAAO;IACzCC,YAAY,AAAOC,OAAY,EAAE,CAAE;QACjC,KAAK,CAAC,MAAM,YADKA,OAAAA;IAEnB;AACF"}