@emilgroup/action-sdk 1.8.1-beta.10 → 1.8.1-beta.14
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/README.md +2 -2
- package/api/action-client-api.ts +48 -24
- package/api/actions-api.ts +36 -18
- package/api/executions-api.ts +12 -6
- package/base.ts +174 -41
- package/common.ts +3 -2
- package/configuration.ts +20 -0
- package/dist/api/action-client-api.d.ts +12 -12
- package/dist/api/action-client-api.js +63 -41
- package/dist/api/actions-api.d.ts +9 -9
- package/dist/api/actions-api.js +48 -31
- package/dist/api/executions-api.d.ts +3 -3
- package/dist/api/executions-api.js +15 -10
- package/dist/api/health-api.d.ts +1 -1
- package/dist/base.d.ts +24 -0
- package/dist/base.js +178 -59
- package/dist/common.d.ts +1 -1
- package/dist/common.js +1 -0
- package/dist/configuration.d.ts +17 -0
- package/dist/configuration.js +2 -0
- package/package.json +2 -2
|
@@ -250,7 +250,7 @@ export declare class ExecutionsApi extends BaseAPI {
|
|
|
250
250
|
* @throws {RequiredError}
|
|
251
251
|
* @memberof ExecutionsApi
|
|
252
252
|
*/
|
|
253
|
-
getActionExecutionStatus(requestParameters?: ExecutionsApiGetActionExecutionStatusRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionExecutionStatusResponseClass, any, {}>>;
|
|
253
|
+
getActionExecutionStatus(requestParameters?: ExecutionsApiGetActionExecutionStatusRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionExecutionStatusResponseClass, any, {}, any>>;
|
|
254
254
|
/**
|
|
255
255
|
* Lists action executions (latest status per execution only) with optional filters **Required Permissions** \"action-management.actions.view\"
|
|
256
256
|
* @summary List actionExecutions
|
|
@@ -259,7 +259,7 @@ export declare class ExecutionsApi extends BaseAPI {
|
|
|
259
259
|
* @throws {RequiredError}
|
|
260
260
|
* @memberof ExecutionsApi
|
|
261
261
|
*/
|
|
262
|
-
listActionExecutions(requestParameters?: ExecutionsApiListActionExecutionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionExecutionsResponseClass, any, {}>>;
|
|
262
|
+
listActionExecutions(requestParameters?: ExecutionsApiListActionExecutionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionExecutionsResponseClass, any, {}, any>>;
|
|
263
263
|
/**
|
|
264
264
|
* Triggers an action execution. When the action has an input_validation_schema, the input payload is validated against it; invalid payloads return HTTP 400 with a body containing message and errors (JSON Schema validation errors). **Required Permissions** \"action-management.actions.run\"
|
|
265
265
|
* @summary Create the actionExecution
|
|
@@ -268,5 +268,5 @@ export declare class ExecutionsApi extends BaseAPI {
|
|
|
268
268
|
* @throws {RequiredError}
|
|
269
269
|
* @memberof ExecutionsApi
|
|
270
270
|
*/
|
|
271
|
-
triggerAction(requestParameters: ExecutionsApiTriggerActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<TriggerActionResponseClass, any, {}>>;
|
|
271
|
+
triggerAction(requestParameters: ExecutionsApiTriggerActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<TriggerActionResponseClass, any, {}, any>>;
|
|
272
272
|
}
|
|
@@ -104,7 +104,7 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
104
104
|
getActionExecutionStatus: function (authorization, executionCode, correlationId, options) {
|
|
105
105
|
if (options === void 0) { options = {}; }
|
|
106
106
|
return __awaiter(_this, void 0, void 0, function () {
|
|
107
|
-
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions;
|
|
107
|
+
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, authorizationValue, headersFromBaseOptions;
|
|
108
108
|
return __generator(this, function (_a) {
|
|
109
109
|
switch (_a.label) {
|
|
110
110
|
case 0:
|
|
@@ -130,8 +130,9 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
130
130
|
if (correlationId !== undefined) {
|
|
131
131
|
localVarQueryParameter['correlationId'] = correlationId;
|
|
132
132
|
}
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
authorizationValue = 'Authorization'.toLowerCase() === 'authorization' ? (authorization || baseAccessToken) : authorization;
|
|
134
|
+
if (authorizationValue) {
|
|
135
|
+
localVarHeaderParameter['Authorization'] = String(authorizationValue);
|
|
135
136
|
}
|
|
136
137
|
(0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter);
|
|
137
138
|
headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
@@ -161,7 +162,7 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
161
162
|
listActionExecutions: function (authorization, pageSize, pageToken, filter, search, order, expand, filters, options) {
|
|
162
163
|
if (options === void 0) { options = {}; }
|
|
163
164
|
return __awaiter(_this, void 0, void 0, function () {
|
|
164
|
-
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions;
|
|
165
|
+
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, authorizationValue, headersFromBaseOptions;
|
|
165
166
|
return __generator(this, function (_a) {
|
|
166
167
|
switch (_a.label) {
|
|
167
168
|
case 0:
|
|
@@ -202,8 +203,9 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
202
203
|
if (filters !== undefined) {
|
|
203
204
|
localVarQueryParameter['filters'] = filters;
|
|
204
205
|
}
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
authorizationValue = 'Authorization'.toLowerCase() === 'authorization' ? (authorization || baseAccessToken) : authorization;
|
|
207
|
+
if (authorizationValue) {
|
|
208
|
+
localVarHeaderParameter['Authorization'] = String(authorizationValue);
|
|
207
209
|
}
|
|
208
210
|
(0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter);
|
|
209
211
|
headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
@@ -227,7 +229,7 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
227
229
|
triggerAction: function (triggerActionRequestDto, authorization, options) {
|
|
228
230
|
if (options === void 0) { options = {}; }
|
|
229
231
|
return __awaiter(_this, void 0, void 0, function () {
|
|
230
|
-
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions;
|
|
232
|
+
var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, authorizationValue, headersFromBaseOptions;
|
|
231
233
|
return __generator(this, function (_a) {
|
|
232
234
|
switch (_a.label) {
|
|
233
235
|
case 0:
|
|
@@ -244,13 +246,16 @@ var ExecutionsApiAxiosParamCreator = function (configuration) {
|
|
|
244
246
|
localVarQueryParameter = {};
|
|
245
247
|
// authentication bearer required
|
|
246
248
|
// http bearer authentication required
|
|
247
|
-
return [4 /*yield*/, (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration)
|
|
249
|
+
return [4 /*yield*/, (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration)
|
|
250
|
+
// Only Authorization falls back to the configured token; an empty value is never sent.
|
|
251
|
+
];
|
|
248
252
|
case 1:
|
|
249
253
|
// authentication bearer required
|
|
250
254
|
// http bearer authentication required
|
|
251
255
|
_a.sent();
|
|
252
|
-
|
|
253
|
-
|
|
256
|
+
authorizationValue = 'Authorization'.toLowerCase() === 'authorization' ? (authorization || baseAccessToken) : authorization;
|
|
257
|
+
if (authorizationValue) {
|
|
258
|
+
localVarHeaderParameter['Authorization'] = String(authorizationValue);
|
|
254
259
|
}
|
|
255
260
|
localVarHeaderParameter['Content-Type'] = 'application/json';
|
|
256
261
|
(0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter);
|
package/dist/api/health-api.d.ts
CHANGED
|
@@ -66,5 +66,5 @@ export declare class HealthApi extends BaseAPI {
|
|
|
66
66
|
* @throws {RequiredError}
|
|
67
67
|
* @memberof HealthApi
|
|
68
68
|
*/
|
|
69
|
-
check(options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<InlineResponse200, any, {}>>;
|
|
69
|
+
check(options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<InlineResponse200, any, {}, any>>;
|
|
70
70
|
}
|
package/dist/base.d.ts
CHANGED
|
@@ -22,9 +22,19 @@ export declare const COLLECTION_FORMATS: {
|
|
|
22
22
|
tsv: string;
|
|
23
23
|
pipes: string;
|
|
24
24
|
};
|
|
25
|
+
export interface SessionClass {
|
|
26
|
+
sub: string;
|
|
27
|
+
username?: string;
|
|
28
|
+
email?: string;
|
|
29
|
+
tenantSlug?: string;
|
|
30
|
+
permissions?: string;
|
|
31
|
+
expiresAt?: number;
|
|
32
|
+
}
|
|
25
33
|
export interface LoginClass {
|
|
26
34
|
accessToken: string;
|
|
27
35
|
permissions: string;
|
|
36
|
+
authMode?: string;
|
|
37
|
+
session?: SessionClass;
|
|
28
38
|
}
|
|
29
39
|
export interface SwitchWorkspaceRequest {
|
|
30
40
|
username: string;
|
|
@@ -33,6 +43,8 @@ export interface SwitchWorkspaceRequest {
|
|
|
33
43
|
export interface SwitchWorkspaceResponseClass {
|
|
34
44
|
accessToken: string;
|
|
35
45
|
permissions: string;
|
|
46
|
+
authMode?: string;
|
|
47
|
+
session?: SessionClass;
|
|
36
48
|
}
|
|
37
49
|
export declare enum Environment {
|
|
38
50
|
Production = "https://apiv2.emil.de",
|
|
@@ -63,6 +75,18 @@ export declare class BaseAPI {
|
|
|
63
75
|
protected configuration: Configuration | undefined;
|
|
64
76
|
private tokenData?;
|
|
65
77
|
constructor(configuration?: Configuration, basePath?: string, axios?: AxiosInstance);
|
|
78
|
+
private sessionAccount;
|
|
79
|
+
private authBasePath;
|
|
80
|
+
private usesSession;
|
|
81
|
+
private useSessionAuth;
|
|
82
|
+
private useHeaderAuth;
|
|
83
|
+
private applyTokenReply;
|
|
84
|
+
private sessionHeaders;
|
|
85
|
+
private withCurrentAuth;
|
|
86
|
+
private canRetryWithToken;
|
|
87
|
+
private canResend;
|
|
88
|
+
private switchToToken;
|
|
89
|
+
private retryWithToken;
|
|
66
90
|
selectEnvironment(env: Environment): void;
|
|
67
91
|
selectBasePath(path: string): void;
|
|
68
92
|
getPermissions(): Array<string>;
|
package/dist/base.js
CHANGED
|
@@ -74,6 +74,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
74
74
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
78
|
+
var t = {};
|
|
79
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
80
|
+
t[p] = s[p];
|
|
81
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
82
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
83
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
84
|
+
t[p[i]] = s[p[i]];
|
|
85
|
+
}
|
|
86
|
+
return t;
|
|
87
|
+
};
|
|
77
88
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
78
89
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
79
90
|
};
|
|
@@ -112,6 +123,12 @@ function resetRetry() {
|
|
|
112
123
|
exports.resetRetry = resetRetry;
|
|
113
124
|
var NETWORK_ERROR_MESSAGE = "Network Error";
|
|
114
125
|
var TOKEN_DATA = 'APP_TOKEN';
|
|
126
|
+
// Sent only to authservice, to ask for a server session.
|
|
127
|
+
var AUTH_MODE_HEADER = 'X-Emil-Auth-Mode';
|
|
128
|
+
// Names the account on every call; one browser session can hold several.
|
|
129
|
+
var ACCOUNT_HEADER = 'X-Emil-Account';
|
|
130
|
+
var SESSION_MODES = ['both', 'session'];
|
|
131
|
+
var RESEND_SAFE_METHODS = ['get', 'head', 'options'];
|
|
115
132
|
/**
|
|
116
133
|
*
|
|
117
134
|
* @export
|
|
@@ -128,10 +145,18 @@ var BaseAPI = /** @class */ (function () {
|
|
|
128
145
|
var accessToken = this.tokenData.accessToken;
|
|
129
146
|
this.configuration = configuration;
|
|
130
147
|
this.basePath = configuration.basePath || this.basePath;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
this.
|
|
148
|
+
if (configuration.cookieAuth) {
|
|
149
|
+
this.configuration.username = this.configuration.username || this.tokenData.username;
|
|
150
|
+
}
|
|
151
|
+
if (this.usesSession()) {
|
|
152
|
+
this.useSessionAuth();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Use config token if provided, otherwise use tokenData token
|
|
156
|
+
var configToken = this.configuration.accessToken;
|
|
157
|
+
var storedToken = accessToken ? "Bearer ".concat(accessToken) : '';
|
|
158
|
+
this.configuration.accessToken = configToken || storedToken;
|
|
159
|
+
}
|
|
135
160
|
}
|
|
136
161
|
else {
|
|
137
162
|
var _a = this.tokenData, accessToken = _a.accessToken, username = _a.username;
|
|
@@ -143,6 +168,95 @@ var BaseAPI = /** @class */ (function () {
|
|
|
143
168
|
}
|
|
144
169
|
this.attachInterceptor(axios);
|
|
145
170
|
}
|
|
171
|
+
// The app's own account wins over APP_TOKEN, which holds whichever tab wrote last.
|
|
172
|
+
BaseAPI.prototype.sessionAccount = function () {
|
|
173
|
+
return this.configuration.account || this.tokenData.sub;
|
|
174
|
+
};
|
|
175
|
+
// Apps may pass the address as the second argument only; authservice is on the same host.
|
|
176
|
+
BaseAPI.prototype.authBasePath = function () {
|
|
177
|
+
return this.configuration.basePath || this.basePath;
|
|
178
|
+
};
|
|
179
|
+
BaseAPI.prototype.usesSession = function () {
|
|
180
|
+
return !!this.configuration.cookieAuth && SESSION_MODES.indexOf(this.tokenData.authMode) !== -1 && !!this.sessionAccount();
|
|
181
|
+
};
|
|
182
|
+
BaseAPI.prototype.useSessionAuth = function () {
|
|
183
|
+
var _a;
|
|
184
|
+
var _b = this.configuration.baseOptions || {}, headers = _b.headers, baseOptions = __rest(_b, ["headers"]);
|
|
185
|
+
this.configuration.accessToken = '';
|
|
186
|
+
this.configuration.baseOptions = __assign(__assign({}, baseOptions), { withCredentials: true, headers: __assign(__assign({}, headers), (_a = {}, _a[ACCOUNT_HEADER] = this.sessionAccount(), _a)) });
|
|
187
|
+
};
|
|
188
|
+
BaseAPI.prototype.useHeaderAuth = function (accessToken) {
|
|
189
|
+
this.configuration.accessToken = accessToken ? "Bearer ".concat(accessToken) : '';
|
|
190
|
+
this.tokenData.accessToken = accessToken;
|
|
191
|
+
delete this.tokenData.authMode;
|
|
192
|
+
delete this.tokenData.sub;
|
|
193
|
+
if (this.configuration.cookieAuth) {
|
|
194
|
+
var _a = this.configuration.baseOptions || {}, withCredentials = _a.withCredentials, headers = _a.headers, baseOptions = __rest(_a, ["withCredentials", "headers"]);
|
|
195
|
+
var _b = headers || {}, _c = ACCOUNT_HEADER, account = _b[_c], otherHeaders = __rest(_b, [typeof _c === "symbol" ? _c : _c + ""]);
|
|
196
|
+
this.configuration.baseOptions = __assign(__assign({}, baseOptions), { headers: otherHeaders });
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
BaseAPI.prototype.applyTokenReply = function (_a) {
|
|
200
|
+
var accessToken = _a.accessToken, authMode = _a.authMode, session = _a.session;
|
|
201
|
+
if (this.configuration.cookieAuth && SESSION_MODES.indexOf(authMode) !== -1 && (session === null || session === void 0 ? void 0 : session.sub)) {
|
|
202
|
+
this.tokenData.authMode = authMode;
|
|
203
|
+
this.tokenData.sub = session.sub;
|
|
204
|
+
if (this.configuration.account) {
|
|
205
|
+
// A workspace switch moves the app to another account.
|
|
206
|
+
this.configuration.account = session.sub;
|
|
207
|
+
}
|
|
208
|
+
// Both keeps the token for apps not moved yet; session mode keeps no token at all.
|
|
209
|
+
if (authMode === 'both' && accessToken) {
|
|
210
|
+
this.tokenData.accessToken = accessToken;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
delete this.tokenData.accessToken;
|
|
214
|
+
}
|
|
215
|
+
this.useSessionAuth();
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.useHeaderAuth(accessToken);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
BaseAPI.prototype.sessionHeaders = function () {
|
|
222
|
+
var _a, _b;
|
|
223
|
+
if (!this.configuration.cookieAuth) {
|
|
224
|
+
return {};
|
|
225
|
+
}
|
|
226
|
+
return __assign((_a = {}, _a[AUTH_MODE_HEADER] = 'session', _a), (this.usesSession() && (_b = {}, _b[ACCOUNT_HEADER] = this.sessionAccount(), _b)));
|
|
227
|
+
};
|
|
228
|
+
BaseAPI.prototype.withCurrentAuth = function (config) {
|
|
229
|
+
delete config.headers['Authorization'];
|
|
230
|
+
delete config.headers[ACCOUNT_HEADER];
|
|
231
|
+
if (this.usesSession()) {
|
|
232
|
+
config.headers[ACCOUNT_HEADER] = this.sessionAccount();
|
|
233
|
+
config.withCredentials = true;
|
|
234
|
+
}
|
|
235
|
+
else if (this.configuration.accessToken) {
|
|
236
|
+
config.headers['Authorization'] = this.configuration.accessToken;
|
|
237
|
+
}
|
|
238
|
+
return config;
|
|
239
|
+
};
|
|
240
|
+
// Both keeps the token, so a session call the browser could not complete can be sent again with it.
|
|
241
|
+
BaseAPI.prototype.canRetryWithToken = function (config) {
|
|
242
|
+
var _a;
|
|
243
|
+
return !!config.withCredentials && !!((_a = config.headers) === null || _a === void 0 ? void 0 : _a[ACCOUNT_HEADER])
|
|
244
|
+
&& !!this.tokenData.accessToken && this.tokenData.authMode !== 'session';
|
|
245
|
+
};
|
|
246
|
+
// A network error can come after the server ran the call, so only a call that is safe to repeat is sent again.
|
|
247
|
+
BaseAPI.prototype.canResend = function (config) {
|
|
248
|
+
return RESEND_SAFE_METHODS.indexOf((config.method || 'get').toLowerCase()) !== -1
|
|
249
|
+
|| Object.keys(config.headers || {}).some(function (name) { return name.toLowerCase() === 'idempotency-key'; });
|
|
250
|
+
};
|
|
251
|
+
BaseAPI.prototype.switchToToken = function () {
|
|
252
|
+
this.useHeaderAuth(this.tokenData.accessToken);
|
|
253
|
+
this.storeTokenData(this.tokenData);
|
|
254
|
+
};
|
|
255
|
+
BaseAPI.prototype.retryWithToken = function (axios, config) {
|
|
256
|
+
this.switchToToken();
|
|
257
|
+
config.withCredentials = false;
|
|
258
|
+
return axios(this.withCurrentAuth(config));
|
|
259
|
+
};
|
|
146
260
|
BaseAPI.prototype.selectEnvironment = function (env) {
|
|
147
261
|
this.selectBasePath(env);
|
|
148
262
|
};
|
|
@@ -158,14 +272,15 @@ var BaseAPI = /** @class */ (function () {
|
|
|
158
272
|
};
|
|
159
273
|
BaseAPI.prototype.authorize = function (username, password, targetWorkspace) {
|
|
160
274
|
return __awaiter(this, void 0, void 0, function () {
|
|
161
|
-
var options, response
|
|
275
|
+
var options, response;
|
|
276
|
+
var _a;
|
|
162
277
|
return __generator(this, function (_b) {
|
|
163
278
|
switch (_b.label) {
|
|
164
279
|
case 0:
|
|
165
280
|
options = {
|
|
166
281
|
method: 'POST',
|
|
167
|
-
url: "".concat(this.
|
|
168
|
-
headers: { 'Content-Type': 'application/json' },
|
|
282
|
+
url: "".concat(this.authBasePath(), "/authservice/v1/login"),
|
|
283
|
+
headers: __assign({ 'Content-Type': 'application/json' }, (this.configuration.cookieAuth && (_a = {}, _a[AUTH_MODE_HEADER] = 'session', _a))),
|
|
169
284
|
data: {
|
|
170
285
|
username: username,
|
|
171
286
|
password: password,
|
|
@@ -175,12 +290,10 @@ var BaseAPI = /** @class */ (function () {
|
|
|
175
290
|
return [4 /*yield*/, axios_1.default.request(options)];
|
|
176
291
|
case 1:
|
|
177
292
|
response = _b.sent();
|
|
178
|
-
_a = response.data, accessToken = _a.accessToken, permissions = _a.permissions;
|
|
179
293
|
this.configuration.username = username;
|
|
180
|
-
this.configuration.accessToken = "Bearer ".concat(accessToken);
|
|
181
294
|
this.tokenData.username = username;
|
|
182
|
-
this.tokenData.
|
|
183
|
-
this.
|
|
295
|
+
this.tokenData.permissions = response.data.permissions;
|
|
296
|
+
this.applyTokenReply(response.data);
|
|
184
297
|
if (!targetWorkspace) return [3 /*break*/, 3];
|
|
185
298
|
return [4 /*yield*/, this.switchWorkspace(targetWorkspace)];
|
|
186
299
|
case 2:
|
|
@@ -199,17 +312,14 @@ var BaseAPI = /** @class */ (function () {
|
|
|
199
312
|
};
|
|
200
313
|
BaseAPI.prototype.switchWorkspace = function (targetWorkspace) {
|
|
201
314
|
return __awaiter(this, void 0, void 0, function () {
|
|
202
|
-
var options, response
|
|
203
|
-
return __generator(this, function (
|
|
204
|
-
switch (
|
|
315
|
+
var options, response;
|
|
316
|
+
return __generator(this, function (_a) {
|
|
317
|
+
switch (_a.label) {
|
|
205
318
|
case 0:
|
|
206
319
|
options = {
|
|
207
320
|
method: 'POST',
|
|
208
|
-
url: "".concat(this.
|
|
209
|
-
headers: {
|
|
210
|
-
'Content-Type': 'application/json',
|
|
211
|
-
'Authorization': "Bearer ".concat(this.configuration.accessToken),
|
|
212
|
-
},
|
|
321
|
+
url: "".concat(this.authBasePath(), "/authservice/v1/workspaces/switch"),
|
|
322
|
+
headers: __assign(__assign({ 'Content-Type': 'application/json' }, this.sessionHeaders()), (!this.usesSession() && !!this.configuration.accessToken && { 'Authorization': this.configuration.accessToken })),
|
|
213
323
|
data: {
|
|
214
324
|
username: this.configuration.username,
|
|
215
325
|
targetWorkspace: targetWorkspace,
|
|
@@ -218,11 +328,9 @@ var BaseAPI = /** @class */ (function () {
|
|
|
218
328
|
};
|
|
219
329
|
return [4 /*yield*/, axios_1.default.request(options)];
|
|
220
330
|
case 1:
|
|
221
|
-
response =
|
|
222
|
-
|
|
223
|
-
this.
|
|
224
|
-
this.tokenData.accessToken = accessToken;
|
|
225
|
-
this.tokenData.permissions = permissions;
|
|
331
|
+
response = _a.sent();
|
|
332
|
+
this.tokenData.permissions = response.data.permissions;
|
|
333
|
+
this.applyTokenReply(response.data);
|
|
226
334
|
this.storeTokenData(__assign({}, this.tokenData));
|
|
227
335
|
return [2 /*return*/];
|
|
228
336
|
}
|
|
@@ -249,10 +357,8 @@ var BaseAPI = /** @class */ (function () {
|
|
|
249
357
|
});
|
|
250
358
|
options = {
|
|
251
359
|
method: 'POST',
|
|
252
|
-
url: "".concat(this.
|
|
253
|
-
headers: {
|
|
254
|
-
'Content-Type': 'application/json',
|
|
255
|
-
},
|
|
360
|
+
url: "".concat(this.authBasePath(), "/authservice/v1/refresh-token"),
|
|
361
|
+
headers: __assign({ 'Content-Type': 'application/json' }, this.sessionHeaders()),
|
|
256
362
|
data: { username: username },
|
|
257
363
|
withCredentials: true,
|
|
258
364
|
};
|
|
@@ -285,62 +391,75 @@ var BaseAPI = /** @class */ (function () {
|
|
|
285
391
|
axios.interceptors.response.use(function (res) {
|
|
286
392
|
return res;
|
|
287
393
|
}, function (err) { return __awaiter(_this, void 0, void 0, function () {
|
|
288
|
-
var originalConfig,
|
|
289
|
-
|
|
290
|
-
|
|
394
|
+
var originalConfig, reply, _error_1, reply, _error_2;
|
|
395
|
+
var _this = this;
|
|
396
|
+
return __generator(this, function (_a) {
|
|
397
|
+
switch (_a.label) {
|
|
291
398
|
case 0:
|
|
292
399
|
originalConfig = err.config;
|
|
293
400
|
if (!(err.response && !(err.response instanceof XMLHttpRequest))) return [3 /*break*/, 5];
|
|
294
401
|
if (!((err.response.status === 401 || err.response.status === 403)
|
|
295
402
|
&& !originalConfig._retry)) return [3 /*break*/, 4];
|
|
296
403
|
originalConfig._retry = true;
|
|
297
|
-
|
|
404
|
+
_a.label = 1;
|
|
298
405
|
case 1:
|
|
299
|
-
|
|
406
|
+
_a.trys.push([1, 3, , 4]);
|
|
300
407
|
return [4 /*yield*/, this.refreshTokenInternal()];
|
|
301
408
|
case 2:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
this.
|
|
305
|
-
delete originalConfig.headers['Authorization'];
|
|
306
|
-
originalConfig.headers['Authorization'] = accessToken;
|
|
307
|
-
this.configuration.accessToken = accessToken;
|
|
308
|
-
this.tokenData.accessToken = tokenString;
|
|
409
|
+
reply = _a.sent();
|
|
410
|
+
this.tokenData.permissions = reply.permissions;
|
|
411
|
+
this.applyTokenReply(reply);
|
|
309
412
|
this.storeTokenData(this.tokenData);
|
|
310
|
-
|
|
413
|
+
if (!this.usesSession()) {
|
|
414
|
+
return [2 /*return*/, axios(this.withCurrentAuth(originalConfig))];
|
|
415
|
+
}
|
|
416
|
+
// Both mode: if the browser does not send the session cookie (another site), use the token.
|
|
417
|
+
return [2 /*return*/, axios(this.withCurrentAuth(originalConfig)).catch(function (retryError) {
|
|
418
|
+
var _a;
|
|
419
|
+
if (((_a = retryError === null || retryError === void 0 ? void 0 : retryError.response) === null || _a === void 0 ? void 0 : _a.status) !== 401 || !_this.tokenData.accessToken) {
|
|
420
|
+
return Promise.reject(retryError);
|
|
421
|
+
}
|
|
422
|
+
return _this.retryWithToken(axios, originalConfig);
|
|
423
|
+
})];
|
|
311
424
|
case 3:
|
|
312
|
-
_error_1 =
|
|
425
|
+
_error_1 = _a.sent();
|
|
313
426
|
if (_error_1.response && _error_1.response.data) {
|
|
314
427
|
return [2 /*return*/, Promise.reject(_error_1.response.data)];
|
|
315
428
|
}
|
|
316
429
|
return [2 /*return*/, Promise.reject(_error_1)];
|
|
317
|
-
case 4: return [3 /*break*/,
|
|
430
|
+
case 4: return [3 /*break*/, 10];
|
|
318
431
|
case 5:
|
|
432
|
+
if (!(err.message === NETWORK_ERROR_MESSAGE && this.canRetryWithToken(originalConfig))) return [3 /*break*/, 6];
|
|
433
|
+
// Both mode: the browser blocked the session call or hid its reply; later calls use the token.
|
|
434
|
+
if (!this.canResend(originalConfig)) {
|
|
435
|
+
this.switchToToken();
|
|
436
|
+
return [2 /*return*/, Promise.reject(err)];
|
|
437
|
+
}
|
|
438
|
+
return [2 /*return*/, this.retryWithToken(axios, originalConfig)];
|
|
439
|
+
case 6:
|
|
319
440
|
if (!(err.message === NETWORK_ERROR_MESSAGE
|
|
320
|
-
&& originalConfig.headers.hasOwnProperty('Authorization')
|
|
321
|
-
|
|
441
|
+
&& (originalConfig.headers.hasOwnProperty('Authorization')
|
|
442
|
+
|| (this.configuration.cookieAuth && originalConfig.withCredentials && this.canResend(originalConfig)))
|
|
443
|
+
&& _retry_count < 4)) return [3 /*break*/, 10];
|
|
322
444
|
_retry_count++;
|
|
323
|
-
|
|
324
|
-
case 6:
|
|
325
|
-
_c.trys.push([6, 8, , 9]);
|
|
326
|
-
return [4 /*yield*/, this.refreshTokenInternal()];
|
|
445
|
+
_a.label = 7;
|
|
327
446
|
case 7:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
447
|
+
_a.trys.push([7, 9, , 10]);
|
|
448
|
+
return [4 /*yield*/, this.refreshTokenInternal()];
|
|
449
|
+
case 8:
|
|
450
|
+
reply = _a.sent();
|
|
451
|
+
this.tokenData.permissions = reply.permissions;
|
|
331
452
|
_retry = true;
|
|
332
|
-
|
|
333
|
-
this.configuration.accessToken = accessToken;
|
|
334
|
-
this.tokenData.accessToken = tokenString;
|
|
453
|
+
this.applyTokenReply(reply);
|
|
335
454
|
this.storeTokenData(this.tokenData);
|
|
336
|
-
return [2 /*return*/, axios.request(__assign({}, originalConfig))];
|
|
337
|
-
case
|
|
338
|
-
_error_2 =
|
|
455
|
+
return [2 /*return*/, axios.request(__assign({}, this.withCurrentAuth(originalConfig)))];
|
|
456
|
+
case 9:
|
|
457
|
+
_error_2 = _a.sent();
|
|
339
458
|
if (_error_2.response && _error_2.response.data) {
|
|
340
459
|
return [2 /*return*/, Promise.reject(_error_2.response.data)];
|
|
341
460
|
}
|
|
342
461
|
return [2 /*return*/, Promise.reject(_error_2)];
|
|
343
|
-
case
|
|
462
|
+
case 10: return [2 /*return*/, Promise.reject(err)];
|
|
344
463
|
}
|
|
345
464
|
});
|
|
346
465
|
}); });
|
package/dist/common.d.ts
CHANGED
|
@@ -62,7 +62,7 @@ export declare const toPathString: (url: URL) => string;
|
|
|
62
62
|
*
|
|
63
63
|
* @export
|
|
64
64
|
*/
|
|
65
|
-
export declare const createRequestFunction: (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) => <T = unknown, R = AxiosResponse<T, any, {}>>(axios?: AxiosInstance, basePath?: string) => Promise<R>;
|
|
65
|
+
export declare const createRequestFunction: (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) => <T = unknown, R = AxiosResponse<T, any, {}, any>>(axios?: AxiosInstance, basePath?: string) => Promise<R>;
|
|
66
66
|
/**
|
|
67
67
|
* EMIL ActionService
|
|
68
68
|
* The EMIL ActionService API description
|
package/dist/common.js
CHANGED
|
@@ -233,6 +233,7 @@ exports.toPathString = toPathString;
|
|
|
233
233
|
* @export
|
|
234
234
|
*/
|
|
235
235
|
var createRequestFunction = function (axiosArgs, globalAxios, BASE_PATH, configuration) {
|
|
236
|
+
// Typed by hand: since axios 1.20, request() returns an internal axios type that SDK declarations cannot name.
|
|
236
237
|
return function (axios, basePath) {
|
|
237
238
|
if (axios === void 0) { axios = globalAxios; }
|
|
238
239
|
if (basePath === void 0) { basePath = BASE_PATH; }
|
package/dist/configuration.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface ConfigurationParameters {
|
|
|
17
17
|
basePath?: string;
|
|
18
18
|
baseOptions?: any;
|
|
19
19
|
formDataCtor?: new () => any;
|
|
20
|
+
cookieAuth?: boolean;
|
|
21
|
+
account?: string;
|
|
20
22
|
}
|
|
21
23
|
export declare class Configuration {
|
|
22
24
|
/**
|
|
@@ -68,6 +70,21 @@ export declare class Configuration {
|
|
|
68
70
|
* @type {new () => FormData}
|
|
69
71
|
*/
|
|
70
72
|
formDataCtor?: new () => any;
|
|
73
|
+
/**
|
|
74
|
+
* Use a server session when authservice makes one; otherwise the token, as without this option.
|
|
75
|
+
* Set `account` too, so each SDK object keeps its own account.
|
|
76
|
+
*
|
|
77
|
+
* @type {boolean}
|
|
78
|
+
* @memberof Configuration
|
|
79
|
+
*/
|
|
80
|
+
cookieAuth?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* The session account (Cognito sub) this app shows, so the SDK never takes another tab's account.
|
|
83
|
+
*
|
|
84
|
+
* @type {string}
|
|
85
|
+
* @memberof Configuration
|
|
86
|
+
*/
|
|
87
|
+
account?: string;
|
|
71
88
|
constructor(param?: ConfigurationParameters);
|
|
72
89
|
/**
|
|
73
90
|
* Check if the given MIME is a JSON MIME.
|
package/dist/configuration.js
CHANGED
|
@@ -24,6 +24,8 @@ var Configuration = /** @class */ (function () {
|
|
|
24
24
|
this.basePath = param.basePath;
|
|
25
25
|
this.baseOptions = param.baseOptions;
|
|
26
26
|
this.formDataCtor = param.formDataCtor;
|
|
27
|
+
this.cookieAuth = param.cookieAuth;
|
|
28
|
+
this.account = param.account;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Check if the given MIME is a JSON MIME.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emilgroup/action-sdk",
|
|
3
|
-
"version": "1.8.1-beta.
|
|
3
|
+
"version": "1.8.1-beta.14",
|
|
4
4
|
"description": "OpenAPI client for @emilgroup/action-sdk",
|
|
5
5
|
"author": "OpenAPI-Generator Contributors",
|
|
6
6
|
"keywords": [
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"prepare": "npm run build"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"axios": "1.
|
|
21
|
+
"axios": "1.20.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
|