firebase-admin 13.9.0 → 14.0.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/README.md +1 -2
- package/lib/app/core.d.ts +2 -38
- package/lib/app/core.js +1 -1
- package/lib/app/credential-factory.d.ts +1 -1
- package/lib/app/credential-factory.js +1 -1
- package/lib/app/credential-internal.d.ts +1 -1
- package/lib/app/credential-internal.js +48 -17
- package/lib/app/credential.d.ts +1 -1
- package/lib/app/credential.js +1 -1
- package/lib/app/error.d.ts +47 -0
- package/lib/app/error.js +57 -0
- package/lib/app/firebase-app.d.ts +1 -1
- package/lib/app/firebase-app.js +28 -12
- package/lib/app/index.d.ts +4 -3
- package/lib/app/index.js +6 -4
- package/lib/app/lifecycle.d.ts +2 -2
- package/lib/app/lifecycle.js +46 -21
- package/lib/app-check/app-check-api-client-internal.d.ts +2 -16
- package/lib/app-check/app-check-api-client-internal.js +71 -47
- package/lib/app-check/app-check-api.d.ts +19 -1
- package/lib/app-check/app-check-api.js +1 -1
- package/lib/app-check/app-check.d.ts +1 -1
- package/lib/app-check/app-check.js +7 -3
- package/lib/app-check/error.d.ts +47 -0
- package/lib/app-check/error.js +65 -0
- package/lib/app-check/index.d.ts +2 -1
- package/lib/app-check/index.js +5 -2
- package/lib/app-check/token-generator.d.ts +1 -1
- package/lib/app-check/token-generator.js +43 -13
- package/lib/app-check/token-verifier.d.ts +1 -1
- package/lib/app-check/token-verifier.js +39 -11
- package/lib/auth/action-code-settings-builder.d.ts +1 -1
- package/lib/auth/action-code-settings-builder.js +16 -16
- package/lib/auth/auth-api-request.d.ts +6 -4
- package/lib/auth/auth-api-request.js +277 -166
- package/lib/auth/auth-config.d.ts +31 -2
- package/lib/auth/auth-config.js +103 -103
- package/lib/auth/auth.d.ts +1 -1
- package/lib/auth/auth.js +1 -1
- package/lib/auth/base-auth.d.ts +2 -1
- package/lib/auth/base-auth.js +29 -27
- package/lib/auth/error.d.ts +137 -0
- package/lib/auth/error.js +690 -0
- package/lib/auth/identifier.d.ts +1 -1
- package/lib/auth/identifier.js +1 -1
- package/lib/auth/index.d.ts +2 -2
- package/lib/auth/index.js +4 -4
- package/lib/auth/project-config-manager.d.ts +1 -1
- package/lib/auth/project-config-manager.js +1 -1
- package/lib/auth/project-config.d.ts +1 -1
- package/lib/auth/project-config.js +4 -4
- package/lib/auth/tenant-manager.d.ts +2 -1
- package/lib/auth/tenant-manager.js +13 -10
- package/lib/auth/tenant.d.ts +1 -1
- package/lib/auth/tenant.js +7 -7
- package/lib/auth/token-generator.d.ts +1 -1
- package/lib/auth/token-generator.js +13 -13
- package/lib/auth/token-verifier.d.ts +1 -1
- package/lib/auth/token-verifier.js +22 -22
- package/lib/auth/user-import-builder.d.ts +1 -1
- package/lib/auth/user-import-builder.js +22 -22
- package/lib/auth/user-record.d.ts +1 -1
- package/lib/auth/user-record.js +6 -6
- package/lib/credential/index.d.ts +1 -1
- package/lib/credential/index.js +1 -1
- package/lib/data-connect/data-connect-api-client-internal.d.ts +1 -16
- package/lib/data-connect/data-connect-api-client-internal.js +122 -65
- package/lib/data-connect/data-connect-api.d.ts +1 -1
- package/lib/data-connect/data-connect-api.js +1 -1
- package/lib/data-connect/data-connect.d.ts +1 -1
- package/lib/data-connect/data-connect.js +1 -1
- package/lib/data-connect/error.d.ts +47 -0
- package/lib/data-connect/error.js +66 -0
- package/lib/data-connect/index.d.ts +2 -1
- package/lib/data-connect/index.js +5 -2
- package/lib/data-connect/validate-admin-args.d.ts +1 -1
- package/lib/data-connect/validate-admin-args.js +6 -3
- package/lib/database/database.d.ts +1 -1
- package/lib/database/database.js +11 -6
- package/lib/database/error.d.ts +39 -0
- package/lib/database/error.js +49 -0
- package/lib/database/index.d.ts +2 -2
- package/lib/database/index.js +4 -3
- package/lib/esm/app/index.js +2 -1
- package/lib/esm/app-check/index.js +2 -0
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/data-connect/index.js +2 -0
- package/lib/esm/database/index.js +1 -0
- package/lib/esm/eventarc/index.js +2 -0
- package/lib/esm/extensions/index.js +2 -0
- package/lib/esm/firebase-admin/index.js +13 -0
- package/lib/esm/firestore/index.js +1 -0
- package/lib/esm/functions/index.js +2 -0
- package/lib/esm/installations/index.js +1 -1
- package/lib/esm/machine-learning/index.js +2 -0
- package/lib/esm/messaging/index.js +1 -1
- package/lib/esm/phone-number-verification/index.js +2 -0
- package/lib/esm/project-management/index.js +1 -0
- package/lib/esm/remote-config/index.js +2 -0
- package/lib/esm/security-rules/index.js +2 -0
- package/lib/esm/storage/index.js +2 -0
- package/lib/eventarc/cloudevent.d.ts +1 -1
- package/lib/eventarc/cloudevent.js +1 -1
- package/lib/eventarc/error.d.ts +38 -0
- package/lib/eventarc/error.js +47 -0
- package/lib/eventarc/eventarc-client-internal.d.ts +1 -1
- package/lib/eventarc/eventarc-client-internal.js +24 -9
- package/lib/eventarc/eventarc-utils.d.ts +1 -13
- package/lib/eventarc/eventarc-utils.js +36 -26
- package/lib/eventarc/eventarc.d.ts +1 -1
- package/lib/eventarc/eventarc.js +18 -6
- package/lib/eventarc/index.d.ts +2 -1
- package/lib/eventarc/index.js +5 -2
- package/lib/extensions/error.d.ts +41 -0
- package/lib/extensions/error.js +50 -0
- package/lib/extensions/extensions-api-client-internal.d.ts +1 -13
- package/lib/extensions/extensions-api-client-internal.js +40 -28
- package/lib/extensions/extensions-api.d.ts +1 -1
- package/lib/extensions/extensions-api.js +1 -1
- package/lib/extensions/extensions.d.ts +1 -1
- package/lib/extensions/extensions.js +18 -5
- package/lib/extensions/index.d.ts +2 -1
- package/lib/extensions/index.js +5 -2
- package/lib/firestore/error.d.ts +41 -0
- package/lib/firestore/error.js +51 -0
- package/lib/firestore/firestore-internal.d.ts +2 -1
- package/lib/firestore/firestore-internal.js +6 -6
- package/lib/firestore/index.d.ts +2 -2
- package/lib/firestore/index.js +7 -7
- package/lib/functions/error.d.ts +48 -0
- package/lib/functions/error.js +67 -0
- package/lib/functions/functions-api-client-internal.d.ts +1 -16
- package/lib/functions/functions-api-client-internal.js +111 -71
- package/lib/functions/functions-api.d.ts +1 -1
- package/lib/functions/functions-api.js +1 -1
- package/lib/functions/functions.d.ts +1 -1
- package/lib/functions/functions.js +14 -4
- package/lib/functions/index.d.ts +2 -1
- package/lib/functions/index.js +5 -2
- package/lib/index.d.ts +13 -8
- package/lib/index.js +19 -3
- package/lib/installations/error.d.ts +48 -0
- package/lib/installations/error.js +73 -0
- package/lib/installations/index.d.ts +2 -2
- package/lib/installations/index.js +4 -4
- package/lib/installations/installations-request-handler.d.ts +1 -1
- package/lib/installations/installations-request-handler.js +11 -5
- package/lib/installations/installations.d.ts +1 -1
- package/lib/installations/installations.js +3 -3
- package/lib/machine-learning/error.d.ts +53 -0
- package/lib/machine-learning/error.js +84 -0
- package/lib/machine-learning/index.d.ts +2 -1
- package/lib/machine-learning/index.js +5 -2
- package/lib/machine-learning/machine-learning-api-client.d.ts +1 -1
- package/lib/machine-learning/machine-learning-api-client.js +61 -24
- package/lib/machine-learning/machine-learning.d.ts +1 -1
- package/lib/machine-learning/machine-learning.js +21 -9
- package/lib/messaging/error.d.ts +63 -0
- package/lib/messaging/error.js +286 -0
- package/lib/messaging/index.d.ts +3 -3
- package/lib/messaging/index.js +4 -4
- package/lib/messaging/messaging-api-request-internal.d.ts +1 -1
- package/lib/messaging/messaging-api-request-internal.js +1 -1
- package/lib/messaging/messaging-api.d.ts +1 -280
- package/lib/messaging/messaging-api.js +1 -1
- package/lib/messaging/messaging-errors-internal.d.ts +2 -2
- package/lib/messaging/messaging-errors-internal.js +11 -8
- package/lib/messaging/messaging-internal.d.ts +1 -1
- package/lib/messaging/messaging-internal.js +48 -48
- package/lib/messaging/messaging.d.ts +1 -1
- package/lib/messaging/messaging.js +47 -50
- package/lib/phone-number-verification/error.d.ts +43 -0
- package/lib/phone-number-verification/error.js +48 -0
- package/lib/phone-number-verification/index.d.ts +2 -1
- package/lib/phone-number-verification/index.js +5 -2
- package/lib/phone-number-verification/phone-number-verification-api-client-internal.d.ts +1 -18
- package/lib/phone-number-verification/phone-number-verification-api-client-internal.js +2 -26
- package/lib/phone-number-verification/phone-number-verification-api.d.ts +2 -2
- package/lib/phone-number-verification/phone-number-verification-api.js +5 -4
- package/lib/phone-number-verification/phone-number-verification.d.ts +1 -1
- package/lib/phone-number-verification/phone-number-verification.js +1 -1
- package/lib/phone-number-verification/token-verifier.d.ts +1 -1
- package/lib/phone-number-verification/token-verifier.js +68 -20
- package/lib/project-management/android-app.d.ts +1 -1
- package/lib/project-management/android-app.js +15 -6
- package/lib/project-management/app-metadata.d.ts +1 -1
- package/lib/project-management/app-metadata.js +1 -1
- package/lib/project-management/error.d.ts +45 -0
- package/lib/project-management/error.js +55 -0
- package/lib/project-management/index.d.ts +2 -2
- package/lib/project-management/index.js +4 -3
- package/lib/project-management/ios-app.d.ts +1 -1
- package/lib/project-management/ios-app.js +6 -3
- package/lib/project-management/project-management-api-request-internal.d.ts +1 -1
- package/lib/project-management/project-management-api-request-internal.js +18 -6
- package/lib/project-management/project-management.d.ts +1 -1
- package/lib/project-management/project-management.js +13 -7
- package/lib/remote-config/condition-evaluator-internal.d.ts +1 -1
- package/lib/remote-config/condition-evaluator-internal.js +4 -4
- package/lib/remote-config/error.d.ts +49 -0
- package/lib/remote-config/error.js +70 -0
- package/lib/remote-config/index.d.ts +2 -1
- package/lib/remote-config/index.js +5 -2
- package/lib/remote-config/internal/value-impl.d.ts +1 -1
- package/lib/remote-config/internal/value-impl.js +1 -1
- package/lib/remote-config/remote-config-api-client-internal.d.ts +2 -13
- package/lib/remote-config/remote-config-api-client-internal.js +80 -52
- package/lib/remote-config/remote-config-api.d.ts +1 -1
- package/lib/remote-config/remote-config-api.js +1 -1
- package/lib/remote-config/remote-config.d.ts +1 -1
- package/lib/remote-config/remote-config.js +92 -23
- package/lib/security-rules/error.d.ts +45 -0
- package/lib/security-rules/error.js +54 -0
- package/lib/security-rules/index.d.ts +2 -1
- package/lib/security-rules/index.js +5 -2
- package/lib/security-rules/security-rules-api-client-internal.d.ts +1 -1
- package/lib/security-rules/security-rules-api-client-internal.js +50 -18
- package/lib/security-rules/security-rules.d.ts +1 -1
- package/lib/security-rules/security-rules.js +32 -11
- package/lib/storage/error.d.ts +41 -0
- package/lib/storage/error.js +50 -0
- package/lib/storage/index.d.ts +2 -1
- package/lib/storage/index.js +8 -5
- package/lib/storage/storage.d.ts +1 -1
- package/lib/storage/storage.js +12 -12
- package/lib/storage/utils.d.ts +1 -1
- package/lib/storage/utils.js +1 -1
- package/lib/utils/api-request.d.ts +12 -12
- package/lib/utils/api-request.js +97 -55
- package/lib/utils/crypto-signer.d.ts +1 -1
- package/lib/utils/crypto-signer.js +2 -7
- package/lib/utils/deep-copy.d.ts +1 -1
- package/lib/utils/deep-copy.js +1 -1
- package/lib/utils/error.d.ts +75 -570
- package/lib/utils/error.js +53 -1047
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/jwt.d.ts +1 -1
- package/lib/utils/jwt.js +1 -2
- package/lib/utils/validator.d.ts +1 -1
- package/lib/utils/validator.js +1 -1
- package/package.json +25 -33
- package/lib/app/firebase-namespace.d.ts +0 -163
- package/lib/app/firebase-namespace.js +0 -335
- package/lib/app-check/app-check-namespace.d.ts +0 -72
- package/lib/app-check/app-check-namespace.js +0 -18
- package/lib/auth/auth-namespace.d.ts +0 -257
- package/lib/auth/auth-namespace.js +0 -18
- package/lib/database/database-namespace.d.ts +0 -95
- package/lib/database/database-namespace.js +0 -23
- package/lib/default-namespace.d.ts +0 -24
- package/lib/default-namespace.js +0 -30
- package/lib/esm/instance-id/index.js +0 -6
- package/lib/firebase-namespace-api.d.ts +0 -91
- package/lib/firebase-namespace-api.js +0 -58
- package/lib/firestore/firestore-namespace.d.ts +0 -71
- package/lib/firestore/firestore-namespace.js +0 -52
- package/lib/installations/installations-namespace.d.ts +0 -55
- package/lib/installations/installations-namespace.js +0 -18
- package/lib/instance-id/index.d.ts +0 -62
- package/lib/instance-id/index.js +0 -74
- package/lib/instance-id/instance-id-namespace.d.ts +0 -38
- package/lib/instance-id/instance-id-namespace.js +0 -3
- package/lib/instance-id/instance-id.d.ts +0 -47
- package/lib/instance-id/instance-id.js +0 -77
- package/lib/machine-learning/machine-learning-namespace.d.ts +0 -81
- package/lib/machine-learning/machine-learning-namespace.js +0 -18
- package/lib/machine-learning/machine-learning-utils.d.ts +0 -22
- package/lib/machine-learning/machine-learning-utils.js +0 -47
- package/lib/messaging/messaging-namespace.d.ts +0 -161
- package/lib/messaging/messaging-namespace.js +0 -18
- package/lib/project-management/project-management-namespace.d.ts +0 -82
- package/lib/project-management/project-management-namespace.js +0 -18
- package/lib/remote-config/remote-config-namespace.d.ts +0 -141
- package/lib/remote-config/remote-config-namespace.js +0 -18
- package/lib/security-rules/security-rules-internal.d.ts +0 -21
- package/lib/security-rules/security-rules-internal.js +0 -26
- package/lib/security-rules/security-rules-namespace.d.ts +0 -69
- package/lib/security-rules/security-rules-namespace.js +0 -18
- package/lib/storage/storage-namespace.d.ts +0 -45
- package/lib/storage/storage-namespace.js +0 -18
package/lib/auth/auth-config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
"use strict";
|
|
3
3
|
/*!
|
|
4
4
|
* Copyright 2018 Google LLC
|
|
@@ -20,7 +20,7 @@ exports.EmailPrivacyAuthConfig = exports.PasswordPolicyAuthConfig = exports.Mobi
|
|
|
20
20
|
exports.validateTestPhoneNumbers = validateTestPhoneNumbers;
|
|
21
21
|
const validator = require("../utils/validator");
|
|
22
22
|
const deep_copy_1 = require("../utils/deep-copy");
|
|
23
|
-
const error_1 = require("
|
|
23
|
+
const error_1 = require("./error");
|
|
24
24
|
/** A maximum of 10 test phone number / code pairs can be configured. */
|
|
25
25
|
exports.MAXIMUM_TEST_PHONE_NUMBERS = 10;
|
|
26
26
|
/** Client Auth factor type to server auth factor type mapping. */
|
|
@@ -83,39 +83,39 @@ class MultiFactorAuthConfig {
|
|
|
83
83
|
providerConfigs: true,
|
|
84
84
|
};
|
|
85
85
|
if (!validator.isNonNullObject(options)) {
|
|
86
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
86
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig" must be a non-null object.');
|
|
87
87
|
}
|
|
88
88
|
// Check for unsupported top level attributes.
|
|
89
89
|
for (const key in options) {
|
|
90
90
|
if (!(key in validKeys)) {
|
|
91
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
91
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid MultiFactorConfig parameter.`);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
// Validate content.
|
|
95
95
|
if (typeof options.state !== 'undefined' &&
|
|
96
96
|
options.state !== 'ENABLED' &&
|
|
97
97
|
options.state !== 'DISABLED') {
|
|
98
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
98
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig.state" must be either "ENABLED" or "DISABLED".');
|
|
99
99
|
}
|
|
100
100
|
if (typeof options.factorIds !== 'undefined') {
|
|
101
101
|
if (!validator.isArray(options.factorIds)) {
|
|
102
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
102
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig.factorIds" must be an array of valid "AuthFactorTypes".');
|
|
103
103
|
}
|
|
104
104
|
// Validate content of array.
|
|
105
105
|
options.factorIds.forEach((factorId) => {
|
|
106
106
|
if (typeof AUTH_FACTOR_CLIENT_TO_SERVER_TYPE[factorId] === 'undefined') {
|
|
107
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
107
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${factorId}" is not a valid "AuthFactorType".`);
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
if (typeof options.providerConfigs !== 'undefined') {
|
|
112
112
|
if (!validator.isArray(options.providerConfigs)) {
|
|
113
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
113
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig.providerConfigs" must be an array of valid "MultiFactorProviderConfig."');
|
|
114
114
|
}
|
|
115
115
|
//Validate content of array.
|
|
116
116
|
options.providerConfigs.forEach((multiFactorProviderConfig) => {
|
|
117
117
|
if (typeof multiFactorProviderConfig === 'undefined' || !validator.isObject(multiFactorProviderConfig)) {
|
|
118
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
118
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${multiFactorProviderConfig}" is not a valid "MultiFactorProviderConfig" type.`);
|
|
119
119
|
}
|
|
120
120
|
const validProviderConfigKeys = {
|
|
121
121
|
state: true,
|
|
@@ -123,30 +123,30 @@ class MultiFactorAuthConfig {
|
|
|
123
123
|
};
|
|
124
124
|
for (const key in multiFactorProviderConfig) {
|
|
125
125
|
if (!(key in validProviderConfigKeys)) {
|
|
126
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
126
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid ProviderConfig parameter.`);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
if (typeof multiFactorProviderConfig.state === 'undefined' ||
|
|
130
130
|
(multiFactorProviderConfig.state !== 'ENABLED' &&
|
|
131
131
|
multiFactorProviderConfig.state !== 'DISABLED')) {
|
|
132
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
132
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig.providerConfigs.state" must be either "ENABLED" or "DISABLED".');
|
|
133
133
|
}
|
|
134
134
|
// Since TOTP is the only provider config available right now, not defining it will lead into an error
|
|
135
135
|
if (typeof multiFactorProviderConfig.totpProviderConfig === 'undefined') {
|
|
136
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
136
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MultiFactorConfig.providerConfigs.totpProviderConfig" must be defined.');
|
|
137
137
|
}
|
|
138
138
|
const validTotpProviderConfigKeys = {
|
|
139
139
|
adjacentIntervals: true,
|
|
140
140
|
};
|
|
141
141
|
for (const key in multiFactorProviderConfig.totpProviderConfig) {
|
|
142
142
|
if (!(key in validTotpProviderConfigKeys)) {
|
|
143
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
143
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid TotpProviderConfig parameter.`);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
const adjIntervals = multiFactorProviderConfig.totpProviderConfig.adjacentIntervals;
|
|
147
147
|
if (typeof adjIntervals !== 'undefined' &&
|
|
148
148
|
(!Number.isInteger(adjIntervals) || adjIntervals < 0 || adjIntervals > 10)) {
|
|
149
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
149
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"MultiFactorConfig.providerConfigs.totpProviderConfig.adjacentIntervals" must' +
|
|
150
150
|
' be a valid number between 0 and 10 (both inclusive).');
|
|
151
151
|
}
|
|
152
152
|
});
|
|
@@ -162,7 +162,7 @@ class MultiFactorAuthConfig {
|
|
|
162
162
|
*/
|
|
163
163
|
constructor(response) {
|
|
164
164
|
if (typeof response.state === 'undefined') {
|
|
165
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
165
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid multi-factor configuration response');
|
|
166
166
|
}
|
|
167
167
|
this.state = response.state;
|
|
168
168
|
this.factorIds = [];
|
|
@@ -180,7 +180,7 @@ class MultiFactorAuthConfig {
|
|
|
180
180
|
typeof providerConfig.totpProviderConfig === 'undefined' ||
|
|
181
181
|
(typeof providerConfig.totpProviderConfig.adjacentIntervals !== 'undefined' &&
|
|
182
182
|
typeof providerConfig.totpProviderConfig.adjacentIntervals !== 'number')) {
|
|
183
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
183
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid multi-factor configuration response');
|
|
184
184
|
}
|
|
185
185
|
this.providerConfigs.push(providerConfig);
|
|
186
186
|
}
|
|
@@ -203,20 +203,20 @@ exports.MultiFactorAuthConfig = MultiFactorAuthConfig;
|
|
|
203
203
|
*/
|
|
204
204
|
function validateTestPhoneNumbers(testPhoneNumbers) {
|
|
205
205
|
if (!validator.isObject(testPhoneNumbers)) {
|
|
206
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
206
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"testPhoneNumbers" must be a map of phone number / code pairs.');
|
|
207
207
|
}
|
|
208
208
|
if (Object.keys(testPhoneNumbers).length > exports.MAXIMUM_TEST_PHONE_NUMBERS) {
|
|
209
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
209
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.MAXIMUM_TEST_PHONE_NUMBER_EXCEEDED);
|
|
210
210
|
}
|
|
211
211
|
for (const phoneNumber in testPhoneNumbers) {
|
|
212
212
|
// Validate phone number.
|
|
213
213
|
if (!validator.isPhoneNumber(phoneNumber)) {
|
|
214
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
214
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_TESTING_PHONE_NUMBER, `"${phoneNumber}" is not a valid E.164 standard compliant phone number.`);
|
|
215
215
|
}
|
|
216
216
|
// Validate code.
|
|
217
217
|
if (!validator.isString(testPhoneNumbers[phoneNumber]) ||
|
|
218
218
|
!/^[\d]{6}$/.test(testPhoneNumbers[phoneNumber])) {
|
|
219
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
219
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_TESTING_PHONE_NUMBER, `"${testPhoneNumbers[phoneNumber]}" is not a valid 6 digit code string.`);
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
}
|
|
@@ -258,22 +258,22 @@ class EmailSignInConfig {
|
|
|
258
258
|
passwordRequired: true,
|
|
259
259
|
};
|
|
260
260
|
if (!validator.isNonNullObject(options)) {
|
|
261
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
261
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"EmailSignInConfig" must be a non-null object.');
|
|
262
262
|
}
|
|
263
263
|
// Check for unsupported top level attributes.
|
|
264
264
|
for (const key in options) {
|
|
265
265
|
if (!(key in validKeys)) {
|
|
266
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
266
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, `"${key}" is not a valid EmailSignInConfig parameter.`);
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
// Validate content.
|
|
270
270
|
if (typeof options.enabled !== 'undefined' &&
|
|
271
271
|
!validator.isBoolean(options.enabled)) {
|
|
272
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
272
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"EmailSignInConfig.enabled" must be a boolean.');
|
|
273
273
|
}
|
|
274
274
|
if (typeof options.passwordRequired !== 'undefined' &&
|
|
275
275
|
!validator.isBoolean(options.passwordRequired)) {
|
|
276
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
276
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"EmailSignInConfig.passwordRequired" must be a boolean.');
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
/**
|
|
@@ -285,7 +285,7 @@ class EmailSignInConfig {
|
|
|
285
285
|
*/
|
|
286
286
|
constructor(response) {
|
|
287
287
|
if (typeof response.allowPasswordSignup === 'undefined') {
|
|
288
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
288
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid email sign-in configuration response');
|
|
289
289
|
}
|
|
290
290
|
this.enabled = response.allowPasswordSignup;
|
|
291
291
|
this.passwordRequired = !response.enableEmailLinkSignin;
|
|
@@ -390,61 +390,61 @@ class SAMLConfig {
|
|
|
390
390
|
enableRequestSigning: true,
|
|
391
391
|
};
|
|
392
392
|
if (!validator.isNonNullObject(options)) {
|
|
393
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
393
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig" must be a valid non-null object.');
|
|
394
394
|
}
|
|
395
395
|
// Check for unsupported top level attributes.
|
|
396
396
|
for (const key in options) {
|
|
397
397
|
if (!(key in validKeys)) {
|
|
398
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
398
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid SAML config parameter.`);
|
|
399
399
|
}
|
|
400
400
|
}
|
|
401
401
|
// Required fields.
|
|
402
402
|
if (validator.isNonEmptyString(options.providerId)) {
|
|
403
403
|
if (options.providerId.indexOf('saml.') !== 0) {
|
|
404
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
404
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_PROVIDER_ID, '"SAMLAuthProviderConfig.providerId" must be a valid non-empty string prefixed with "saml.".');
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
407
|
else if (!ignoreMissingFields) {
|
|
408
408
|
// providerId is required and not provided correctly.
|
|
409
|
-
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.
|
|
409
|
+
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.authClientErrorCode.MISSING_PROVIDER_ID : error_1.authClientErrorCode.INVALID_PROVIDER_ID, '"SAMLAuthProviderConfig.providerId" must be a valid non-empty string prefixed with "saml.".');
|
|
410
410
|
}
|
|
411
411
|
if (!(ignoreMissingFields && typeof options.idpEntityId === 'undefined') &&
|
|
412
412
|
!validator.isNonEmptyString(options.idpEntityId)) {
|
|
413
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
413
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.idpEntityId" must be a valid non-empty string.');
|
|
414
414
|
}
|
|
415
415
|
if (!(ignoreMissingFields && typeof options.ssoURL === 'undefined') &&
|
|
416
416
|
!validator.isURL(options.ssoURL)) {
|
|
417
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
417
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.ssoURL" must be a valid URL string.');
|
|
418
418
|
}
|
|
419
419
|
if (!(ignoreMissingFields && typeof options.rpEntityId === 'undefined') &&
|
|
420
420
|
!validator.isNonEmptyString(options.rpEntityId)) {
|
|
421
|
-
throw new error_1.FirebaseAuthError(!options.rpEntityId ? error_1.
|
|
422
|
-
error_1.
|
|
421
|
+
throw new error_1.FirebaseAuthError(!options.rpEntityId ? error_1.authClientErrorCode.MISSING_SAML_RELYING_PARTY_CONFIG :
|
|
422
|
+
error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.rpEntityId" must be a valid non-empty string.');
|
|
423
423
|
}
|
|
424
424
|
if (!(ignoreMissingFields && typeof options.callbackURL === 'undefined') &&
|
|
425
425
|
!validator.isURL(options.callbackURL)) {
|
|
426
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
426
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.callbackURL" must be a valid URL string.');
|
|
427
427
|
}
|
|
428
428
|
if (!(ignoreMissingFields && typeof options.x509Certificates === 'undefined') &&
|
|
429
429
|
!validator.isArray(options.x509Certificates)) {
|
|
430
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
430
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.x509Certificates" must be a valid array of X509 certificate strings.');
|
|
431
431
|
}
|
|
432
432
|
(options.x509Certificates || []).forEach((cert) => {
|
|
433
433
|
if (!validator.isNonEmptyString(cert)) {
|
|
434
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
434
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.x509Certificates" must be a valid array of X509 certificate strings.');
|
|
435
435
|
}
|
|
436
436
|
});
|
|
437
437
|
if (typeof options.enableRequestSigning !== 'undefined' &&
|
|
438
438
|
!validator.isBoolean(options.enableRequestSigning)) {
|
|
439
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
439
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.enableRequestSigning" must be a boolean.');
|
|
440
440
|
}
|
|
441
441
|
if (typeof options.enabled !== 'undefined' &&
|
|
442
442
|
!validator.isBoolean(options.enabled)) {
|
|
443
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
443
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.enabled" must be a boolean.');
|
|
444
444
|
}
|
|
445
445
|
if (typeof options.displayName !== 'undefined' &&
|
|
446
446
|
!validator.isString(options.displayName)) {
|
|
447
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
447
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SAMLAuthProviderConfig.displayName" must be a valid string.');
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
450
|
/**
|
|
@@ -463,11 +463,11 @@ class SAMLConfig {
|
|
|
463
463
|
!response.name ||
|
|
464
464
|
!(validator.isString(response.name) &&
|
|
465
465
|
SAMLConfig.getProviderIdFromResourceName(response.name))) {
|
|
466
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
466
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid SAML configuration response');
|
|
467
467
|
}
|
|
468
468
|
const providerId = SAMLConfig.getProviderIdFromResourceName(response.name);
|
|
469
469
|
if (!providerId) {
|
|
470
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
470
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid SAML configuration response');
|
|
471
471
|
}
|
|
472
472
|
this.providerId = providerId;
|
|
473
473
|
// RP config.
|
|
@@ -584,68 +584,68 @@ class OIDCConfig {
|
|
|
584
584
|
code: true,
|
|
585
585
|
};
|
|
586
586
|
if (!validator.isNonNullObject(options)) {
|
|
587
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
587
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"OIDCAuthProviderConfig" must be a valid non-null object.');
|
|
588
588
|
}
|
|
589
589
|
// Check for unsupported top level attributes.
|
|
590
590
|
for (const key in options) {
|
|
591
591
|
if (!(key in validKeys)) {
|
|
592
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
592
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid OIDC config parameter.`);
|
|
593
593
|
}
|
|
594
594
|
}
|
|
595
595
|
// Required fields.
|
|
596
596
|
if (validator.isNonEmptyString(options.providerId)) {
|
|
597
597
|
if (options.providerId.indexOf('oidc.') !== 0) {
|
|
598
|
-
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.
|
|
598
|
+
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.authClientErrorCode.MISSING_PROVIDER_ID : error_1.authClientErrorCode.INVALID_PROVIDER_ID, '"OIDCAuthProviderConfig.providerId" must be a valid non-empty string prefixed with "oidc.".');
|
|
599
599
|
}
|
|
600
600
|
}
|
|
601
601
|
else if (!ignoreMissingFields) {
|
|
602
|
-
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.
|
|
602
|
+
throw new error_1.FirebaseAuthError(!options.providerId ? error_1.authClientErrorCode.MISSING_PROVIDER_ID : error_1.authClientErrorCode.INVALID_PROVIDER_ID, '"OIDCAuthProviderConfig.providerId" must be a valid non-empty string prefixed with "oidc.".');
|
|
603
603
|
}
|
|
604
604
|
if (!(ignoreMissingFields && typeof options.clientId === 'undefined') &&
|
|
605
605
|
!validator.isNonEmptyString(options.clientId)) {
|
|
606
|
-
throw new error_1.FirebaseAuthError(!options.clientId ? error_1.
|
|
606
|
+
throw new error_1.FirebaseAuthError(!options.clientId ? error_1.authClientErrorCode.MISSING_OAUTH_CLIENT_ID : error_1.authClientErrorCode.INVALID_OAUTH_CLIENT_ID, '"OIDCAuthProviderConfig.clientId" must be a valid non-empty string.');
|
|
607
607
|
}
|
|
608
608
|
if (!(ignoreMissingFields && typeof options.issuer === 'undefined') &&
|
|
609
609
|
!validator.isURL(options.issuer)) {
|
|
610
|
-
throw new error_1.FirebaseAuthError(!options.issuer ? error_1.
|
|
610
|
+
throw new error_1.FirebaseAuthError(!options.issuer ? error_1.authClientErrorCode.MISSING_ISSUER : error_1.authClientErrorCode.INVALID_CONFIG, '"OIDCAuthProviderConfig.issuer" must be a valid URL string.');
|
|
611
611
|
}
|
|
612
612
|
if (typeof options.enabled !== 'undefined' &&
|
|
613
613
|
!validator.isBoolean(options.enabled)) {
|
|
614
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
614
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"OIDCAuthProviderConfig.enabled" must be a boolean.');
|
|
615
615
|
}
|
|
616
616
|
if (typeof options.displayName !== 'undefined' &&
|
|
617
617
|
!validator.isString(options.displayName)) {
|
|
618
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
618
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"OIDCAuthProviderConfig.displayName" must be a valid string.');
|
|
619
619
|
}
|
|
620
620
|
if (typeof options.clientSecret !== 'undefined' &&
|
|
621
621
|
!validator.isNonEmptyString(options.clientSecret)) {
|
|
622
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
622
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"OIDCAuthProviderConfig.clientSecret" must be a valid string.');
|
|
623
623
|
}
|
|
624
624
|
if (validator.isNonNullObject(options.responseType) && typeof options.responseType !== 'undefined') {
|
|
625
625
|
Object.keys(options.responseType).forEach((key) => {
|
|
626
626
|
if (!(key in validResponseTypes)) {
|
|
627
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
627
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid OAuthResponseType parameter.`);
|
|
628
628
|
}
|
|
629
629
|
});
|
|
630
630
|
const idToken = options.responseType.idToken;
|
|
631
631
|
if (typeof idToken !== 'undefined' && !validator.isBoolean(idToken)) {
|
|
632
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
632
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"OIDCAuthProviderConfig.responseType.idToken" must be a boolean.');
|
|
633
633
|
}
|
|
634
634
|
const code = options.responseType.code;
|
|
635
635
|
if (typeof code !== 'undefined') {
|
|
636
636
|
if (!validator.isBoolean(code)) {
|
|
637
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
637
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"OIDCAuthProviderConfig.responseType.code" must be a boolean.');
|
|
638
638
|
}
|
|
639
639
|
// If code flow is enabled, client secret must be provided.
|
|
640
640
|
if (code && typeof options.clientSecret === 'undefined') {
|
|
641
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
641
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.MISSING_OAUTH_CLIENT_SECRET, 'The OAuth configuration client secret is required to enable OIDC code flow.');
|
|
642
642
|
}
|
|
643
643
|
}
|
|
644
644
|
const allKeys = Object.keys(options.responseType).length;
|
|
645
645
|
const enabledCount = Object.values(options.responseType).filter(Boolean).length;
|
|
646
646
|
// Only one of OAuth response types can be set to true.
|
|
647
647
|
if (allKeys > 1 && enabledCount !== 1) {
|
|
648
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
648
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_OAUTH_RESPONSETYPE, 'Only exactly one OAuth responseType should be set to true.');
|
|
649
649
|
}
|
|
650
650
|
}
|
|
651
651
|
}
|
|
@@ -662,11 +662,11 @@ class OIDCConfig {
|
|
|
662
662
|
!response.name ||
|
|
663
663
|
!(validator.isString(response.name) &&
|
|
664
664
|
OIDCConfig.getProviderIdFromResourceName(response.name))) {
|
|
665
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
665
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid OIDC configuration response');
|
|
666
666
|
}
|
|
667
667
|
const providerId = OIDCConfig.getProviderIdFromResourceName(response.name);
|
|
668
668
|
if (!providerId) {
|
|
669
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
669
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid SAML configuration response');
|
|
670
670
|
}
|
|
671
671
|
this.providerId = providerId;
|
|
672
672
|
this.clientId = response.clientId;
|
|
@@ -703,7 +703,7 @@ exports.OIDCConfig = OIDCConfig;
|
|
|
703
703
|
class SmsRegionsAuthConfig {
|
|
704
704
|
static validate(options) {
|
|
705
705
|
if (!validator.isNonNullObject(options)) {
|
|
706
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
706
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SmsRegionConfig" must be a non-null object.');
|
|
707
707
|
}
|
|
708
708
|
const validKeys = {
|
|
709
709
|
allowlistOnly: true,
|
|
@@ -711,12 +711,12 @@ class SmsRegionsAuthConfig {
|
|
|
711
711
|
};
|
|
712
712
|
for (const key in options) {
|
|
713
713
|
if (!(key in validKeys)) {
|
|
714
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
714
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid SmsRegionConfig parameter.`);
|
|
715
715
|
}
|
|
716
716
|
}
|
|
717
717
|
// validate mutual exclusiveness of allowByDefault and allowlistOnly
|
|
718
718
|
if (typeof options.allowByDefault !== 'undefined' && typeof options.allowlistOnly !== 'undefined') {
|
|
719
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
719
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, 'SmsRegionConfig cannot have both "allowByDefault" and "allowlistOnly" parameters.');
|
|
720
720
|
}
|
|
721
721
|
// validation for allowByDefault type
|
|
722
722
|
if (typeof options.allowByDefault !== 'undefined') {
|
|
@@ -725,13 +725,13 @@ class SmsRegionsAuthConfig {
|
|
|
725
725
|
};
|
|
726
726
|
for (const key in options.allowByDefault) {
|
|
727
727
|
if (!(key in allowByDefaultValidKeys)) {
|
|
728
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
728
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid SmsRegionConfig.allowByDefault parameter.`);
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
// disallowedRegion can be empty.
|
|
732
732
|
if (typeof options.allowByDefault.disallowedRegions !== 'undefined'
|
|
733
733
|
&& !validator.isArray(options.allowByDefault.disallowedRegions)) {
|
|
734
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
734
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SmsRegionConfig.allowByDefault.disallowedRegions" must be a valid string array.');
|
|
735
735
|
}
|
|
736
736
|
}
|
|
737
737
|
if (typeof options.allowlistOnly !== 'undefined') {
|
|
@@ -740,13 +740,13 @@ class SmsRegionsAuthConfig {
|
|
|
740
740
|
};
|
|
741
741
|
for (const key in options.allowlistOnly) {
|
|
742
742
|
if (!(key in allowListOnlyValidKeys)) {
|
|
743
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
743
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid SmsRegionConfig.allowlistOnly parameter.`);
|
|
744
744
|
}
|
|
745
745
|
}
|
|
746
746
|
// allowedRegions can be empty
|
|
747
747
|
if (typeof options.allowlistOnly.allowedRegions !== 'undefined'
|
|
748
748
|
&& !validator.isArray(options.allowlistOnly.allowedRegions)) {
|
|
749
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
749
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"SmsRegionConfig.allowlistOnly.allowedRegions" must be a valid string array.');
|
|
750
750
|
}
|
|
751
751
|
}
|
|
752
752
|
}
|
|
@@ -829,38 +829,38 @@ class RecaptchaAuthConfig {
|
|
|
829
829
|
smsTollFraudManagedRules: true,
|
|
830
830
|
};
|
|
831
831
|
if (!validator.isNonNullObject(options)) {
|
|
832
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
832
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig" must be a non-null object.');
|
|
833
833
|
}
|
|
834
834
|
for (const key in options) {
|
|
835
835
|
if (!(key in validKeys)) {
|
|
836
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
836
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid RecaptchaConfig parameter.`);
|
|
837
837
|
}
|
|
838
838
|
}
|
|
839
839
|
// Validation
|
|
840
840
|
if (typeof options.emailPasswordEnforcementState !== 'undefined') {
|
|
841
841
|
if (!validator.isNonEmptyString(options.emailPasswordEnforcementState)) {
|
|
842
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
842
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"RecaptchaConfig.emailPasswordEnforcementState" must be a valid non-empty string.');
|
|
843
843
|
}
|
|
844
844
|
if (options.emailPasswordEnforcementState !== 'OFF' &&
|
|
845
845
|
options.emailPasswordEnforcementState !== 'AUDIT' &&
|
|
846
846
|
options.emailPasswordEnforcementState !== 'ENFORCE') {
|
|
847
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
847
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.emailPasswordEnforcementState" must be either "OFF", "AUDIT" or "ENFORCE".');
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
850
|
if (typeof options.phoneEnforcementState !== 'undefined') {
|
|
851
851
|
if (!validator.isNonEmptyString(options.phoneEnforcementState)) {
|
|
852
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
852
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_ARGUMENT, '"RecaptchaConfig.phoneEnforcementState" must be a valid non-empty string.');
|
|
853
853
|
}
|
|
854
854
|
if (options.phoneEnforcementState !== 'OFF' &&
|
|
855
855
|
options.phoneEnforcementState !== 'AUDIT' &&
|
|
856
856
|
options.phoneEnforcementState !== 'ENFORCE') {
|
|
857
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
857
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.phoneEnforcementState" must be either "OFF", "AUDIT" or "ENFORCE".');
|
|
858
858
|
}
|
|
859
859
|
}
|
|
860
860
|
if (typeof options.managedRules !== 'undefined') {
|
|
861
861
|
// Validate array
|
|
862
862
|
if (!validator.isArray(options.managedRules)) {
|
|
863
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
863
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.managedRules" must be an array of valid "RecaptchaManagedRule".');
|
|
864
864
|
}
|
|
865
865
|
// Validate each rule of the array
|
|
866
866
|
options.managedRules.forEach((managedRule) => {
|
|
@@ -869,23 +869,23 @@ class RecaptchaAuthConfig {
|
|
|
869
869
|
}
|
|
870
870
|
if (typeof options.useAccountDefender !== 'undefined') {
|
|
871
871
|
if (!validator.isBoolean(options.useAccountDefender)) {
|
|
872
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
872
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.useAccountDefender" must be a boolean value".');
|
|
873
873
|
}
|
|
874
874
|
}
|
|
875
875
|
if (typeof options.useSmsBotScore !== 'undefined') {
|
|
876
876
|
if (!validator.isBoolean(options.useSmsBotScore)) {
|
|
877
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
877
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.useSmsBotScore" must be a boolean value".');
|
|
878
878
|
}
|
|
879
879
|
}
|
|
880
880
|
if (typeof options.useSmsTollFraudProtection !== 'undefined') {
|
|
881
881
|
if (!validator.isBoolean(options.useSmsTollFraudProtection)) {
|
|
882
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
882
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.useSmsTollFraudProtection" must be a boolean value".');
|
|
883
883
|
}
|
|
884
884
|
}
|
|
885
885
|
if (typeof options.smsTollFraudManagedRules !== 'undefined') {
|
|
886
886
|
// Validate array
|
|
887
887
|
if (!validator.isArray(options.smsTollFraudManagedRules)) {
|
|
888
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
888
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaConfig.smsTollFraudManagedRules" must be an array of valid "RecaptchaTollFraudManagedRule".');
|
|
889
889
|
}
|
|
890
890
|
// Validate each rule of the array
|
|
891
891
|
options.smsTollFraudManagedRules.forEach((tollFraudManagedRule) => {
|
|
@@ -903,18 +903,18 @@ class RecaptchaAuthConfig {
|
|
|
903
903
|
action: true,
|
|
904
904
|
};
|
|
905
905
|
if (!validator.isNonNullObject(options)) {
|
|
906
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
906
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaManagedRule" must be a non-null object.');
|
|
907
907
|
}
|
|
908
908
|
// Check for unsupported top level attributes.
|
|
909
909
|
for (const key in options) {
|
|
910
910
|
if (!(key in validKeys)) {
|
|
911
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
911
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid RecaptchaManagedRule parameter.`);
|
|
912
912
|
}
|
|
913
913
|
}
|
|
914
914
|
// Validate content.
|
|
915
915
|
if (typeof options.action !== 'undefined' &&
|
|
916
916
|
options.action !== 'BLOCK') {
|
|
917
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
917
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaManagedRule.action" must be "BLOCK".');
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
920
|
/**
|
|
@@ -927,18 +927,18 @@ class RecaptchaAuthConfig {
|
|
|
927
927
|
action: true,
|
|
928
928
|
};
|
|
929
929
|
if (!validator.isNonNullObject(options)) {
|
|
930
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
930
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaTollFraudManagedRule" must be a non-null object.');
|
|
931
931
|
}
|
|
932
932
|
// Check for unsupported top level attributes.
|
|
933
933
|
for (const key in options) {
|
|
934
934
|
if (!(key in validKeys)) {
|
|
935
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
935
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid RecaptchaTollFraudManagedRule parameter.`);
|
|
936
936
|
}
|
|
937
937
|
}
|
|
938
938
|
// Validate content.
|
|
939
939
|
if (typeof options.action !== 'undefined' &&
|
|
940
940
|
options.action !== 'BLOCK') {
|
|
941
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
941
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"RecaptchaTollFraudManagedRule.action" must be "BLOCK".');
|
|
942
942
|
}
|
|
943
943
|
}
|
|
944
944
|
}
|
|
@@ -951,20 +951,20 @@ exports.RecaptchaAuthConfig = RecaptchaAuthConfig;
|
|
|
951
951
|
class MobileLinksAuthConfig {
|
|
952
952
|
static validate(options) {
|
|
953
953
|
if (!validator.isNonNullObject(options)) {
|
|
954
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
954
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MobileLinksConfig" must be a non-null object.');
|
|
955
955
|
}
|
|
956
956
|
const validKeys = {
|
|
957
957
|
domain: true,
|
|
958
958
|
};
|
|
959
959
|
for (const key in options) {
|
|
960
960
|
if (!(key in validKeys)) {
|
|
961
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
961
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid "MobileLinksConfig" parameter.`);
|
|
962
962
|
}
|
|
963
963
|
}
|
|
964
964
|
if (typeof options.domain !== 'undefined'
|
|
965
965
|
&& options.domain !== 'HOSTING_DOMAIN'
|
|
966
966
|
&& options.domain !== 'FIREBASE_DYNAMIC_LINK_DOMAIN') {
|
|
967
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
967
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"MobileLinksConfig.domain" must be either "HOSTING_DOMAIN" or "FIREBASE_DYNAMIC_LINK_DOMAIN".');
|
|
968
968
|
}
|
|
969
969
|
}
|
|
970
970
|
}
|
|
@@ -1041,28 +1041,28 @@ class PasswordPolicyAuthConfig {
|
|
|
1041
1041
|
constraints: true,
|
|
1042
1042
|
};
|
|
1043
1043
|
if (!validator.isNonNullObject(options)) {
|
|
1044
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1044
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig" must be a non-null object.');
|
|
1045
1045
|
}
|
|
1046
1046
|
// Check for unsupported top level attributes.
|
|
1047
1047
|
for (const key in options) {
|
|
1048
1048
|
if (!(key in validKeys)) {
|
|
1049
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1049
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid PasswordPolicyConfig parameter.`);
|
|
1050
1050
|
}
|
|
1051
1051
|
}
|
|
1052
1052
|
// Validate content.
|
|
1053
1053
|
if (typeof options.enforcementState === 'undefined' ||
|
|
1054
1054
|
!(options.enforcementState === 'ENFORCE' ||
|
|
1055
1055
|
options.enforcementState === 'OFF')) {
|
|
1056
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1056
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.enforcementState" must be either "ENFORCE" or "OFF".');
|
|
1057
1057
|
}
|
|
1058
1058
|
if (typeof options.forceUpgradeOnSignin !== 'undefined') {
|
|
1059
1059
|
if (!validator.isBoolean(options.forceUpgradeOnSignin)) {
|
|
1060
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1060
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.forceUpgradeOnSignin" must be a boolean.');
|
|
1061
1061
|
}
|
|
1062
1062
|
}
|
|
1063
1063
|
if (typeof options.constraints !== 'undefined') {
|
|
1064
1064
|
if (options.enforcementState === 'ENFORCE' && !validator.isNonNullObject(options.constraints)) {
|
|
1065
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1065
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints" must be a non-empty object.');
|
|
1066
1066
|
}
|
|
1067
1067
|
const validCharKeys = {
|
|
1068
1068
|
requireUppercase: true,
|
|
@@ -1075,36 +1075,36 @@ class PasswordPolicyAuthConfig {
|
|
|
1075
1075
|
// Check for unsupported attributes.
|
|
1076
1076
|
for (const key in options.constraints) {
|
|
1077
1077
|
if (!(key in validCharKeys)) {
|
|
1078
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1078
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid PasswordPolicyConfig.constraints parameter.`);
|
|
1079
1079
|
}
|
|
1080
1080
|
}
|
|
1081
1081
|
if (typeof options.constraints.requireUppercase !== 'undefined' &&
|
|
1082
1082
|
!validator.isBoolean(options.constraints.requireUppercase)) {
|
|
1083
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1083
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.requireUppercase" must be a boolean.');
|
|
1084
1084
|
}
|
|
1085
1085
|
if (typeof options.constraints.requireLowercase !== 'undefined' &&
|
|
1086
1086
|
!validator.isBoolean(options.constraints.requireLowercase)) {
|
|
1087
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1087
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.requireLowercase" must be a boolean.');
|
|
1088
1088
|
}
|
|
1089
1089
|
if (typeof options.constraints.requireNonAlphanumeric !== 'undefined' &&
|
|
1090
1090
|
!validator.isBoolean(options.constraints.requireNonAlphanumeric)) {
|
|
1091
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1091
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.requireNonAlphanumeric"' +
|
|
1092
1092
|
' must be a boolean.');
|
|
1093
1093
|
}
|
|
1094
1094
|
if (typeof options.constraints.requireNumeric !== 'undefined' &&
|
|
1095
1095
|
!validator.isBoolean(options.constraints.requireNumeric)) {
|
|
1096
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1096
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.requireNumeric" must be a boolean.');
|
|
1097
1097
|
}
|
|
1098
1098
|
if (typeof options.constraints.minLength === 'undefined') {
|
|
1099
1099
|
options.constraints.minLength = 6;
|
|
1100
1100
|
}
|
|
1101
1101
|
else if (!validator.isNumber(options.constraints.minLength)) {
|
|
1102
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1102
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.minLength" must be a number.');
|
|
1103
1103
|
}
|
|
1104
1104
|
else {
|
|
1105
1105
|
if (!(options.constraints.minLength >= 6
|
|
1106
1106
|
&& options.constraints.minLength <= 30)) {
|
|
1107
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1107
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.minLength"' +
|
|
1108
1108
|
' must be an integer between 6 and 30, inclusive.');
|
|
1109
1109
|
}
|
|
1110
1110
|
}
|
|
@@ -1112,19 +1112,19 @@ class PasswordPolicyAuthConfig {
|
|
|
1112
1112
|
options.constraints.maxLength = 4096;
|
|
1113
1113
|
}
|
|
1114
1114
|
else if (!validator.isNumber(options.constraints.maxLength)) {
|
|
1115
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1115
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.maxLength" must be a number.');
|
|
1116
1116
|
}
|
|
1117
1117
|
else {
|
|
1118
1118
|
if (!(options.constraints.maxLength >= options.constraints.minLength &&
|
|
1119
1119
|
options.constraints.maxLength <= 4096)) {
|
|
1120
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1120
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints.maxLength"' +
|
|
1121
1121
|
' must be greater than or equal to minLength and at max 4096.');
|
|
1122
1122
|
}
|
|
1123
1123
|
}
|
|
1124
1124
|
}
|
|
1125
1125
|
else {
|
|
1126
1126
|
if (options.enforcementState === 'ENFORCE') {
|
|
1127
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1127
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"PasswordPolicyConfig.constraints" must be defined.');
|
|
1128
1128
|
}
|
|
1129
1129
|
}
|
|
1130
1130
|
}
|
|
@@ -1138,7 +1138,7 @@ class PasswordPolicyAuthConfig {
|
|
|
1138
1138
|
*/
|
|
1139
1139
|
constructor(response) {
|
|
1140
1140
|
if (typeof response.passwordPolicyEnforcementState === 'undefined') {
|
|
1141
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1141
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INTERNAL_ERROR, 'INTERNAL ASSERT FAILED: Invalid password policy configuration response');
|
|
1142
1142
|
}
|
|
1143
1143
|
this.enforcementState = response.passwordPolicyEnforcementState;
|
|
1144
1144
|
let constraintsResponse = {};
|
|
@@ -1167,19 +1167,19 @@ exports.PasswordPolicyAuthConfig = PasswordPolicyAuthConfig;
|
|
|
1167
1167
|
class EmailPrivacyAuthConfig {
|
|
1168
1168
|
static validate(options) {
|
|
1169
1169
|
if (!validator.isNonNullObject(options)) {
|
|
1170
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1170
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"EmailPrivacyConfig" must be a non-null object.');
|
|
1171
1171
|
}
|
|
1172
1172
|
const validKeys = {
|
|
1173
1173
|
enableImprovedEmailPrivacy: true,
|
|
1174
1174
|
};
|
|
1175
1175
|
for (const key in options) {
|
|
1176
1176
|
if (!(key in validKeys)) {
|
|
1177
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1177
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, `"${key}" is not a valid "EmailPrivacyConfig" parameter.`);
|
|
1178
1178
|
}
|
|
1179
1179
|
}
|
|
1180
1180
|
if (typeof options.enableImprovedEmailPrivacy !== 'undefined'
|
|
1181
1181
|
&& !validator.isBoolean(options.enableImprovedEmailPrivacy)) {
|
|
1182
|
-
throw new error_1.FirebaseAuthError(error_1.
|
|
1182
|
+
throw new error_1.FirebaseAuthError(error_1.authClientErrorCode.INVALID_CONFIG, '"EmailPrivacyConfig.enableImprovedEmailPrivacy" must be a valid boolean value.');
|
|
1183
1183
|
}
|
|
1184
1184
|
}
|
|
1185
1185
|
}
|