nativescript-plugin-firebase-ssi
Version:
1,116 lines (902 loc) • 32.6 kB
TypeScript
/**
* The allowed values for LoginOptions.type.
*/
export enum LoginType {
/**
* No further data is required.
*/
ANONYMOUS,
/**
* This requires you to pass in the 'passwordOptions' as well.
*/
PASSWORD,
/**
* This requires you to add the 'phoneOptions' as well.
*/
PHONE,
/**
* This requires you to pass either an authentication token generated by your backend server
* or the tokenProviderFn function that returns a promise to provide the token (see 'customOptions').
* See: https://firebase.google.com/docs/auth/server
*/
CUSTOM,
/**
* This requires you to setup Facebook Auth in the Firebase console,
* as well as uncommenting the SDK includes in include.gradle (Android) and Podfile (iOS).
* You can pass in an optional 'facebookOptions' object to override the default scopes.
*/
FACEBOOK,
/**
* This requires you to setup Google Sign In in the Firebase console,
* as well as uncommenting the SDK includes in include.gradle (Android) and Podfile (iOS).
* You can pass in an optional 'googleOptions' object to set a 'hostedDomain'.
*/
GOOGLE,
/**
* This requires you to pass in the 'emailLinkOptions' as well.
* Note that 'Firebase Dynamic Links' must be enabled for this login type to work.
*/
EMAIL_LINK,
/**
* Apple
*/
APPLE
}
export enum LogComplexEventTypeParameter {
STRING,
INT,
FLOAT,
DOUBLE,
LONG,
ARRAY,
BOOLEAN
}
/**
* The allowed values for QueryOptions.orderBy.type.
*/
export enum QueryOrderByType {
KEY,
VALUE,
CHILD,
PRIORITY
}
/**
* The allowed values for QueryOptions.range.type.
*/
export enum QueryRangeType {
START_AT,
END_AT,
EQUAL_TO
}
/**
* The allowed values for QueryOptions.limit.type.
*/
export enum QueryLimitType {
FIRST,
LAST
}
export enum ServerValue {
/**
* When for instance using setValue you can set a timestamp property to this placeholder value.
* Example:
* updateTs: firebase.ServerValue.TIMESTAMP
*/
TIMESTAMP
}
export interface MessagingOptions {
/**
* For Messaging, either pass in this callback function here, or use addOnMessageReceivedCallback.
*/
onPushTokenReceivedCallback?: (token: string) => void;
/**
* For Messaging, either pass in this callback function here, or use addOnPushTokenReceivedCallback.
*/
onMessageReceivedCallback?: (message: Message) => void;
/**
* For Messaging (Push Notifications). Whether you want this plugin to automatically display the notifications or just notify the callback.
* Currently used on iOS only. Default true.
*/
showNotifications?: boolean;
/**
* For Messaging (Push Notifications). Whether you want this plugin to always handle the notifications when the app is in foreground.
* Currently used on iOS only. Default false.
*/
showNotificationsWhenInForeground?: boolean;
/**
* Automatically clear the badges on starting.
* Currently used on iOS only. Default true.
*/
autoClearBadge?: boolean;
}
/**
* The options object passed into the init function.
*/
export interface InitOptions extends MessagingOptions {
/**
* Allow the app to send analytics data to Firebase.
* Can also be set later with analytics.setAnalyticsCollectionEnabled.
* Default true.
*/
analyticsCollectionEnabled?: boolean;
/**
* Allow the app to collect Crashlytics data and send it to Firebase.
* Can also be set later with crashlytics.setCrashReportingEnabled.
* Only useful in case it was disabled in AndroidManfifest.xml and/or Info.plist,
* see https://firebase.google.com/docs/crashlytics/customize-crash-reports
*/
crashlyticsCollectionEnabled?: boolean;
/**
* Allow disk persistence. Default true for Firestore, false for regular Firebase DB.
*/
persist?: boolean;
/**
* Get notified when the user is logged in.
*/
onAuthStateChanged?: (data: AuthStateData) => void;
/**
* Attempt to sign out before initializing, useful in case previous
* project token is cached which leads to following type of error:
* "[FirebaseDatabase] Authentication failed: invalid_token ..."
* Default false.
*/
iOSEmulatorFlush?: boolean;
/**
* For Firebase Storage you can pass in something like 'gs://n-plugin-test.appspot.com'
* here so we can cache it. Otherwise pass in the 'bucket' param when using Storage features.
* Can be found in the firebase console.
*/
storageBucket?: string;
/**
* Get notified when a dynamic link was used to launch the app. Alternatively use addOnDynamicLinkReceivedCallback.
* TODO iOS seems to return an object; not a string
*/
onDynamicLinkCallback?: (data: DynamicLinkData) => void;
}
export interface QueryRangeOption {
type: QueryRangeType;
value: any;
}
/**
* The options object passed into the query function.
*/
export interface QueryOptions {
/**
* How you'd like to sort the query result.
*/
orderBy: {
type: QueryOrderByType;
/**
* mandatory when type is QueryOrderByType.CHILD
*/
value?: string;
};
/**
* You can further restrict the returned results by specifying restrictions.
* Need more than one range restriction? Use 'ranges' instead.
*/
range?: QueryRangeOption;
/**
* Same as 'range', but for a 'chain of ranges'.
* You can further restrict the returned results by specifying restrictions.
*/
ranges?: QueryRangeOption[];
/**
* You can limit the number of returned rows if you want to.
*/
limit?: {
type: QueryLimitType;
value: number;
};
/**
* Set this to true if you don't want to listen for any future updates,
* but just want to retrieve the current value.
* You can also use this to check if certain data is in the database.
* Default false.
*/
singleEvent?: boolean;
}
export interface GetAuthTokenOptions {
/**
* Default false.
*/
forceRefresh?: boolean;
}
export interface IdTokenResult {
token: string;
claims: { [key: string]: any; };
signInProvider: string;
expirationTime: number;
issuedAtTime: number;
authTime: number;
}
export interface Provider {
id: string;
token?: string;
}
export interface FirebasePasswordLoginOptions {
email: string;
password: string;
}
export interface FirebaseEmailLinkActionCodeSettings {
url: string;
iOS?: {
bundleId: string;
};
android?: {
packageName: string;
installApp?: false;
minimumVersion?: string;
};
}
export interface FirebaseEmailLinkLoginOptions extends FirebaseEmailLinkActionCodeSettings {
email: string;
}
export interface FirebasePhoneLoginOptions {
phoneNumber: string;
/**
* The message show to the user that prompts him to enter the received verification code.
* Default: "Verification code".
*/
verificationPrompt?: string;
android?: {
/**
* The maximum amount of time you are willing to wait for SMS auto-retrieval to be completed by the library. Maximum allowed value is 2 minutes. Use 0 to disable SMS-auto-retrieval. If you specified a positive value less than 30 seconds, library will default to 30 seconds.
* Default: 60 (seconds)
* See: https://firebase.google.com/docs/reference/android/com/google/firebase/auth/PhoneAuthProvider
*/
timeout: number;
};
}
export interface FirebaseGoogleLoginOptions {
hostedDomain?: string;
/**
* You can add scopes like "https://www.googleapis.com/auth/contacts.readonly" and "https://www.googleapis.com/auth/user.birthday.read"
*
* Default: ["profile", "email"]
*/
scopes?: Array<string>;
}
export interface FirebaseFacebookLoginOptions {
/**
* Default: ["public_profile", "email"]
*/
scopes?: Array<string>;
}
export type AppleLoginScope = "name" | "email";
export interface AppleLoginOptions {
/**
* Default: ["name", "email"]
*/
scopes?: Array<AppleLoginScope>;
/**
* Android only.
* Supported locales: https://developer.apple.com/documentation/signinwithapplejs/incorporating_sign_in_with_apple_into_other_platforms#3332112
* Default: "en".
*/
locale?: string;
}
export interface FirebaseCustomLoginOptions {
/**
* The JSON Web Token (JWT) to use for authentication.
* Either specify this, or 'tokenProviderFn'.
* See: https://firebase.google.com/docs/auth/server
*/
token?: string;
/**
* A function that returns a promise with the JSON Web Token (JWT) to use for authentication.
* Either specify this, or 'token'.
* See: https://firebase.google.com/docs/auth/server
*/
tokenProviderFn?: () => Promise<String>;
}
export interface LoginIOSOptions {
controller?: any;
}
/**
* The options object passed into the login function.
*/
export interface LoginOptions {
type: LoginType;
passwordOptions?: FirebasePasswordLoginOptions;
emailLinkOptions?: FirebaseEmailLinkLoginOptions;
phoneOptions?: FirebasePhoneLoginOptions;
googleOptions?: FirebaseGoogleLoginOptions;
facebookOptions?: FirebaseFacebookLoginOptions;
appleOptions?: AppleLoginOptions;
customOptions?: FirebaseCustomLoginOptions;
ios?: LoginIOSOptions;
/**
* @deprecated Please use the 'passwordOptions?: FirebasePasswordLoginOptions' object instead.
*/
email?: string;
/**
* @deprecated Please use the 'passwordOptions?: FirebasePasswordLoginOptions' object instead.
*/
password?: string;
/**
* @deprecated Please use the 'customOptions?: FirebaseCustomLoginOptions' object instead.
*/
token?: string;
/**
* @deprecated Please use the 'customOptions?: FirebaseCustomLoginOptions' object instead.
*/
tokenProviderFn?: () => Promise<String>;
/**
* @deprecated Please use the 'facebookOptions?: FirebaseFacebookLoginOptions' object instead.
*/
scope?: string[];
}
export interface ReauthenticateOptions {
type: LoginType;
passwordOptions?: FirebasePasswordLoginOptions;
/**
* @deprecated Please use the 'passwordOptions?: FirebasePasswordLoginOptions' object instead.
*/
email?: string;
/**
* @deprecated Please use the 'passwordOptions?: FirebasePasswordLoginOptions' object instead.
*/
password?: string;
}
type ActionCodeSettings = {
url: string;
handleCodeInApp?: boolean;
android?: {
installApp?: boolean;
minimumVersion?: string;
packageName: string;
};
iOS?: {
bundleId: string;
dynamicLinkDomain?: string;
};
};
/**
* The returned object from the login function.
*/
export interface User {
uid: string;
email?: string;
emailVerified: boolean;
displayName?: string;
phoneNumber?: string;
anonymous: boolean;
isAnonymous: boolean; // This is used by the web API
providers: Array<Provider>;
photoURL?: string;
metadata: UserMetadata;
additionalUserInfo?: AdditionalUserInfo;
/** iOS only */
refreshToken?: string;
getIdToken(forceRefresh?: boolean): Promise<string>;
getIdTokenResult(forceRefresh?: boolean): Promise<IdTokenResult>;
sendEmailVerification(actionCodeSettings?: ActionCodeSettings): Promise<void>;
}
/**
* The metadata of the user
*/
export interface UserMetadata {
creationTimestamp: Date;
lastSignInTimestamp: Date;
}
/**
* Contains additional user information
*/
export interface AdditionalUserInfo {
profile: Map<string, any>;
providerId: string;
username: string;
isNewUser: boolean;
}
/**
* The returned object from the push function.
*/
export interface PushResult {
key: string;
}
/**
* The returned object from the addEventListener functions.
*/
export interface AddEventListenerResult {
path: string;
listeners: Array<any>;
}
/**
* The options object passed into the createUser function.
*/
export interface CreateUserOptions {
email: string;
password: string;
}
/**
* The options object passed into the updateProfile function.
*/
export interface UpdateProfileOptions {
displayName?: string;
photoURL?: string;
}
/**
* The returned object in the callback handlers
* of the addChildEventListener and addValueEventListener functions.
*/
export interface FBData {
type: string;
key: string;
value: any;
}
export interface FBDataSingleEvent extends FBData {
children?: Array<any>;
}
export interface FBErrorData {
error: string;
}
export interface AuthStateData {
loggedIn?: boolean;
user?: User;
}
export interface AuthStateChangeListener {
onAuthStateChanged: (data: AuthStateData) => void;
thisArg?: any;
}
export interface RemoteConfigProperty {
key: string;
default: any;
}
export interface GetRemoteConfigOptions {
/**
* Fetch new results from the server more often.
* Default false.
*/
developerMode?: boolean;
/**
* The number of seconds before retrieving fresh state from the server.
* Default 12 hours.
*/
cacheExpirationSeconds?: number;
/**
* The configuration properties to retrieve for your app. Specify as:
* properties: [{
* key: "holiday_promo_enabled",
* default: false
* }, ..]
*/
properties: Array<RemoteConfigProperty>;
}
/**
* The returned object from the getRemoteConfig function.
*/
export interface GetRemoteConfigResult {
/**
* The date the data was last refreshed from the server.
* Should honor the 'cacheExpirationSeconds' you passed in previously.
*/
lastFetch: Date;
/**
* The result may be throttled when retrieved from the server.
* Even when the cache has expired. And it's just FYI really.
*/
throttled: boolean;
/**
* A JS Object with properties and values.
* If you previously requested keys ["foo", "is_enabled"] then this will be like:
* properties: {
* foo: "bar",
* is_enabled: true
* }
*/
properties: Object;
}
export interface DynamicLinkData {
url: string;
minimumAppVersion: string;
}
/**
* The returned object in the callback handler of the addOnMessageReceivedCallback function.
*
* Note that any custom data you send from your server will be available as
* key/value properties on the Message object as well.
*/
export interface Message {
/**
* Indicated whether or not the notification was received while the app was in the foreground.
*/
foreground: boolean;
/**
* The main text shown in the notificiation.
* Not available on Android when the notification was received in the background.
*/
body?: string;
/**
* Optional title, shown above the body in the notification.
* Not available on Android when the notification was received in the background.
*/
title?: string;
/**
* Any other data you may have added to the notification.
*/
data: any;
/**
* Indicates whether or not the notification was tapped.
* iOS only.
*/
notificationTapped?: boolean;
}
export function init(options?: InitOptions): Promise<any>;
// Database
export interface OnDisconnect {
cancel(): Promise<any>;
remove(): Promise<any>;
set(value: any): Promise<any>;
setWithPriority(
value: any,
priority: number | string
): Promise<any>;
update(values: Object): Promise<any>;
}
export interface DataSnapshot {
key: string;
ref: any; // TODO: Type it so that it returns a databaseReference.
child(path: string): DataSnapshot;
exists(): boolean;
forEach(action: (snapshot: DataSnapshot) => any): boolean;
getPriority(): string | number | null;
hasChild(path: string): boolean;
hasChildren(): boolean;
numChildren(): number;
toJSON(): Object;
val(): any;
}
export interface FirebaseQueryResult {
type: string;
key: string;
value: any;
}
export type Unsubscribe = () => void;
export function transaction(path: string, transactionUpdate: (a: any) => any,
onComplete?: (error: Error | null, committed: boolean, dataSnapshot: DataSnapshot) => any): Promise<any>;
export function push(path: string, value: any): Promise<PushResult>;
export function getValue(path: string): Promise<any>;
export function setValue(path: string, value: any): Promise<any>;
export function update(path: string, value: any): Promise<any>;
export function remove(path: string): Promise<any>;
export function query(onValueEvent: (data: FBData | FBErrorData) => void, path: string, options: QueryOptions): Promise<any>;
export function addChildEventListener(onChildEvent: (data: FBData) => void, path: string): Promise<AddEventListenerResult>;
export function addValueEventListener(onValueEvent: (data: FBData) => void, path: string): Promise<AddEventListenerResult>;
export function removeEventListeners(listeners: Array<any>, path: string): Promise<any>;
export function onDisconnect(path: string): OnDisconnect;
export function enableLogging(logger?: boolean | ((a: string) => any), persistent?: boolean);
/**
* Tells the client to keep its local cache in sync with the server automatically.
*/
export function keepInSync(path: string, switchOn: boolean): Promise<any>;
export namespace dynamicLinks {
export enum MATCH_CONFIDENCE {
WEAK,
STRONG
}
export interface DynamicLinkCallbackData {
url: string;
matchConfidence?: MATCH_CONFIDENCE;
minimumAppVersion?: string;
}
}
export namespace firestore {
export type DocumentData = { [field: string]: any };
export type WhereFilterOp = '<' | '<=' | '==' | '>=' | '>' | 'in' | 'array-contains' | 'array-contains-any';
export type OrderByDirection = 'desc' | 'asc';
export interface GeoPoint {
longitude: number;
latitude: number;
}
export function GeoPoint(latitude: number, longitude: number): GeoPoint;
export interface Settings {
/** The hostname to connect to. */
host?: string;
/** Whether to use SSL when connecting. */
ssl?: boolean;
/**
* Specifies whether to use `Timestamp` objects for timestamp fields in
* `DocumentSnapshot`s. This is enabled by default and should not be
* disabled.
*
* Previously, Firestore returned timestamp fields as `Date` but `Date`
* only supports millisecond precision, which leads to truncation and
* causes unexpected behavior when using a timestamp from a snapshot as a
* part of a subsequent query.
*
* So now Firestore returns `Timestamp` values instead of `Date`, avoiding
* this kind of problem.
*
* To opt into the old behavior of returning `Date` objects, you can
* temporarily set `timestampsInSnapshots` to false.
*
* @deprecated This setting will be removed in a future release. You should
* update your code to expect `Timestamp` objects and stop using the
* `timestampsInSnapshots` setting.
*/
timestampsInSnapshots?: boolean;
/**
* An approximate cache size threshold for the on-disk data. If the cache grows beyond this
* size, Firestore will start removing data that hasn't been recently used. The size is not a
* guarantee that the cache will stay below that size, only that if the cache exceeds the given
* size, cleanup will be attempted.
*
* The default value is 40 MB. The threshold must be set to at least 1 MB, and can be set to
* CACHE_SIZE_UNLIMITED to disable garbage collection.
*/
cacheSizeBytes?: number;
}
/**
* Specifies custom settings to be used to configure the `Firestore`
* instance. Must be set before invoking any other methods.
*
* @param settings The settings to use.
*/
export function settings(settings: Settings): void;
export interface SetOptions {
merge?: boolean;
}
export interface SnapshotMetadata {
/**
* True if the snapshot contains the result of local writes (e.g. set() or
* update() calls) that have not yet been committed to the backend.
* If your listener has opted into metadata updates (via
* `DocumentListenOptions` or `QueryListenOptions`) you will receive another
* snapshot with `hasPendingWrites` equal to false once the writes have been
* committed to the backend.
*/
readonly hasPendingWrites: boolean;
/**
* True if the snapshot was created from cached data rather than
* guaranteed up-to-date server data. If your listener has opted into
* metadata updates (via `DocumentListenOptions` or `QueryListenOptions`)
* you will receive another snapshot with `fromCache` equal to false once
* the client has received up-to-date data from the backend.
*/
readonly fromCache: boolean;
}
export interface DocumentSnapshot {
ios?: any;
/* FIRDocumentSnapshot */
android?: any;
/* com.google.firebase.firestore.DocumentSnapshot */
id: string;
exists: boolean;
ref: DocumentReference;
/**
* Included when includeMetadataChanges is true.
*/
readonly metadata?: SnapshotMetadata;
data(): DocumentData;
}
export interface SnapshotListenOptions {
/**
* Include a change even if only the metadata of the query or of a document changed.
* Default false.
*/
readonly includeMetadataChanges?: boolean;
}
export interface GetOptions {
/**
* Describes whether we should get from server or cache.
*
* Setting to 'default' (or not setting at all), causes Firestore to try to
* retrieve an up-to-date (server-retrieved) snapshot, but fall back to
* returning cached data if the server can't be reached.
*
* Setting to 'server' causes Firestore to avoid the cache, generating an
* error if the server cannot be reached. Note that the cache will still be
* updated if the server request succeeds. Also note that latency-compensation
* still takes effect, so any pending write operations will be visible in the
* returned data (merged into the server-provided data).
*
* Setting to 'cache' causes Firestore to immediately return a value from the
* cache, ignoring the server completely (implying that the returned value
* may be stale with respect to the value on the server.) If there is no data
* in the cache to satisfy the `get()` call, `DocumentReference.get()` will
* return an error and `QuerySnapshot.get()` will return an empty
* `QuerySnapshot` with no documents.
*/
source?: 'default' | 'server' | 'cache';
}
export interface DocumentReference {
readonly discriminator: "docRef";
readonly id: string;
/**
* A reference to the Collection to which this DocumentReference belongs.
*/
readonly parent: CollectionReference;
readonly path: string;
readonly firestore: any;
collection: (collectionPath: string) => CollectionReference;
set: (document: any, options?: SetOptions) => Promise<void>;
get: (options?: GetOptions) => Promise<DocumentSnapshot>;
update: (document: any) => Promise<void>;
delete: () => Promise<void>;
onSnapshot(optionsOrCallback: SnapshotListenOptions | ((snapshot: DocumentSnapshot) => void), callbackOrOnError?: (snapshot: DocumentSnapshot | Error) => void, onError?: (error: Error) => void): () => void;
android?: any;
ios?: any;
}
export interface Query {
readonly firestore: any;
get(options?: GetOptions): Promise<QuerySnapshot>;
where(fieldPath: string, opStr: WhereFilterOp, value: any): Query;
orderBy(fieldPath: string, directionStr: firestore.OrderByDirection): Query;
limit(limit: number): Query;
onSnapshot(optionsOrCallback: SnapshotListenOptions | ((snapshot: QuerySnapshot) => void), callbackOrOnError?: (snapshotOrError: QuerySnapshot | Error) => void, onError?: (error: Error) => void): () => void;
startAt(snapshot: DocumentSnapshot): Query;
startAt(...fieldValues: any[]): Query;
startAfter(snapshot: DocumentSnapshot): Query;
startAfter(...fieldValues: any[]): Query;
endAt(snapshot: DocumentSnapshot): Query;
endAt(...fieldValues: any[]): Query;
endBefore(snapshot: DocumentSnapshot): Query;
endBefore(...fieldValues: any[]): Query;
}
export interface CollectionGroup {
where(fieldPath: string, opStr: WhereFilterOp, value: any): Query;
}
export interface CollectionReference extends Query {
readonly id: string;
/**
* A reference to the containing Document if this is a subcollection, else null.
*/
readonly parent: DocumentReference | null;
doc(documentPath?: string): DocumentReference;
add(data: DocumentData): Promise<DocumentReference>;
}
export type UpdateData = { [fieldPath: string]: any };
export class FieldPath {
/**
* Creates a FieldPath from the provided field names. If more than one field
* name is provided, the path will point to a nested field in a document.
*
* @param fieldNames A list of field names.
*/
constructor(...fieldNames: string[]);
/**
* Returns a special sentinel FieldPath to refer to the ID of a document.
* It can be used in queries to sort or filter by the document ID.
*/
static documentId(): FieldPath;
}
export interface Transaction {
get(documentRef: DocumentReference): DocumentSnapshot;
set(documentRef: DocumentReference, data: DocumentData, options?: SetOptions): Transaction;
update(documentRef: DocumentReference, data: UpdateData): Transaction;
update(documentRef: DocumentReference, field: string | FieldPath, value: any, ...moreFieldsAndValues: any[]): Transaction;
delete(documentRef: DocumentReference): Transaction;
}
export interface WriteBatch {
set(documentRef: DocumentReference, data: DocumentData, options?: SetOptions): WriteBatch;
update(documentRef: DocumentReference, data: UpdateData): WriteBatch;
update(documentRef: DocumentReference, field: string | FieldPath, value: any, ...moreFieldsAndValues: any[]): WriteBatch;
delete(documentRef: DocumentReference): WriteBatch;
commit(): Promise<void>;
}
export type FieldValueType = "ARRAY_UNION" | "ARRAY_REMOVE" | "INCREMENT";
export class FieldValue {
constructor(type: FieldValueType, value: any);
static serverTimestamp: () => "SERVER_TIMESTAMP";
static delete: () => "DELETE_FIELD";
static arrayUnion: (...elements: any[]) => FieldValue;
static arrayRemove: (...elements: any[]) => FieldValue;
static increment: (n: number) => FieldValue;
}
export interface SnapshotListenOptions {
readonly includeMetadataChanges?: boolean;
}
export interface SnapshotOptions {
/**
* If set, controls the return value for server timestamps that have not yet
* been set to their final value.
*
* By specifying 'estimate', pending server timestamps return an estimate
* based on the local clock. This estimate will differ from the final value
* and cause these values to change once the server result becomes available.
*
* By specifying 'previous', pending timestamps will be ignored and return
* their previous value instead.
*
* If omitted or set to 'none', `null` will be returned by default until the
* server value becomes available.
*/
readonly serverTimestamps?: 'estimate' | 'previous' | 'none';
}
export interface QueryDocumentSnapshot extends firestore.DocumentSnapshot {
/**
* Retrieves all fields in the document as an Object.
*
* By default, `FieldValue.serverTimestamp()` values that have not yet been
* set to their final value will be returned as `null`. You can override
* this by passing an options object.
*
* @override
* @param options An options object to configure how data is retrieved from
* the snapshot (e.g. the desired behavior for server timestamps that have
* not yet been set to their final value).
* @return An Object containing all fields in the document.
*/
data(options?: SnapshotOptions): DocumentData;
}
export type DocumentChangeType = 'added' | 'removed' | 'modified';
export interface DocumentChange {
readonly type: DocumentChangeType;
/** The document affected by this change. */
readonly doc: QueryDocumentSnapshot;
/**
* The index of the changed document in the result set immediately prior to
* this DocumentChange (i.e. supposing that all prior DocumentChange objects
* have been applied). Is -1 for 'added' events.
*/
readonly oldIndex: number;
/**
* The index of the changed document in the result set immediately after
* this DocumentChange (i.e. supposing that all prior DocumentChange
* objects and the current DocumentChange object have been applied).
* Is -1 for 'removed' events.
*/
readonly newIndex: number;
}
export interface QuerySnapshot {
docSnapshots: firestore.DocumentSnapshot[];
docs: firestore.QueryDocumentSnapshot[];
/**
* Included when includeMetadataChanges is true.
*/
readonly metadata: SnapshotMetadata;
docChanges(options?: SnapshotListenOptions): DocumentChange[];
forEach(callback: (result: DocumentSnapshot) => void, thisArg?: any): void;
}
function collection(collectionPath: string): CollectionReference;
function collectionGroup(id: string): CollectionGroup;
function doc(collectionPath: string, documentPath?: string): DocumentReference;
function docRef(documentPath: string): DocumentReference;
function add(collectionPath: string, documentData: any): Promise<DocumentReference>;
function set(collectionPath: string, documentPath: string, document: any, options?: any): Promise<void>;
function getCollection(collectionPath: string, options?: GetOptions): Promise<QuerySnapshot>;
function getDocument(collectionPath: string, documentPath: string, options?: GetOptions): Promise<DocumentSnapshot>;
function update(collectionPath: string, documentPath: string, document: any): Promise<void>;
function runTransaction(updateFunction: (transaction: firestore.Transaction) => Promise<any>): Promise<void>;
function batch(): firestore.WriteBatch;
function clearPersistence(): Promise<void>;
}
export namespace functions {
export type SupportedRegions = "us-central1" | "us-east1" | "us-east4" | "europe-west1" | "europe-west2" | "asia-east2" | "asia-northeast1";
export type HttpsCallable<I, O> = (callableData: I) => Promise<O>;
export function httpsCallable<I, O>(callableFunctionName: string, region?: SupportedRegions): HttpsCallable<I, O>;
export function useFunctionsEmulator(origin: string): void;
}
// Auth
export function login(options: LoginOptions): Promise<User>;
export function reauthenticate(options: ReauthenticateOptions): Promise<User>;
export function reloadUser(): Promise<void>;
export function getAuthToken(option: GetAuthTokenOptions): Promise<IdTokenResult>;
export function logout(): Promise<any>;
export function unlink(providerId: string): Promise<User>;
export function fetchSignInMethodsForEmail(email: string): Promise<Array<string>>;
export function sendEmailVerification(actionCodeSettings?: ActionCodeSettings): Promise<any>;
export function createUser(options: CreateUserOptions): Promise<User>;
export function deleteUser(): Promise<any>;
export function updateProfile(options: UpdateProfileOptions): Promise<any>;
export function sendPasswordResetEmail(email: string): Promise<void>;
export function updateEmail(newEmail: string): Promise<void>;
export function updatePassword(newPassword: string): Promise<void>;
export function addAuthStateListener(listener: AuthStateChangeListener): boolean;
export function removeAuthStateListener(listener: AuthStateChangeListener): boolean;
export function hasAuthStateListener(listener: AuthStateChangeListener): boolean;
export function getCurrentUser(): Promise<User>;
// Messaging
export function addOnMessageReceivedCallback(onMessageReceived: (data: Message) => void): Promise<any>;
export function addOnPushTokenReceivedCallback(onPushTokenReceived: (data: string) => void): Promise<any>;
export function registerForInteractivePush(model: any): void;
export function getCurrentPushToken(): Promise<string>;
export function registerForPushNotifications(options?: MessagingOptions): Promise<void>;
export function unregisterForPushNotifications(): Promise<void>;
export function subscribeToTopic(topicName): Promise<any>;
export function unsubscribeFromTopic(topicName): Promise<any>;
export function areNotificationsEnabled(): boolean;
// dynamic links
export function addOnDynamicLinkReceivedCallback(onDynamicLinkReceived: (callBackData: dynamicLinks.DynamicLinkCallbackData) => void): Promise<any>;
// remote config
export function getRemoteConfig(options: GetRemoteConfigOptions): Promise<GetRemoteConfigResult>;