firebase-functions 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/providers/identity.d.ts +35 -6
- package/lib/common/providers/identity.js +16 -5
- package/lib/v1/providers/auth.d.ts +5 -3
- package/lib/v1/providers/auth.js +8 -4
- package/lib/v2/index.d.ts +4 -0
- package/lib/v2/index.js +4 -1
- package/lib/v2/providers/identity.d.ts +34 -12
- package/lib/v2/providers/identity.js +28 -12
- package/package.json +3 -3
|
@@ -7,7 +7,7 @@ export { HttpsError };
|
|
|
7
7
|
* @hidden
|
|
8
8
|
* @alpha
|
|
9
9
|
*/
|
|
10
|
-
export type AuthBlockingEventType = "beforeCreate" | "beforeSignIn";
|
|
10
|
+
export type AuthBlockingEventType = "beforeCreate" | "beforeSignIn" | "beforeSendEmail" | "beforeSendSms";
|
|
11
11
|
/**
|
|
12
12
|
* The `UserRecord` passed to Cloud Functions is the same
|
|
13
13
|
* {@link https://firebase.google.com/docs/reference/admin/node/firebase-admin.auth.userrecord | UserRecord}
|
|
@@ -179,11 +179,13 @@ export interface AuthUserRecord {
|
|
|
179
179
|
}
|
|
180
180
|
/** The additional user info component of the auth event context */
|
|
181
181
|
export interface AdditionalUserInfo {
|
|
182
|
-
providerId
|
|
182
|
+
providerId?: string;
|
|
183
183
|
profile?: any;
|
|
184
184
|
username?: string;
|
|
185
185
|
isNewUser: boolean;
|
|
186
186
|
recaptchaScore?: number;
|
|
187
|
+
email?: string;
|
|
188
|
+
phoneNumber?: string;
|
|
187
189
|
}
|
|
188
190
|
/** The credential component of the auth event context */
|
|
189
191
|
export interface Credential {
|
|
@@ -198,6 +200,19 @@ export interface Credential {
|
|
|
198
200
|
providerId: string;
|
|
199
201
|
signInMethod: string;
|
|
200
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Possible types of emails as described by the GCIP backend, which can be:
|
|
205
|
+
* - A sign-in email
|
|
206
|
+
* - A password reset email
|
|
207
|
+
*/
|
|
208
|
+
export type EmailType = "EMAIL_SIGN_IN" | "PASSWORD_RESET";
|
|
209
|
+
/**
|
|
210
|
+
* The type of SMS message, which can be:
|
|
211
|
+
* - A sign-in or sign up SMS message
|
|
212
|
+
* - A multi-factor sign-in SMS message
|
|
213
|
+
* - A multi-factor enrollment SMS message
|
|
214
|
+
*/
|
|
215
|
+
export type SmsType = "SIGN_IN_OR_SIGN_UP" | "MULTI_FACTOR_SIGN_IN" | "MULTI_FACTOR_ENROLLMENT";
|
|
201
216
|
/** Defines the auth event context for blocking events */
|
|
202
217
|
export interface AuthEventContext extends EventContext {
|
|
203
218
|
locale?: string;
|
|
@@ -205,15 +220,23 @@ export interface AuthEventContext extends EventContext {
|
|
|
205
220
|
userAgent: string;
|
|
206
221
|
additionalUserInfo?: AdditionalUserInfo;
|
|
207
222
|
credential?: Credential;
|
|
223
|
+
emailType?: EmailType;
|
|
224
|
+
smsType?: SmsType;
|
|
208
225
|
}
|
|
209
226
|
/** Defines the auth event for 2nd gen blocking events */
|
|
210
227
|
export interface AuthBlockingEvent extends AuthEventContext {
|
|
211
|
-
data
|
|
228
|
+
data?: AuthUserRecord;
|
|
212
229
|
}
|
|
213
|
-
/**
|
|
214
|
-
* The reCAPTCHA action options.
|
|
215
|
-
*/
|
|
230
|
+
/** The reCAPTCHA action options. */
|
|
216
231
|
export type RecaptchaActionOptions = "ALLOW" | "BLOCK";
|
|
232
|
+
/** The handler response type for `beforeEmailSent` blocking events */
|
|
233
|
+
export interface BeforeEmailResponse {
|
|
234
|
+
recaptchaActionOverride?: RecaptchaActionOptions;
|
|
235
|
+
}
|
|
236
|
+
/** The handler response type for `beforeSmsSent` blocking events */
|
|
237
|
+
export interface BeforeSmsResponse {
|
|
238
|
+
recaptchaActionOverride?: RecaptchaActionOptions;
|
|
239
|
+
}
|
|
217
240
|
/** The handler response type for `beforeCreate` blocking events */
|
|
218
241
|
export interface BeforeCreateResponse {
|
|
219
242
|
displayName?: string;
|
|
@@ -227,3 +250,9 @@ export interface BeforeCreateResponse {
|
|
|
227
250
|
export interface BeforeSignInResponse extends BeforeCreateResponse {
|
|
228
251
|
sessionClaims?: object;
|
|
229
252
|
}
|
|
253
|
+
export type MaybeAsync<T> = T | Promise<T>;
|
|
254
|
+
export type HandlerV1 = (userOrContext: AuthUserRecord | AuthEventContext, context?: AuthEventContext) => MaybeAsync<BeforeCreateResponse | BeforeSignInResponse | BeforeEmailResponse | BeforeSmsResponse | void>;
|
|
255
|
+
export type HandlerV2 = (event: AuthBlockingEvent) => MaybeAsync<BeforeCreateResponse | BeforeSignInResponse | BeforeEmailResponse | BeforeSmsResponse | void>;
|
|
256
|
+
export type AuthBlockingEventHandler = (HandlerV1 | HandlerV2) & {
|
|
257
|
+
platform: "gcfv1" | "gcfv2";
|
|
258
|
+
};
|
|
@@ -49,6 +49,8 @@ const CLAIMS_MAX_PAYLOAD_SIZE = 1000;
|
|
|
49
49
|
const EVENT_MAPPING = {
|
|
50
50
|
beforeCreate: "providers/cloud.auth/eventTypes/user.beforeCreate",
|
|
51
51
|
beforeSignIn: "providers/cloud.auth/eventTypes/user.beforeSignIn",
|
|
52
|
+
beforeSendEmail: "providers/cloud.auth/eventTypes/user.beforeSendEmail",
|
|
53
|
+
beforeSendSms: "providers/cloud.auth/eventTypes/user.beforeSendSms",
|
|
52
54
|
};
|
|
53
55
|
/**
|
|
54
56
|
* Helper class to create the user metadata in a `UserRecord` object.
|
|
@@ -302,6 +304,8 @@ function parseAdditionalUserInfo(decodedJWT) {
|
|
|
302
304
|
username,
|
|
303
305
|
isNewUser: decodedJWT.event_type === "beforeCreate" ? true : false,
|
|
304
306
|
recaptchaScore: decodedJWT.recaptcha_score,
|
|
307
|
+
email: decodedJWT.email,
|
|
308
|
+
phoneNumber: decodedJWT.phone_number,
|
|
305
309
|
};
|
|
306
310
|
}
|
|
307
311
|
/**
|
|
@@ -372,6 +376,8 @@ function parseAuthEventContext(decodedJWT, projectId, time = new Date().getTime(
|
|
|
372
376
|
timestamp: new Date(decodedJWT.iat * 1000).toUTCString(),
|
|
373
377
|
additionalUserInfo: parseAdditionalUserInfo(decodedJWT),
|
|
374
378
|
credential: parseAuthCredential(decodedJWT, time),
|
|
379
|
+
emailType: decodedJWT.email_type,
|
|
380
|
+
smsType: decodedJWT.sms_type,
|
|
375
381
|
params: {},
|
|
376
382
|
};
|
|
377
383
|
}
|
|
@@ -443,15 +449,20 @@ function wrapHandler(eventType, handler) {
|
|
|
443
449
|
}
|
|
444
450
|
const decodedPayload = (0, debug_1.isDebugFeatureEnabled)("skipTokenVerification")
|
|
445
451
|
? unsafeDecodeAuthBlockingToken(req.body.data.jwt)
|
|
446
|
-
: handler.
|
|
452
|
+
: handler.platform === "gcfv1"
|
|
447
453
|
? await auth.getAuth((0, app_1.getApp)())._verifyAuthBlockingToken(req.body.data.jwt)
|
|
448
454
|
: await auth.getAuth((0, app_1.getApp)())._verifyAuthBlockingToken(req.body.data.jwt, "run.app");
|
|
449
|
-
|
|
455
|
+
let authUserRecord;
|
|
456
|
+
if (decodedPayload.event_type === "beforeCreate" ||
|
|
457
|
+
decodedPayload.event_type === "beforeSignIn") {
|
|
458
|
+
authUserRecord = parseAuthUserRecord(decodedPayload.user_record);
|
|
459
|
+
}
|
|
450
460
|
const authEventContext = parseAuthEventContext(decodedPayload, projectId);
|
|
451
461
|
let authResponse;
|
|
452
|
-
if (handler.
|
|
453
|
-
authResponse =
|
|
454
|
-
(await handler(authUserRecord, authEventContext)) || undefined
|
|
462
|
+
if (handler.platform === "gcfv1") {
|
|
463
|
+
authResponse = authUserRecord
|
|
464
|
+
? (await handler(authUserRecord, authEventContext)) || undefined
|
|
465
|
+
: (await handler(authEventContext)) || undefined;
|
|
455
466
|
}
|
|
456
467
|
else {
|
|
457
468
|
authResponse =
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthEventContext, AuthUserRecord, BeforeCreateResponse, BeforeSignInResponse, HttpsError, UserInfo, UserRecord, userRecordConstructor, UserRecordMetadata } from "../../common/providers/identity";
|
|
1
|
+
import { AuthEventContext, AuthUserRecord, BeforeCreateResponse, BeforeEmailResponse, BeforeSignInResponse, BeforeSmsResponse, HttpsError, MaybeAsync, UserInfo, UserRecord, userRecordConstructor, UserRecordMetadata } from "../../common/providers/identity";
|
|
2
2
|
import { BlockingFunction, CloudFunction, EventContext } from "../cloud-functions";
|
|
3
3
|
export { UserRecord, UserInfo, UserRecordMetadata, userRecordConstructor };
|
|
4
4
|
export { HttpsError };
|
|
@@ -57,7 +57,7 @@ export declare class UserBuilder {
|
|
|
57
57
|
*
|
|
58
58
|
* @public
|
|
59
59
|
*/
|
|
60
|
-
beforeCreate(handler: (user: AuthUserRecord, context: AuthEventContext) =>
|
|
60
|
+
beforeCreate(handler: (user: AuthUserRecord, context: AuthEventContext) => MaybeAsync<BeforeCreateResponse | void>): BlockingFunction;
|
|
61
61
|
/**
|
|
62
62
|
* Blocks request to sign-in a Firebase Auth user.
|
|
63
63
|
*
|
|
@@ -65,7 +65,9 @@ export declare class UserBuilder {
|
|
|
65
65
|
*
|
|
66
66
|
* @public
|
|
67
67
|
*/
|
|
68
|
-
beforeSignIn(handler: (user: AuthUserRecord, context: AuthEventContext) =>
|
|
68
|
+
beforeSignIn(handler: (user: AuthUserRecord, context: AuthEventContext) => MaybeAsync<BeforeSignInResponse | void>): BlockingFunction;
|
|
69
|
+
beforeEmail(handler: (context: AuthEventContext) => MaybeAsync<BeforeEmailResponse | void>): BlockingFunction;
|
|
70
|
+
beforeSms(handler: (context: AuthEventContext) => MaybeAsync<BeforeSmsResponse | void>): BlockingFunction;
|
|
69
71
|
private onOperation;
|
|
70
72
|
private beforeOperation;
|
|
71
73
|
}
|
package/lib/v1/providers/auth.js
CHANGED
|
@@ -108,6 +108,12 @@ class UserBuilder {
|
|
|
108
108
|
beforeSignIn(handler) {
|
|
109
109
|
return this.beforeOperation(handler, "beforeSignIn");
|
|
110
110
|
}
|
|
111
|
+
beforeEmail(handler) {
|
|
112
|
+
return this.beforeOperation(handler, "beforeSendEmail");
|
|
113
|
+
}
|
|
114
|
+
beforeSms(handler) {
|
|
115
|
+
return this.beforeOperation(handler, "beforeSendSms");
|
|
116
|
+
}
|
|
111
117
|
onOperation(handler, eventType) {
|
|
112
118
|
return (0, cloud_functions_1.makeCloudFunction)({
|
|
113
119
|
handler,
|
|
@@ -126,10 +132,8 @@ class UserBuilder {
|
|
|
126
132
|
const accessToken = ((_b = (_a = this.userOptions) === null || _a === void 0 ? void 0 : _a.blockingOptions) === null || _b === void 0 ? void 0 : _b.accessToken) || false;
|
|
127
133
|
const idToken = ((_d = (_c = this.userOptions) === null || _c === void 0 ? void 0 : _c.blockingOptions) === null || _d === void 0 ? void 0 : _d.idToken) || false;
|
|
128
134
|
const refreshToken = ((_f = (_e = this.userOptions) === null || _e === void 0 ? void 0 : _e.blockingOptions) === null || _f === void 0 ? void 0 : _f.refreshToken) || false;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const wrappedHandler = (user, context) => handler(user, context);
|
|
132
|
-
const func = (0, identity_1.wrapHandler)(eventType, wrappedHandler);
|
|
135
|
+
const annotatedHandler = Object.assign(handler, { platform: "gcfv1" });
|
|
136
|
+
const func = (0, identity_1.wrapHandler)(eventType, annotatedHandler);
|
|
133
137
|
const legacyEventType = `providers/cloud.auth/eventTypes/user.${eventType}`;
|
|
134
138
|
func.__trigger = {
|
|
135
139
|
labels: {},
|
package/lib/v2/index.d.ts
CHANGED
|
@@ -25,3 +25,7 @@ export { Change } from "../common/change";
|
|
|
25
25
|
import * as params from "../params";
|
|
26
26
|
export { params };
|
|
27
27
|
export { config } from "../v1/config";
|
|
28
|
+
import { setApp as setEmulatedAdminApp } from "../common/app";
|
|
29
|
+
export declare const app: {
|
|
30
|
+
setEmulatedAdminApp: typeof setEmulatedAdminApp;
|
|
31
|
+
};
|
package/lib/v2/index.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
// SOFTWARE.
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.config = exports.params = exports.Change = exports.onInit = exports.setGlobalOptions = exports.firestore = exports.testLab = exports.remoteConfig = exports.scheduler = exports.eventarc = exports.tasks = exports.logger = exports.pubsub = exports.identity = exports.https = exports.storage = exports.database = exports.alerts = void 0;
|
|
24
|
+
exports.app = exports.config = exports.params = exports.Change = exports.onInit = exports.setGlobalOptions = exports.firestore = exports.testLab = exports.remoteConfig = exports.scheduler = exports.eventarc = exports.tasks = exports.logger = exports.pubsub = exports.identity = exports.https = exports.storage = exports.database = exports.alerts = void 0;
|
|
25
25
|
/**
|
|
26
26
|
* The 2nd gen API for Cloud Functions for Firebase.
|
|
27
27
|
* This SDK supports deep imports. For example, the namespace
|
|
@@ -68,3 +68,6 @@ exports.params = params;
|
|
|
68
68
|
// TODO(danielylee): Remove in next major release.
|
|
69
69
|
var config_1 = require("../v1/config");
|
|
70
70
|
Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_1.config; } });
|
|
71
|
+
// Required for v1 Emulator support.
|
|
72
|
+
const app_1 = require("../common/app");
|
|
73
|
+
exports.app = { setEmulatedAdminApp: app_1.setApp };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
5
|
import { ResetValue } from "../../common/options";
|
|
6
|
-
import { AuthBlockingEvent, AuthBlockingEventType, AuthUserRecord, BeforeCreateResponse, BeforeSignInResponse, HttpsError } from "../../common/providers/identity";
|
|
6
|
+
import { AuthBlockingEvent, AuthBlockingEventType, AuthUserRecord, BeforeCreateResponse, BeforeSignInResponse, BeforeEmailResponse, BeforeSmsResponse, HandlerV2, HttpsError, MaybeAsync } from "../../common/providers/identity";
|
|
7
7
|
import { BlockingFunction } from "../../v1/cloud-functions";
|
|
8
8
|
import { Expression } from "../../params";
|
|
9
9
|
import * as options from "../options";
|
|
@@ -107,27 +107,49 @@ export interface BlockingOptions {
|
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
109
|
* Handles an event that is triggered before a user is created.
|
|
110
|
-
* @param handler - Event handler which is run every time before a user is created
|
|
110
|
+
* @param handler - Event handler which is run every time before a user is created.
|
|
111
111
|
*/
|
|
112
|
-
export declare function beforeUserCreated(handler: (event: AuthBlockingEvent) =>
|
|
112
|
+
export declare function beforeUserCreated(handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeCreateResponse | void>): BlockingFunction;
|
|
113
113
|
/**
|
|
114
114
|
* Handles an event that is triggered before a user is created.
|
|
115
|
-
* @param opts - Object containing function options
|
|
116
|
-
* @param handler - Event handler which is run every time before a user is created
|
|
115
|
+
* @param opts - Object containing function options.
|
|
116
|
+
* @param handler - Event handler which is run every time before a user is created.
|
|
117
117
|
*/
|
|
118
|
-
export declare function beforeUserCreated(opts: BlockingOptions, handler: (event: AuthBlockingEvent) =>
|
|
118
|
+
export declare function beforeUserCreated(opts: BlockingOptions, handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeCreateResponse | void>): BlockingFunction;
|
|
119
119
|
/**
|
|
120
120
|
* Handles an event that is triggered before a user is signed in.
|
|
121
|
-
* @param handler - Event handler which is run every time before a user is signed in
|
|
121
|
+
* @param handler - Event handler which is run every time before a user is signed in.
|
|
122
122
|
*/
|
|
123
|
-
export declare function beforeUserSignedIn(handler: (event: AuthBlockingEvent) =>
|
|
123
|
+
export declare function beforeUserSignedIn(handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeSignInResponse | void>): BlockingFunction;
|
|
124
124
|
/**
|
|
125
125
|
* Handles an event that is triggered before a user is signed in.
|
|
126
|
-
* @param opts - Object containing function options
|
|
127
|
-
* @param handler - Event handler which is run every time before a user is signed in
|
|
126
|
+
* @param opts - Object containing function options.
|
|
127
|
+
* @param handler - Event handler which is run every time before a user is signed in.
|
|
128
128
|
*/
|
|
129
|
-
export declare function beforeUserSignedIn(opts: BlockingOptions, handler: (event: AuthBlockingEvent) =>
|
|
129
|
+
export declare function beforeUserSignedIn(opts: BlockingOptions, handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeSignInResponse | void>): BlockingFunction;
|
|
130
|
+
/**
|
|
131
|
+
* Handles an event that is triggered before an email is sent to a user.
|
|
132
|
+
* @param handler - Event handler that is run before an email is sent to a user.
|
|
133
|
+
*/
|
|
134
|
+
export declare function beforeEmailSent(handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeEmailResponse | void>): BlockingFunction;
|
|
135
|
+
/**
|
|
136
|
+
* Handles an event that is triggered before an email is sent to a user.
|
|
137
|
+
* @param opts - Object containing function options.
|
|
138
|
+
* @param handler - Event handler that is run before an email is sent to a user.
|
|
139
|
+
*/
|
|
140
|
+
export declare function beforeEmailSent(opts: Omit<BlockingOptions, "idToken" | "accessToken" | "refreshToken">, handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeEmailResponse | void>): BlockingFunction;
|
|
141
|
+
/**
|
|
142
|
+
* Handles an event that is triggered before an SMS is sent to a user.
|
|
143
|
+
* @param handler - Event handler that is run before an SMS is sent to a user.
|
|
144
|
+
*/
|
|
145
|
+
export declare function beforeSmsSent(handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeSmsResponse | void>): BlockingFunction;
|
|
146
|
+
/**
|
|
147
|
+
* Handles an event that is triggered before an SMS is sent to a user.
|
|
148
|
+
* @param opts - Object containing function options.
|
|
149
|
+
* @param handler - Event handler that is run before an SMS is sent to a user.
|
|
150
|
+
*/
|
|
151
|
+
export declare function beforeSmsSent(opts: Omit<BlockingOptions, "idToken" | "accessToken" | "refreshToken">, handler: (event: AuthBlockingEvent) => MaybeAsync<BeforeSmsResponse | void>): BlockingFunction;
|
|
130
152
|
/** @hidden */
|
|
131
|
-
export declare function beforeOperation(eventType: AuthBlockingEventType, optsOrHandler: BlockingOptions | ((event: AuthBlockingEvent) => BeforeCreateResponse | BeforeSignInResponse |
|
|
153
|
+
export declare function beforeOperation(eventType: AuthBlockingEventType, optsOrHandler: BlockingOptions | ((event: AuthBlockingEvent) => MaybeAsync<BeforeCreateResponse | BeforeSignInResponse | BeforeEmailResponse | BeforeSmsResponse | void>), handler: HandlerV2): BlockingFunction;
|
|
132
154
|
/** @hidden */
|
|
133
155
|
export declare function getOpts(blockingOptions: BlockingOptions): InternalOptions;
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
// SOFTWARE.
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.getOpts = exports.beforeOperation = exports.beforeUserSignedIn = exports.beforeUserCreated = exports.HttpsError = void 0;
|
|
24
|
+
exports.getOpts = exports.beforeOperation = exports.beforeSmsSent = exports.beforeEmailSent = exports.beforeUserSignedIn = exports.beforeUserCreated = exports.HttpsError = void 0;
|
|
25
25
|
const identity_1 = require("../../common/providers/identity");
|
|
26
26
|
Object.defineProperty(exports, "HttpsError", { enumerable: true, get: function () { return identity_1.HttpsError; } });
|
|
27
27
|
const trace_1 = require("../trace");
|
|
@@ -29,9 +29,9 @@ const manifest_1 = require("../../runtime/manifest");
|
|
|
29
29
|
const options = require("../options");
|
|
30
30
|
const onInit_1 = require("../../common/onInit");
|
|
31
31
|
/**
|
|
32
|
-
* Handles an event that is triggered before a user is created
|
|
33
|
-
* @param optsOrHandler - Either an object containing function options, or an event handler (run before user creation)
|
|
34
|
-
* @param handler? - If defined, an event handler which is run every time before a user is created
|
|
32
|
+
* Handles an event that is triggered before a user is created.
|
|
33
|
+
* @param optsOrHandler - Either an object containing function options, or an event handler (run before user creation).
|
|
34
|
+
* @param handler? - If defined, an event handler which is run every time before a user is created.
|
|
35
35
|
*/
|
|
36
36
|
function beforeUserCreated(optsOrHandler, handler) {
|
|
37
37
|
return beforeOperation("beforeCreate", optsOrHandler, handler);
|
|
@@ -39,24 +39,42 @@ function beforeUserCreated(optsOrHandler, handler) {
|
|
|
39
39
|
exports.beforeUserCreated = beforeUserCreated;
|
|
40
40
|
/**
|
|
41
41
|
* Handles an event that is triggered before a user is signed in.
|
|
42
|
-
* @param optsOrHandler - Either an object containing function options, or an event handler (run before user signin)
|
|
43
|
-
* @param handler - Event handler which is run every time before a user is signed in
|
|
42
|
+
* @param optsOrHandler - Either an object containing function options, or an event handler (run before user signin).
|
|
43
|
+
* @param handler - Event handler which is run every time before a user is signed in.
|
|
44
44
|
*/
|
|
45
45
|
function beforeUserSignedIn(optsOrHandler, handler) {
|
|
46
46
|
return beforeOperation("beforeSignIn", optsOrHandler, handler);
|
|
47
47
|
}
|
|
48
48
|
exports.beforeUserSignedIn = beforeUserSignedIn;
|
|
49
|
+
/**
|
|
50
|
+
* Handles an event that is triggered before an email is sent to a user.
|
|
51
|
+
* @param optsOrHandler- Either an object containing function options, or an event handler that is run before an email is sent to a user.
|
|
52
|
+
* @param handler - Event handler that is run before an email is sent to a user.
|
|
53
|
+
*/
|
|
54
|
+
function beforeEmailSent(optsOrHandler, handler) {
|
|
55
|
+
return beforeOperation("beforeSendEmail", optsOrHandler, handler);
|
|
56
|
+
}
|
|
57
|
+
exports.beforeEmailSent = beforeEmailSent;
|
|
58
|
+
/**
|
|
59
|
+
* Handles an event that is triggered before an SMS is sent to a user.
|
|
60
|
+
* @param optsOrHandler - Either an object containing function options, or an event handler that is run before an SMS is sent to a user.
|
|
61
|
+
* @param handler - Event handler that is run before an SMS is sent to a user.
|
|
62
|
+
*/
|
|
63
|
+
function beforeSmsSent(optsOrHandler, handler) {
|
|
64
|
+
return beforeOperation("beforeSendSms", optsOrHandler, handler);
|
|
65
|
+
}
|
|
66
|
+
exports.beforeSmsSent = beforeSmsSent;
|
|
49
67
|
/** @hidden */
|
|
50
68
|
function beforeOperation(eventType, optsOrHandler, handler) {
|
|
51
69
|
if (!handler || typeof optsOrHandler === "function") {
|
|
52
70
|
handler = optsOrHandler;
|
|
53
71
|
optsOrHandler = {};
|
|
54
72
|
}
|
|
55
|
-
const { opts,
|
|
73
|
+
const { opts, ...blockingOptions } = getOpts(optsOrHandler);
|
|
56
74
|
// Create our own function that just calls the provided function so we know for sure that
|
|
57
75
|
// handler takes one argument. This is something common/providers/identity depends on.
|
|
58
|
-
const
|
|
59
|
-
const func = (0, trace_1.wrapTraceContext)((0, onInit_1.withInit)((0, identity_1.wrapHandler)(eventType,
|
|
76
|
+
const annotatedHandler = Object.assign(handler, { platform: "gcfv2" });
|
|
77
|
+
const func = (0, trace_1.wrapTraceContext)((0, onInit_1.withInit)((0, identity_1.wrapHandler)(eventType, annotatedHandler)));
|
|
60
78
|
const legacyEventType = `providers/cloud.auth/eventTypes/user.${eventType}`;
|
|
61
79
|
/** Endpoint */
|
|
62
80
|
const baseOptsEndpoint = options.optionsToEndpoint(options.getGlobalOptions());
|
|
@@ -73,9 +91,7 @@ function beforeOperation(eventType, optsOrHandler, handler) {
|
|
|
73
91
|
blockingTrigger: {
|
|
74
92
|
eventType: legacyEventType,
|
|
75
93
|
options: {
|
|
76
|
-
|
|
77
|
-
idToken,
|
|
78
|
-
refreshToken,
|
|
94
|
+
...((eventType === "beforeCreate" || eventType === "beforeSignIn") && blockingOptions),
|
|
79
95
|
},
|
|
80
96
|
},
|
|
81
97
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "firebase-functions",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Firebase SDK for Cloud Functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"firebase",
|
|
@@ -270,9 +270,9 @@
|
|
|
270
270
|
},
|
|
271
271
|
"dependencies": {
|
|
272
272
|
"@types/cors": "^2.8.5",
|
|
273
|
-
"@types/express": "4.17.
|
|
273
|
+
"@types/express": "^4.17.21",
|
|
274
274
|
"cors": "^2.8.5",
|
|
275
|
-
"express": "^4.
|
|
275
|
+
"express": "^4.21.0",
|
|
276
276
|
"protobufjs": "^7.2.2"
|
|
277
277
|
},
|
|
278
278
|
"devDependencies": {
|