@hahnpro/hpc-api 2024.4.0-0 → 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 (134) hide show
  1. package/CHANGELOG.md +383 -0
  2. package/README.md +507 -0
  3. package/package.json +9 -7
  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.d.ts +1 -1
  51. package/src/lib/http.service.js +102 -62
  52. package/src/lib/http.service.js.map +1 -0
  53. package/src/lib/label.interface.js +6 -1
  54. package/src/lib/label.interface.js.map +1 -0
  55. package/src/lib/label.service.js +17 -5
  56. package/src/lib/label.service.js.map +1 -0
  57. package/src/lib/mock/api-base.mock.js +17 -6
  58. package/src/lib/mock/api-base.mock.js.map +1 -0
  59. package/src/lib/mock/api.mock.js +204 -193
  60. package/src/lib/mock/api.mock.js.map +1 -0
  61. package/src/lib/mock/asset.mock.service.js +55 -38
  62. package/src/lib/mock/asset.mock.service.js.map +1 -0
  63. package/src/lib/mock/assetTypes.mock.service.js +45 -27
  64. package/src/lib/mock/assetTypes.mock.service.js.map +1 -0
  65. package/src/lib/mock/content.mock.service.js +45 -37
  66. package/src/lib/mock/content.mock.service.js.map +1 -0
  67. package/src/lib/mock/data.mock.service.js +49 -40
  68. package/src/lib/mock/data.mock.service.js.map +1 -0
  69. package/src/lib/mock/endpoint.mock.service.js +17 -5
  70. package/src/lib/mock/endpoint.mock.service.js.map +1 -0
  71. package/src/lib/mock/events.mock.service.js +16 -4
  72. package/src/lib/mock/events.mock.service.js.map +1 -0
  73. package/src/lib/mock/flow-deployment.mock.service.js +81 -36
  74. package/src/lib/mock/flow-deployment.mock.service.js.map +1 -0
  75. package/src/lib/mock/flow-functions.mock.service.js +33 -20
  76. package/src/lib/mock/flow-functions.mock.service.js.map +1 -0
  77. package/src/lib/mock/flow-modules.mock.service.js +18 -6
  78. package/src/lib/mock/flow-modules.mock.service.js.map +1 -0
  79. package/src/lib/mock/flow.mock.service.js +44 -29
  80. package/src/lib/mock/flow.mock.service.js.map +1 -0
  81. package/src/lib/mock/index.js +18 -11
  82. package/src/lib/mock/index.js.map +1 -0
  83. package/src/lib/mock/label.mock.service.js +17 -5
  84. package/src/lib/mock/label.mock.service.js.map +1 -0
  85. package/src/lib/mock/notification.mock.service.js +16 -4
  86. package/src/lib/mock/notification.mock.service.js.map +1 -0
  87. package/src/lib/mock/secret.mock.service.js +24 -12
  88. package/src/lib/mock/secret.mock.service.js.map +1 -0
  89. package/src/lib/mock/task.mock.service.js +24 -12
  90. package/src/lib/mock/task.mock.service.js.map +1 -0
  91. package/src/lib/mock/timeseries.mock.service.js +88 -43
  92. package/src/lib/mock/timeseries.mock.service.js.map +1 -0
  93. package/src/lib/mock/trash.mock.service.js +28 -14
  94. package/src/lib/mock/trash.mock.service.js.map +1 -0
  95. package/src/lib/mock/user.mock.service.js +17 -6
  96. package/src/lib/mock/user.mock.service.js.map +1 -0
  97. package/src/lib/mock/vault.mock.service.js +17 -5
  98. package/src/lib/mock/vault.mock.service.js.map +1 -0
  99. package/src/lib/notification.interface.js +6 -1
  100. package/src/lib/notification.interface.js.map +1 -0
  101. package/src/lib/notification.service.js +16 -4
  102. package/src/lib/notification.service.js.map +1 -0
  103. package/src/lib/proxy.service.js +19 -7
  104. package/src/lib/proxy.service.js.map +1 -0
  105. package/src/lib/resource.interface.js +6 -1
  106. package/src/lib/resource.interface.js.map +1 -0
  107. package/src/lib/schema.interface.js +6 -1
  108. package/src/lib/schema.interface.js.map +1 -0
  109. package/src/lib/secret.interface.js +6 -1
  110. package/src/lib/secret.interface.js.map +1 -0
  111. package/src/lib/secret.service.js +23 -11
  112. package/src/lib/secret.service.js.map +1 -0
  113. package/src/lib/storage.interface.js +6 -1
  114. package/src/lib/storage.interface.js.map +1 -0
  115. package/src/lib/task.interface.js +6 -1
  116. package/src/lib/task.interface.js.map +1 -0
  117. package/src/lib/task.service.js +23 -11
  118. package/src/lib/task.service.js.map +1 -0
  119. package/src/lib/timeseries.interface.js +6 -1
  120. package/src/lib/timeseries.interface.js.map +1 -0
  121. package/src/lib/timeseries.service.js +97 -66
  122. package/src/lib/timeseries.service.js.map +1 -0
  123. package/src/lib/token-set.js +15 -3
  124. package/src/lib/token-set.js.map +1 -0
  125. package/src/lib/trash.service.js +23 -5
  126. package/src/lib/trash.service.js.map +1 -0
  127. package/src/lib/user-settings.interface.js +6 -1
  128. package/src/lib/user-settings.interface.js.map +1 -0
  129. package/src/lib/user.service.js +18 -7
  130. package/src/lib/user.service.js.map +1 -0
  131. package/src/lib/vault.interface.js +6 -1
  132. package/src/lib/vault.interface.js.map +1 -0
  133. package/src/lib/vault.service.js +23 -6
  134. package/src/lib/vault.service.js.map +1 -0
