Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/scripts/compare-types/configs/installations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* Known differences between the firebase-js-sdk @firebase/installations public
* API and the @react-native-firebase/installations modular API.
*
* Each entry must have a `name` (the export name) and a `reason` explaining
* why the difference exists. Any difference NOT listed here will cause CI to
* fail so that new drift is caught and deliberately acknowledged.
*/

import type { PackageConfig } from '../src/types';

const config: PackageConfig = {
nameMapping: {},
missingInRN: [],
extraInRN: [],
differentShape: [],
};

export default config;
15 changes: 13 additions & 2 deletions .github/scripts/compare-types/src/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import appCheckConfig from '../configs/app-check';
import firestoreConfig from '../configs/firestore';
import firestorePipelinesConfig from '../configs/firestore-pipelines';
import remoteConfigConfig from '../configs/remote-config';
import installationsConfig from '../configs/installations';

const SCRIPT_DIR = path.resolve(__dirname, '..');
const REPO_ROOT = path.resolve(SCRIPT_DIR, '..', '..', '..');
Expand Down Expand Up @@ -196,6 +197,18 @@ export const packages: PackageEntry[] = [
],
config: appCheckConfig,
},
{
name: 'installations',
firebaseSdkTypesPaths: [
path.join(SCRIPT_DIR, 'packages', 'installations', 'firebase-sdk.d.ts'),
],
rnFirebaseModularFiles: [
path.join(rnDist('installations'), 'types', 'installations.d.ts'),
path.join(rnDist('installations'), 'modular.d.ts'),
],
rnFirebaseSupportFiles: [path.join(rnDist('installations'), 'types', 'internal.d.ts')],
config: installationsConfig,
},
{
name: 'firestore',
firebaseSdkTypesPaths: [requiredFirebaseTypes('firestore')],
Expand Down Expand Up @@ -248,5 +261,3 @@ export const packages: PackageEntry[] = [
config: firestorePipelinesConfig,
})),
];


3 changes: 3 additions & 0 deletions packages/installations/__tests__/installations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ describe('installations()', function () {
const installations = getInstallations();
installationsV9Deprecation(
() => deleteInstallations(installations),
// @ts-expect-error Combines modular and namespace API
() => installations.delete(),
'delete',
);
Expand All @@ -118,6 +119,7 @@ describe('installations()', function () {
const installations = getInstallations();
installationsV9Deprecation(
() => getId(installations),
// @ts-expect-error Combines modular and namespace API
() => installations.getId(),
'getId',
);
Expand All @@ -127,6 +129,7 @@ describe('installations()', function () {
const installations = getInstallations();
installationsV9Deprecation(
() => getToken(installations),
// @ts-expect-error Combines modular and namespace API
() => installations.getToken(),
'getToken',
);
Expand Down
173 changes: 0 additions & 173 deletions packages/installations/lib/index.d.ts

This file was deleted.

27 changes: 27 additions & 0 deletions packages/installations/lib/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2016-present Invertase Limited & Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this library 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.
*
*/

// Export modular/public types.
export type * from './types/installations';

// Export modular API functions.
export * from './modular';

// Export namespaced API.
export type { FirebaseInstallationsTypes } from './types/namespaced';
export * from './namespaced';
export { default } from './namespaced';
80 changes: 80 additions & 0 deletions packages/installations/lib/modular.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*
* Copyright (c) 2016-present Invertase Limited & Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this library 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 { getApp } from '@react-native-firebase/app';
import type { FirebaseApp } from '@react-native-firebase/app';
import { MODULAR_DEPRECATION_ARG } from '@react-native-firebase/app/dist/module/common';
import type {
IdChangeCallbackFn,
IdChangeUnsubscribeFn,
Installations,
} from './types/installations';
import type { InstallationsInternal } from './types/internal';

function withModularDeprecationArg(installations: Installations): InstallationsInternal {
return installations as InstallationsInternal;
}

/**
* Returns an instance of Installations associated with the given FirebaseApp instance.
*/
export function getInstallations(app?: FirebaseApp): Installations {
if (app) {
return getApp(app.name).installations();
}
return getApp().installations();
}
Comment thread
russellwheatley marked this conversation as resolved.

/**
* Deletes the Firebase Installation and all associated data.
*/
export function deleteInstallations(installations: Installations): Promise<void> {
const internalInstallations = withModularDeprecationArg(installations);
return internalInstallations.delete.call(internalInstallations, MODULAR_DEPRECATION_ARG);
}

/**
* Creates a Firebase Installation if there isn't one for the app and returns the Installation ID.
*/
export function getId(installations: Installations): Promise<string> {
const internalInstallations = withModularDeprecationArg(installations);
return internalInstallations.getId.call(internalInstallations, MODULAR_DEPRECATION_ARG);
}

/**
* Returns a Firebase Installations auth token, identifying the current Firebase Installation.
*/
export function getToken(installations: Installations, forceRefresh?: boolean): Promise<string> {
const internalInstallations = withModularDeprecationArg(installations);
return internalInstallations.getToken.call(
internalInstallations,
forceRefresh,
MODULAR_DEPRECATION_ARG,
);
}

/**
* Throw an error since react-native-firebase does not support this method.
*
* Sets a new callback that will get called when Installation ID changes. Returns an unsubscribe function that will remove the callback when called.
*/
export function onIdChange(
_installations: Installations,
_callback: IdChangeCallbackFn,
): IdChangeUnsubscribeFn {
throw new Error('onIdChange() is unsupported by the React Native Firebase SDK.');
}
Loading
Loading