diff --git a/packages/@ama-sdk/core/src/clients/api-angular-client.ts b/packages/@ama-sdk/core/src/clients/api-angular-client.ts index 63b58eca39..d2c4a0cb6e 100644 --- a/packages/@ama-sdk/core/src/clients/api-angular-client.ts +++ b/packages/@ama-sdk/core/src/clients/api-angular-client.ts @@ -104,7 +104,9 @@ export class ApiAngularClient implements ApiClient { const asyncResponse = new Promise>((resolve, reject) => { let data: HttpResponse; - this.options.httpClient.request(options.method, url, { + const metadataSignal = options.metadata?.signal; + metadataSignal?.throwIfAborted(); + const subscription = this.options.httpClient.request(options.method, url, { ...options, observe: 'response', headers @@ -113,6 +115,11 @@ export class ApiAngularClient implements ApiClient { error: (err) => reject(err), complete: () => resolve(data) }); + metadataSignal?.throwIfAborted(); + metadataSignal?.addEventListener('abort', () => { + subscription.unsubscribe(); + reject(metadataSignal.reason); + }); }); response = await asyncResponse; root = response.body; diff --git a/packages/@ama-sdk/core/src/clients/api-fetch-client.ts b/packages/@ama-sdk/core/src/clients/api-fetch-client.ts index 0a3e5b5b8a..2d7df1636c 100644 --- a/packages/@ama-sdk/core/src/clients/api-fetch-client.ts +++ b/packages/@ama-sdk/core/src/clients/api-fetch-client.ts @@ -114,10 +114,13 @@ export class ApiFetchClient implements ApiClient { // Execute call try { + const metadataSignal = options.metadata?.signal; + metadataSignal?.throwIfAborted(); + const controller = new AbortController(); - if (controller) { - options.signal = controller.signal; - } + options.signal = controller.signal; + metadataSignal?.addEventListener('abort', () => controller.abort()); + const loadedPlugins: (PluginAsyncRunner & PluginAsyncStarter)[] = []; if (this.options.fetchPlugins) { loadedPlugins.push(...this.options.fetchPlugins.map((plugin) => plugin.load({url, options, fetchPlugins: loadedPlugins, controller, apiClient: this, logger: this.options.logger}))); diff --git a/packages/@ama-sdk/core/src/plugins/core/request-plugin.ts b/packages/@ama-sdk/core/src/plugins/core/request-plugin.ts index 0657fc68c8..060f403c24 100644 --- a/packages/@ama-sdk/core/src/plugins/core/request-plugin.ts +++ b/packages/@ama-sdk/core/src/plugins/core/request-plugin.ts @@ -33,6 +33,8 @@ export interface RequestMetadata