Included initStandalone (#7258)

Added private `initStandalone` API into modular SDK
This commit is contained in:
Maneesh Tewani
2023-07-12 08:34:30 -07:00
committed by GitHub
parent 64bd65e2dc
commit ce7fcb03dd
4 changed files with 130 additions and 3 deletions
+6
View File
@@ -0,0 +1,6 @@
---
"@firebase/database-compat": patch
"@firebase/database": patch
---
Included `initStandalone` as an internal method to RTDB.
+24 -3
View File
@@ -14,7 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
AppCheckInternalComponentName,
FirebaseAppCheckInternal
} from '@firebase/app-check-interop-types';
import { FirebaseApp } from '@firebase/app-types';
import {
FirebaseAuthInternal,
@@ -48,6 +51,7 @@ export function initStandalone<T>({
url,
version,
customAuthImpl,
customAppCheckImpl,
namespace,
nodeAdmin = false
}: {
@@ -55,6 +59,7 @@ export function initStandalone<T>({
url: string;
version: string;
customAuthImpl: FirebaseAuthInternal;
customAppCheckImpl?: FirebaseAppCheckInternal;
namespace: T;
nodeAdmin?: boolean;
}): {
@@ -63,24 +68,40 @@ export function initStandalone<T>({
} {
_setSDKVersion(version);
const container = new ComponentContainer('database-standalone');
/**
* ComponentContainer('database-standalone') is just a placeholder that doesn't perform
* any actual function.
*/
const authProvider = new Provider<FirebaseAuthInternalName>(
'auth-internal',
new ComponentContainer('database-standalone')
container
);
authProvider.setComponent(
new Component('auth-internal', () => customAuthImpl, ComponentType.PRIVATE)
);
let appCheckProvider: Provider<AppCheckInternalComponentName> = undefined;
if (customAppCheckImpl) {
appCheckProvider = new Provider<AppCheckInternalComponentName>(
'app-check-internal',
container
);
appCheckProvider.setComponent(
new Component(
'app-check-internal',
() => customAppCheckImpl,
ComponentType.PRIVATE
)
);
}
return {
instance: new Database(
_repoManagerDatabaseFromApp(
app,
authProvider,
/* appCheckProvider= */ undefined,
appCheckProvider,
url,
nodeAdmin
),
+1
View File
@@ -96,4 +96,5 @@ export {
hijackHash as _TEST_ACCESS_hijackHash,
forceRestClient as _TEST_ACCESS_forceRestClient
} from './api/test_access';
export * from './internal/index';
/* eslint-enable camelcase */
+99
View File
@@ -0,0 +1,99 @@
/**
* @license
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
FirebaseAppCheckInternal,
AppCheckInternalComponentName
} from '@firebase/app-check-interop-types';
import { FirebaseApp } from '@firebase/app-types';
import {
FirebaseAuthInternal,
FirebaseAuthInternalName
} from '@firebase/auth-interop-types';
import {
Component,
ComponentContainer,
ComponentType,
Provider
} from '@firebase/component';
import { Database } from '../api.standalone';
import { repoManagerDatabaseFromApp } from '../api/Database';
import { setSDKVersion } from '../core/version';
/**
* Used by console to create a database based on the app,
* passed database URL and a custom auth implementation.
* @internal
* @param app - A valid FirebaseApp-like object
* @param url - A valid Firebase databaseURL
* @param version - custom version e.g. firebase-admin version
* @param customAppCheckImpl - custom app check implementation
* @param customAuthImpl - custom auth implementation
*/
export function _initStandalone({
app,
url,
version,
customAuthImpl,
customAppCheckImpl,
nodeAdmin = false
}: {
app: FirebaseApp;
url: string;
version: string;
customAuthImpl: FirebaseAuthInternal;
customAppCheckImpl?: FirebaseAppCheckInternal;
nodeAdmin?: boolean;
}): Database {
setSDKVersion(version);
/**
* ComponentContainer('database-standalone') is just a placeholder that doesn't perform
* any actual function.
*/
const componentContainer = new ComponentContainer('database-standalone');
const authProvider = new Provider<FirebaseAuthInternalName>(
'auth-internal',
componentContainer
);
let appCheckProvider: Provider<AppCheckInternalComponentName>;
if (customAppCheckImpl) {
appCheckProvider = new Provider<AppCheckInternalComponentName>(
'app-check-internal',
componentContainer
);
appCheckProvider.setComponent(
new Component(
'app-check-internal',
() => customAppCheckImpl,
ComponentType.PRIVATE
)
);
}
authProvider.setComponent(
new Component('auth-internal', () => customAuthImpl, ComponentType.PRIVATE)
);
return repoManagerDatabaseFromApp(
app,
authProvider,
appCheckProvider,
url,
nodeAdmin
);
}