From 8a3e284da17f33b6936c7c5e6ac2322d9e8bb1c7 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Thu, 11 Apr 2019 15:16:54 -0700 Subject: [PATCH 1/5] Implement functions service delete. --- packages/functions/src/api/service.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/functions/src/api/service.ts b/packages/functions/src/api/service.ts index c0e757a4fa8..bb750292f6f 100644 --- a/packages/functions/src/api/service.ts +++ b/packages/functions/src/api/service.ts @@ -57,6 +57,8 @@ export class Service implements FirebaseFunctions { private readonly contextProvider: ContextProvider; private readonly serializer = new Serializer(); private emulatorOrigin: string | null = null; + private cancelAllRequests: Promise; + private deleteService: Function; /** * Creates a new Functions service for the given app and (optional) region. @@ -68,12 +70,25 @@ export class Service implements FirebaseFunctions { private region_: string = 'us-central1' ) { this.contextProvider = new ContextProvider(app_); + // Cancels all ongoing requests when resolved. + this.cancelAllRequests = new Promise(resolve => { + this.deleteService = () => { + resolve(); + } + }); } get app(): FirebaseApp { return this.app_; } + INTERNAL = { + delete: (): Promise => { + this.deleteService(); + return Promise.resolve(); + } + }; + /** * Returns the URL for a callable with the given name. * @param name The name of the callable. @@ -184,9 +199,15 @@ export class Service implements FirebaseFunctions { const response = await Promise.race([ this.postJSON(url, body, headers), - failAfter(timeout) + failAfter(timeout), + this.cancelAllRequests ]); + // If service was deleted, interrupted response returns undefined. + if (!response) { + return; + } + // Check for an error status, regardless of http status. const error = _errorForResponse( response.status, From fed0036cf5f5f7ae28e4ce6593b50f8a5a55a08f Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Thu, 11 Apr 2019 15:17:01 -0700 Subject: [PATCH 2/5] [AUTOMATED]: Prettier Code Styling --- packages/functions/src/api/service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/functions/src/api/service.ts b/packages/functions/src/api/service.ts index bb750292f6f..f03ffa16c95 100644 --- a/packages/functions/src/api/service.ts +++ b/packages/functions/src/api/service.ts @@ -74,7 +74,7 @@ export class Service implements FirebaseFunctions { this.cancelAllRequests = new Promise(resolve => { this.deleteService = () => { resolve(); - } + }; }); } From 2edd32c415639b90f8263139898cfd6868ea1b59 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Fri, 12 Apr 2019 14:00:53 -0700 Subject: [PATCH 3/5] Make functions Service implement FirebaseService --- packages/functions/src/api/service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/functions/src/api/service.ts b/packages/functions/src/api/service.ts index f03ffa16c95..ca114e4c4b9 100644 --- a/packages/functions/src/api/service.ts +++ b/packages/functions/src/api/service.ts @@ -16,6 +16,7 @@ */ import { FirebaseApp } from '@firebase/app-types'; +import { FirebaseService } from '@firebase/app-types/private'; import firebase from '@firebase/app'; import { FirebaseFunctions, @@ -53,7 +54,7 @@ function failAfter(millis: number): Promise { /** * The main class for the Firebase Functions SDK. */ -export class Service implements FirebaseFunctions { +export class Service implements FirebaseFunctions, FirebaseService { private readonly contextProvider: ContextProvider; private readonly serializer = new Serializer(); private emulatorOrigin: string | null = null; From 32ab280230f085a5acbcfbf81d44aaffa308fbb8 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Mon, 15 Apr 2019 13:30:39 -0700 Subject: [PATCH 4/5] Clean up deleteService --- packages/functions/src/api/service.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/functions/src/api/service.ts b/packages/functions/src/api/service.ts index ca114e4c4b9..3c0dd84a434 100644 --- a/packages/functions/src/api/service.ts +++ b/packages/functions/src/api/service.ts @@ -74,7 +74,7 @@ export class Service implements FirebaseFunctions, FirebaseService { // Cancels all ongoing requests when resolved. this.cancelAllRequests = new Promise(resolve => { this.deleteService = () => { - resolve(); + return resolve(); }; }); } @@ -85,8 +85,7 @@ export class Service implements FirebaseFunctions, FirebaseService { INTERNAL = { delete: (): Promise => { - this.deleteService(); - return Promise.resolve(); + return this.deleteService(); } }; @@ -206,7 +205,10 @@ export class Service implements FirebaseFunctions, FirebaseService { // If service was deleted, interrupted response returns undefined. if (!response) { - return; + throw new HttpsErrorImpl( + 'cancelled', + 'Firebase Functions instance was deleted.' + ); } // Check for an error status, regardless of http status. From 0425a5ba37cd985ea6cc06ef2f20efa986608d03 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Mon, 15 Apr 2019 13:58:39 -0700 Subject: [PATCH 5/5] Update comment --- packages/functions/src/api/service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/functions/src/api/service.ts b/packages/functions/src/api/service.ts index 3c0dd84a434..c02c6c5e4d7 100644 --- a/packages/functions/src/api/service.ts +++ b/packages/functions/src/api/service.ts @@ -203,7 +203,7 @@ export class Service implements FirebaseFunctions, FirebaseService { this.cancelAllRequests ]); - // If service was deleted, interrupted response returns undefined. + // If service was deleted, interrupted response throws an error. if (!response) { throw new HttpsErrorImpl( 'cancelled',