From 3abd40e2bcfb6b22933656c0caaf183b671f14cb Mon Sep 17 00:00:00 2001 From: seaders Date: Thu, 28 Nov 2024 12:10:52 +0000 Subject: [PATCH 1/2] Return the RequestResponse instead of just awaiting and discarding. The response's data here contains data of the created Task which is vital for identifying purposes like deleting the task later, it makes no sense to just discard, and is different to what occurs with the cloud task library. --- src/functions/functions-api-client-internal.ts | 10 +++++++--- src/functions/functions.ts | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/functions/functions-api-client-internal.ts b/src/functions/functions-api-client-internal.ts index c3c3859c0d..c936dde954 100644 --- a/src/functions/functions-api-client-internal.ts +++ b/src/functions/functions-api-client-internal.ts @@ -18,7 +18,7 @@ import { App } from '../app'; import { FirebaseApp } from '../app/firebase-app'; import { - HttpRequestConfig, HttpClient, RequestResponseError, AuthorizedHttpClient + AuthorizedHttpClient, HttpClient, HttpRequestConfig, RequestResponse, RequestResponseError } from '../utils/api-request'; import { PrefixedFirebaseError } from '../utils/error'; import * as utils from '../utils/index'; @@ -121,7 +121,11 @@ export class FunctionsApiClient { * @param extensionId - Optional canonical ID of the extension. * @param opts - Optional options when enqueuing a new task. */ - public async enqueue(data: any, functionName: string, extensionId?: string, opts?: TaskOptions): Promise { + public async enqueue( + data: any, + functionName: string, + extensionId?: string, + opts?: TaskOptions): Promise { if (!validator.isNonEmptyString(functionName)) { throw new FirebaseFunctionsError( 'invalid-argument', 'Function name must be a non empty string'); @@ -159,7 +163,7 @@ export class FunctionsApiClient { task: taskPayload, } }; - await this.httpClient.send(request); + return this.httpClient.send(request); } catch (err: unknown) { if (err instanceof RequestResponseError) { if (err.response.status === 409) { diff --git a/src/functions/functions.ts b/src/functions/functions.ts index f5a3ce6153..457b68b1f1 100644 --- a/src/functions/functions.ts +++ b/src/functions/functions.ts @@ -18,6 +18,7 @@ import { App } from '../app'; import { FirebaseFunctionsError, FunctionsApiClient } from './functions-api-client-internal'; import { TaskOptions } from './functions-api'; +import { RequestResponse } from '../utils/api-request'; import * as validator from '../utils/validator'; /** @@ -99,7 +100,7 @@ export class TaskQueue> { * @param opts - Optional options when enqueuing a new task. * @returns A promise that resolves when the task has successfully been added to the queue. */ - public enqueue(data: Args, opts?: TaskOptions): Promise { + public enqueue(data: Args, opts?: TaskOptions): Promise { return this.client.enqueue(data, this.functionName, this.extensionId, opts); } From ef198f6673d1b5954d167b4a955c4290ab892e3a Mon Sep 17 00:00:00 2001 From: seaders Date: Thu, 28 Nov 2024 19:17:49 +0000 Subject: [PATCH 2/2] Await within enqueue to catch any http error --- src/functions/functions-api-client-internal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/functions/functions-api-client-internal.ts b/src/functions/functions-api-client-internal.ts index c936dde954..14a5a0cf52 100644 --- a/src/functions/functions-api-client-internal.ts +++ b/src/functions/functions-api-client-internal.ts @@ -163,7 +163,7 @@ export class FunctionsApiClient { task: taskPayload, } }; - return this.httpClient.send(request); + return await this.httpClient.send(request); } catch (err: unknown) { if (err instanceof RequestResponseError) { if (err.response.status === 409) {