Skip to content

Commit 4c060bc

Browse files
chore: analytics types
1 parent de79b76 commit 4c060bc

4 files changed

Lines changed: 218 additions & 21 deletions

File tree

packages/analytics/lib/index.ts

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,78 @@
1+
/*
2+
* Copyright (c) 2016-present Invertase Limited & Contributors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this library except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
18+
// Export types from types/analytics
19+
export type {
20+
AnalyticsModule,
21+
Analytics,
22+
FirebaseAnalyticsModule,
23+
AnalyticsDefaultExport,
24+
AnalyticsFirebaseExport,
25+
Statics,
26+
AnalyticsCallOptions,
27+
ConsentSettings,
28+
AnalyticsSettings,
29+
SettingsOptions,
30+
Currency,
31+
ConsentStatusString,
32+
Promotion,
33+
Item,
34+
AddPaymentInfoEventParameters,
35+
AddShippingInfoParameters,
36+
AddToCartEventParameters,
37+
AddToWishlistEventParameters,
38+
BeginCheckoutEventParameters,
39+
CampaignDetailsEventParameters,
40+
EarnVirtualCurrencyEventParameters,
41+
GenerateLeadEventParameters,
42+
JoinGroupEventParameters,
43+
LevelEndEventParameters,
44+
LevelStartEventParameters,
45+
LevelUpEventParameters,
46+
LoginEventParameters,
47+
PostScoreEventParameters,
48+
SelectContentEventParameters,
49+
PurchaseEventParameters,
50+
RefundEventParameters,
51+
RemoveFromCartEventParameters,
52+
SearchEventParameters,
53+
SelectItemEventParameters,
54+
SetCheckoutOptionEventParameters,
55+
SelectPromotionEventParameters,
56+
ShareEventParameters,
57+
SignUpEventParameters,
58+
SpendVirtualCurrencyEventParameters,
59+
UnlockAchievementEventParameters,
60+
ViewCartEventParameters,
61+
ViewItemEventParameters,
62+
ViewItemListEventParameters,
63+
ViewPromotionEventParameters,
64+
ViewSearchResultsParameters,
65+
ScreenViewParameters,
66+
EventParams,
67+
GtagConfigParams,
68+
EventNameString,
69+
CustomEventName,
70+
FirebaseAnalyticsTypes,
71+
} from './types/analytics';
72+
73+
// Export modular API functions
174
export * from './modular';
2-
export * from './namespaced';
3-
export * from './types/analytics';
475

76+
// Export namespaced API
77+
export * from './namespaced';
578
export { default } from './namespaced';

packages/analytics/lib/modular.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { MODULAR_DEPRECATION_ARG } from '@react-native-firebase/app/lib/common';
2-
import type { FirebaseAnalyticsModule } from './namespaced';
2+
import type { FirebaseAnalyticsModule } from './types/analytics';
33
import { getApp } from '@react-native-firebase/app';
44
import { Platform } from 'react-native';
55
import type { ReactNativeFirebase } from '@react-native-firebase/app';

packages/analytics/lib/namespaced.ts

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
* limitations under the License.
1515
*
1616
*/
17-
import { ReactNativeFirebase } from '@react-native-firebase/app';
1817
import {
1918
isAlphaNumericUnderscore,
2019
isE164PhoneNumber,
@@ -77,6 +76,9 @@ import {
7776
type ViewItemListEventParameters,
7877
type ViewPromotionEventParameters,
7978
type ViewSearchResultsParameters,
79+
type AnalyticsModule,
80+
type AnalyticsDefaultExport,
81+
type AnalyticsFirebaseExport,
8082
} from './types/analytics';
8183

8284
const ReservedEventNames: readonly string[] = [
@@ -120,7 +122,7 @@ const namespace = 'analytics';
120122

121123
const nativeModuleName = 'RNFBAnalyticsModule';
122124

123-
class FirebaseAnalyticsModule extends FirebaseModule {
125+
class FirebaseAnalyticsModule extends FirebaseModule implements AnalyticsModule {
124126
logEvent(
125127
name: string,
126128
params: { [key: string]: any } = {},
@@ -850,8 +852,6 @@ class FirebaseAnalyticsModule extends FirebaseModule {
850852
}
851853
}
852854

853-
export type { FirebaseAnalyticsModule };
854-
855855
// import { SDK_VERSION } from '@react-native-firebase/analytics';
856856
export const SDK_VERSION: string = version;
857857

@@ -862,13 +862,7 @@ export const SDK_VERSION: string = version;
862862
// analytics().logEvent(...);
863863
// firebase.analytics().logEvent(...);
864864

865-
export declare const defaultExport: ReactNativeFirebase.FirebaseModuleWithStatics<
866-
FirebaseAnalyticsModule,
867-
Statics
868-
> & {
869-
(): FirebaseAnalyticsModule;
870-
(app?: ReactNativeFirebase.FirebaseApp): FirebaseAnalyticsModule;
871-
};
865+
type AnalyticsNamespace = AnalyticsDefaultExport;
872866

873867
export default createModuleNamespace({
874868
statics,
@@ -879,13 +873,9 @@ export default createModuleNamespace({
879873
hasMultiAppSupport: false,
880874
hasCustomUrlOrRegionSupport: false,
881875
ModuleClass: FirebaseAnalyticsModule,
882-
}) as typeof defaultExport;
876+
}) as unknown as AnalyticsNamespace;
883877

884878
// Register the interop module for non-native platforms.
885-
setReactNativeModule(nativeModuleName, RNFBAnalyticsModule);
879+
setReactNativeModule(nativeModuleName, RNFBAnalyticsModule as unknown as Record<string, unknown>);
886880

887-
export const firebase: FirebaseAnalyticsModule & {
888-
analytics: typeof defaultExport;
889-
SDK_VERSION: string;
890-
app(name?: string): ReactNativeFirebase.FirebaseApp & { analytics(): FirebaseAnalyticsModule };
891-
} = getFirebaseRoot();
881+
export const firebase = getFirebaseRoot() as unknown as AnalyticsFirebaseExport;

packages/analytics/lib/types/analytics.ts

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { ReactNativeFirebase } from '@react-native-firebase/app';
2+
13
/**
24
* A currency amount.
35
*/
@@ -869,3 +871,135 @@ export declare type EventNameString =
869871
| 'view_item_list'
870872
| 'view_promotion'
871873
| 'view_search_results';
874+
875+
// ============ Module Interface ============
876+
877+
/**
878+
* Analytics module instance - returned from firebase.analytics() or firebase.app().analytics()
879+
*/
880+
export interface AnalyticsModule extends ReactNativeFirebase.FirebaseModule {
881+
/** The FirebaseApp this module is associated with */
882+
app: ReactNativeFirebase.FirebaseApp;
883+
884+
logEvent(
885+
name: string,
886+
params?: { [key: string]: any },
887+
options?: AnalyticsCallOptions,
888+
): Promise<void>;
889+
890+
setAnalyticsCollectionEnabled(enabled: boolean): Promise<void>;
891+
892+
setSessionTimeoutDuration(milliseconds?: number): Promise<void>;
893+
894+
getAppInstanceId(): Promise<string | null>;
895+
896+
getSessionId(): Promise<number | null>;
897+
898+
setUserId(id: string | null): Promise<void>;
899+
900+
setUserProperty(name: string, value: string | null): Promise<void>;
901+
902+
setUserProperties(
903+
properties: { [key: string]: string | null },
904+
options?: AnalyticsCallOptions,
905+
): Promise<void>;
906+
907+
resetAnalyticsData(): Promise<void>;
908+
909+
setConsent(consentSettings: ConsentSettings): Promise<void>;
910+
911+
setDefaultEventParameters(params?: { [key: string]: any }): Promise<void>;
912+
913+
// Event logging methods
914+
logAddPaymentInfo(object: AddPaymentInfoEventParameters): Promise<void>;
915+
logScreenView(object: ScreenViewParameters): Promise<void>;
916+
logAddShippingInfo(object?: AddShippingInfoParameters): Promise<void>;
917+
logAddToCart(object?: AddToCartEventParameters): Promise<void>;
918+
logAddToWishlist(object?: AddToWishlistEventParameters): Promise<void>;
919+
logAppOpen(): Promise<void>;
920+
logBeginCheckout(object?: BeginCheckoutEventParameters): Promise<void>;
921+
logCampaignDetails(object: CampaignDetailsEventParameters): Promise<void>;
922+
logEarnVirtualCurrency(object: EarnVirtualCurrencyEventParameters): Promise<void>;
923+
logGenerateLead(object?: GenerateLeadEventParameters): Promise<void>;
924+
logJoinGroup(object: JoinGroupEventParameters): Promise<void>;
925+
logLevelEnd(object: LevelEndEventParameters): Promise<void>;
926+
logLevelStart(object: LevelStartEventParameters): Promise<void>;
927+
logLevelUp(object: LevelUpEventParameters): Promise<void>;
928+
logLogin(object: LoginEventParameters): Promise<void>;
929+
logPostScore(object: PostScoreEventParameters): Promise<void>;
930+
logSelectContent(object: SelectContentEventParameters): Promise<void>;
931+
logPurchase(object?: PurchaseEventParameters): Promise<void>;
932+
logRefund(object?: RefundEventParameters): Promise<void>;
933+
logRemoveFromCart(object?: RemoveFromCartEventParameters): Promise<void>;
934+
logSearch(object: SearchEventParameters): Promise<void>;
935+
logSelectItem(object: SelectItemEventParameters): Promise<void>;
936+
logSetCheckoutOption(object: SetCheckoutOptionEventParameters): Promise<void>;
937+
logSelectPromotion(object: SelectPromotionEventParameters): Promise<void>;
938+
logShare(object: ShareEventParameters): Promise<void>;
939+
logSignUp(object: SignUpEventParameters): Promise<void>;
940+
logSpendVirtualCurrency(object: SpendVirtualCurrencyEventParameters): Promise<void>;
941+
logTutorialBegin(): Promise<void>;
942+
logTutorialComplete(): Promise<void>;
943+
logUnlockAchievement(object: UnlockAchievementEventParameters): Promise<void>;
944+
logViewCart(object?: ViewCartEventParameters): Promise<void>;
945+
logViewItem(object?: ViewItemEventParameters): Promise<void>;
946+
logViewItemList(object?: ViewItemListEventParameters): Promise<void>;
947+
logViewPromotion(object?: ViewPromotionEventParameters): Promise<void>;
948+
logViewSearchResults(object: ViewSearchResultsParameters): Promise<void>;
949+
950+
// iOS-specific methods
951+
initiateOnDeviceConversionMeasurementWithEmailAddress(emailAddress: string): Promise<void>;
952+
initiateOnDeviceConversionMeasurementWithHashedEmailAddress(
953+
hashedEmailAddress: string,
954+
): Promise<void>;
955+
initiateOnDeviceConversionMeasurementWithPhoneNumber(phoneNumber: string): Promise<void>;
956+
initiateOnDeviceConversionMeasurementWithHashedPhoneNumber(
957+
hashedPhoneNumber: string,
958+
): Promise<void>;
959+
}
960+
961+
// ============ Type Aliases for Convenience ============
962+
963+
export type Analytics = AnalyticsModule;
964+
965+
/**
966+
* @deprecated Use AnalyticsModule instead.
967+
* FirebaseAnalyticsModule is kept for backwards compatibility.
968+
*/
969+
export type FirebaseAnalyticsModule = AnalyticsModule;
970+
971+
/**
972+
* Default export type for analytics module
973+
*/
974+
export type AnalyticsDefaultExport = ReactNativeFirebase.FirebaseModuleWithStatics<
975+
AnalyticsModule,
976+
Statics
977+
> & {
978+
(): AnalyticsModule;
979+
(app?: ReactNativeFirebase.FirebaseApp): AnalyticsModule;
980+
};
981+
982+
/**
983+
* Firebase root export type for analytics module
984+
*/
985+
export type AnalyticsFirebaseExport = AnalyticsModule & {
986+
analytics: AnalyticsDefaultExport;
987+
SDK_VERSION: string;
988+
app(name?: string): ReactNativeFirebase.FirebaseApp & { analytics(): AnalyticsModule };
989+
};
990+
991+
// ============ Backwards Compatibility Namespace ============
992+
993+
/**
994+
* @deprecated Use the exported types directly instead.
995+
* FirebaseAnalyticsTypes namespace is kept for backwards compatibility.
996+
*/
997+
/* eslint-disable @typescript-eslint/no-namespace */
998+
export namespace FirebaseAnalyticsTypes {
999+
// Short name aliases referencing top-level types
1000+
export type Module = AnalyticsModule;
1001+
export type CallOptions = AnalyticsCallOptions;
1002+
export type Consent = ConsentSettings;
1003+
export type Settings = AnalyticsSettings;
1004+
}
1005+
/* eslint-enable @typescript-eslint/no-namespace */

0 commit comments

Comments
 (0)