firebase-admin 13.10.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 +45 -14
- 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 +57 -48
- package/lib/app-check/app-check-api.d.ts +1 -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 +6 -2
- 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 +34 -24
- 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 +2 -2
- 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 +24 -29
- 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
|
@@ -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
|
|
@@ -19,7 +19,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
19
|
exports.ProjectManagementRequestHandler = void 0;
|
|
20
20
|
exports.assertServerResponse = assertServerResponse;
|
|
21
21
|
const api_request_1 = require("../utils/api-request");
|
|
22
|
-
const error_1 = require("
|
|
22
|
+
const error_1 = require("./error");
|
|
23
|
+
const error_2 = require("../utils/error");
|
|
23
24
|
const index_1 = require("../utils/index");
|
|
24
25
|
const validator = require("../utils/validator");
|
|
25
26
|
/** Project management backend host and port. */
|
|
@@ -41,7 +42,10 @@ const CERT_TYPE_API_MAP = {
|
|
|
41
42
|
};
|
|
42
43
|
function assertServerResponse(condition, responseData, message) {
|
|
43
44
|
if (!condition) {
|
|
44
|
-
throw new error_1.FirebaseProjectManagementError(
|
|
45
|
+
throw new error_1.FirebaseProjectManagementError({
|
|
46
|
+
code: 'invalid-server-response',
|
|
47
|
+
message: `${message} Response data: ${JSON.stringify(responseData, null, 2)}`
|
|
48
|
+
});
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
@@ -51,7 +55,7 @@ function assertServerResponse(condition, responseData, message) {
|
|
|
51
55
|
* @internal
|
|
52
56
|
*/
|
|
53
57
|
class ProjectManagementRequestHandler {
|
|
54
|
-
static wrapAndRethrowHttpError(errStatusCode, errText) {
|
|
58
|
+
static wrapAndRethrowHttpError(errStatusCode, errText, httpResponse) {
|
|
55
59
|
let errorCode;
|
|
56
60
|
let errorMessage;
|
|
57
61
|
switch (errStatusCode) {
|
|
@@ -90,7 +94,15 @@ class ProjectManagementRequestHandler {
|
|
|
90
94
|
if (!errText) {
|
|
91
95
|
errText = '<missing>';
|
|
92
96
|
}
|
|
93
|
-
throw new error_1.FirebaseProjectManagementError(
|
|
97
|
+
throw new error_1.FirebaseProjectManagementError({
|
|
98
|
+
code: errorCode,
|
|
99
|
+
message: errorMessage,
|
|
100
|
+
httpResponse: httpResponse || {
|
|
101
|
+
status: errStatusCode,
|
|
102
|
+
headers: {},
|
|
103
|
+
data: errText,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
94
106
|
}
|
|
95
107
|
/**
|
|
96
108
|
* @param app - The app used to fetch access tokens to sign API requests.
|
|
@@ -259,7 +271,7 @@ class ProjectManagementRequestHandler {
|
|
|
259
271
|
})
|
|
260
272
|
.catch((err) => {
|
|
261
273
|
if (err instanceof api_request_1.RequestResponseError) {
|
|
262
|
-
ProjectManagementRequestHandler.wrapAndRethrowHttpError(err.response.status, err.response.text);
|
|
274
|
+
ProjectManagementRequestHandler.wrapAndRethrowHttpError(err.response.status, err.response.text, (0, error_2.toHttpResponse)(err.response));
|
|
263
275
|
}
|
|
264
276
|
throw err;
|
|
265
277
|
});
|
|
@@ -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
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.ProjectManagement = void 0;
|
|
20
|
-
const error_1 = require("
|
|
20
|
+
const error_1 = require("./error");
|
|
21
21
|
const utils = require("../utils/index");
|
|
22
22
|
const validator = require("../utils/validator");
|
|
23
23
|
const android_app_1 = require("./android-app");
|
|
@@ -36,8 +36,11 @@ class ProjectManagement {
|
|
|
36
36
|
constructor(app) {
|
|
37
37
|
this.app = app;
|
|
38
38
|
if (!validator.isNonNullObject(app) || !('options' in app)) {
|
|
39
|
-
throw new error_1.FirebaseProjectManagementError(
|
|
40
|
-
|
|
39
|
+
throw new error_1.FirebaseProjectManagementError({
|
|
40
|
+
code: 'invalid-argument',
|
|
41
|
+
message: 'First argument passed to admin.projectManagement() must be a valid Firebase app '
|
|
42
|
+
+ 'instance.'
|
|
43
|
+
});
|
|
41
44
|
}
|
|
42
45
|
this.requestHandler = new project_management_api_request_internal_1.ProjectManagementRequestHandler(app);
|
|
43
46
|
}
|
|
@@ -200,9 +203,12 @@ class ProjectManagement {
|
|
|
200
203
|
.then((projectId) => {
|
|
201
204
|
// Assert that a specific project ID was provided within the app.
|
|
202
205
|
if (!validator.isNonEmptyString(projectId)) {
|
|
203
|
-
throw new error_1.FirebaseProjectManagementError(
|
|
204
|
-
|
|
205
|
-
|
|
206
|
+
throw new error_1.FirebaseProjectManagementError({
|
|
207
|
+
code: 'invalid-project-id',
|
|
208
|
+
message: 'Failed to determine project ID. Initialize the SDK with service account credentials, or '
|
|
209
|
+
+ 'set project ID as an app option. Alternatively, set the GOOGLE_CLOUD_PROJECT '
|
|
210
|
+
+ 'environment variable.'
|
|
211
|
+
});
|
|
206
212
|
}
|
|
207
213
|
this.projectId = projectId;
|
|
208
214
|
return this.projectId;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
/*!
|
|
3
3
|
* Copyright 2024 Google LLC
|
|
4
4
|
*
|
|
@@ -105,7 +105,7 @@ class ConditionEvaluator {
|
|
|
105
105
|
const seedPrefix = seed && seed.length > 0 ? `${seed}.` : '';
|
|
106
106
|
const stringToHash = `${seedPrefix}${context.randomizationId}`;
|
|
107
107
|
const hash = ConditionEvaluator.hashSeededRandomizationId(stringToHash);
|
|
108
|
-
const instanceMicroPercentile = hash % BigInt(100 *
|
|
108
|
+
const instanceMicroPercentile = hash % BigInt(100 * 1_000_000);
|
|
109
109
|
switch (percentOperator) {
|
|
110
110
|
case remote_config_api_1.PercentConditionOperator.LESS_OR_EQUAL:
|
|
111
111
|
return instanceMicroPercentile <= normalizedMicroPercent;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { FirebaseError, ErrorInfo } from '../utils/error';
|
|
18
|
+
/** @const {Record<string, RemoteConfigErrorCode>} Remote Config server to client error code mapping. */
|
|
19
|
+
export declare const ERROR_CODE_MAPPING: Record<string, RemoteConfigErrorCode>;
|
|
20
|
+
/**
|
|
21
|
+
* The constant mapping for valid Remote Config client error codes.
|
|
22
|
+
*/
|
|
23
|
+
export declare const RemoteConfigErrorCode: {
|
|
24
|
+
readonly ABORTED: "aborted";
|
|
25
|
+
readonly ALREADY_EXISTS: "already-exists";
|
|
26
|
+
readonly FAILED_PRECONDITION: "failed-precondition";
|
|
27
|
+
readonly INTERNAL_ERROR: "internal-error";
|
|
28
|
+
readonly INVALID_ARGUMENT: "invalid-argument";
|
|
29
|
+
readonly NOT_FOUND: "not-found";
|
|
30
|
+
readonly OUT_OF_RANGE: "out-of-range";
|
|
31
|
+
readonly PERMISSION_DENIED: "permission-denied";
|
|
32
|
+
readonly RESOURCE_EXHAUSTED: "resource-exhausted";
|
|
33
|
+
readonly UNAUTHENTICATED: "unauthenticated";
|
|
34
|
+
readonly UNKNOWN_ERROR: "unknown-error";
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The type definition for valid Remote Config client error codes.
|
|
38
|
+
*/
|
|
39
|
+
export type RemoteConfigErrorCode = typeof RemoteConfigErrorCode[keyof typeof RemoteConfigErrorCode];
|
|
40
|
+
/**
|
|
41
|
+
* Firebase Remote Config error code structure. This extends `FirebaseError`.
|
|
42
|
+
*/
|
|
43
|
+
export declare class FirebaseRemoteConfigError extends FirebaseError {
|
|
44
|
+
/**
|
|
45
|
+
* @param info - The error code info.
|
|
46
|
+
* @param message - The error message. If provided, this will override the default message.
|
|
47
|
+
*/
|
|
48
|
+
constructor(info: ErrorInfo, message?: string);
|
|
49
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
|
+
"use strict";
|
|
3
|
+
/*!
|
|
4
|
+
* Copyright 2026 Google LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.FirebaseRemoteConfigError = exports.RemoteConfigErrorCode = exports.ERROR_CODE_MAPPING = void 0;
|
|
20
|
+
const error_1 = require("../utils/error");
|
|
21
|
+
/** @const {Record<string, RemoteConfigErrorCode>} Remote Config server to client error code mapping. */
|
|
22
|
+
exports.ERROR_CODE_MAPPING = {
|
|
23
|
+
ABORTED: 'aborted',
|
|
24
|
+
ALREADY_EXISTS: 'already-exists',
|
|
25
|
+
INVALID_ARGUMENT: 'invalid-argument',
|
|
26
|
+
INTERNAL: 'internal-error',
|
|
27
|
+
FAILED_PRECONDITION: 'failed-precondition',
|
|
28
|
+
NOT_FOUND: 'not-found',
|
|
29
|
+
OUT_OF_RANGE: 'out-of-range',
|
|
30
|
+
PERMISSION_DENIED: 'permission-denied',
|
|
31
|
+
RESOURCE_EXHAUSTED: 'resource-exhausted',
|
|
32
|
+
UNAUTHENTICATED: 'unauthenticated',
|
|
33
|
+
UNKNOWN: 'unknown-error',
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The constant mapping for valid Remote Config client error codes.
|
|
37
|
+
*/
|
|
38
|
+
exports.RemoteConfigErrorCode = {
|
|
39
|
+
ABORTED: 'aborted',
|
|
40
|
+
ALREADY_EXISTS: 'already-exists',
|
|
41
|
+
FAILED_PRECONDITION: 'failed-precondition',
|
|
42
|
+
INTERNAL_ERROR: 'internal-error',
|
|
43
|
+
INVALID_ARGUMENT: 'invalid-argument',
|
|
44
|
+
NOT_FOUND: 'not-found',
|
|
45
|
+
OUT_OF_RANGE: 'out-of-range',
|
|
46
|
+
PERMISSION_DENIED: 'permission-denied',
|
|
47
|
+
RESOURCE_EXHAUSTED: 'resource-exhausted',
|
|
48
|
+
UNAUTHENTICATED: 'unauthenticated',
|
|
49
|
+
UNKNOWN_ERROR: 'unknown-error',
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Firebase Remote Config error code structure. This extends `FirebaseError`.
|
|
53
|
+
*/
|
|
54
|
+
class FirebaseRemoteConfigError extends error_1.FirebaseError {
|
|
55
|
+
/**
|
|
56
|
+
* @param info - The error code info.
|
|
57
|
+
* @param message - The error message. If provided, this will override the default message.
|
|
58
|
+
*/
|
|
59
|
+
constructor(info, message) {
|
|
60
|
+
super({
|
|
61
|
+
code: `remote-config/${info.code}`,
|
|
62
|
+
message: message || info.message,
|
|
63
|
+
httpResponse: info.httpResponse,
|
|
64
|
+
cause: info.cause,
|
|
65
|
+
});
|
|
66
|
+
/** @internal */
|
|
67
|
+
this.codePrefix = 'remote-config';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.FirebaseRemoteConfigError = FirebaseRemoteConfigError;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
/*!
|
|
3
3
|
* Copyright 2020 Google LLC
|
|
4
4
|
*
|
|
@@ -50,3 +50,4 @@ export { RemoteConfig, RemoteConfigFetchResponse } from './remote-config';
|
|
|
50
50
|
* app.
|
|
51
51
|
*/
|
|
52
52
|
export declare function getRemoteConfig(app?: App): RemoteConfig;
|
|
53
|
+
export { FirebaseRemoteConfigError, RemoteConfigErrorCode } from './error';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
"use strict";
|
|
3
3
|
/*!
|
|
4
4
|
* Copyright 2020 Google LLC
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.RemoteConfigFetchResponse = exports.RemoteConfig = exports.PercentConditionOperator = exports.CustomSignalOperator = void 0;
|
|
19
|
+
exports.RemoteConfigErrorCode = exports.FirebaseRemoteConfigError = exports.RemoteConfigFetchResponse = exports.RemoteConfig = exports.PercentConditionOperator = exports.CustomSignalOperator = void 0;
|
|
20
20
|
exports.getRemoteConfig = getRemoteConfig;
|
|
21
21
|
/**
|
|
22
22
|
* Firebase Remote Config.
|
|
@@ -64,3 +64,6 @@ function getRemoteConfig(app) {
|
|
|
64
64
|
const firebaseApp = app;
|
|
65
65
|
return firebaseApp.getOrInitService('remoteConfig', (app) => new remote_config_1.RemoteConfig(app));
|
|
66
66
|
}
|
|
67
|
+
var error_1 = require("./error");
|
|
68
|
+
Object.defineProperty(exports, "FirebaseRemoteConfigError", { enumerable: true, get: function () { return error_1.FirebaseRemoteConfigError; } });
|
|
69
|
+
Object.defineProperty(exports, "RemoteConfigErrorCode", { enumerable: true, get: function () { return error_1.RemoteConfigErrorCode; } });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
/*!
|
|
3
3
|
* Copyright 2020 Google LLC
|
|
4
4
|
*
|
|
@@ -14,15 +14,4 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
|
|
18
|
-
export type RemoteConfigErrorCode = 'aborted' | 'already-exists' | 'failed-precondition' | 'internal-error' | 'invalid-argument' | 'not-found' | 'out-of-range' | 'permission-denied' | 'resource-exhausted' | 'unauthenticated' | 'unknown-error';
|
|
19
|
-
/**
|
|
20
|
-
* Firebase Remote Config error code structure. This extends PrefixedFirebaseError.
|
|
21
|
-
*
|
|
22
|
-
* @param {RemoteConfigErrorCode} code The error code.
|
|
23
|
-
* @param {string} message The error message.
|
|
24
|
-
* @constructor
|
|
25
|
-
*/
|
|
26
|
-
export declare class FirebaseRemoteConfigError extends PrefixedFirebaseError {
|
|
27
|
-
constructor(code: RemoteConfigErrorCode, message: string);
|
|
28
|
-
}
|
|
17
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! firebase-admin
|
|
1
|
+
/*! firebase-admin v14.0.0 */
|
|
2
2
|
"use strict";
|
|
3
3
|
/*!
|
|
4
4
|
* Copyright 2020 Google LLC
|
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.
|
|
19
|
+
exports.RemoteConfigApiClient = void 0;
|
|
20
20
|
const api_request_1 = require("../utils/api-request");
|
|
21
21
|
const error_1 = require("../utils/error");
|
|
22
|
+
const error_2 = require("./error");
|
|
22
23
|
const utils = require("../utils/index");
|
|
23
24
|
const validator = require("../utils/validator");
|
|
24
25
|
const deep_copy_1 = require("../utils/deep-copy");
|
|
@@ -45,7 +46,10 @@ class RemoteConfigApiClient {
|
|
|
45
46
|
constructor(app) {
|
|
46
47
|
this.app = app;
|
|
47
48
|
if (!validator.isNonNullObject(app) || !('options' in app)) {
|
|
48
|
-
throw new FirebaseRemoteConfigError(
|
|
49
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
50
|
+
code: 'invalid-argument',
|
|
51
|
+
message: 'First argument passed to admin.remoteConfig() must be a valid Firebase app instance.'
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
this.httpClient = new api_request_1.AuthorizedHttpClient(app);
|
|
51
55
|
}
|
|
@@ -206,29 +210,37 @@ class RemoteConfigApiClient {
|
|
|
206
210
|
return utils.findProjectId(this.app)
|
|
207
211
|
.then((projectId) => {
|
|
208
212
|
if (!validator.isNonEmptyString(projectId)) {
|
|
209
|
-
throw new FirebaseRemoteConfigError(
|
|
210
|
-
|
|
211
|
-
|
|
213
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
214
|
+
code: 'unknown-error',
|
|
215
|
+
message: 'Failed to determine project ID. Initialize the SDK with service account credentials, or '
|
|
216
|
+
+ 'set project ID as an app option. Alternatively, set the GOOGLE_CLOUD_PROJECT '
|
|
217
|
+
+ 'environment variable.'
|
|
218
|
+
});
|
|
212
219
|
}
|
|
213
220
|
this.projectIdPrefix = `projects/${projectId}`;
|
|
214
221
|
return this.projectIdPrefix;
|
|
215
222
|
});
|
|
216
223
|
}
|
|
217
224
|
toFirebaseError(err) {
|
|
218
|
-
if (err instanceof error_1.
|
|
225
|
+
if (err instanceof error_1.FirebaseError) {
|
|
219
226
|
return err;
|
|
220
227
|
}
|
|
221
228
|
const response = err.response;
|
|
222
229
|
if (!response.isJson()) {
|
|
223
|
-
return new FirebaseRemoteConfigError(
|
|
230
|
+
return new error_2.FirebaseRemoteConfigError({
|
|
231
|
+
code: 'unknown-error',
|
|
232
|
+
message: `Unexpected response with status: ${response.status} and body: ${response.text}`,
|
|
233
|
+
httpResponse: (0, error_1.toHttpResponse)(response),
|
|
234
|
+
cause: err
|
|
235
|
+
});
|
|
224
236
|
}
|
|
225
237
|
const error = response.data.error || {};
|
|
226
238
|
let code = 'unknown-error';
|
|
227
|
-
if (error.status && error.status in ERROR_CODE_MAPPING) {
|
|
228
|
-
code = ERROR_CODE_MAPPING[error.status];
|
|
239
|
+
if (error.status && error.status in error_2.ERROR_CODE_MAPPING) {
|
|
240
|
+
code = error_2.ERROR_CODE_MAPPING[error.status];
|
|
229
241
|
}
|
|
230
|
-
const message = error.message ||
|
|
231
|
-
return new FirebaseRemoteConfigError(code, message);
|
|
242
|
+
const message = error.message || 'Unknown server error';
|
|
243
|
+
return new error_2.FirebaseRemoteConfigError({ code, message, httpResponse: (0, error_1.toHttpResponse)(response), cause: err });
|
|
232
244
|
}
|
|
233
245
|
/**
|
|
234
246
|
* Creates a RemoteConfigTemplate from the API response.
|
|
@@ -277,19 +289,34 @@ class RemoteConfigApiClient {
|
|
|
277
289
|
validateInputRemoteConfigTemplate(template) {
|
|
278
290
|
const templateCopy = (0, deep_copy_1.deepCopy)(template);
|
|
279
291
|
if (!validator.isNonNullObject(templateCopy)) {
|
|
280
|
-
throw new FirebaseRemoteConfigError(
|
|
292
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
293
|
+
code: 'invalid-argument',
|
|
294
|
+
message: `Invalid Remote Config template: ${JSON.stringify(templateCopy)}`
|
|
295
|
+
});
|
|
281
296
|
}
|
|
282
297
|
if (!validator.isNonEmptyString(templateCopy.etag)) {
|
|
283
|
-
throw new FirebaseRemoteConfigError(
|
|
298
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
299
|
+
code: 'invalid-argument',
|
|
300
|
+
message: 'ETag must be a non-empty string.'
|
|
301
|
+
});
|
|
284
302
|
}
|
|
285
303
|
if (!validator.isNonNullObject(templateCopy.parameters)) {
|
|
286
|
-
throw new FirebaseRemoteConfigError(
|
|
304
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
305
|
+
code: 'invalid-argument',
|
|
306
|
+
message: 'Remote Config parameters must be a non-null object'
|
|
307
|
+
});
|
|
287
308
|
}
|
|
288
309
|
if (!validator.isNonNullObject(templateCopy.parameterGroups)) {
|
|
289
|
-
throw new FirebaseRemoteConfigError(
|
|
310
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
311
|
+
code: 'invalid-argument',
|
|
312
|
+
message: 'Remote Config parameter groups must be a non-null object'
|
|
313
|
+
});
|
|
290
314
|
}
|
|
291
315
|
if (!validator.isArray(templateCopy.conditions)) {
|
|
292
|
-
throw new FirebaseRemoteConfigError(
|
|
316
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
317
|
+
code: 'invalid-argument',
|
|
318
|
+
message: 'Remote Config conditions must be an array'
|
|
319
|
+
});
|
|
293
320
|
}
|
|
294
321
|
if (typeof templateCopy.version !== 'undefined') {
|
|
295
322
|
// exclude output only properties and keep the only input property: description
|
|
@@ -309,16 +336,25 @@ class RemoteConfigApiClient {
|
|
|
309
336
|
validateVersionNumber(versionNumber, propertyName = 'versionNumber') {
|
|
310
337
|
if (!validator.isNonEmptyString(versionNumber) &&
|
|
311
338
|
!validator.isNumber(versionNumber)) {
|
|
312
|
-
throw new FirebaseRemoteConfigError(
|
|
339
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
340
|
+
code: 'invalid-argument',
|
|
341
|
+
message: `${propertyName} must be a non-empty string in int64 format or a number`
|
|
342
|
+
});
|
|
313
343
|
}
|
|
314
344
|
if (!Number.isInteger(Number(versionNumber))) {
|
|
315
|
-
throw new FirebaseRemoteConfigError(
|
|
345
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
346
|
+
code: 'invalid-argument',
|
|
347
|
+
message: `${propertyName} must be an integer or a string in int64 format`
|
|
348
|
+
});
|
|
316
349
|
}
|
|
317
350
|
return versionNumber.toString();
|
|
318
351
|
}
|
|
319
352
|
validateEtag(etag) {
|
|
320
353
|
if (!validator.isNonEmptyString(etag)) {
|
|
321
|
-
throw new FirebaseRemoteConfigError(
|
|
354
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
355
|
+
code: 'invalid-argument',
|
|
356
|
+
message: 'ETag header is not present in the server response.'
|
|
357
|
+
});
|
|
322
358
|
}
|
|
323
359
|
}
|
|
324
360
|
/**
|
|
@@ -333,25 +369,40 @@ class RemoteConfigApiClient {
|
|
|
333
369
|
validateListVersionsOptions(options) {
|
|
334
370
|
const optionsCopy = (0, deep_copy_1.deepCopy)(options);
|
|
335
371
|
if (!validator.isNonNullObject(optionsCopy)) {
|
|
336
|
-
throw new FirebaseRemoteConfigError(
|
|
372
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
373
|
+
code: 'invalid-argument',
|
|
374
|
+
message: 'ListVersionsOptions must be a non-null object.'
|
|
375
|
+
});
|
|
337
376
|
}
|
|
338
377
|
if (typeof optionsCopy.pageSize !== 'undefined') {
|
|
339
378
|
if (!validator.isNumber(optionsCopy.pageSize)) {
|
|
340
|
-
throw new FirebaseRemoteConfigError(
|
|
379
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
380
|
+
code: 'invalid-argument',
|
|
381
|
+
message: 'pageSize must be a number.'
|
|
382
|
+
});
|
|
341
383
|
}
|
|
342
384
|
if (optionsCopy.pageSize < 1 || optionsCopy.pageSize > 300) {
|
|
343
|
-
throw new FirebaseRemoteConfigError(
|
|
385
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
386
|
+
code: 'invalid-argument',
|
|
387
|
+
message: 'pageSize must be a number between 1 and 300 (inclusive).'
|
|
388
|
+
});
|
|
344
389
|
}
|
|
345
390
|
}
|
|
346
391
|
if (typeof optionsCopy.pageToken !== 'undefined' && !validator.isNonEmptyString(optionsCopy.pageToken)) {
|
|
347
|
-
throw new FirebaseRemoteConfigError(
|
|
392
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
393
|
+
code: 'invalid-argument',
|
|
394
|
+
message: 'pageToken must be a string value.'
|
|
395
|
+
});
|
|
348
396
|
}
|
|
349
397
|
if (typeof optionsCopy.endVersionNumber !== 'undefined') {
|
|
350
398
|
optionsCopy.endVersionNumber = this.validateVersionNumber(optionsCopy.endVersionNumber, 'endVersionNumber');
|
|
351
399
|
}
|
|
352
400
|
if (typeof optionsCopy.startTime !== 'undefined') {
|
|
353
401
|
if (!(optionsCopy.startTime instanceof Date) && !validator.isUTCDateString(optionsCopy.startTime)) {
|
|
354
|
-
throw new FirebaseRemoteConfigError(
|
|
402
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
403
|
+
code: 'invalid-argument',
|
|
404
|
+
message: 'startTime must be a valid Date object or a UTC date string.'
|
|
405
|
+
});
|
|
355
406
|
}
|
|
356
407
|
// Convert startTime to RFC3339 UTC "Zulu" format.
|
|
357
408
|
if (optionsCopy.startTime instanceof Date) {
|
|
@@ -363,7 +414,10 @@ class RemoteConfigApiClient {
|
|
|
363
414
|
}
|
|
364
415
|
if (typeof optionsCopy.endTime !== 'undefined') {
|
|
365
416
|
if (!(optionsCopy.endTime instanceof Date) && !validator.isUTCDateString(optionsCopy.endTime)) {
|
|
366
|
-
throw new FirebaseRemoteConfigError(
|
|
417
|
+
throw new error_2.FirebaseRemoteConfigError({
|
|
418
|
+
code: 'invalid-argument',
|
|
419
|
+
message: 'endTime must be a valid Date object or a UTC date string.'
|
|
420
|
+
});
|
|
367
421
|
}
|
|
368
422
|
// Convert endTime to RFC3339 UTC "Zulu" format.
|
|
369
423
|
if (optionsCopy.endTime instanceof Date) {
|
|
@@ -379,29 +433,3 @@ class RemoteConfigApiClient {
|
|
|
379
433
|
}
|
|
380
434
|
}
|
|
381
435
|
exports.RemoteConfigApiClient = RemoteConfigApiClient;
|
|
382
|
-
const ERROR_CODE_MAPPING = {
|
|
383
|
-
ABORTED: 'aborted',
|
|
384
|
-
ALREADY_EXISTS: 'already-exists',
|
|
385
|
-
INVALID_ARGUMENT: 'invalid-argument',
|
|
386
|
-
INTERNAL: 'internal-error',
|
|
387
|
-
FAILED_PRECONDITION: 'failed-precondition',
|
|
388
|
-
NOT_FOUND: 'not-found',
|
|
389
|
-
OUT_OF_RANGE: 'out-of-range',
|
|
390
|
-
PERMISSION_DENIED: 'permission-denied',
|
|
391
|
-
RESOURCE_EXHAUSTED: 'resource-exhausted',
|
|
392
|
-
UNAUTHENTICATED: 'unauthenticated',
|
|
393
|
-
UNKNOWN: 'unknown-error',
|
|
394
|
-
};
|
|
395
|
-
/**
|
|
396
|
-
* Firebase Remote Config error code structure. This extends PrefixedFirebaseError.
|
|
397
|
-
*
|
|
398
|
-
* @param {RemoteConfigErrorCode} code The error code.
|
|
399
|
-
* @param {string} message The error message.
|
|
400
|
-
* @constructor
|
|
401
|
-
*/
|
|
402
|
-
class FirebaseRemoteConfigError extends error_1.PrefixedFirebaseError {
|
|
403
|
-
constructor(code, message) {
|
|
404
|
-
super('remote-config', code, message);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
exports.FirebaseRemoteConfigError = FirebaseRemoteConfigError;
|