@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.
- package/CHANGELOG.md +383 -0
- package/README.md +507 -0
- package/package.json +9 -7
- package/src/index.js +27 -20
- package/src/index.js.map +1 -0
- package/src/lib/Queue.js +21 -10
- package/src/lib/Queue.js.map +1 -0
- package/src/lib/api-base.js +15 -3
- package/src/lib/api-base.js.map +1 -0
- package/src/lib/api.js +53 -42
- package/src/lib/api.js.map +1 -0
- package/src/lib/asset.interface.js +6 -1
- package/src/lib/asset.interface.js.map +1 -0
- package/src/lib/asset.service.js +45 -20
- package/src/lib/asset.service.js.map +1 -0
- package/src/lib/assettypes.service.js +26 -12
- package/src/lib/assettypes.service.js.map +1 -0
- package/src/lib/content.interface.js +15 -3
- package/src/lib/content.interface.js.map +1 -0
- package/src/lib/content.service.js +62 -32
- package/src/lib/content.service.js.map +1 -0
- package/src/lib/data.interface.js +13 -1
- package/src/lib/data.interface.js.map +1 -0
- package/src/lib/data.service.js +45 -24
- package/src/lib/data.service.js.map +1 -0
- package/src/lib/endpoint.interface.js +6 -1
- package/src/lib/endpoint.interface.js.map +1 -0
- package/src/lib/endpoint.service.js +16 -4
- package/src/lib/endpoint.service.js.map +1 -0
- package/src/lib/events.interface.js +6 -1
- package/src/lib/events.interface.js.map +1 -0
- package/src/lib/events.service.js +16 -4
- package/src/lib/events.service.js.map +1 -0
- package/src/lib/flow-deployment.interface.js +6 -1
- package/src/lib/flow-deployment.interface.js.map +1 -0
- package/src/lib/flow-deployment.service.js +58 -25
- package/src/lib/flow-deployment.service.js.map +1 -0
- package/src/lib/flow-function.interface.js +6 -1
- package/src/lib/flow-function.interface.js.map +1 -0
- package/src/lib/flow-function.service.js +20 -6
- package/src/lib/flow-function.service.js.map +1 -0
- package/src/lib/flow-module.interface.js +6 -1
- package/src/lib/flow-module.interface.js.map +1 -0
- package/src/lib/flow-module.service.js +20 -6
- package/src/lib/flow-module.service.js.map +1 -0
- package/src/lib/flow.interface.js +6 -1
- package/src/lib/flow.interface.js.map +1 -0
- package/src/lib/flow.service.js +27 -13
- package/src/lib/flow.service.js.map +1 -0
- package/src/lib/http.service.d.ts +1 -1
- package/src/lib/http.service.js +102 -62
- package/src/lib/http.service.js.map +1 -0
- package/src/lib/label.interface.js +6 -1
- package/src/lib/label.interface.js.map +1 -0
- package/src/lib/label.service.js +17 -5
- package/src/lib/label.service.js.map +1 -0
- package/src/lib/mock/api-base.mock.js +17 -6
- package/src/lib/mock/api-base.mock.js.map +1 -0
- package/src/lib/mock/api.mock.js +204 -193
- package/src/lib/mock/api.mock.js.map +1 -0
- package/src/lib/mock/asset.mock.service.js +55 -38
- package/src/lib/mock/asset.mock.service.js.map +1 -0
- package/src/lib/mock/assetTypes.mock.service.js +45 -27
- package/src/lib/mock/assetTypes.mock.service.js.map +1 -0
- package/src/lib/mock/content.mock.service.js +45 -37
- package/src/lib/mock/content.mock.service.js.map +1 -0
- package/src/lib/mock/data.mock.service.js +49 -40
- package/src/lib/mock/data.mock.service.js.map +1 -0
- package/src/lib/mock/endpoint.mock.service.js +17 -5
- package/src/lib/mock/endpoint.mock.service.js.map +1 -0
- package/src/lib/mock/events.mock.service.js +16 -4
- package/src/lib/mock/events.mock.service.js.map +1 -0
- package/src/lib/mock/flow-deployment.mock.service.js +81 -36
- package/src/lib/mock/flow-deployment.mock.service.js.map +1 -0
- package/src/lib/mock/flow-functions.mock.service.js +33 -20
- package/src/lib/mock/flow-functions.mock.service.js.map +1 -0
- package/src/lib/mock/flow-modules.mock.service.js +18 -6
- package/src/lib/mock/flow-modules.mock.service.js.map +1 -0
- package/src/lib/mock/flow.mock.service.js +44 -29
- package/src/lib/mock/flow.mock.service.js.map +1 -0
- package/src/lib/mock/index.js +18 -11
- package/src/lib/mock/index.js.map +1 -0
- package/src/lib/mock/label.mock.service.js +17 -5
- package/src/lib/mock/label.mock.service.js.map +1 -0
- package/src/lib/mock/notification.mock.service.js +16 -4
- package/src/lib/mock/notification.mock.service.js.map +1 -0
- package/src/lib/mock/secret.mock.service.js +24 -12
- package/src/lib/mock/secret.mock.service.js.map +1 -0
- package/src/lib/mock/task.mock.service.js +24 -12
- package/src/lib/mock/task.mock.service.js.map +1 -0
- package/src/lib/mock/timeseries.mock.service.js +88 -43
- package/src/lib/mock/timeseries.mock.service.js.map +1 -0
- package/src/lib/mock/trash.mock.service.js +28 -14
- package/src/lib/mock/trash.mock.service.js.map +1 -0
- package/src/lib/mock/user.mock.service.js +17 -6
- package/src/lib/mock/user.mock.service.js.map +1 -0
- package/src/lib/mock/vault.mock.service.js +17 -5
- package/src/lib/mock/vault.mock.service.js.map +1 -0
- package/src/lib/notification.interface.js +6 -1
- package/src/lib/notification.interface.js.map +1 -0
- package/src/lib/notification.service.js +16 -4
- package/src/lib/notification.service.js.map +1 -0
- package/src/lib/proxy.service.js +19 -7
- package/src/lib/proxy.service.js.map +1 -0
- package/src/lib/resource.interface.js +6 -1
- package/src/lib/resource.interface.js.map +1 -0
- package/src/lib/schema.interface.js +6 -1
- package/src/lib/schema.interface.js.map +1 -0
- package/src/lib/secret.interface.js +6 -1
- package/src/lib/secret.interface.js.map +1 -0
- package/src/lib/secret.service.js +23 -11
- package/src/lib/secret.service.js.map +1 -0
- package/src/lib/storage.interface.js +6 -1
- package/src/lib/storage.interface.js.map +1 -0
- package/src/lib/task.interface.js +6 -1
- package/src/lib/task.interface.js.map +1 -0
- package/src/lib/task.service.js +23 -11
- package/src/lib/task.service.js.map +1 -0
- package/src/lib/timeseries.interface.js +6 -1
- package/src/lib/timeseries.interface.js.map +1 -0
- package/src/lib/timeseries.service.js +97 -66
- package/src/lib/timeseries.service.js.map +1 -0
- package/src/lib/token-set.js +15 -3
- package/src/lib/token-set.js.map +1 -0
- package/src/lib/trash.service.js +23 -5
- package/src/lib/trash.service.js.map +1 -0
- package/src/lib/user-settings.interface.js +6 -1
- package/src/lib/user-settings.interface.js.map +1 -0
- package/src/lib/user.service.js +18 -7
- package/src/lib/user.service.js.map +1 -0
- package/src/lib/vault.interface.js +6 -1
- package/src/lib/vault.interface.js.map +1 -0
- package/src/lib/vault.service.js +23 -6
- package/src/lib/vault.service.js.map +1 -0
package/src/lib/http.service.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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 = ()
|
|
18
|
-
this.delete = (url, config)
|
|
19
|
-
this.get = (url, config)
|
|
20
|
-
this.post = (url, data, config)
|
|
21
|
-
this.put = (url, data, config)
|
|
22
|
-
this.request = (method, url, config = {}, data)
|
|
23
|
-
return this.requestQueue.add(()
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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 =
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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, {
|
|
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: {
|
|
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 = [
|
|
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
|
-
|
|
134
|
-
|
|
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,
|
|
143
|
-
headers: {
|
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../lib/hpc-api/src/lib/label.interface.ts"],"names":[],"mappings":""}
|
package/src/lib/label.service.js
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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)
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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"}
|