@@ -1,11 +1,21 @@
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) {
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){
9
19
  this.baseURL = baseURL;
10
20
  this.authBaseURL = authBaseURL;
11
21
  this.realm = realm;
@@ -14,24 +24,30 @@ export class HttpClient {
14
24
  this.tokenSubject = tokenSubject;
15
25
  this.discoveredIssuers = new Map();
16
26
  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
- }));
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
+ }));
33
49
  };
34
- this.getAccessToken = async (forceRefresh = false) => {
50
+ this.getAccessToken = async (forceRefresh = false)=>{
35
51
  let accessToken;
36
52
  if (forceRefresh || !this.tokenSet || this.tokenSet.isExpired()) {
37
53
  if (this.tokenSet?.provided) {
@@ -39,8 +55,7 @@ export class HttpClient {
39
55
  }
40
56
  this.tokenSet = await this.requestAccessToken();
41
57
  accessToken = this.tokenSet.accessToken;
42
- }
43
- else {
58
+ } else {
44
59
  accessToken = this.tokenSet.accessToken;
45
60
  }
46
61
  if (this.tokenSubject) {
@@ -48,30 +63,47 @@ export class HttpClient {
48
63
  this.exchangedTokenSet = await this.exchangeAccessToken(accessToken);
49
64
  }
50
65
  return this.exchangedTokenSet.accessToken;
51
- }
52
- else {
66
+ } else {
53
67
  return accessToken;
54
68
  }
55
69
  };
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 });
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
+ });
59
83
  }
60
84
  async addEventSource(url, listener, errorListener, options = {}) {
61
85
  const id = generateUUID();
62
- const errListener = errorListener
63
- ? errorListener
64
- : (event) => {
65
- throw new Error(JSON.stringify(event, null, 2));
66
- };
86
+ const errListener = errorListener ? errorListener : (event)=>{
87
+ throw new Error(JSON.stringify(event, null, 2));
88
+ };
67
89
  const token = options.token ? options.token : await this.getAccessToken();
68
- const es = new EventSource(`${this.baseURL}${url}`, {
69
- headers: { authorization: 'Bearer ' + token },
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
+ })
70
98
  });
71
99
  es.addEventListener('message', listener);
72
100
  es.addEventListener('error', errListener);
73
101
  // the listeners have to be saved otherwise they cannot be removed
74
- this.eventSourcesMap.set(id, { eventSource: es, listener, errListener });
102
+ this.eventSourcesMap.set(id, {
103
+ eventSource: es,
104
+ listener,
105
+ errListener
106
+ });
75
107
  return id;
76
108
  }
