@emilgroup/action-sdk 1.8.1-beta.1 → 1.8.1-beta.13

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/base.ts CHANGED
@@ -32,9 +32,20 @@ export const COLLECTION_FORMATS = {
32
32
  pipes: "|",
33
33
  };
34
34
 
35
+ export interface SessionClass {
36
+ sub: string;
37
+ username?: string;
38
+ email?: string;
39
+ tenantSlug?: string;
40
+ permissions?: string;
41
+ expiresAt?: number;
42
+ }
43
+
35
44
  export interface LoginClass {
36
45
  accessToken: string;
37
46
  permissions: string;
47
+ authMode?: string;
48
+ session?: SessionClass;
38
49
  }
39
50
 
40
51
  export interface SwitchWorkspaceRequest {
@@ -45,6 +56,8 @@ export interface SwitchWorkspaceRequest {
45
56
  export interface SwitchWorkspaceResponseClass {
46
57
  accessToken: string;
47
58
  permissions: string;
59
+ authMode?: string;
60
+ session?: SessionClass;
48
61
  }
49
62
 
50
63
  export enum Environment {
@@ -77,10 +90,19 @@ interface TokenData {
77
90
  accessToken?: string;
78
91
  username?: string;
79
92
  permissions?: string;
93
+ // 'both' or 'session' when authservice keeps the tokens in a server session.
94
+ authMode?: string;
95
+ sub?: string;
80
96
  }
81
97
 
82
98
  const NETWORK_ERROR_MESSAGE = "Network Error";
83
99
  const TOKEN_DATA = 'APP_TOKEN';
100
+ // Sent only to authservice, to ask for a server session.
101
+ const AUTH_MODE_HEADER = 'X-Emil-Auth-Mode';
102
+ // Names the account on every call; one browser session can hold several.
103
+ const ACCOUNT_HEADER = 'X-Emil-Account';
104
+ const SESSION_MODES = ['both', 'session'];
105
+ const RESEND_SAFE_METHODS = ['get', 'head', 'options'];
84
106
 
85
107
  /**
86
108
  *
@@ -102,10 +124,18 @@ export class BaseAPI {
102
124
  this.configuration = configuration;
103
125
  this.basePath = configuration.basePath || this.basePath;
104
126
 
105
- // Use config token if provided, otherwise use tokenData token
106
- const configToken = this.configuration.accessToken;
107
- const storedToken = accessToken ? `Bearer ${accessToken}` : '';
108
- this.configuration.accessToken = configToken || storedToken;
127
+ if (configuration.cookieAuth) {
128
+ this.configuration.username = this.configuration.username || this.tokenData.username;
129
+ }
130
+
131
+ if (this.usesSession()) {
132
+ this.useSessionAuth();
133
+ } else {
134
+ // Use config token if provided, otherwise use tokenData token
135
+ const configToken = this.configuration.accessToken;
136
+ const storedToken = accessToken ? `Bearer ${accessToken}` : '';
137
+ this.configuration.accessToken = configToken || storedToken;
138
+ }
109
139
  } else {
110
140
  const { accessToken, username } = this.tokenData;
111
141
 
@@ -119,6 +149,107 @@ export class BaseAPI {
119
149
  this.attachInterceptor(axios);
120
150
  }
121
151
 
152
+ // The app's own account wins over APP_TOKEN, which holds whichever tab wrote last.
153
+ private sessionAccount(): string | undefined {
154
+ return this.configuration.account || this.tokenData.sub;
155
+ }
156
+
157
+ // Apps may pass the address as the second argument only; authservice is on the same host.
158
+ private authBasePath(): string {
159
+ return this.configuration.basePath || this.basePath;
160
+ }
161
+
162
+ private usesSession(): boolean {
163
+ return !!this.configuration.cookieAuth && SESSION_MODES.indexOf(this.tokenData.authMode) !== -1 && !!this.sessionAccount();
164
+ }
165
+
166
+ private useSessionAuth() {
167
+ const { headers, ...baseOptions } = this.configuration.baseOptions || {};
168
+ this.configuration.accessToken = '';
169
+ this.configuration.baseOptions = {
170
+ ...baseOptions,
171
+ withCredentials: true,
172
+ headers: { ...headers, [ACCOUNT_HEADER]: this.sessionAccount() },
173
+ };
174
+ }
175
+
176
+ private useHeaderAuth(accessToken: string) {
177
+ this.configuration.accessToken = accessToken ? `Bearer ${accessToken}` : '';
178
+ this.tokenData.accessToken = accessToken;
179
+ delete this.tokenData.authMode;
180
+ delete this.tokenData.sub;
181
+ if (this.configuration.cookieAuth) {
182
+ const { withCredentials, headers, ...baseOptions } = this.configuration.baseOptions || {};
183
+ const { [ACCOUNT_HEADER]: account, ...otherHeaders } = headers || {};
184
+ this.configuration.baseOptions = { ...baseOptions, headers: otherHeaders };
185
+ }
186
+ }
187
+
188
+ private applyTokenReply({ accessToken, authMode, session }: LoginClass) {
189
+ if (this.configuration.cookieAuth && SESSION_MODES.indexOf(authMode) !== -1 && session?.sub) {
190
+ this.tokenData.authMode = authMode;
191
+ this.tokenData.sub = session.sub;
192
+ if (this.configuration.account) {
193
+ // A workspace switch moves the app to another account.
194
+ this.configuration.account = session.sub;
195
+ }
196
+ // Both keeps the token for apps not moved yet; session mode keeps no token at all.
197
+ if (authMode === 'both' && accessToken) {
198
+ this.tokenData.accessToken = accessToken;
199
+ } else {
200
+ delete this.tokenData.accessToken;
201
+ }
202
+ this.useSessionAuth();
203
+ } else {
204
+ this.useHeaderAuth(accessToken);
205
+ }
206
+ }
207
+
208
+ private sessionHeaders(): Record<string, string> {
209
+ if (!this.configuration.cookieAuth) {
210
+ return {};
211
+ }
212
+ return {
213
+ [AUTH_MODE_HEADER]: 'session',
214
+ ...(this.usesSession() && { [ACCOUNT_HEADER]: this.sessionAccount() }),
215
+ };
216
+ }
217
+
218
+ private withCurrentAuth(config: AxiosRequestConfig): AxiosRequestConfig {
219
+ delete config.headers['Authorization'];
220
+ delete config.headers[ACCOUNT_HEADER];
221
+ if (this.usesSession()) {
222
+ config.headers[ACCOUNT_HEADER] = this.sessionAccount();
223
+ config.withCredentials = true;
224
+ } else if (this.configuration.accessToken) {
225
+ config.headers['Authorization'] = this.configuration.accessToken;
226
+ }
227
+ return config;
228
+ }
229
+
230
+ // Both keeps the token, so a session call the browser could not complete can be sent again with it.
231
+ private canRetryWithToken(config: AxiosRequestConfig): boolean {
232
+ return !!config.withCredentials && !!config.headers?.[ACCOUNT_HEADER]
233
+ && !!this.tokenData.accessToken && this.tokenData.authMode !== 'session';
234
+ }
235
+
236
+ // A network error can come after the server ran the call, so only a call that is safe to repeat is sent again.
237
+ private canResend(config: AxiosRequestConfig): boolean {
238
+ return RESEND_SAFE_METHODS.indexOf((config.method || 'get').toLowerCase()) !== -1
239
+ || Object.keys(config.headers || {}).some((name) => name.toLowerCase() === 'idempotency-key');
240
+ }
241
+
242
+ private switchToToken() {
243
+ this.useHeaderAuth(this.tokenData.accessToken);
244
+ this.storeTokenData(this.tokenData);
245
+ }
246
+
247
+ private retryWithToken(axios: AxiosInstance, config: AxiosRequestConfig) {
248
+ this.switchToToken();
249
+ config.withCredentials = false;
250
+ return axios(this.withCurrentAuth(config));
251
+ }
252
+
122
253
  selectEnvironment(env: Environment) {
123
254
  this.selectBasePath(env);
124
255
  }
@@ -138,8 +269,8 @@ export class BaseAPI {
138
269
  async authorize(username: string, password: string, targetWorkspace?: string): Promise<void> {
139
270
  const options: AxiosRequestConfig = {
140
271
  method: 'POST',
141
- url: `${this.configuration.basePath}/authservice/v1/login`,
142
- headers: { 'Content-Type': 'application/json' },
272
+ url: `${this.authBasePath()}/authservice/v1/login`,
273
+ headers: { 'Content-Type': 'application/json', ...(this.configuration.cookieAuth && { [AUTH_MODE_HEADER]: 'session' }) },
143
274
  data: {
144
275
  username,
145
276
  password,
@@ -149,13 +280,10 @@ export class BaseAPI {
149
280
 
150
281
  const response = await globalAxios.request<LoginClass>(options);
151
282
 
152
- const { data: { accessToken, permissions } } = response;
153
-
154
283
  this.configuration.username = username;
155
- this.configuration.accessToken = `Bearer ${accessToken}`;
156
284
  this.tokenData.username = username;
157
- this.tokenData.accessToken = accessToken;
158
- this.tokenData.permissions = permissions;
285
+ this.tokenData.permissions = response.data.permissions;
286
+ this.applyTokenReply(response.data);
159
287
 
160
288
  // Switch workspace if provided
161
289
  if (targetWorkspace) {
@@ -175,10 +303,11 @@ export class BaseAPI {
175
303
  async switchWorkspace(targetWorkspace: string): Promise<void> {
176
304
  const options: AxiosRequestConfig = {
177
305
  method: 'POST',
178
- url: `${this.configuration.basePath}/authservice/v1/workspaces/switch`,
306
+ url: `${this.authBasePath()}/authservice/v1/workspaces/switch`,
179
307
  headers: {
180
308
  'Content-Type': 'application/json',
181
- 'Authorization': `Bearer ${this.configuration.accessToken}`,
309
+ ...this.sessionHeaders(),
310
+ ...(!this.usesSession() && !!this.configuration.accessToken && { 'Authorization': this.configuration.accessToken as string }),
182
311
  },
183
312
  data: {
184
313
  username: this.configuration.username,
@@ -189,11 +318,8 @@ export class BaseAPI {
189
318
 
190
319
  const response = await globalAxios.request<SwitchWorkspaceResponseClass>(options);
191
320
 
192
- const { data: { accessToken, permissions } } = response;
193
-
194
- this.configuration.accessToken = `Bearer ${accessToken}`;
195
- this.tokenData.accessToken = accessToken;
196
- this.tokenData.permissions = permissions;
321
+ this.tokenData.permissions = response.data.permissions;
322
+ this.applyTokenReply(response.data);
197
323
 
198
324
  this.storeTokenData({
199
325
  ...this.tokenData
@@ -219,9 +345,10 @@ export class BaseAPI {
219
345
 
220
346
  const options: AxiosRequestConfig = {
221
347
  method: 'POST',
222
- url: `${this.configuration.basePath}/authservice/v1/refresh-token`,
348
+ url: `${this.authBasePath()}/authservice/v1/refresh-token`,
223
349
  headers: {
224
350
  'Content-Type': 'application/json',
351
+ ...this.sessionHeaders(),
225
352
  },
226
353
  data: { username: username },
227
354
  withCredentials: true,
@@ -262,20 +389,22 @@ export class BaseAPI {
262
389
  && !originalConfig._retry) {
263
390
  originalConfig._retry = true;
264
391
  try {
265
- const { accessToken: tokenString, permissions } = await this.refreshTokenInternal();
266
- const accessToken = `Bearer ${tokenString}`;
267
- this.tokenData.permissions = permissions;
268
-
269
- delete originalConfig.headers['Authorization']
270
-
271
- originalConfig.headers['Authorization'] = accessToken;
272
-
273
- this.configuration.accessToken = accessToken;
274
- this.tokenData.accessToken = tokenString;
275
-
392
+ const reply = await this.refreshTokenInternal();
393
+ this.tokenData.permissions = reply.permissions;
394
+ this.applyTokenReply(reply);
276
395
  this.storeTokenData(this.tokenData);
277
396
 
278
- return axios(originalConfig);
397
+ if (!this.usesSession()) {
398
+ return axios(this.withCurrentAuth(originalConfig));
399
+ }
400
+
401
+ // Both mode: if the browser does not send the session cookie (another site), use the token.
402
+ return axios(this.withCurrentAuth(originalConfig)).catch((retryError) => {
403
+ if (retryError?.response?.status !== 401 || !this.tokenData.accessToken) {
404
+ return Promise.reject(retryError);
405
+ }
406
+ return this.retryWithToken(axios, originalConfig);
407
+ });
279
408
  } catch (_error) {
280
409
  if (_error.response && _error.response.data) {
281
410
  return Promise.reject(_error.response.data);
@@ -283,26 +412,30 @@ export class BaseAPI {
283
412
  return Promise.reject(_error);
284
413
  }
285
414
  }
415
+ } else if (err.message === NETWORK_ERROR_MESSAGE && this.canRetryWithToken(originalConfig)) {
416
+ // Both mode: the browser blocked the session call or hid its reply; later calls use the token.
417
+ if (!this.canResend(originalConfig)) {
418
+ this.switchToToken();
419
+ return Promise.reject(err);
420
+ }
421
+ return this.retryWithToken(axios, originalConfig);
286
422
  } else if (err.message === NETWORK_ERROR_MESSAGE
287
- && originalConfig.headers.hasOwnProperty('Authorization')
423
+ && (originalConfig.headers.hasOwnProperty('Authorization')
424
+ || (this.configuration.cookieAuth && originalConfig.withCredentials && this.canResend(originalConfig)))
288
425
  && _retry_count < 4
289
426
  ) {
290
427
  _retry_count++;
291
428
  try {
292
- const { accessToken: tokenString, permissions } = await this.refreshTokenInternal();
293
- const accessToken = `Bearer ${tokenString}`;
294
- this.tokenData.permissions = permissions;
429
+ // In session mode an unreadable 401 (no CORS headers on the error reply) also lands here.
430
+ const reply = await this.refreshTokenInternal();
431
+ this.tokenData.permissions = reply.permissions;
295
432
 
296
433
  _retry = true;
297
- originalConfig.headers['Authorization'] = accessToken;
298
-
299
- this.configuration.accessToken = accessToken;
300
- this.tokenData.accessToken = tokenString;
301
-
434
+ this.applyTokenReply(reply);
302
435
  this.storeTokenData(this.tokenData);
303
436
 
304
437
  return axios.request({
305
- ...originalConfig,
438
+ ...this.withCurrentAuth(originalConfig),
306
439
  });
307
440
  } catch (_error) {
308
441
  if (_error.response && _error.response.data) {
package/common.ts CHANGED
@@ -130,9 +130,10 @@ export const toPathString = function (url: URL) {
130
130
  * @export
131
131
  */
132
132
  export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
133
- return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
133
+ // Typed by hand: since axios 1.20, request() returns an internal axios type that SDK declarations cannot name.
134
+ return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH): Promise<R> => {
134
135
  const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || basePath) + axiosArgs.url};
135
- return axios.request<T, R>(axiosRequestArgs);
136
+ return axios.request<T, R>(axiosRequestArgs) as Promise<R>;
136
137
  };
