Skip to content

Commit 88e8f22

Browse files
Another attempt
1 parent 9d69fd9 commit 88e8f22

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

packages/database/index.node.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,16 @@ const ServerValue = Database.ServerValue;
5151
* @param app A valid FirebaseApp-like object
5252
* @param url A valid Firebase databaseURL
5353
* @param version custom version e.g. firebase-admin version
54+
* @param thirdPartyAuth Whether to use third party auth for this client (`true`
55+
* for NodeJS users that use the client with end user credentials, `false` for
56+
* Firebase Admin)
5457
*/
55-
export function initStandalone(app: FirebaseApp, url: string, version: string) {
58+
export function initStandalone(
59+
app: FirebaseApp,
60+
url: string,
61+
version: string,
62+
thirdPartyAuth = false
63+
) {
5664
/**
5765
* This should allow the firebase-admin package to provide a custom version
5866
* to the backend
@@ -81,7 +89,12 @@ export function initStandalone(app: FirebaseApp, url: string, version: string) {
8189
);
8290

8391
return {
84-
instance: RepoManager.getInstance().databaseFromApp(app, authProvider, url),
92+
instance: RepoManager.getInstance().databaseFromApp(
93+
app,
94+
authProvider,
95+
url,
96+
thirdPartyAuth
97+
),
8598
namespace: {
8699
Reference,
87100
Query,
@@ -112,7 +125,8 @@ export function registerDatabase(instance: FirebaseNamespace) {
112125
return RepoManager.getInstance().databaseFromApp(
113126
app,
114127
authProvider,
115-
url
128+
url,
129+
/* thirdPartyAuth= */ true
116130
);
117131
},
118132
ComponentType.PUBLIC
@@ -136,7 +150,8 @@ export function registerDatabase(instance: FirebaseNamespace) {
136150
instance.registerVersion(name, version, 'node');
137151

138152
if (isNodeSdk()) {
139-
module.exports = Object.assign({}, namespace, { initStandalone });
153+
module.exports = (app: FirebaseApp, url: string, version: string) =>
154+
initStandalone(app, url, version, /* thirdPartyAuth= */ true);
140155
}
141156
}
142157

packages/database/src/core/AuthTokenProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ export class FirebaseAuthTokenProvider implements AuthTokenProvider {
112112
}
113113
}
114114

115-
/* Auth token provider used to connect to the Emulator. */
116-
export class EmptyAuthTokenProvider implements AuthTokenProvider {
115+
/* Auth token provider that the Admin SDK uses to connect to the Emulator. */
116+
export class EmptyAdminAuthTokenProvider implements AuthTokenProvider {
117117
getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData> {
118-
return Promise.resolve({ accessToken: '' });
118+
return Promise.resolve({ accessToken: 'Bearer owner' });
119119
}
120120
addTokenChangeListener(listener: (token: string | null) => void): void {}
121121
removeTokenChangeListener(listener: (token: string | null) => void): void {}

packages/database/src/core/RepoManager.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
2828
import { Provider } from '@firebase/component';
2929
import {
3030
AuthTokenProvider,
31-
EmptyAuthTokenProvider,
31+
EmptyAdminAuthTokenProvider,
3232
FirebaseAuthTokenProvider
3333
} from './AuthTokenProvider';
3434

@@ -99,7 +99,8 @@ export class RepoManager {
9999
databaseFromApp(
100100
app: FirebaseApp,
101101
authProvider: Provider<FirebaseAuthInternalName>,
102-
url?: string
102+
url?: string,
103+
thirdPartyAuth?: boolean
103104
): Database {
104105
let dbUrl: string | undefined = url || app.options[DATABASE_URL_OPTION];
105106
if (dbUrl === undefined) {
@@ -123,7 +124,9 @@ export class RepoManager {
123124
dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;
124125
parsedUrl = parseRepoInfo(dbUrl);
125126
repoInfo = parsedUrl.repoInfo;
126-
authTokenProvider = new EmptyAuthTokenProvider();
127+
authTokenProvider = thirdPartyAuth
128+
? new FirebaseAuthTokenProvider(app, authProvider)
129+
: new EmptyAdminAuthTokenProvider();
127130
} else {
128131
authTokenProvider = new FirebaseAuthTokenProvider(app, authProvider);
129132
}

0 commit comments

Comments
 (0)