diff --git a/lib/index.d.ts b/lib/index.d.ts index 85a5a0ca..3082f7a4 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -5,99 +5,68 @@ declare module "react-native-firebase" { - type AuthProvider = { - PROVIDER_ID: string, - credential: (token: string, secret?: string) => AuthCredential, - }; + type FirebaseModuleAndStatics = { + (): M; + nativeModuleExists: boolean; + } & S - export default class FireBase { - constructor(config?: RNFirebase.configurationOptions) - - log: any; + // Modules commented-out do not currently have type definitions + export class Firebase { + private constructor(); + // admob: FirebaseModuleAndStatics; + analytics: FirebaseModuleAndStatics; + auth: FirebaseModuleAndStatics; + // config: FirebaseModule; + crash: FirebaseModuleAndStatics; + database: FirebaseModuleAndStatics; + fabric: { + crashlytics: FirebaseModuleAndStatics; + }; + firestore: FirebaseModuleAndStatics; + links: FirebaseModuleAndStatics; + messaging: FirebaseModuleAndStatics; + // perf: FirebaseModuleAndStatics; + storage: FirebaseModuleAndStatics; + // utils: FirebaseModuleAndStatics; + initializeApp(options: Firebase.Options, name: string): App; + app(name?: string): App; + apps(): App[]; + SDK_VERSION(): string; + } + namespace Firebase { + interface Options { + apiKey: string; + appId: string; + databaseURL: string; + messagingSenderId: string; + projectId: string; + storageBucket: string; + } + } + const firebase: Firebase; + export default firebase; + // Modules commented-out do not currently have type definitions + export class App { + private constructor(); + // admob(): RNFirebase.admob.AdMob; analytics(): RNFirebase.Analytics; - - on(type: string, handler: (msg: any) => void): any; - - database: { - (): RNFirebase.database.Database - ServerValue: { - TIMESTAMP: number - } - }; - - auth: { - (): RNFirebase.auth.Auth - EmailAuthProvider: AuthProvider, - PhoneAuthProvider: AuthProvider, - GoogleAuthProvider: AuthProvider, - GithubAuthProvider: AuthProvider, - TwitterAuthProvider: AuthProvider, - FacebookAuthProvider: AuthProvider, - PhoneAuthState: { - CODE_SENT: string, - AUTO_VERIFY_TIMEOUT: string, - AUTO_VERIFIED: string, - ERROR: string, - }, - }; - - /**RNFirebase mimics the Web Firebase SDK Storage, - * whilst providing some iOS and Android specific functionality. - */ - storage(): RNFirebase.storage.Storage; - - /** - * Firebase Cloud Messaging (FCM) allows you to send push messages at no cost to both Android & iOS platforms. - * Assuming the installation instructions have been followed, FCM is ready to go. - * As the Firebase Web SDK has limited messaging functionality, - * the following methods within react-native-firebase have been created to handle FCM in the React Native environment. - */ - messaging(): RNFirebase.messaging.Messaging; - - /** - * RNFirebase provides crash reporting for your app out of the box. - * Please note crashes do not appear in real-time on the console, - * they tend to take a number of hours to appear - * If you want to manually report a crash, - * such as a pre-caught exception this is possible by using the report method. - */ + auth(): RNFirebase.auth.Auth; + // config(): RNFirebase.config.Config; crash(): RNFirebase.crash.Crash; - - /** - * Firebase Dynamic Links are links that work the way you want, on multiple - * platforms, and whether or not your app is already installed. - * See the official Firebase docs: - * https://firebase.google.com/docs/dynamic-links/ - */ - links(): RNFirebase.links.Links; - - /** - * Cloud Firestore is Firebase's new flagship database solution for mobile - * development, however as at the time of this writing (22 Jan 2018) it is - * still a beta product, and may not be as stable as Firebase Realtime - * Database. Comparison of the two products hers: - * https://firebase.google.com/docs/database/rtdb-vs-firestore - */ - static firestore: { - (): RNFirebase.firestore.Firestore; - } & RNFirebase.firestore.FirestoreStatics; - - static fabric: { - crashlytics(): RNFirebase.crashlytics.Crashlytics; + database(): RNFirebase.database.Database; + fabric: { + crashlytics(): RNFirebase.crashlytics.Crashlytics, }; - - apps: Array; - googleApiAvailability: RNFirebase.GoogleApiAvailabilityType; - - static initializeApp(options?: any | RNFirebase.configurationOptions, name?: string): FireBase; - - static app(name?: string): FireBase; - - [key: string]: any; + firestore(): RNFirebase.firestore.Firestore; + links(): RNFirebase.links.Links; + messaging(): RNFirebase.messaging.Messaging; + // perf(): RNFirebase.perf.Performance; + storage(): RNFirebase.storage.Storage; + // utils(): RNFirebase.utils.Utils; } - namespace RNFirebase { + export namespace RNFirebase { interface RnError extends Error { code?: string; } @@ -495,6 +464,15 @@ declare module "react-native-firebase" { update(values: Object, onComplete?: (a: RnError | null) => any): Promise; } + + interface DatabaseStatics { + /** @see https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/ServerValue.html#TIMESTAMP */ + ServerValue: { + TIMESTAMP: { + [key: string]: string + } + } + } } /** @@ -605,7 +583,7 @@ declare module "react-native-firebase" { * * @param forceRefresh: boolean - default to false */ - getIdToken(forceRefresh: boolean?): Promise + getIdToken(forceRefresh?: boolean): Promise /** * Link the user with a 3rd party credential provider. @@ -722,6 +700,11 @@ declare module "react-native-firebase" { user: object | null } | null; + type AuthProvider = { + PROVIDER_ID: string, + credential: (token: string, secret?: string) => AuthCredential, + }; + interface Auth { /** * Returns the current Firebase authentication state. @@ -839,6 +822,21 @@ declare module "react-native-firebase" { [key: string]: any; } + + interface AuthStatics { + EmailAuthProvider: AuthProvider; + PhoneAuthProvider: AuthProvider; + GoogleAuthProvider: AuthProvider; + GithubAuthProvider: AuthProvider; + TwitterAuthProvider: AuthProvider; + FacebookAuthProvider: AuthProvider; + PhoneAuthState: { + CODE_SENT: string; + AUTO_VERIFY_TIMEOUT: string; + AUTO_VERIFIED: string; + ERROR: string; + }; + } } namespace messaging { @@ -1043,7 +1041,7 @@ declare module "react-native-firebase" { * Returns an unsubscribe function, call the returned function to * unsubscribe from all future events. */ - onLink(listener: (url) => void): () => void; + onLink(listener: (url: string) => void): () => void; } /** @@ -1098,7 +1096,7 @@ declare module "react-native-firebase" { FieldValue: typeof FieldValue; GeoPoint: typeof GeoPoint; enableLogging(enabled: boolean): void; - }; + } interface CollectionReference { readonly firestore: Firestore; @@ -1113,7 +1111,7 @@ declare module "react-native-firebase" { get(): Promise; limit(limit: number): Query; onSnapshot(onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void; - onSnapshot(observer: Observer): () => void; + onSnapshot(observer: Query.Observer): () => void; onSnapshot(queryListenOptions: Query.QueryListenOptions, onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void; onSnapshot(queryListenOptions: Query.QueryListenOptions, observer: Query.Observer): () => void; orderBy(fieldPath: string | FieldPath, directionStr?: Types.QueryDirection): Query; @@ -1185,17 +1183,17 @@ declare module "react-native-firebase" { class GeoPoint { constructor(latitude: number, longitude: number); - get latitude(): number; - get longitude(): number; + readonly latitude: number; + readonly longitude: number; } class Path { static fromName(name: string): Path; constructor(pathComponents: string[]); - get id(): string | null; - get isDocument(): boolean; - get isCollection(): boolean; - get relativeName(): string; + readonly id: string | null; + readonly isDocument: boolean; + readonly isCollection: boolean; + readonly relativeName: string; child(relativePath: string): Path; parent(): Path | null; } @@ -1272,7 +1270,7 @@ declare module "react-native-firebase" { readonly metadata: Types.SnapshotMetadata; readonly query: Query; readonly size: number; - forEach(callback: (snapshot: DocumentSnapshot) => any); + forEach(callback: (snapshot: DocumentSnapshot) => any): void; } namespace QuerySnapshot { interface NativeData {