77
109
  destroyEventSource(id) {
@@ -86,14 +118,12 @@ export class HttpClient {
86
118
  this.eventSourcesMap.delete(id);
87
119
  }
88
120
  destroyAllEventSources() {
89
- for (const key of this.eventSourcesMap.keys()) {
121
+ for (const key of this.eventSourcesMap.keys()){
90
122
  this.destroyEventSource(key);
91
123
  }
92
124
  }
93
125
  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')) {
126
+ if (!issuer.issuer || !issuer.grant_types_supported?.includes('client_credentials') || !issuer.token_endpoint_auth_methods_supported?.includes('client_secret_jwt')) {
97
127
  throw new Error('Issuer does not support client_secret_jwt');
98
128
  }
99
129
  return issuer;
@@ -105,7 +135,9 @@ export class HttpClient {
105
135
  const wellKnownUri = `${uri}/.well-known/openid-configuration`;
106
136
  const issuerResponse = await this.authAxiosInstance.get(wellKnownUri, {
107
137
  responseType: 'json',
108
- headers: { Accept: 'application/json' },
138
+ headers: {
139
+ Accept: 'application/json'
140
+ }
109
141
  });
110
142
  const validIssuer = this.validateIssuer(issuerResponse.data);
111
143
  this.discoveredIssuers.set(uri, validIssuer);
@@ -114,38 +146,44 @@ export class HttpClient {
114
146
  async requestAccessToken(additionalOpts = {}) {
115
147
  const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
116
148
  const timestamp = Date.now() / 1000;
117
- 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
+ ];
118
155
  const assertionPayload = {
119
156
  iat: timestamp,
120
157
  exp: timestamp + 60,
121
158
  jti: generateUUID(),
122
159
  iss: this.clientId,
123
160
  sub: this.clientId,
124
- aud: audience,
161
+ aud: audience
125
162
  };
126
163
  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)));
164
+ const alg = issuer.token_endpoint_auth_signing_alg ?? (Array.isArray(supportedAlgos) && supportedAlgos.find((signAlg)=>/^HS(?:256|384|512)/.test(signAlg)));
129
165
  if (!alg) {
130
166
  throw new Error('Issuer has to support HS256, HS384 or HS512');
131
167
  }
132
- const assertion = await new CompactSign(Buffer.from(JSON.stringify(assertionPayload)))
133
- .setProtectedHeader({ alg })
134
- .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));
135
171
  const opts = {
136
172
  client_id: this.clientId,
137
173
  client_assertion: assertion,
138
174
  client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
139
175
  grant_type: 'client_credentials',
140
- ...additionalOpts,
176
+ ...additionalOpts
141
177
  };
142
- const authResponse = await this.authAxiosInstance.post(issuer.token_endpoint, stringify(opts), {
143
- headers: { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' },
178
+ const authResponse = await this.authAxiosInstance.post(issuer.token_endpoint, new URLSearchParams(opts).toString(), {
179
+ headers: {
180
+ Accept: 'application/json',
181
+ 'Content-Type': 'application/x-www-form-urlencoded'
182
+ }
144
183
  });
145
184
  if (authResponse?.data?.access_token && authResponse.data.expires_in) {
146
- return new TokenSet(authResponse.data.access_token, authResponse.data.expires_in);
147
- }
148
- else {
185
+ return new _tokenset.TokenSet(authResponse.data.access_token, authResponse.data.expires_in);
186
+ } else {
149
187
  throw new Error('Invalid access token received');
150
188
  }
151
189
  }
@@ -158,22 +196,24 @@ export class HttpClient {
158
196
  subject_token: accessToken,
159
197
  audience: this.clientId,
160
198
  requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',
161
- requested_subject: this.tokenSubject,
199
+ requested_subject: this.tokenSubject
162
200
  };
163
201
  return this.requestAccessToken(opts);
164
202
  }
165
203
  async provideExternalToken(token) {
166
204
  const issuer = await this.discoverIssuer(`${this.authBaseURL}/realms/${this.realm}`);
167
- const { iss: providedIssuer, exp } = decodeJwt(token);
205
+ const { iss: providedIssuer, exp } = (0, _jose.decodeJwt)(token);
168
206
  if (issuer.issuer !== providedIssuer) {
169
207
  throw new Error(`Provided token is not issued by currently configured issuer. Provided token issued by ${providedIssuer}, but ${issuer.issuer} is configured.`);
170
208
  }
171
- this.tokenSet = new TokenSet(token, exp - Date.now() / 1000, true);
209
+ this.tokenSet = new _tokenset.TokenSet(token, exp - Date.now() / 1000, true);
172
210
  }
173
- }
211
+ };
174
212
  function generateUUID() {
175
213
  if (typeof globalThis.crypto?.randomUUID === 'function') {
176
214
  return globalThis.crypto.randomUUID();
177
215
  }
178
216
  throw new Error('randomUUID() not available in this environment. Please upgrade to Node 20+ or a modern browser.');
179
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"}