From 9e78d2c0bd047e1b0bf3d769ef02f90ddbbc02f3 Mon Sep 17 00:00:00 2001 From: Thomas Bouldin Date: Wed, 3 Apr 2024 07:53:46 -0700 Subject: [PATCH 1/3] Ugly typesafety --- spec/v2/providers/firestore.spec.ts | 73 +++++++++++++ src/v2/providers/firestore.ts | 157 ++++++++++++++++++++-------- 2 files changed, 185 insertions(+), 45 deletions(-) diff --git a/spec/v2/providers/firestore.spec.ts b/spec/v2/providers/firestore.spec.ts index 77ed0aa1d..954593903 100644 --- a/spec/v2/providers/firestore.spec.ts +++ b/spec/v2/providers/firestore.spec.ts @@ -86,6 +86,15 @@ function makeEvent(data?: any): firestore.RawFirestoreEvent { } as firestore.RawFirestoreEvent; } +function makeAuthEvent(data?: any): firestore.RawFirestoreAuthEvent { + return { + ...eventBase, + data, + userId: "userId", + authType: "user", + } as firestore.RawFirestoreAuthEvent; +} + const createdData = { value: { fields: { @@ -912,6 +921,38 @@ describe("firestore", () => { }); }); + describe("makeFirestoreAuthEvent", () => { + it("should make event from an event without data", () => { + const event = firestore.makeFirestoreAuthEvent( + firestore.createdEventType, + makeAuthEvent(), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data).to.eq(undefined); + }); + + it("should make event from a created event", () => { + const event = firestore.makeFirestoreAuthEvent( + firestore.createdEventType, + makeAuthEvent(makeEncodedProtobuf(createdProto)), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data.data()).to.deep.eq({ hello: "create world" }); + }); + + it("should make event from a deleted event", () => { + const event = firestore.makeFirestoreAuthEvent( + firestore.deletedEventType, + makeAuthEvent(makeEncodedProtobuf(deletedProto)), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data.data()).to.deep.eq({ hello: "delete world" }); + }); + }); + describe("makeChangedFirestoreEvent", () => { it("should make event from an event without data", () => { const event = firestore.makeChangedFirestoreEvent( @@ -943,6 +984,38 @@ describe("firestore", () => { }); }); + describe("makeChangedFirestoreEvent", () => { + it("should make event from an event without data", () => { + const event = firestore.makeChangedFirestoreAuthEvent( + makeAuthEvent(), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data).to.eq(undefined); + }); + + it("should make event from an updated event", () => { + const event = firestore.makeChangedFirestoreEvent( + makeAuthEvent(makeEncodedProtobuf(updatedProto)), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data.before.data()).to.deep.eq({ hello: "old world" }); + expect(event.data.after.data()).to.deep.eq({ hello: "new world" }); + }); + + it("should make event from a written event", () => { + const event = firestore.makeChangedFirestoreEvent( + makeAuthEvent(makeEncodedProtobuf(writtenProto)), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); + + expect(event.data.before.data()).to.deep.eq({}); + expect(event.data.after.data()).to.deep.eq({ hello: "a new world" }); + }); + }); + + describe("makeEndpoint", () => { it("should make an endpoint with a document path pattern", () => { const expectedEp = makeExpectedEp( diff --git a/src/v2/providers/firestore.ts b/src/v2/providers/firestore.ts index 2afcfc332..18d661f1d 100644 --- a/src/v2/providers/firestore.ts +++ b/src/v2/providers/firestore.ts @@ -93,7 +93,11 @@ export interface RawFirestoreEvent extends CloudEvent> extends Clou namespace: string; /** The document path */ document: string; - /** The type of principal that triggered the event */ - authType?: AuthType; - /** The unique identifier for the principal */ - authId?: string; /** * An object containing the values of the path patterns. * Only named capture groups will be populated - {key}, {key=*}, {key=**} @@ -136,6 +136,14 @@ export interface FirestoreEvent> extends Clou params: Params; } +export interface FirestoreAuthEvent> + extends FirestoreEvent { + /** The type of principal that triggered the event */ + authType: AuthType; + /** The unique identifier for the principal */ + authId?: string; +} + /** DocumentOptions extend EventHandlerOptions with provided document and optional database and namespace. */ export interface DocumentOptions extends EventHandlerOptions { /** The document path */ @@ -197,9 +205,9 @@ export function onDocumentWritten( export function onDocumentWrittenWithAuthContext( document: Document, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>>; +): CloudFunction | undefined, ParamsOf>>; /** * Event handler that triggers when a document is created, updated, or deleted in Firestore. @@ -211,9 +219,9 @@ export function onDocumentWrittenWithAuthContext( export function onDocumentWrittenWithAuthContext( opts: DocumentOptions, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>>; +): CloudFunction | undefined, ParamsOf>>; /** * Event handler that triggers when a document is created, updated, or deleted in Firestore. @@ -223,12 +231,14 @@ export function onDocumentWrittenWithAuthContext( * @param handler - Event handler which is run every time a Firestore create, update, or delete occurs. */ export function onDocumentWrittenWithAuthContext( - documentorOpts: Document | DocumentOptions, + documentOrOpts: Document | DocumentOptions, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>> { - return onChangedOperation(writtenEventWithAuthContextType, documentorOpts, handler); +): CloudFunction< + FirestoreAuthEvent | undefined, ParamsOf> +> { + return onChangedOperation(writtenEventWithAuthContextType, documentOrOpts, handler); } /** @@ -282,9 +292,9 @@ export function onDocumentCreated( export function onDocumentCreatedWithAuthContext( document: Document, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>>; +): CloudFunction>>; /** * Event handler that triggers when a document is created in Firestore. @@ -296,9 +306,9 @@ export function onDocumentCreatedWithAuthContext( export function onDocumentCreatedWithAuthContext( opts: DocumentOptions, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>>; +): CloudFunction>>; /** * Event handler that triggers when a document is created in Firestore. @@ -309,9 +319,9 @@ export function onDocumentCreatedWithAuthContext( export function onDocumentCreatedWithAuthContext( documentOrOpts: Document | DocumentOptions, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>> { +): CloudFunction>> { return onOperation(createdEventWithAuthContextType, documentOrOpts, handler); } @@ -365,9 +375,10 @@ export function onDocumentUpdated( export function onDocumentUpdatedWithAuthContext( document: Document, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>>; +): CloudFunction | undefined, ParamsOf>>; + /** * Event handler that triggers when a document is updated in Firestore. * This trigger also provides the authentication context of the principal who triggered the event. @@ -378,9 +389,9 @@ export function onDocumentUpdatedWithAuthContext( export function onDocumentUpdatedWithAuthContext( opts: DocumentOptions, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>>; +): CloudFunction | undefined, ParamsOf>>; /** * Event handler that triggers when a document is updated in Firestore. @@ -391,9 +402,11 @@ export function onDocumentUpdatedWithAuthContext( export function onDocumentUpdatedWithAuthContext( documentOrOpts: Document | DocumentOptions, handler: ( - event: FirestoreEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction | undefined, ParamsOf>> { +): CloudFunction< + FirestoreAuthEvent | undefined, ParamsOf> +> { return onChangedOperation(updatedEventWithAuthContextType, documentOrOpts, handler); } @@ -448,9 +461,9 @@ export function onDocumentDeleted( export function onDocumentDeletedWithAuthContext( document: Document, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>>; +): CloudFunction>>; /** * Event handler that triggers when a document is deleted in Firestore. @@ -462,9 +475,9 @@ export function onDocumentDeletedWithAuthContext( export function onDocumentDeletedWithAuthContext( opts: DocumentOptions, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>>; +): CloudFunction>>; /** * Event handler that triggers when a document is deleted in Firestore. @@ -475,9 +488,9 @@ export function onDocumentDeletedWithAuthContext( export function onDocumentDeletedWithAuthContext( documentOrOpts: Document | DocumentOptions, handler: ( - event: FirestoreEvent> + event: FirestoreAuthEvent> ) => any | Promise -): CloudFunction>> { +): CloudFunction>> { return onOperation(deletedEventWithAuthContextType, documentOrOpts, handler); } @@ -578,9 +591,32 @@ export function makeFirestoreEvent( ...event, params, data, - authType: event.authtype as AuthType, + }; + + delete (firestoreEvent as any).datacontenttype; + delete (firestoreEvent as any).dataschema; + return firestoreEvent; +} + +/** @internal */ +export function makeFirestoreAuthEvent( + eventType: string, + event: RawFirestoreAuthEvent, + params: Params +): FirestoreAuthEvent { + const data = event.data + ? eventType === createdEventType + ? createSnapshot(event) + : createBeforeSnapshot(event) + : undefined; + const firestoreEvent: FirestoreAuthEvent = { + ...event, + params, + data, + authType: event.authtype, authId: event.authid, }; + delete (firestoreEvent as any).datacontenttype; delete (firestoreEvent as any).dataschema; return firestoreEvent; @@ -598,7 +634,24 @@ export function makeChangedFirestoreEvent( ...event, params, data, - authType: event.authtype as AuthType, + }; + delete (firestoreEvent as any).datacontenttype; + delete (firestoreEvent as any).dataschema; + return firestoreEvent; +} + +export function makeChangedFirestoreAuthEvent( + event: RawFirestoreAuthEvent, + params: Params +): FirestoreAuthEvent | undefined, Params> { + const data = event.data + ? Change.fromObjects(createBeforeSnapshot(event), createSnapshot(event)) + : undefined; + const firestoreEvent: FirestoreAuthEvent | undefined, Params> = { + ...event, + params, + data, + authType: event.authtype, authId: event.authid, }; delete (firestoreEvent as any).datacontenttype; @@ -649,21 +702,29 @@ export function makeEndpoint( } /** @internal */ -export function onOperation( +export function onOperation< + Document extends string, + Event extends + | FirestoreEvent> + | FirestoreAuthEvent> +>( eventType: string, documentOrOpts: Document | DocumentOptions, - handler: (event: FirestoreEvent>) => any | Promise -): CloudFunction>> { + handler: (event: Event) => any | Promise +): CloudFunction { const { document, database, namespace, opts } = getOpts(documentOrOpts); // wrap the handler const func = (raw: CloudEvent) => { - const event = raw as RawFirestoreEvent; + const event = raw as RawFirestoreEvent | RawFirestoreAuthEvent; const documentPattern = new PathPattern( typeof document === "string" ? document : document.value() ); const params = makeParams(event.document, documentPattern) as unknown as ParamsOf; - const firestoreEvent = makeFirestoreEvent(eventType, event, params); + const firestoreEvent = + "authid" in raw + ? makeFirestoreAuthEvent(eventType, event, params) + : makeFirestoreEvent(eventType, event, params); return wrapTraceContext(withInit(handler))(firestoreEvent); }; @@ -675,23 +736,29 @@ export function onOperation( } /** @internal */ -export function onChangedOperation( +export function onChangedOperation< + Document extends string, + Event extends + | FirestoreEvent, ParamsOf> + | FirestoreAuthEvent, ParamsOf> +>( eventType: string, documentOrOpts: Document | DocumentOptions, - handler: ( - event: FirestoreEvent, ParamsOf> - ) => any | Promise -): CloudFunction, ParamsOf>> { + handler: (event: Event) => any | Promise +): CloudFunction { const { document, database, namespace, opts } = getOpts(documentOrOpts); // wrap the handler const func = (raw: CloudEvent) => { - const event = raw as RawFirestoreEvent; + const event = raw as RawFirestoreEvent | RawFirestoreAuthEvent; const documentPattern = new PathPattern( typeof document === "string" ? document : document.value() ); const params = makeParams(event.document, documentPattern) as unknown as ParamsOf; - const firestoreEvent = makeChangedFirestoreEvent(event, params); + const firestoreEvent = + "authid" in raw + ? makeChangedFirestoreAuthEvent(event, params) + : makeChangedFirestoreEvent(event, params); return wrapTraceContext(withInit(handler))(firestoreEvent); }; From a99f8ea2584427e9e1dfb3b587f4d647323f5f70 Mon Sep 17 00:00:00 2001 From: Thomas Bouldin Date: Wed, 3 Apr 2024 08:30:55 -0700 Subject: [PATCH 2/3] Formatter --- spec/v2/providers/firestore.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/v2/providers/firestore.spec.ts b/spec/v2/providers/firestore.spec.ts index 954593903..c098d6c67 100644 --- a/spec/v2/providers/firestore.spec.ts +++ b/spec/v2/providers/firestore.spec.ts @@ -1015,7 +1015,6 @@ describe("firestore", () => { }); }); - describe("makeEndpoint", () => { it("should make an endpoint with a document path pattern", () => { const expectedEp = makeExpectedEp( From 34761bda4a8c37bd78ad49834e53ffd6af170346 Mon Sep 17 00:00:00 2001 From: Brian Li Date: Wed, 3 Apr 2024 17:49:50 -0400 Subject: [PATCH 3/3] consolidate make firestore event fns and simplify typings --- spec/v2/providers/firestore.spec.ts | 68 +++++------------- src/v2/providers/firestore.ts | 106 +++++++++++----------------- 2 files changed, 59 insertions(+), 115 deletions(-) diff --git a/spec/v2/providers/firestore.spec.ts b/spec/v2/providers/firestore.spec.ts index c098d6c67..24a10e4a2 100644 --- a/spec/v2/providers/firestore.spec.ts +++ b/spec/v2/providers/firestore.spec.ts @@ -40,8 +40,6 @@ const eventBase = { datacontenttype: "application/protobuf", dataschema: "https://github.com/googleapis/google-cloudevents/blob/main/proto/google/events/cloud/firestore/v1/data.proto", - authtype: "unknown", - authid: "1234", id: "379ad868-5ef9-4c84-a8ba-f75f1b056663", source: "projects/my-project/databases/my-db/documents/d", subject: "documents/foo/fGRodw71mHutZ4wGDuT8", @@ -90,8 +88,8 @@ function makeAuthEvent(data?: any): firestore.RawFirestoreAuthEvent { return { ...eventBase, data, - userId: "userId", - authType: "user", + authid: "userId", + authtype: "unknown", } as firestore.RawFirestoreAuthEvent; } @@ -919,22 +917,10 @@ describe("firestore", () => { expect(event.data.data()).to.deep.eq({ hello: "delete world" }); }); - }); - - describe("makeFirestoreAuthEvent", () => { - it("should make event from an event without data", () => { - const event = firestore.makeFirestoreAuthEvent( - firestore.createdEventType, - makeAuthEvent(), - firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) - ); - expect(event.data).to.eq(undefined); - }); - - it("should make event from a created event", () => { - const event = firestore.makeFirestoreAuthEvent( - firestore.createdEventType, + it("should make event from a created event with auth context", () => { + const event = firestore.makeFirestoreEvent( + firestore.createdEventWithAuthContextType, makeAuthEvent(makeEncodedProtobuf(createdProto)), firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) ); @@ -942,14 +928,14 @@ describe("firestore", () => { expect(event.data.data()).to.deep.eq({ hello: "create world" }); }); - it("should make event from a deleted event", () => { - const event = firestore.makeFirestoreAuthEvent( - firestore.deletedEventType, - makeAuthEvent(makeEncodedProtobuf(deletedProto)), + it("should include auth fields if provided in raw event", () => { + const event = firestore.makeFirestoreEvent( + firestore.createdEventWithAuthContextType, + makeAuthEvent(makeEncodedProtobuf(createdProto)), firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) ); - expect(event.data.data()).to.deep.eq({ hello: "delete world" }); + expect(event).to.include({ authId: "userId", authType: "unknown" }); }); }); @@ -984,35 +970,13 @@ describe("firestore", () => { }); }); - describe("makeChangedFirestoreEvent", () => { - it("should make event from an event without data", () => { - const event = firestore.makeChangedFirestoreAuthEvent( - makeAuthEvent(), - firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) - ); - - expect(event.data).to.eq(undefined); - }); + it("should include auth fields if provided in raw event", () => { + const event = firestore.makeChangedFirestoreEvent( + makeAuthEvent(makeEncodedProtobuf(writtenProto)), + firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) + ); - it("should make event from an updated event", () => { - const event = firestore.makeChangedFirestoreEvent( - makeAuthEvent(makeEncodedProtobuf(updatedProto)), - firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) - ); - - expect(event.data.before.data()).to.deep.eq({ hello: "old world" }); - expect(event.data.after.data()).to.deep.eq({ hello: "new world" }); - }); - - it("should make event from a written event", () => { - const event = firestore.makeChangedFirestoreEvent( - makeAuthEvent(makeEncodedProtobuf(writtenProto)), - firestore.makeParams("foo/fGRodw71mHutZ4wGDuT8", new PathPattern("foo/{bar}")) - ); - - expect(event.data.before.data()).to.deep.eq({}); - expect(event.data.after.data()).to.deep.eq({ hello: "a new world" }); - }); + expect(event).to.include({ authId: "userId", authType: "unknown" }); }); describe("makeEndpoint", () => { diff --git a/src/v2/providers/firestore.ts b/src/v2/providers/firestore.ts index 18d661f1d..039125108 100644 --- a/src/v2/providers/firestore.ts +++ b/src/v2/providers/firestore.ts @@ -233,11 +233,16 @@ export function onDocumentWrittenWithAuthContext( export function onDocumentWrittenWithAuthContext( documentOrOpts: Document | DocumentOptions, handler: ( - event: FirestoreAuthEvent | undefined, ParamsOf> + event: FirestoreAuthEvent | undefined, ParamsOf> ) => any | Promise -): CloudFunction< - FirestoreAuthEvent | undefined, ParamsOf> -> { +): CloudFunction | undefined, ParamsOf>> { + // const fn = ( + // event: FirestoreEvent | undefined, ParamsOf> & { + // foo: string; + // } + // ): any => { + // return event; + // }; return onChangedOperation(writtenEventWithAuthContextType, documentOrOpts, handler); } @@ -579,11 +584,13 @@ export function makeParams(document: string, documentPattern: PathPattern) { /** @internal */ export function makeFirestoreEvent( eventType: string, - event: RawFirestoreEvent, + event: RawFirestoreEvent | RawFirestoreAuthEvent, params: Params -): FirestoreEvent { +): + | FirestoreEvent + | FirestoreAuthEvent { const data = event.data - ? eventType === createdEventType + ? eventType === createdEventType || eventType === createdEventWithAuthContextType ? createSnapshot(event) : createBeforeSnapshot(event) : undefined; @@ -595,38 +602,28 @@ export function makeFirestoreEvent( delete (firestoreEvent as any).datacontenttype; delete (firestoreEvent as any).dataschema; - return firestoreEvent; -} -/** @internal */ -export function makeFirestoreAuthEvent( - eventType: string, - event: RawFirestoreAuthEvent, - params: Params -): FirestoreAuthEvent { - const data = event.data - ? eventType === createdEventType - ? createSnapshot(event) - : createBeforeSnapshot(event) - : undefined; - const firestoreEvent: FirestoreAuthEvent = { - ...event, - params, - data, - authType: event.authtype, - authId: event.authid, - }; + if ("authtype" in event) { + const eventWithAuth = { + ...firestoreEvent, + authType: event.authtype, + authId: event.authid, + }; + delete (eventWithAuth as any).authtype; + delete (eventWithAuth as any).authid; + return eventWithAuth; + } - delete (firestoreEvent as any).datacontenttype; - delete (firestoreEvent as any).dataschema; return firestoreEvent; } /** @internal */ export function makeChangedFirestoreEvent( - event: RawFirestoreEvent, + event: RawFirestoreEvent | RawFirestoreAuthEvent, params: Params -): FirestoreEvent | undefined, Params> { +): + | FirestoreEvent | undefined, Params> + | FirestoreAuthEvent | undefined, Params> { const data = event.data ? Change.fromObjects(createBeforeSnapshot(event), createSnapshot(event)) : undefined; @@ -637,25 +634,18 @@ export function makeChangedFirestoreEvent( }; delete (firestoreEvent as any).datacontenttype; delete (firestoreEvent as any).dataschema; - return firestoreEvent; -} -export function makeChangedFirestoreAuthEvent( - event: RawFirestoreAuthEvent, - params: Params -): FirestoreAuthEvent | undefined, Params> { - const data = event.data - ? Change.fromObjects(createBeforeSnapshot(event), createSnapshot(event)) - : undefined; - const firestoreEvent: FirestoreAuthEvent | undefined, Params> = { - ...event, - params, - data, - authType: event.authtype, - authId: event.authid, - }; - delete (firestoreEvent as any).datacontenttype; - delete (firestoreEvent as any).dataschema; + if ("authtype" in event) { + const eventWithAuth = { + ...firestoreEvent, + authType: event.authtype, + authId: event.authid, + }; + delete (eventWithAuth as any).authtype; + delete (eventWithAuth as any).authid; + return eventWithAuth; + } + return firestoreEvent; } @@ -704,9 +694,7 @@ export function makeEndpoint( /** @internal */ export function onOperation< Document extends string, - Event extends - | FirestoreEvent> - | FirestoreAuthEvent> + Event extends FirestoreEvent> >( eventType: string, documentOrOpts: Document | DocumentOptions, @@ -721,10 +709,7 @@ export function onOperation< typeof document === "string" ? document : document.value() ); const params = makeParams(event.document, documentPattern) as unknown as ParamsOf; - const firestoreEvent = - "authid" in raw - ? makeFirestoreAuthEvent(eventType, event, params) - : makeFirestoreEvent(eventType, event, params); + const firestoreEvent = makeFirestoreEvent(eventType, event, params); return wrapTraceContext(withInit(handler))(firestoreEvent); }; @@ -738,9 +723,7 @@ export function onOperation< /** @internal */ export function onChangedOperation< Document extends string, - Event extends - | FirestoreEvent, ParamsOf> - | FirestoreAuthEvent, ParamsOf> + Event extends FirestoreEvent, ParamsOf> >( eventType: string, documentOrOpts: Document | DocumentOptions, @@ -755,10 +738,7 @@ export function onChangedOperation< typeof document === "string" ? document : document.value() ); const params = makeParams(event.document, documentPattern) as unknown as ParamsOf; - const firestoreEvent = - "authid" in raw - ? makeChangedFirestoreAuthEvent(event, params) - : makeChangedFirestoreEvent(event, params); + const firestoreEvent = makeChangedFirestoreEvent(event, params); return wrapTraceContext(withInit(handler))(firestoreEvent); };