react-native-firebase/lib/index.d.ts

2193 lines
64 KiB
TypeScript
Raw Normal View History

// Type definitions for React Native Firebase v4.2.0
2017-03-22 22:43:20 +00:00
// Project: https://github.com/invertase/react-native-firebase
2018-05-07 18:49:34 +00:00
// Definitions by: React Native Firebase Contributors
// TypeScript Version: 2.1
2017-03-22 22:43:20 +00:00
declare module 'react-native-firebase' {
2018-01-26 16:39:52 +00:00
/** 3rd party provider Credentials */
type AuthCredential = {
providerId: string;
token: string;
secret: string;
};
2018-01-26 16:39:52 +00:00
type FirebaseModuleAndStatics<M, S = {}> = {
(): M;
nativeModuleExists: boolean;
} & S;
// Modules commented-out do not currently have type definitions
export class Firebase {
private constructor();
// admob: FirebaseModuleAndStatics<RNFirebase.admob.AdMob>;
analytics: FirebaseModuleAndStatics<RNFirebase.Analytics>;
auth: FirebaseModuleAndStatics<
RNFirebase.auth.Auth,
RNFirebase.auth.AuthStatics
>;
// config: FirebaseModule<RNFirebase.config.Config>;
crash: FirebaseModuleAndStatics<RNFirebase.crash.Crash>;
crashlytics: FirebaseModuleAndStatics<RNFirebase.crashlytics.Crashlytics>;
database: FirebaseModuleAndStatics<
RNFirebase.database.Database,
RNFirebase.database.DatabaseStatics
>;
firestore: FirebaseModuleAndStatics<
RNFirebase.firestore.Firestore,
RNFirebase.firestore.FirestoreStatics
>;
2018-05-07 18:49:34 +00:00
functions: FirebaseModuleAndStatics<
RNFirebase.functions.Functions,
RNFirebase.functions.FunctionsStatics
>;
iid: FirebaseModuleAndStatics<RNFirebase.iid.InstanceId>;
// invites: FirebaseModuleAndStatics<RNFirebase.invites.Invites>
links: FirebaseModuleAndStatics<
RNFirebase.links.Links,
RNFirebase.links.LinksStatics
>;
messaging: FirebaseModuleAndStatics<
RNFirebase.messaging.Messaging,
RNFirebase.messaging.MessagingStatics
>;
notifications: FirebaseModuleAndStatics<
RNFirebase.notifications.Notifications,
RNFirebase.notifications.NotificationsStatics
>;
// perf: FirebaseModuleAndStatics<RNFirebase.perf.Perf>;
storage: FirebaseModuleAndStatics<RNFirebase.storage.Storage>;
// utils: FirebaseModuleAndStatics<RNFirebase.utils.Utils>;
initializeApp(options: Firebase.Options, name: string): App;
app(name?: string): App;
readonly apps: App[];
readonly 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;
auth(): RNFirebase.auth.Auth;
// config(): RNFirebase.config.Config;
crash(): RNFirebase.crash.Crash;
crashlytics(): RNFirebase.crashlytics.Crashlytics;
database(): RNFirebase.database.Database;
firestore(): RNFirebase.firestore.Firestore;
2018-05-07 18:49:34 +00:00
functions(): RNFirebase.functions.Functions;
iid(): RNFirebase.iid.InstanceId;
// invites(): RNFirebase.invites.Invites;
links(): RNFirebase.links.Links;
messaging(): RNFirebase.messaging.Messaging;
notifications(): RNFirebase.notifications.Notifications;
// perf(): RNFirebase.perf.Performance;
storage(): RNFirebase.storage.Storage;
// utils(): RNFirebase.utils.Utils;
readonly name: string;
readonly options: Firebase.Options;
2018-04-08 09:46:41 +00:00
onReady: () => Promise<App>;
2017-03-22 22:43:20 +00:00
}
export namespace RNFirebase {
interface RnError extends Error {
code?: string;
}
type GoogleApiAvailabilityType = {
status: number;
isAvailable: boolean;
isUserResolvableError?: boolean;
error?: string;
};
/**
* pass custom options by passing an object with configuration options.
* The configuration object will be generated first by the native configuration object, if set and then will be overridden if passed in JS.
* That is, all of the following key/value pairs are optional if the native configuration is set.
*/
interface configurationOptions {
/**
* default false
* When set to true, RNFirebase will log messages to the console and fire debug events we can listen to in js
* @usage
* firebase.on('debug', msg => console.log('Received debug message', msg))
*/
debug?: boolean;
/**
* default false
* When set to true, database persistence will be enabled.
*/
persistence?: boolean;
/**
* Default from app [NSBundle mainBundle] The bundle ID for the app to be bundled with
*/
bundleID?: string;
/**
* defualt ""
* The Google App ID that is used to uniquely identify an instance of an app.
*/
googleAppID?: string;
/**
* deufalt ""
* The database root (i.e. https://my-app.firebaseio.com)
*/
databaseURL?: string;
/**
* defualt ""
* URL scheme to set up durable deep link service
*/
deepLinkURLScheme?: string;
/**
* defualt ""
* The Google Cloud storage bucket name
*/
storageBucket?: string;
/**
* default ""
* The Android client ID used in Google AppInvite when an iOS app has it's android version
*/
androidClientID?: string;
/**
* default ""
* The Project number from the Google Developer's console used to configure Google Cloud Messaging
*/
GCMSenderID?: string;
/**
* default ""
* The tracking ID for Google Analytics
*/
trackingID?: string;
/**
* default ""
* The OAuth2 client ID for iOS application used to authenticate Google Users for signing in with Google
*/
clientID?: string;
/**
* defualt ""
* The secret iOS API key used for authenticating requests from our app
*/
APIKey?: string;
}
namespace storage {
interface StorageTask<T> extends Promise<T> {
on(
event: TaskEvent,
nextOrObserver: (snapshot: any) => any,
error: (error: RnError) => any,
complete: (complete: any) => any
): any;
/**
* is not currently supported by react-native-firebase
*/
pause(): void;
/**
* is not currently supported by react-native-firebase
*/
resume(): void;
/**
* is not currently supported by react-native-firebase
*/
cancel(): void;
}
interface RNStorage extends Reference {
/**
* Downloads a reference to the device
* @param {String} filePath Where to store the file
* @return {Promise}
* */
downloadFile(filePath: string): StorageTask<any>;
/**
* Upload a file path
* @returns {Promise}
*/
putFile(filePath: string, metadata?: any): StorageTask<any>;
setMaxDownloadRetryTime(time: number): void;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
interface Storage {
maxOperationRetryTime: number;
maxUploadRetryTime: number;
ref(path?: string): storage.RNStorage;
refFromURL(url: string): storage.RNStorage;
setMaxOperationRetryTime(time: number): any;
setMaxUploadRetryTime(time: number): any;
}
interface Reference {
bucket: string;
child(path: string): storage.Reference;
delete(): Promise<any>;
fullPath: string;
getDownloadURL(): Promise<any>;
getMetadata(): Promise<any>;
name: string;
parent: storage.Reference | null;
put(
data: any | Uint8Array | ArrayBuffer,
metadata?: storage.UploadMetadata
): storage.UploadTask;
putString(
data: string,
format?: storage.StringFormat,
metadata?: storage.UploadMetadata
): storage.UploadTask;
root: storage.Reference;
storage: storage.Storage;
toString(): string;
updateMetadata(metadata: storage.SettableMetadata): Promise<any>;
}
interface UploadMetadata extends storage.SettableMetadata {
md5Hash?: string | null;
}
interface SettableMetadata {
cacheControl?: string | null;
contentDisposition?: string | null;
contentEncoding?: string | null;
contentLanguage?: string | null;
contentType?: string | null;
customMetadata?: {
[/* warning: coerced from ? */ key: string]: string;
} | null;
}
type StringFormat = string;
var StringFormat: {
BASE64: StringFormat;
BASE64URL: StringFormat;
DATA_URL: StringFormat;
RAW: StringFormat;
};
interface UploadTask {
cancel(): boolean;
catch(onRejected: (a: RnError) => any): Promise<any>;
on(
event: storage.TaskEvent,
nextOrObserver?: null | Object,
error?: ((a: RnError) => any) | null,
complete?: (() => any) | null
): Function;
pause(): boolean;
resume(): boolean;
snapshot: storage.UploadTaskSnapshot;
then(
onFulfilled?: ((a: storage.UploadTaskSnapshot) => any) | null,
onRejected?: ((a: RnError) => any) | null
): Promise<any>;
}
interface UploadTaskSnapshot {
bytesTransferred: number;
downloadURL: string | null;
metadata: storage.FullMetadata;
ref: storage.Reference;
state: storage.TaskState;
task: storage.UploadTask;
totalBytes: number;
}
interface FullMetadata extends storage.UploadMetadata {
bucket: string;
downloadURLs: string[];
fullPath: string;
generation: string;
metageneration: string;
name: string;
size: number;
timeCreated: string;
updated: string;
}
type TaskEvent = string;
var TaskEvent: {
STATE_CHANGED: TaskEvent;
};
type TaskState = string;
var TaskState: {
CANCELED: TaskState;
ERROR: TaskState;
PAUSED: TaskState;
RUNNING: TaskState;
SUCCESS: TaskState;
};
}
namespace database {
interface Database {
/**
* Returns a new firebase reference instance
* */
ref(path?: string): RnReference;
/**
* register listener
*/
on(
path: string,
modifiersString: string,
modifiers: Array<string>,
eventName: string,
cb: () => void,
errorCb: () => void
): any;
/**
* unregister listener
*/
off(
path: string,
modifiersString: string,
eventName?: string,
origCB?: () => void
): any;
/**
* Removes all event handlers and their native subscriptions
*/
cleanup(): Promise<any>;
/**
* connect to firebase backend
*/
goOnline(): void;
/**
* disconnect to firebase backend
*/
goOffline(): void;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
interface RnReference extends Reference {
keepSynced(bool: boolean): any;
2017-04-26 19:12:59 +00:00
filter(name: string, value: any, key?: string): any;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
type QueryEventType =
| 'value'
| 'child_added'
| 'child_removed'
| 'child_changed'
| 'child_moved';
type QuerySuccessCallback = (
snapshot: DataSnapshot,
previousChildId?: string | null
) => void;
2017-09-18 07:23:34 +00:00
type QueryErrorCallback = (e: Error) => void;
interface Query {
endAt(
value: number | string | boolean | null,
key?: string
): database.Query;
equalTo(
value: number | string | boolean | null,
key?: string
): database.Query;
isEqual(other: database.Query | null): boolean;
limitToFirst(limit: number): database.Query;
limitToLast(limit: number): database.Query;
off(
eventType?: QueryEventType,
callback?: QuerySuccessCallback,
context?: Object
): void;
on(
eventType: QueryEventType,
callback: QuerySuccessCallback,
cancelCallbackOrContext?: QueryErrorCallback,
context?: Object
): (
a: database.DataSnapshot | null,
b?: string
) => QuerySuccessCallback;
once(
eventType: QueryEventType,
successCallback?: QuerySuccessCallback,
failureCallbackOrContext?: QueryErrorCallback,
context?: Object
): Promise<DataSnapshot>;
orderByChild(path: string): database.Query;
orderByKey(): database.Query;
orderByPriority(): database.Query;
orderByValue(): database.Query;
ref: database.Reference;
startAt(
value: number | string | boolean | null,
key?: string
): database.Query;
toJSON(): Object;
toString(): string;
}
interface DataSnapshot {
child(path: string): database.DataSnapshot;
exists(): boolean;
exportVal(): any;
forEach(action: (a: database.DataSnapshot) => boolean): boolean;
getPriority(): string | number | null;
hasChild(path: string): boolean;
hasChildren(): boolean;
key: string | null;
numChildren(): number;
ref: database.Reference;
toJSON(): Object | null;
val(): any;
}
interface ThenableReference<T> extends Promise<T> {}
interface ThenableReference<T> extends Reference {}
2017-09-18 07:23:34 +00:00
interface Reference extends database.Query {
child(path: string): database.Reference;
key: string | null;
onDisconnect(): any;
parent: database.Reference | null;
push(
value?: any,
onComplete?: (a: RnError | null) => any
): ThenableReference<any>;
remove(onComplete?: (a: RnError | null) => any): Promise<any>;
root: database.Reference;
set(value: any, onComplete?: (a: RnError | null) => any): Promise<any>;
setPriority(
priority: string | number | null,
onComplete: (a: RnError | null) => any
): Promise<any>;
setWithPriority(
newVal: any,
newPriority: string | number | null,
onComplete?: (a: RnError | null) => any
): Promise<any>;
transaction(
transactionUpdate: (a: any) => any,
onComplete?: (
a: RnError | null,
b: boolean,
c: database.DataSnapshot | null
) => any,
applyLocally?: boolean
): Promise<any>;
update(
values: Object,
onComplete?: (a: RnError | null) => any
): Promise<any>;
}
interface DatabaseStatics {
/** @see https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/ServerValue.html#TIMESTAMP */
ServerValue: {
TIMESTAMP: {
[key: string]: string;
};
};
}
}
/**
* firebase Analytics
*/
interface Analytics {
2017-03-22 22:43:20 +00:00
/**Log a custom event with optional params. */
logEvent(event: string, params?: Object): void;
2017-03-22 22:43:20 +00:00
/** Sets whether analytics collection is enabled for this app on this device. */
setAnalyticsCollectionEnabled(enabled: boolean): void;
2017-03-22 22:43:20 +00:00
/**
* Sets the current screen name, which specifies the current visual context in your app.
* Whilst screenClassOverride is optional,
* it is recommended it is always sent as your current class name,
2017-03-22 22:43:20 +00:00
* for example on Android it will always show as 'MainActivity' if not specified.
*/
setCurrentScreen(
screenName: string | null,
screenClassOverride?: string
): void;
2017-03-22 22:43:20 +00:00
/**
* Sets the minimum engagement time required before starting a session.
2017-03-22 22:43:20 +00:00
* The default value is 10000 (10 seconds)
*/
setMinimumSessionDuration(miliseconds: number): void;
2017-03-22 22:43:20 +00:00
/**
* Sets the duration of inactivity that terminates the current session.
* The default value is 1800000 (30 minutes).
*/
setSessionTimeoutDuration(miliseconds: number): void;
2017-03-22 22:43:20 +00:00
/**
* Gives a user a uniqiue identificaition.
* @example
2017-03-22 22:43:20 +00:00
* const id = firebase.auth().currentUser.uid;
*
2017-03-22 22:43:20 +00:00
* firebase.analytics().setUserId(id);
*/
setUserId(id: string | null): void;
2017-03-22 22:43:20 +00:00
/**
* Sets a key/value pair of data on the current user.
*/
setUserProperty(name: string, value: string | null): void;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
2017-03-22 22:43:20 +00:00
type AdditionalUserInfo = {
isNewUser: boolean;
profile?: Object;
providerId: string;
username?: string;
};
type UserCredential = {
additionalUserInfo?: AdditionalUserInfo;
user: User;
};
type UserInfo = {
displayName?: string;
email?: string;
phoneNumber?: string;
photoURL?: string;
providerId: string;
uid: string;
};
type UpdateProfile = {
displayName?: string;
photoURL?: string;
};
type UserMetadata = {
creationTime?: string;
lastSignInTime?: string;
};
interface User {
2017-03-22 22:43:20 +00:00
/**
* The user's display name (if available).
*/
displayName: string | null;
2017-03-22 22:43:20 +00:00
/**
* - The user's email address (if available).
*/
email: string | null;
2017-03-22 22:43:20 +00:00
/**
* - True if the user's email address has been verified.
*/
emailVerified: boolean;
2017-03-22 22:43:20 +00:00
/**
*
2017-03-22 22:43:20 +00:00
*/
isAnonymous: boolean;
metadata: UserMetadata;
phoneNumber: string | null;
2017-03-22 22:43:20 +00:00
/**
* - The URL of the user's profile picture (if available).
*/
photoURL: string | null;
2017-03-22 22:43:20 +00:00
/**
* - Additional provider-specific information about the user.
*/
providerData: Array<UserInfo>;
2017-03-22 22:43:20 +00:00
/**
* - The authentication provider ID for the current user.
* For example, 'facebook.com', or 'google.com'.
*/
providerId: string;
2017-03-22 22:43:20 +00:00
/**
* - The user's unique ID.
*/
uid: string;
2017-03-22 22:43:20 +00:00
/**
* Delete the current user.
*/
delete(): Promise<void>;
2017-03-22 22:43:20 +00:00
/**
* Returns the users authentication token.
*
* @param forceRefresh: boolean - default to false
2017-03-22 22:43:20 +00:00
*/
getIdToken(forceRefresh?: boolean): Promise<string>;
getToken(forceRefresh?: boolean): Promise<string>;
linkAndRetrieveDataWithCredential(
credential: AuthCredential
): Promise<UserCredential>;
2017-03-22 22:43:20 +00:00
/**
* Link the user with a 3rd party credential provider.
2017-03-22 22:43:20 +00:00
*/
linkWithCredential(credential: AuthCredential): Promise<User>;
reauthenticateAndRetrieveDataWithCredential(
credential: AuthCredential
): Promise<UserCredential>;
/**
* Re-authenticate a user with a third-party authentication provider
*/
reauthenticateWithCredential(credential: AuthCredential): Promise<void>;
2017-03-22 22:43:20 +00:00
/**
* Refreshes the current user.
*/
reload(): Promise<void>;
2017-03-22 22:43:20 +00:00
/**
* Sends a verification email to a user.
2017-03-22 22:43:20 +00:00
* This will Promise reject is the user is anonymous.
*/
sendEmailVerification(
actionCodeSettings?: ActionCodeSettings
): Promise<void>;
toJSON(): object;
unlink(providerId: string): Promise<User>;
2017-03-22 22:43:20 +00:00
/**
* Updates the user's email address.
* See Firebase docs for more information on security & email validation.
2017-03-22 22:43:20 +00:00
* This will Promise reject is the user is anonymous.
*/
updateEmail(email: string): Promise<void>;
2017-03-22 22:43:20 +00:00
/**
* Important: this is a security sensitive operation that requires the user to have recently signed in.
* If this requirement isn't met, ask the user to authenticate again and then call firebase.User#reauthenticate.
2017-03-22 22:43:20 +00:00
* This will Promise reject is the user is anonymous.
*/
updatePassword(password: string): Promise<void>;
2017-03-22 22:43:20 +00:00
/**
* Updates a user's profile data.
* Profile data should be an object of fields to update:
*/
updateProfile(updates: UpdateProfile): Promise<void>;
}
2017-03-22 22:43:20 +00:00
type ActionCodeSettings = {
android: {
installApp?: boolean;
minimumVersion?: string;
packageName: string;
};
handleCodeInApp?: boolean;
iOS: {
bundleId?: string;
};
url: string;
};
interface ActionCodeInfo {
data: {
email?: string;
fromEmail?: string;
};
operation: 'PASSWORD_RESET' | 'VERIFY_EMAIL' | 'RECOVER_EMAIL';
}
interface ConfirmationResult {
confirm(verificationCode: string): Promise<User | null>;
verificationId: string | null;
}
type PhoneAuthSnapshot = {
state: 'sent' | 'timeout' | 'verified' | 'error';
verificationId: string;
code: string | null;
error: Error | null;
};
type PhoneAuthError = {
code: string | null;
verificationId: string;
message: string | null;
stack: string | null;
};
interface PhoneAuthListener {
on(
event: string,
observer: () => PhoneAuthSnapshot,
errorCb?: () => PhoneAuthError,
successCb?: () => PhoneAuthSnapshot
): PhoneAuthListener;
then(fn: () => PhoneAuthSnapshot): Promise<any>;
catch(fn: () => Error): Promise<any>;
}
namespace auth {
type AuthResult = {
authenticated: boolean;
user: object | null;
} | null;
type AuthProvider = {
PROVIDER_ID: string;
credential: (token: string, secret?: string) => AuthCredential;
};
type EmailAuthProvider = {
PROVIDER_ID: string;
EMAIL_LINK_SIGN_IN_METHOD: string;
EMAIL_PASSWORD_SIGN_IN_METHOD: string;
credential: (email: string, password: string) => AuthCredential;
credentialWithLink: (email: string, emailLink: string) => AuthCredential;
};
interface Auth {
readonly app: App;
/**
* Returns the current Firebase authentication state.
*/
authResult: AuthResult | null;
/**
* Returns the currently signed-in user (or null). See the User class documentation for further usage.
*/
currentUser: User | null;
2017-11-30 12:56:28 +00:00
/**
* Gets/Sets the language for the app instance
*/
languageCode: string | null;
/**
* Listen for changes in the users auth state (logging in and out).
* This method returns a unsubscribe function to stop listening to events.
* Always ensure you unsubscribe from the listener when no longer needed to prevent updates to components no longer in use.
*/
onAuthStateChanged(listener: Function): () => void;
/**
* Listen for changes in id token.
* This method returns a unsubscribe function to stop listening to events.
* Always ensure you unsubscribe from the listener when no longer needed to prevent updates to components no longer in use.
*/
onIdTokenChanged(listener: Function): () => void;
/**
* Listen for changes in the user.
* This method returns a unsubscribe function to stop listening to events.
* Always ensure you unsubscribe from the listener when no longer needed to prevent updates to components no longer in use.
*/
onUserChanged(listener: Function): () => void;
signOut(): Promise<void>;
signInAnonymouslyAndRetrieveData(): Promise<UserCredential>;
/**
* Sign an anonymous user.
* If the user has already signed in, that user will be returned
*/
signInAnonymously(): Promise<User>;
createUserAndRetrieveDataWithEmailAndPassword(
email: string,
password: string
): Promise<UserCredential>;
signInWithEmailLink(
email: string,
emailLink: string
): Promise<UserCredential>;
isSignInWithEmailLink(emailLink: string): boolean;
/**
* We can create a user by calling the createUserWithEmailAndPassword() function.
* The method accepts two parameters, an email and a password.
*/
createUserWithEmailAndPassword(
email: string,
password: string
): Promise<User>;
signInAndRetrieveDataWithEmailAndPassword(
email: string,
password: string
): Promise<UserCredential>;
/**
* To sign a user in with their email and password, use the signInWithEmailAndPassword() function.
* It accepts two parameters, the user's email and password:
*/
signInWithEmailAndPassword(
email: string,
password: string
): Promise<User>;
signInAndRetrieveDataWithCustomToken(
token: string
): Promise<UserCredential>;
/**
* Sign a user in with a self-signed JWT token.
* To sign a user using a self-signed custom token,
* use the signInWithCustomToken() function.
* It accepts one parameter, the custom token:
*/
signInWithCustomToken(token: string): Promise<User>;
signInAndRetrieveDataWithCredential(
credential: AuthCredential
): Promise<UserCredential>;
/**
* Sign in the user with a 3rd party credential provider.
* credential requires the following properties:
*/
signInWithCredential(credential: AuthCredential): Promise<User>;
/**
* Asynchronously signs in using a phone number.
*/
signInWithPhoneNumber(phoneNumber: string): Promise<ConfirmationResult>;
/**
* Returns a PhoneAuthListener to listen to phone verification events,
* on the final completion event a PhoneAuthCredential can be generated for
* authentication purposes.
*/
verifyPhoneNumber(
phoneNumber: string,
autoVerifyTimeout?: number
): PhoneAuthListener;
/**
* Sends a password reset email to the given email address.
* Unlike the web SDK,
* the email will contain a password reset link rather than a code.
*/
sendPasswordResetEmail(
email: string,
actionCodeSettings?: ActionCodeSettings
): Promise<void>;
sendSignInLinkToEmail(
email: string,
actionCodeSettings?: ActionCodeSettings
): Promise<void>;
/**
* Completes the password reset process, given a confirmation code and new password.
*/
confirmPasswordReset(code: string, newPassword: string): Promise<void>;
/**
* Applies a verification code sent to the user by email or other out-of-band mechanism.
*/
applyActionCode(code: string): Promise<void>;
/**
* Checks a verification code sent to the user by email or other out-of-band mechanism.
*/
checkActionCode(code: string): Promise<ActionCodeInfo>;
/**
* Returns a list of authentication providers that can be used to sign in a given user (identified by its main email address).
*/
fetchProvidersForEmail(email: string): Promise<Array<string>>;
verifyPasswordResetCode(code: string): Promise<string>;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
interface AuthStatics {
EmailAuthProvider: EmailAuthProvider;
PhoneAuthProvider: AuthProvider;
GoogleAuthProvider: AuthProvider;
GithubAuthProvider: AuthProvider;
OAuthProvider: AuthProvider;
TwitterAuthProvider: AuthProvider;
FacebookAuthProvider: AuthProvider;
PhoneAuthState: {
CODE_SENT: string;
AUTO_VERIFY_TIMEOUT: string;
AUTO_VERIFIED: string;
ERROR: string;
};
}
}
2017-04-26 19:12:59 +00:00
namespace messaging {
interface Messaging {
/**
* Returns the devices FCM token.
*/
getToken(): Promise<string>;
/**
* On a new message,
* the payload object is passed to the listener callback.
* This method is only triggered when the app is running.
*/
onMessage(listener: (message: any) => any): () => any;
/**
* On the event a devices FCM token is refreshed by Google,
* the new token is returned in a callback listener.
*/
onTokenRefresh(listener: (token: string) => any): () => any;
/**
* Requests app notification permissions in an Alert dialog.
*/
requestPermission(): Promise<boolean>;
/**
* Checks if the app has notification permissions.
*/
hasPermission(): Promise<boolean>;
/**
* Send an upstream message
*/
sendMessage(remoteMessage: RemoteMessage): Promise<void>;
/**
* Subscribes the device to a topic.
*/
subscribeToTopic(topic: string): void;
/**
* Unsubscribes the device from a topic.
*/
unsubscribeFromTopic(topic: string): void;
}
2018-04-13 07:14:28 +00:00
class RemoteMessage {
collapseKey?: string;
data: Object;
from?: string;
messageId?: string;
messageType: string;
sentTime?: number;
to?: string;
ttl?: number;
2018-04-13 07:14:28 +00:00
constructor();
setCollapseKey(collapseKey: string): RemoteMessage;
setData(data: Object): RemoteMessage;
setMessageId(messageId: string): RemoteMessage;
setMessageType(messageType: string): RemoteMessage;
setTo(to: string): RemoteMessage;
setTtl(ttl: number): RemoteMessage;
}
interface MessagingStatics {
2018-04-16 07:14:30 +00:00
RemoteMessage: typeof RemoteMessage;
}
}
namespace iid {
interface InstanceId {
delete(): Promise<void>;
get(): Promise<string>;
}
}
namespace notifications {
interface AndroidNotifications {
createChannel(channel: Android.Channel): Promise<void>;
createChannelGroup(channelGroup: Android.ChannelGroup): Promise<void>;
createChannelGroups(
channelGroups: Android.ChannelGroup[]
): Promise<void>;
createChannels(channels: Android.Channel[]): Promise<void>;
deleteChannelGroup(groupId: string): Promise<void>;
deleteChannel(channelId: string): Promise<void>;
}
interface Notifications {
android: AndroidNotifications;
/**
* Cancels all notifications
*/
cancelAllNotifications(): void;
/**
* Cancels a notification by ID
*/
cancelNotification(notificationId: string): void;
displayNotification(notification: Notification): Promise<void>;
/**
* Returns the current badge number on the app icon.
*/
getBadge(): Promise<number>;
getInitialNotification(): Promise<NotificationOpen>;
getScheduledNotifications(): Promise<Notification[]>;
onNotification(
listener: (notification: Notification) => any
): () => any;
onNotificationDisplayed(
listener: (notification: Notification) => any
): () => any;
onNotificationOpened(
listener: (notificationOpen: NotificationOpen) => any
): () => any;
removeAllDeliveredNotifications(): void;
removeDeliveredNotification(notificationId: string): void;
/**
* Schedule a local notification to be shown on the device.
*/
scheduleNotification(notification: Notification, schedule: any): any;
2017-03-22 22:43:20 +00:00
/**
* Sets the badge number on the iOS app icon.
*/
setBadge(badge: number): void;
}
2018-04-08 09:46:41 +00:00
class Notification {
android: AndroidNotification;
ios: IOSNotification;
body: string;
data: any;
notificationId: string;
sound?: string;
subtitle?: string;
title: string;
2018-04-08 09:46:41 +00:00
2018-04-13 07:14:28 +00:00
constructor();
setBody(body: string): Notification;
setData(data: any): Notification;
setNotificationId(notificationId: string): Notification;
setSound(sound: string): Notification;
setSubtitle(subtitle: string): Notification;
setTitle(title: string): Notification;
2018-04-08 09:46:41 +00:00
}
class NotificationOpen {
action: string;
notification: Notification;
results?: any;
2018-04-08 09:46:41 +00:00
}
class AndroidNotification {
actions?: Android.Action[];
autoCancel?: boolean;
badgeIconType?: Android.BadgeIconType;
bigPicture?: any;
bigText?: any;
category?: Android.Category;
channelId?: string;
clickAction?: string;
color?: string;
colorized?: boolean;
contentInfo?: string;
defaults?: Android.Defaults[];
group?: string;
groupAlertBehaviour?: Android.GroupAlert;
groupSummary?: boolean;
largeIcon?: string;
lights?: Android.Lights;
localOnly?: boolean;
number?: number;
ongoing?: boolean;
onlyAlertOnce?: boolean;
people?: string[];
priority?: Android.Priority;
progress?: Android.Progress;
remoteInputHistory?: string[];
shortcutId?: string;
showWhen?: boolean;
smallIcon?: any;
sortKey?: string;
ticker?: string;
timeoutAfter?: number;
usesChronometer?: boolean;
vibrate?: number[];
visibility?: Android.Visibility;
when?: number;
addAction(action: Android.Action): Notification;
addPerson(person: string): Notification;
setAutoCancel(autoCancel: boolean): Notification;
setBadgeIconType(badgeIconType: Android.BadgeIconType): Notification;
setBigPicture(
picture: string,
largeIcon?: string,
contentTitle?: string,
summaryText?: string
): Notification;
setBigText(
text: string,
contentTitle?: string,
summaryText?: string
): Notification;
setCategory(category: Android.Category): Notification;
setChannelId(channelId: string): Notification;
setClickAction(clickAction: string): Notification;
setColor(color: string): Notification;
setColorized(colorized: boolean): Notification;
setContentInfo(contentInfo: string): Notification;
setDefaults(defaults: Android.Defaults[]): Notification;
setGroup(group: string): Notification;
setGroupAlertBehaviour(
groupAlertBehaviour: Android.GroupAlert
): Notification;
setGroupSummary(groupSummary: boolean): Notification;
setLargeIcon(largeIcon: string): Notification;
setLights(argb: number, onMs: number, offMs: number): Notification;
setLocalOnly(localOnly: boolean): Notification;
setNumber(number: number): Notification;
setOngoing(ongoing: boolean): Notification;
setOnlyAlertOnce(onlyAlertOnce: boolean): Notification;
setPriority(priority: Android.Priority): Notification;
setProgress(
max: number,
progress: number,
indeterminate: boolean
): Notification;
//setPublicVersion(publicVersion: Notification): Notification
setRemoteInputHistory(remoteInputHistory: string[]): Notification;
setShortcutId(shortcutId: string): Notification;
setShowWhen(showWhen: boolean): Notification;
setSmallIcon(icon: string, level?: number): Notification;
setSortKey(sortKey: string): Notification;
setTicker(ticker: string): Notification;
setTimeoutAfter(timeoutAfter: number): Notification;
setUsesChronometer(usesChronometer: boolean): Notification;
setVibrate(vibrate: number[]): Notification;
setVisibility(visibility: Android.Visibility): Notification;
setWhen(when: number): Notification;
2018-04-08 09:46:41 +00:00
}
namespace Android {
class Action {
action: string;
allowGeneratedReplies: boolean;
icon: string;
remoteInputs: RemoteInput[];
semanticAction?: SemanticAction;
showUserInterface?: boolean;
title: string;
Implement handling of Android actions in background There are some cases when local notification action should be handled in background eg. snoozing the reminder. In case of it launching app UI is not necessary and would be confusing for the end user. Therefore there should be a way to handle local notification action in background. For this reason new property 'runInBackground' was added to the AndroidAction class and TypeScript type. Also new broadcast receiver and service were implemented to handle properly background actions. In order to run particular action in background API consumer need to set its 'runInBackground' property to 'true', eg: ... .android.addAction(new firebase.notifications.Android.Action("snooze", "ic_snooze", "Snooze").setRunInBackground(true)) ... Then, there are two cases that API consumer needs to handle. First when app is in the foreground, standard notification and notification action code path will be executed. This mean, that: * onNotification() listener will be called (which should call displayNotification(), in order to show it to the user), * onNotificationOpen() listener will be called after the action is tapped by the user Secondly, when application is in background or it is not running new 'RNFirebaseBackgroundNotificationAction' handler will be called. To properly handle this case API consumer should create a background asynchronous handler: const handleAsyncTask = async (notificationOpen: NotifficationOpen) => { if (notificationOpen && notificationOpen.notification) { const action = notificationOpen.action; const notificationId = notificationOpen.notification.notificationId; if (action === "snooze") { console.log("Reschedule notification for later time", notificationId); } else { console.log("unsupported action", action); } // hide the notification firebase.notifications().removeDeliveredNotification(notificationId); } } Next hander should be registered to headless handler: AppRegistry.registerHeadlessTask('RNFirebaseBackgroundNotificationAction', () => handleAsyncTask); Finally AndroidManifest.xml file must be modified, to include receiver and service definition: <receiver android:name="io.invertase.firebase.notifications.RNFirebaseBackgroundNotificationActionReceiver" android:exported="true"> <intent-filter> <action android:name="io.invertase.firebase.notifications.BackgroundAction"/> </intent-filter> </receiver> <service android:name="io.invertase.firebase.notifications.RNFirebaseBackgroundNotificationActionsService"/> Now when ever 'Snooze' action is pressed it will launch 'handleAsyncTask' function in the background or onNotificationOpen() when app is in foreground. And reschedule the notification for the later time.
2018-05-11 21:09:32 +00:00
runInBackground?: boolean;
2018-04-08 09:46:41 +00:00
constructor(action: string, icon: string, title: string);
addRemoteInput(remoteInput: RemoteInput): Action;
setAllowGenerateReplies(allowGeneratedReplies: boolean): Action;
setSemanticAction(semanticAction: SemanticAction): Action;
setShowUserInterface(showUserInterface: boolean): Action;
Implement handling of Android actions in background There are some cases when local notification action should be handled in background eg. snoozing the reminder. In case of it launching app UI is not necessary and would be confusing for the end user. Therefore there should be a way to handle local notification action in background. For this reason new property 'runInBackground' was added to the AndroidAction class and TypeScript type. Also new broadcast receiver and service were implemented to handle properly background actions. In order to run particular action in background API consumer need to set its 'runInBackground' property to 'true', eg: ... .android.addAction(new firebase.notifications.Android.Action("snooze", "ic_snooze", "Snooze").setRunInBackground(true)) ... Then, there are two cases that API consumer needs to handle. First when app is in the foreground, standard notification and notification action code path will be executed. This mean, that: * onNotification() listener will be called (which should call displayNotification(), in order to show it to the user), * onNotificationOpen() listener will be called after the action is tapped by the user Secondly, when application is in background or it is not running new 'RNFirebaseBackgroundNotificationAction' handler will be called. To properly handle this case API consumer should create a background asynchronous handler: const handleAsyncTask = async (notificationOpen: NotifficationOpen) => { if (notificationOpen && notificationOpen.notification) { const action = notificationOpen.action; const notificationId = notificationOpen.notification.notificationId; if (action === "snooze") { console.log("Reschedule notification for later time", notificationId); } else { console.log("unsupported action", action); } // hide the notification firebase.notifications().removeDeliveredNotification(notificationId); } } Next hander should be registered to headless handler: AppRegistry.registerHeadlessTask('RNFirebaseBackgroundNotificationAction', () => handleAsyncTask); Finally AndroidManifest.xml file must be modified, to include receiver and service definition: <receiver android:name="io.invertase.firebase.notifications.RNFirebaseBackgroundNotificationActionReceiver" android:exported="true"> <intent-filter> <action android:name="io.invertase.firebase.notifications.BackgroundAction"/> </intent-filter> </receiver> <service android:name="io.invertase.firebase.notifications.RNFirebaseBackgroundNotificationActionsService"/> Now when ever 'Snooze' action is pressed it will launch 'handleAsyncTask' function in the background or onNotificationOpen() when app is in foreground. And reschedule the notification for the later time.
2018-05-11 21:09:32 +00:00
setRunInBackground(runInBackground: boolean): Action;
2018-04-08 09:46:41 +00:00
}
class RemoteInput {
allowedDataTypes: any[];
allowFreeFormInput?: boolean;
choices: string[];
label?: string;
resultKey: string;
2018-04-08 09:46:41 +00:00
constructor(resultKey: string);
setAllowDataType(mimeType: string, allow: boolean): RemoteInput;
setAllowFreeFormInput(allowFreeFormInput: boolean): RemoteInput;
2018-04-08 09:46:41 +00:00
setChoices(choices: string[]): RemoteInput;
setLabel(label: string): RemoteInput;
}
class Channel {
channelId: string;
name: string;
importance: Importance;
bypassDnd?: boolean;
description?: string;
group?: string;
lightColor?: string;
lightsEnabled?: boolean;
lockScreenVisibility?: Visibility;
showBadge?: boolean;
sound?: string;
vibrationEnabled?: boolean;
vibrationPattern?: number[];
constructor(channelId: string, name: string, importance: Importance);
enableLights(lightsEnabled: boolean): Channel;
enableVibration(vibrationEnabled: boolean): Channel;
setBypassDnd(bypassDnd: boolean): Channel;
setDescription(description: string): Channel;
setGroup(groupId: string): Channel;
setLightColor(lightColor: string): Channel;
setLockScreenVisibility(lockScreenVisibility: Visibility): Channel;
setShowBadge(showBadge: boolean): Channel;
setSound(sound: string): Channel;
setVibrationPattern(vibrationPattern: number[]): Channel;
2018-04-08 09:46:41 +00:00
}
class ChannelGroup {
groupId: string;
name: string;
2018-04-08 09:46:41 +00:00
constructor(groupId: string, name: string);
2018-04-08 09:46:41 +00:00
}
2018-04-08 09:46:41 +00:00
export enum BadgeIconType {
Large = 2,
None = 0,
Small = 1,
2018-04-08 09:46:41 +00:00
}
export type Category =
| 'alarm'
2018-04-08 09:46:41 +00:00
| 'call'
| 'email'
| 'err'
| 'event'
| 'msg'
| 'progress'
| 'promo'
| 'recommendation'
| 'reminder'
| 'service'
| 'social'
| 'status'
| 'system'
| 'transport';
2018-04-08 09:46:41 +00:00
export enum Defaults {
All = -1,
Lights = 4,
Sound = 1,
Vibrate = 2,
2018-04-08 09:46:41 +00:00
}
2018-04-08 09:46:41 +00:00
export enum GroupAlert {
All = 0,
Children = 2,
Summary = 1,
2018-04-08 09:46:41 +00:00
}
2018-04-08 09:46:41 +00:00
export enum Importance {
Default = 3,
High = 4,
Low = 2,
Max = 5,
Min = 1,
None = 3,
Unspecified = -1000,
2018-04-08 09:46:41 +00:00
}
export enum Priority {
Default = 0,
High = 1,
Low = -1,
Max = 2,
Min = -2,
2018-04-08 09:46:41 +00:00
}
2018-04-08 09:46:41 +00:00
export enum SemanticAction {
Archive = 5,
Call = 10,
Delete = 4,
MarkAsRead = 2,
MarkAsUnread = 3,
Mute = 6,
None = 0,
Reply = 1,
ThumbsDown = 9,
ThumbsUp = 8,
Unmute = 7,
2018-04-08 09:46:41 +00:00
}
2018-04-08 09:46:41 +00:00
export enum Visibility {
Private = 0,
Public = 1,
Secret = -1,
2018-04-08 09:46:41 +00:00
}
class Lights {
argb: number;
offMs: number;
onMs: number;
}
class Progress {
indeterminate: boolean;
max: number;
progress: number;
}
}
2018-04-08 09:46:41 +00:00
class IOSNotification {
alertAction?: string;
attachments: IOSAttachment[];
badge?: string;
category?: string;
hasAction?: boolean;
launchImage?: string;
threadIdentifier?: string;
addAttachment(
identifier: string,
url: string,
options: IOSAttachmentOptions
): Notification;
setAlertAction(alertAction: string): Notification;
setBadge(badge: string): Notification;
setCategory(category: string): Notification;
setHasAction(hasAction: boolean): Notification;
setLaunchImage(launchImage: string): Notification;
setThreadIdentifier(threadIdentifier: string): Notification;
2018-04-08 09:46:41 +00:00
}
class IOSAttachment {
identifier: string;
options: IOSAttachmentOptions;
url: string;
2018-04-08 09:46:41 +00:00
}
class IOSAttachmentOptions {
typeHint: string;
thumbnailHidden: boolean;
thumbnailClippingRect: any;
thumbnailTime: string;
2018-04-08 09:46:41 +00:00
}
interface NotificationsStatics {
Android: {
Action: typeof Android.Action;
BadgeIconType: typeof Android.BadgeIconType;
Category: Android.Category;
Channel: typeof Android.Channel;
ChannelGroup: typeof Android.ChannelGroup;
Defaults: typeof Android.Defaults;
GroupAlert: typeof Android.GroupAlert;
Importance: typeof Android.Importance;
Priority: typeof Android.Priority;
RemoteInput: typeof Android.RemoteInput;
SemanticAction: typeof Android.SemanticAction;
Visibility: typeof Android.Visibility;
};
2018-04-16 07:14:30 +00:00
Notification: typeof Notification;
}
}
namespace crash {
interface Crash {
/** Logs a message that will appear in a subsequent crash report. */
log(message: string): void;
/**
* Android: Logs a message that will appear in a subsequent crash report as well as in logcat.
* iOS: Logs the message in the subsequest crash report only (same as log).
*/
logcat(level: number, tag: string, message: string): void;
/**
* Files a crash report, along with any previous logs to Firebase.
* An Error object must be passed into the report method.
*/
report(error: RnError, maxStackSize: Number): void;
2017-04-26 19:12:59 +00:00
[key: string]: any;
}
}
namespace crashlytics {
interface Crashlytics {
/**
* Forces a crash. Useful for testing your application is set up correctly.
*/
crash(): void;
/**
* Logs a message that will appear in any subsequent crash reports.
*/
log(message: string): void;
/**
* Logs a non fatal exception.
*/
recordError(code: number, message: string): void;
/**
* Set a boolean value to show alongside any subsequent crash reports.
*/
setBoolValue(key: string, value: boolean): void;
/**
* Set a float value to show alongside any subsequent crash reports.
*/
setFloatValue(key: string, value: number): void;
/**
* Set an integer value to show alongside any subsequent crash reports.
*/
setIntValue(key: string, value: number): void;
/**
* Set a string value to show alongside any subsequent crash reports.
*/
setStringValue(key: string, value: string): void;
/**
* Set the user ID to show alongside any subsequent crash reports.
*/
setUserIdentifier(userId: string): void;
}
}
namespace links {
interface Links {
/** Creates a standard dynamic link. */
createDynamicLink(dynamicLink: DynamicLink): Promise<string>;
/** Creates a short dynamic link. */
createShortDynamicLink(type: 'SHORT' | 'UNGUESSABLE'): Promise<string>;
/**
* Returns the URL that the app has been launched from. If the app was
* not launched from a URL the return value will be null.
*/
getInitialLink(): Promise<string | null>;
/**
* Subscribe to URL open events while the app is still running.
* The listener is called from URL open events whilst the app is still
* running, use getInitialLink for URLs which cause the app to open
* from a previously closed / not running state.
* Returns an unsubscribe function, call the returned function to
* unsubscribe from all future events.
*/
2018-01-26 16:39:52 +00:00
onLink(listener: (url: string) => void): () => void;
}
2018-04-13 07:14:28 +00:00
class DynamicLink {
analytics: AnalyticsParameters;
android: AndroidParameters;
ios: IOSParameters;
itunes: ITunesParameters;
navigation: NavigationParameters;
social: SocialParameters;
2018-04-13 07:14:28 +00:00
constructor(link: string, dynamicLinkDomain: string);
}
interface AnalyticsParameters {
setCampaign(campaign: string): DynamicLink;
setContent(content: string): DynamicLink;
setMedium(medium: string): DynamicLink;
setSource(source: string): DynamicLink;
setTerm(term: string): DynamicLink;
}
interface AndroidParameters {
setFallbackUrl(fallbackUrl: string): DynamicLink;
setMinimumVersion(minimumVersion: number): DynamicLink;
setPackageName(packageName: string): DynamicLink;
}
interface IOSParameters {
setAppStoreId(appStoreId: string): DynamicLink;
setBundleId(bundleId: string): DynamicLink;
setCustomScheme(customScheme: string): DynamicLink;
setFallbackUrl(fallbackUrl: string): DynamicLink;
setIPadBundleId(iPadBundleId: string): DynamicLink;
setIPadFallbackUrl(iPadFallbackUrl: string): DynamicLink;
setMinimumVersion(minimumVersion: string): DynamicLink;
}
interface ITunesParameters {
setAffiliateToken(affiliateToken: string): DynamicLink;
setCampaignToken(campaignToken: string): DynamicLink;
setProviderToken(providerToken: string): DynamicLink;
}
interface NavigationParameters {
setForcedRedirectEnabled(forcedRedirectEnabled: boolean): DynamicLink;
}
interface SocialParameters {
setDescriptionText(descriptionText: string): DynamicLink;
setImageUrl(imageUrl: string): DynamicLink;
setTitle(title: string): DynamicLink;
}
interface LinksStatics {
2018-04-16 07:14:30 +00:00
DynamicLink: typeof DynamicLink;
}
}
2018-05-07 18:49:34 +00:00
// Source: https://github.com/firebase/firebase-js-sdk/blob/master/packages/functions-types/index.d.ts
namespace functions {
type HttpsErrorCode = { [name: string]: FunctionsErrorCode };
/**
* The set of Firebase Functions status codes. The codes are the same at the
* ones exposed by gRPC here:
* https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
*
* Possible values:
* - 'cancelled': The operation was cancelled (typically by the caller).
* - 'unknown': Unknown error or an error from a different error domain.
* - 'invalid-argument': Client specified an invalid argument. Note that this
* differs from 'failed-precondition'. 'invalid-argument' indicates
* arguments that are problematic regardless of the state of the system
* (e.g. an invalid field name).
* - 'deadline-exceeded': Deadline expired before operation could complete.
* For operations that change the state of the system, this error may be
* returned even if the operation has completed successfully. For example,
* a successful response from a server could have been delayed long enough
* for the deadline to expire.
* - 'not-found': Some requested document was not found.
* - 'already-exists': Some document that we attempted to create already
* exists.
* - 'permission-denied': The caller does not have permission to execute the
* specified operation.
* - 'resource-exhausted': Some resource has been exhausted, perhaps a
* per-user quota, or perhaps the entire file system is out of space.
* - 'failed-precondition': Operation was rejected because the system is not
* in a state required for the operation's execution.
* - 'aborted': The operation was aborted, typically due to a concurrency
* issue like transaction aborts, etc.
* - 'out-of-range': Operation was attempted past the valid range.
* - 'unimplemented': Operation is not implemented or not supported/enabled.
* - 'internal': Internal errors. Means some invariants expected by
* underlying system has been broken. If you see one of these errors,
* something is very broken.
* - 'unavailable': The service is currently unavailable. This is most likely
* a transient condition and may be corrected by retrying with a backoff.
* - 'data-loss': Unrecoverable data loss or corruption.
* - 'unauthenticated': The request does not have valid authentication
* credentials for the operation.
*/
type FunctionsErrorCode =
| 'ok'
| 'cancelled'
| 'unknown'
| 'invalid-argument'
| 'deadline-exceeded'
| 'not-found'
| 'already-exists'
| 'permission-denied'
| 'resource-exhausted'
| 'failed-precondition'
| 'aborted'
| 'out-of-range'
| 'unimplemented'
| 'internal'
| 'unavailable'
| 'data-loss'
| 'unauthenticated';
/**
* An HttpsCallableResult wraps a single result from a function call.
*/
interface HttpsCallableResult {
readonly data: any;
}
/**
* An HttpsCallable is a reference to a "callable" http trigger in
* Google Cloud Functions.
*/
interface HttpsCallable {
(data?: any): Promise<HttpsCallableResult>;
}
/**
* `FirebaseFunctions` represents a Functions app, and is the entry point for
* all Functions operations.
*/
interface Functions {
/**
* Gets an `HttpsCallable` instance that refers to the function with the given
* name.
*
* @param name The name of the https callable function.
* @return The `HttpsCallable` instance.
*/
httpsCallable(name: string): HttpsCallable;
}
/**
* firebase.functions.X
*/
interface FunctionsStatics {
/**
* Uppercased + underscored variables of @FunctionsErrorCode
*/
HttpsErrorCode: HttpsErrorCode;
}
interface HttpsError extends Error {
/**
* A standard error code that will be returned to the client. This also
* determines the HTTP status code of the response, as defined in code.proto.
*/
readonly code: FunctionsErrorCode;
/**
* Extra data to be converted to JSON and included in the error response.
*/
readonly details?: any;
}
}
namespace firestore {
interface Firestore {
readonly app: App;
batch(): WriteBatch;
collection(collectionPath: string): CollectionReference;
disableNetwork(): Promise<void>;
doc(documentPath: string): DocumentReference;
2018-04-13 08:58:53 +00:00
enableNetwork(): Promise<void>;
enablePersistence(enabled: boolean): Promise<void>;
runTransaction(
updateFunction: (transaction: Transaction) => Promise<any>
): Promise<any>;
2018-04-13 08:58:53 +00:00
settings(settings: Settings): Promise<void>;
}
interface FirestoreStatics {
Blob: typeof Blob;
FieldPath: typeof FieldPath;
FieldValue: typeof FieldValue;
GeoPoint: typeof GeoPoint;
enableLogging(enabled: boolean): void;
2018-04-13 07:41:17 +00:00
setLogLevel(logLevel: 'debug' | 'error' | 'silent'): void;
}
interface CollectionReference {
readonly firestore: Firestore;
readonly id: string;
readonly parent: DocumentReference;
add(data: object): Promise<DocumentReference>;
doc(documentPath?: string): DocumentReference;
endAt(snapshot: DocumentSnapshot): Query;
endAt(...varargs: any[]): Query;
endBefore(snapshot: DocumentSnapshot): Query;
endBefore(...varargs: any[]): Query;
get(): Promise<QuerySnapshot>;
limit(limit: number): Query;
onSnapshot(
onNext: Query.ObserverOnNext,
onError?: Query.ObserverOnError
): () => void;
onSnapshot(observer: Query.Observer): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
onNext: Query.ObserverOnNext,
onError?: Query.ObserverOnError
): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
observer: Query.Observer
): () => void;
orderBy(
fieldPath: string | FieldPath,
directionStr?: Types.QueryDirection
): Query;
startAfter(snapshot: DocumentSnapshot): Query;
startAfter(...varargs: any[]): Query;
startAt(snapshot: DocumentSnapshot): Query;
startAt(...varargs: any[]): Query;
where(
fieldPath: string | FieldPath,
op: Types.QueryOperator,
value: any
): Query;
}
interface DocumentChange {
readonly doc: DocumentSnapshot;
readonly newIndex: number;
readonly oldIndex: number;
readonly type: string;
}
interface DocumentReference {
readonly firestore: Firestore;
readonly id: string | null;
readonly parent: CollectionReference;
readonly path: string;
collection(collectionPath: string): CollectionReference;
delete(): Promise<void>;
get(): Promise<DocumentSnapshot>;
onSnapshot(
onNext: DocumentReference.ObserverOnNext,
onError?: DocumentReference.ObserverOnError
): () => void;
onSnapshot(observer: DocumentReference.Observer): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
onNext: DocumentReference.ObserverOnNext,
onError?: DocumentReference.ObserverOnError
): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
observer: DocumentReference.Observer
): () => void;
set(data: object, writeOptions?: Types.WriteOptions): Promise<void>;
update(obj: object): Promise<void>;
update(key1: Types.UpdateKey, val1: any): Promise<void>;
update(
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any
): Promise<void>;
update(
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any
): Promise<void>;
update(
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any
): Promise<void>;
update(
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any,
key5: Types.UpdateKey,
val5: any
): Promise<void>;
}
namespace DocumentReference {
type ObserverOnNext = (documentSnapshot: DocumentSnapshot) => void;
type ObserverOnError = (err: object) => void;
interface Observer {
next: ObserverOnNext;
error?: ObserverOnError;
}
}
interface DocumentSnapshot {
readonly exists: boolean;
readonly id: string | null;
readonly metadata: Types.SnapshotMetadata;
readonly ref: DocumentReference;
data(): object | void;
get(fieldPath: string | FieldPath): any | undefined;
}
class Blob {
static fromBase64String(base64: string): Blob;
static fromUint8Array(array: Uint8Array): Blob;
isEqual(other: Blob): boolean;
toBase64(): string;
toUint8Array: Uint8Array;
}
class FieldPath {
static documentId(): FieldPath;
constructor(...segments: string[]);
}
class FieldValue {
static delete(): FieldValue;
static serverTimestamp(): FieldValue;
}
class GeoPoint {
constructor(latitude: number, longitude: number);
readonly latitude: number;
readonly longitude: number;
}
class Path {
static fromName(name: string): Path;
constructor(pathComponents: string[]);
readonly id: string | null;
readonly isDocument: boolean;
readonly isCollection: boolean;
readonly relativeName: string;
child(relativePath: string): Path;
parent(): Path | null;
}
type MetadataChanges = {
includeMetadataChanges: boolean;
};
interface Query {
readonly firestore: Firestore;
endAt(snapshot: DocumentSnapshot): Query;
endAt(...varargs: any[]): Query;
endBefore(snapshot: DocumentSnapshot): Query;
endBefore(...varargs: any[]): Query;
get(): Promise<QuerySnapshot>;
limit(limit: number): Query;
onSnapshot(
onNext: Query.ObserverOnNext,
onError?: Query.ObserverOnError
): () => void;
onSnapshot(observer: Query.Observer): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
onNext: Query.ObserverOnNext,
onError?: Query.ObserverOnError
): () => void;
onSnapshot(
metadataChanges: MetadataChanges,
observer: Query.Observer
): () => void;
orderBy(
fieldPath: string | FieldPath,
directionStr?: Types.QueryDirection
): Query;
startAfter(snapshot: DocumentSnapshot): Query;
startAfter(...varargs: any[]): Query;
startAt(snapshot: DocumentSnapshot): Query;
startAt(...varargs: any[]): Query;
where(
fieldPath: string | FieldPath,
op: Types.QueryOperator,
value: any
): Query;
}
namespace Query {
interface NativeFieldPath {
elements?: string[];
string?: string;
type: 'fieldpath' | 'string';
}
interface FieldFilter {
fieldPath: NativeFieldPath;
operator: string;
value: any;
}
interface FieldOrder {
direction: string;
fieldPath: NativeFieldPath;
}
interface QueryOptions {
endAt?: any[];
endBefore?: any[];
limit?: number;
offset?: number;
selectFields?: string[];
startAfter?: any[];
startAt?: any[];
}
type ObserverOnNext = (querySnapshot: QuerySnapshot) => void;
type ObserverOnError = (err: object) => void;
interface Observer {
next: ObserverOnNext;
error?: ObserverOnError;
}
}
interface QuerySnapshot {
readonly docChanges: DocumentChange[];
readonly docs: DocumentSnapshot[];
readonly empty: boolean;
readonly metadata: Types.SnapshotMetadata;
readonly query: Query;
readonly size: number;
forEach(callback: (snapshot: DocumentSnapshot) => any): void;
}
namespace QuerySnapshot {
interface NativeData {
changes: Types.NativeDocumentChange[];
documents: Types.NativeDocumentSnapshot[];
metadata: Types.SnapshotMetadata;
}
}
2018-04-13 08:58:53 +00:00
interface Settings {
host?: string;
persistence?: boolean;
ssl?: boolean;
timestampsInSnapshots?: boolean;
}
interface Transaction {
delete(docRef: DocumentReference): WriteBatch;
get(documentRef: DocumentReference): Promise<DocumentSnapshot>;
set(
documentRef: DocumentReference,
data: Object,
options?: Types.WriteOptions
): Transaction;
// multiple overrides for update() to allow strong-typed var_args
update(docRef: DocumentReference, obj: object): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any,
key5: Types.UpdateKey,
val5: any
): WriteBatch;
}
interface WriteBatch {
commit(): Promise<void>;
delete(docRef: DocumentReference): WriteBatch;
set(
docRef: DocumentReference,
data: object,
options?: Types.WriteOptions
): WriteBatch;
// multiple overrides for update() to allow strong-typed var_args
update(docRef: DocumentReference, obj: object): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any
): WriteBatch;
update(
docRef: DocumentReference,
key1: Types.UpdateKey,
val1: any,
key2: Types.UpdateKey,
val2: any,
key3: Types.UpdateKey,
val3: any,
key4: Types.UpdateKey,
val4: any,
key5: Types.UpdateKey,
val5: any
): WriteBatch;
}
namespace Types {
interface NativeDocumentChange {
document: NativeDocumentSnapshot;
newIndex: number;
oldIndex: number;
type: string;
}
interface NativeDocumentSnapshot {
data: {
[key: string]: TypeMap;
};
metadata: SnapshotMetadata;
path: string;
}
interface SnapshotMetadata {
fromCache: boolean;
hasPendingWrites: boolean;
}
type QueryDirection = 'asc' | 'ASC' | 'desc' | 'DESC';
type QueryOperator = '=' | '==' | '>' | '>=' | '<' | '<=';
interface TypeMap {
type:
| 'array'
| 'boolean'
| 'date'
| 'documentid'
| 'fieldvalue'
| 'geopoint'
| 'null'
| 'number'
| 'object'
| 'reference'
| 'string';
value: any;
}
/** The key in update() function for DocumentReference and WriteBatch. */
type UpdateKey = string | FieldPath;
interface WriteOptions {
merge?: boolean;
}
}
}
2017-03-22 22:43:20 +00:00
}
}