Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/v1/providers/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ export const provider = "google.analytics";
/** @internal */
export const service = "app-measurement.com";

/** Handler used by {@link AnalyticsEventBuilder.onLog}. */
export type OnLogHandler = (event: AnalyticsEvent, context: EventContext) => PromiseLike<any> | any;

/**
* Registers a function to handle analytics events.
*
Expand Down Expand Up @@ -75,9 +78,7 @@ export class AnalyticsEventBuilder {
*
* @returns A function that you can export and deploy.
*/
onLog(
handler: (event: AnalyticsEvent, context: EventContext) => PromiseLike<any> | any
): CloudFunction<AnalyticsEvent> {
onLog(handler: OnLogHandler): CloudFunction<AnalyticsEvent> {
const dataConstructor = (raw: LegacyEvent) => {
return new AnalyticsEvent(raw.data);
};
Expand Down
56 changes: 32 additions & 24 deletions src/v1/providers/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,32 @@ export type { UserRecord, UserInfo };

export { HttpsError };

/** Handler used by {@link UserBuilder.onCreate}. */
export type OnCreateHandler = (user: UserRecord, context: EventContext) => PromiseLike<any> | any;

/** Handler used by {@link UserBuilder.onDelete}. */
export type OnDeleteHandler = OnCreateHandler;

/** Handler used by {@link UserBuilder.beforeCreate}. */
export type BeforeCreateHandler = (
user: AuthUserRecord,
context: AuthEventContext
) => MaybeAsync<BeforeCreateResponse | void>;

/** Handler used by {@link UserBuilder.beforeSignIn}. */
export type BeforeSignInHandler = (
user: AuthUserRecord,
context: AuthEventContext
) => MaybeAsync<BeforeSignInResponse | void>;

/** Handler used by {@link UserBuilder.beforeEmail}. */
export type BeforeEmailHandler = (
context: AuthEventContext
) => MaybeAsync<BeforeEmailResponse | void>;

/** Handler used by {@link UserBuilder.beforeSms}. */
export type BeforeSmsHandler = (context: AuthEventContext) => MaybeAsync<BeforeSmsResponse | void>;

/** @internal */
export const provider = "google.firebase.auth";
/** @internal */
Expand Down Expand Up @@ -126,9 +152,7 @@ export class UserBuilder {
*
* @public
*/
onCreate(
handler: (user: UserRecord, context: EventContext) => PromiseLike<any> | any
): CloudFunction<UserRecord> {
onCreate(handler: OnCreateHandler): CloudFunction<UserRecord> {
return this.onOperation(handler, "user.create");
}

Expand All @@ -139,9 +163,7 @@ export class UserBuilder {
*
* @public
*/
onDelete(
handler: (user: UserRecord, context: EventContext) => PromiseLike<any> | any
): CloudFunction<UserRecord> {
onDelete(handler: OnDeleteHandler): CloudFunction<UserRecord> {
return this.onOperation(handler, "user.delete");
}

Expand All @@ -152,12 +174,7 @@ export class UserBuilder {
*
* @public
*/
beforeCreate(
handler: (
user: AuthUserRecord,
context: AuthEventContext
) => MaybeAsync<BeforeCreateResponse | void>
): BlockingFunction {
beforeCreate(handler: BeforeCreateHandler): BlockingFunction {
return this.beforeOperation(handler, "beforeCreate");
}

Expand All @@ -168,24 +185,15 @@ export class UserBuilder {
*
* @public
*/
beforeSignIn(
handler: (
user: AuthUserRecord,
context: AuthEventContext
) => MaybeAsync<BeforeSignInResponse | void>
): BlockingFunction {
beforeSignIn(handler: BeforeSignInHandler): BlockingFunction {
return this.beforeOperation(handler, "beforeSignIn");
}

beforeEmail(
handler: (context: AuthEventContext) => MaybeAsync<BeforeEmailResponse | void>
): BlockingFunction {
beforeEmail(handler: BeforeEmailHandler): BlockingFunction {
return this.beforeOperation(handler, "beforeSendEmail");
}

beforeSms(
handler: (context: AuthEventContext) => MaybeAsync<BeforeSmsResponse | void>
): BlockingFunction {
beforeSms(handler: BeforeSmsHandler): BlockingFunction {
return this.beforeOperation(handler, "beforeSendSms");
}

Expand Down
46 changes: 22 additions & 24 deletions src/v1/providers/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,24 @@ import { expr } from "../../params";

export { DataSnapshot };

/** Handler used by {@link RefBuilder.onWrite}. */
export type OnWriteHandler<Ref extends string = string> = (
change: Change<DataSnapshot>,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any;

/** Handler used by {@link RefBuilder.onUpdate}. */
export type OnUpdateHandler<Ref extends string = string> = OnWriteHandler<Ref>;

/** Handler used by {@link RefBuilder.onCreate}. */
export type OnCreateHandler<Ref extends string = string> = (
snapshot: DataSnapshot,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any;

/** Handler used by {@link RefBuilder.onDelete}. */
export type OnDeleteHandler<Ref extends string = string> = OnCreateHandler<Ref>;

/** @internal */
export const provider = "google.firebase.database";
/** @internal */
Expand Down Expand Up @@ -182,12 +200,7 @@ export class RefBuilder<Ref extends string> {
* write occurs.
* @returns A function that you can export and deploy.
*/
onWrite(
handler: (
change: Change<DataSnapshot>,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any
): CloudFunction<Change<DataSnapshot>> {
onWrite(handler: OnWriteHandler<Ref>): CloudFunction<Change<DataSnapshot>> {
return this.onOperation(handler, "ref.write", this.changeConstructor);
}

Expand All @@ -199,12 +212,7 @@ export class RefBuilder<Ref extends string> {
* write occurs.
* @returns A function which you can export and deploy.
*/
onUpdate(
handler: (
change: Change<DataSnapshot>,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any
): CloudFunction<Change<DataSnapshot>> {
onUpdate(handler: OnUpdateHandler<Ref>): CloudFunction<Change<DataSnapshot>> {
return this.onOperation(handler, "ref.update", this.changeConstructor);
}

Expand All @@ -216,12 +224,7 @@ export class RefBuilder<Ref extends string> {
* Firebase Realtime Database.
* @returns A function that you can export and deploy.
*/
onCreate(
handler: (
snapshot: DataSnapshot,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any
): CloudFunction<DataSnapshot> {
onCreate(handler: OnCreateHandler<Ref>): CloudFunction<DataSnapshot> {
const dataConstructor = (raw: LegacyEvent) => {
const [dbInstance, path] = extractInstanceAndPath(
raw.context.resource.name,
Expand All @@ -240,12 +243,7 @@ export class RefBuilder<Ref extends string> {
* Firebase Realtime Database.
* @returns A function that you can export and deploy.
*/
onDelete(
handler: (
snapshot: DataSnapshot,
context: EventContext<ParamsOf<Ref>>
) => PromiseLike<any> | any
): CloudFunction<DataSnapshot> {
onDelete(handler: OnDeleteHandler<Ref>): CloudFunction<DataSnapshot> {
const dataConstructor = (raw: LegacyEvent) => {
const [dbInstance, path] = extractInstanceAndPath(
raw.context.resource.name,
Expand Down
49 changes: 25 additions & 24 deletions src/v1/providers/firestore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,27 @@ export const defaultDatabase = "(default)";
export type DocumentSnapshot = firestore.DocumentSnapshot;
export type QueryDocumentSnapshot = firestore.QueryDocumentSnapshot;

/** Handler used by {@link DocumentBuilder.onWrite}. */
export type OnWriteHandler<Path extends string = string> = (
change: Change<DocumentSnapshot>,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any;

/** Handler used by {@link DocumentBuilder.onUpdate}. */
export type OnUpdateHandler<Path extends string = string> = (
change: Change<QueryDocumentSnapshot>,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any;

/** Handler used by {@link DocumentBuilder.onCreate}. */
export type OnCreateHandler<Path extends string = string> = (
snapshot: QueryDocumentSnapshot,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any;

/** Handler used by {@link DocumentBuilder.onDelete}. */
export type OnDeleteHandler<Path extends string = string> = OnCreateHandler<Path>;

/**
* Select the Firestore document to listen to for events.
* @param path Full database path to listen to. This includes the name of
Expand Down Expand Up @@ -166,42 +187,22 @@ export class DocumentBuilder<Path extends string> {
}

/** Respond to all document writes (creates, updates, or deletes). */
onWrite(
handler: (
change: Change<DocumentSnapshot>,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any
): CloudFunction<Change<DocumentSnapshot>> {
onWrite(handler: OnWriteHandler<Path>): CloudFunction<Change<DocumentSnapshot>> {
return this.onOperation(handler, "document.write", changeConstructor);
}

/** Respond only to document updates. */
onUpdate(
handler: (
change: Change<QueryDocumentSnapshot>,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any
): CloudFunction<Change<QueryDocumentSnapshot>> {
onUpdate(handler: OnUpdateHandler<Path>): CloudFunction<Change<QueryDocumentSnapshot>> {
return this.onOperation(handler, "document.update", changeConstructor);
}

/** Respond only to document creations. */
onCreate(
handler: (
snapshot: QueryDocumentSnapshot,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any
): CloudFunction<QueryDocumentSnapshot> {
onCreate(handler: OnCreateHandler<Path>): CloudFunction<QueryDocumentSnapshot> {
return this.onOperation(handler, "document.create", snapshotConstructor);
}

/** Respond only to document deletions. */
onDelete(
handler: (
snapshot: QueryDocumentSnapshot,
context: EventContext<ParamsOf<Path>>
) => PromiseLike<any> | any
): CloudFunction<QueryDocumentSnapshot> {
onDelete(handler: OnDeleteHandler<Path>): CloudFunction<QueryDocumentSnapshot> {
return this.onOperation(handler, "document.delete", beforeSnapshotConstructor);
}

Expand Down
20 changes: 11 additions & 9 deletions src/v1/providers/https.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

import * as express from "express";
import type * as express from "express";

import { convertIfPresent, convertInvoker } from "../../common/encoding";
import {
Expand All @@ -40,30 +40,32 @@ import { wrapTraceContext } from "../../v2/trace";
export { HttpsError };
export type { Request, CallableContext, FunctionsErrorCode };

/** Handler used by {@link onRequest}. */
export type OnRequestHandler = (req: Request, resp: express.Response) => void | Promise<void>;

/** Handler used by {@link onCall}. */
export type OnCallHandler = (data: any, context: CallableContext) => any | Promise<any>;

/**
* Handle HTTP requests.
* @param handler A function that takes a request and response object,
* same signature as an Express app.
*/
export function onRequest(
handler: (req: Request, resp: express.Response) => void | Promise<void>
): HttpsFunction {
export function onRequest(handler: OnRequestHandler): HttpsFunction {
return _onRequestWithOptions(handler, {});
}

/**
* Declares a callable method for clients to call using a Firebase SDK.
* @param handler A method that takes a data and context and returns a value.
*/
export function onCall(
handler: (data: any, context: CallableContext) => any | Promise<any>
): HttpsFunction & Runnable<any> {
export function onCall(handler: OnCallHandler): HttpsFunction & Runnable<any> {
return _onCallWithOptions(handler, {});
}

/** @internal */
export function _onRequestWithOptions(
handler: (req: Request, resp: express.Response) => void | Promise<void>,
handler: OnRequestHandler,
options: DeploymentOptions
): HttpsFunction {
// lets us add __endpoint without altering handler:
Expand Down Expand Up @@ -101,7 +103,7 @@ export function _onRequestWithOptions(

/** @internal */
export function _onCallWithOptions(
handler: (data: any, context: CallableContext) => any | Promise<any>,
handler: OnCallHandler,
options: DeploymentOptions
): HttpsFunction & Runnable<any> {
// fix the length of handler to make the call to handler consistent
Expand Down
12 changes: 8 additions & 4 deletions src/v1/providers/pubsub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ export const provider = "google.pubsub";
/** @internal */
export const service = "pubsub.googleapis.com";

/** Handler used by {@link TopicBuilder.onPublish}. */
export type OnPublishHandler = (message: Message, context: EventContext) => PromiseLike<any> | any;

/** Handler used by {@link ScheduleBuilder.onRun}. */
export type OnRunHandler = (context: EventContext) => PromiseLike<any> | any;

/**
* Registers a Cloud Function triggered when a Google Cloud Pub/Sub message
* is sent to a specified topic.
Expand Down Expand Up @@ -79,9 +85,7 @@ export class TopicBuilder {
* is published.
* @returns A function that you can export and deploy.
*/
onPublish(
handler: (message: Message, context: EventContext) => PromiseLike<any> | any
): CloudFunction<Message> {
onPublish(handler: OnPublishHandler): CloudFunction<Message> {
return makeCloudFunction({
handler,
provider,
Expand Down Expand Up @@ -156,7 +160,7 @@ export class ScheduleBuilder {
* scheduler job sends a Pub/Sub message.
* @returns A function that you can export and deploy.
*/
onRun(handler: (context: EventContext) => PromiseLike<any> | any) {
onRun(handler: OnRunHandler) {
const cloudFunction = makeCloudFunction({
contextOnlyHandler: handler,
provider,
Expand Down
Loading
Loading