137
138
  }
138
139
 
package/configuration.ts CHANGED
@@ -21,6 +21,8 @@ export interface ConfigurationParameters {
21
21
  basePath?: string;
22
22
  baseOptions?: any;
23
23
  formDataCtor?: new () => any;
24
+ cookieAuth?: boolean;
25
+ account?: string;
24
26
  }
25
27
 
26
28
  export class Configuration {
@@ -74,6 +76,22 @@ export class Configuration {
74
76
  */
75
77
  formDataCtor?: new () => any;
76
78
 
79
+ /**
80
+ * Use a server session when authservice makes one; otherwise the token, as without this option.
81
+ * Set `account` too, so each SDK object keeps its own account.
82
+ *
83
+ * @type {boolean}
84
+ * @memberof Configuration
85
+ */
86
+ cookieAuth?: boolean;
87
+ /**
88
+ * The session account (Cognito sub) this app shows, so the SDK never takes another tab's account.
89
+ *
90
+ * @type {string}
91
+ * @memberof Configuration
92
+ */
93
+ account?: string;
94
+
77
95
  constructor(param: ConfigurationParameters = {}) {
78
96
  this.apiKey = param.apiKey;
79
97
  this.username = param.username;
@@ -82,6 +100,8 @@ export class Configuration {
82
100
  this.basePath = param.basePath;
83
101
  this.baseOptions = param.baseOptions;
84
102
  this.formDataCtor = param.formDataCtor;
103
+ this.cookieAuth = param.cookieAuth;
104
+ this.account = param.account;
85
105
  }
86
106
 
87
107
  /**
@@ -870,7 +870,7 @@ export declare class ActionClientApi extends BaseAPI {
870
870
  * @throws {RequiredError}
871
871
  * @memberof ActionClientApi
872
872
  */
873
- createAction(requestParameters: ActionClientApiCreateActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateActionResponseClass, any, {}>>;
873
+ createAction(requestParameters: ActionClientApiCreateActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateActionResponseClass, any, {}, any>>;
874
874
  /**
875
875
  * Deletes an action configuration by its code **Required Permissions** \"action-management.actions.delete\"
876
876
  * @summary Delete the action
@@ -879,7 +879,7 @@ export declare class ActionClientApi extends BaseAPI {
879
879
  * @throws {RequiredError}
880
880
  * @memberof ActionClientApi
881
881
  */
882
- deleteAction(requestParameters: ActionClientApiDeleteActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
882
+ deleteAction(requestParameters: ActionClientApiDeleteActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}, any>>;
883
883
  /**
884
884
  * Deletes a specific action version by its version code **Required Permissions** \"action-management.actions.delete\"
885
885
  * @summary Delete the action version
@@ -888,7 +888,7 @@ export declare class ActionClientApi extends BaseAPI {
888
888
  * @throws {RequiredError}
889
889
  * @memberof ActionClientApi
890
890
  */
891
- deleteActionVersion(requestParameters: ActionClientApiDeleteActionVersionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
891
+ deleteActionVersion(requestParameters: ActionClientApiDeleteActionVersionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}, any>>;
892
892
  /**
893
893
  * Retrieves an action configuration by its code **Required Permissions** \"action-management.actions.view\"
894
894
  * @summary Retrieve the action
@@ -897,7 +897,7 @@ export declare class ActionClientApi extends BaseAPI {
897
897
  * @throws {RequiredError}
898
898
  * @memberof ActionClientApi
899
899
  */
900
- getAction(requestParameters: ActionClientApiGetActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionResponseClass, any, {}>>;
900
+ getAction(requestParameters: ActionClientApiGetActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionResponseClass, any, {}, any>>;
901
901
  /**
902
902
  * Retrieves the latest action execution status by executionCode or correlationId **Required Permissions** \"action-management.actions.view\"
903
903
  * @summary Retrieve the actionExecution
@@ -906,7 +906,7 @@ export declare class ActionClientApi extends BaseAPI {
906
906
  * @throws {RequiredError}
907
907
  * @memberof ActionClientApi
908
908
  */
909
- getActionExecutionStatus(requestParameters?: ActionClientApiGetActionExecutionStatusRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionExecutionStatusResponseClass, any, {}>>;
909
+ getActionExecutionStatus(requestParameters?: ActionClientApiGetActionExecutionStatusRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionExecutionStatusResponseClass, any, {}, any>>;
910
910
  /**
911
911
  * Gets a specific action version by its version code **Required Permissions** \"action-management.actions.view\"
912
912
  * @summary Retrieve the action version
@@ -915,7 +915,7 @@ export declare class ActionClientApi extends BaseAPI {
915
915
  * @throws {RequiredError}
916
916
  * @memberof ActionClientApi
917
917
  */
918
- getActionVersion(requestParameters: ActionClientApiGetActionVersionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionVersionResponseClass, any, {}>>;
918
+ getActionVersion(requestParameters: ActionClientApiGetActionVersionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<GetActionVersionResponseClass, any, {}, any>>;
919
919
  /**
920
920
  * Lists action executions (latest status per execution only) with optional filters **Required Permissions** \"action-management.actions.view\"
921
921
  * @summary List actionExecutions
@@ -924,7 +924,7 @@ export declare class ActionClientApi extends BaseAPI {
924
924
  * @throws {RequiredError}
925
925
  * @memberof ActionClientApi
926
926
  */
927
- listActionExecutions(requestParameters?: ActionClientApiListActionExecutionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionExecutionsResponseClass, any, {}>>;
927
+ listActionExecutions(requestParameters?: ActionClientApiListActionExecutionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionExecutionsResponseClass, any, {}, any>>;
928
928
  /**
929
929
  * Lists all versions for an action by code **Required Permissions** \"action-management.actions.view\"
930
930
  * @summary List action versions
@@ -933,7 +933,7 @@ export declare class ActionClientApi extends BaseAPI {
933
933
  * @throws {RequiredError}
934
934
  * @memberof ActionClientApi
935
935
  */
936
- listActionVersions(requestParameters: ActionClientApiListActionVersionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionVersionsResponseClass, any, {}>>;
936
+ listActionVersions(requestParameters: ActionClientApiListActionVersionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionVersionsResponseClass, any, {}, any>>;
937
937
  /**
938
938
  * Lists all action configurations with optional filters **Required Permissions** \"action-management.actions.view\"
939
939
  * @summary List actions
@@ -942,7 +942,7 @@ export declare class ActionClientApi extends BaseAPI {
942
942
  * @throws {RequiredError}
943
943
  * @memberof ActionClientApi
944
944
  */
945
- listActions(requestParameters?: ActionClientApiListActionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionsResponseClass, any, {}>>;
945
+ listActions(requestParameters?: ActionClientApiListActionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionsResponseClass, any, {}, any>>;
946
946
  /**
947
947
  * Lists all action versions. Use filters e.g. isActive==true, entityType==LEAD, name, slug. No parent action code required. **Required Permissions** \"action-management.actions.view\"
948
948
  * @summary List action versions
@@ -951,7 +951,7 @@ export declare class ActionClientApi extends BaseAPI {
951
951
  * @throws {RequiredError}
952
952
  * @memberof ActionClientApi
953
953
  */
954
- listAllActionVersions(requestParameters?: ActionClientApiListAllActionVersionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionVersionsResponseClass, any, {}>>;
954
+ listAllActionVersions(requestParameters?: ActionClientApiListAllActionVersionsRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<ListActionVersionsResponseClass, any, {}, any>>;
955
955
  /**
956
956
  * 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\"
957
957
  * @summary Create the actionExecution
@@ -960,7 +960,7 @@ export declare class ActionClientApi extends BaseAPI {
960
960
  * @throws {RequiredError}
961
961
  * @memberof ActionClientApi
962
962
  */
963
- triggerAction(requestParameters: ActionClientApiTriggerActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<TriggerActionResponseClass, any, {}>>;
963
+ triggerAction(requestParameters: ActionClientApiTriggerActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<TriggerActionResponseClass, any, {}, any>>;
964
964
  /**
965
965
  * Updates an existing action configuration (patch semantics) **Required Permissions** \"action-management.actions.update\"
966
966
  * @summary Update the action
@@ -969,5 +969,5 @@ export declare class ActionClientApi extends BaseAPI {
969
969
  * @throws {RequiredError}
970
970
  * @memberof ActionClientApi
971
971
  */
972
- updateAction(requestParameters: ActionClientApiUpdateActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<UpdateActionResponseClass, any, {}>>;
972
+ updateAction(requestParameters: ActionClientApiUpdateActionRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<UpdateActionResponseClass, any, {}, any>>;
973
973
  }