react-native-firebase-compiled
Version:
A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto
126 lines (111 loc) • 3.03 kB
Flow
/**
* @flow
* Functions representation wrapper
*/
import ModuleBase from '../../utils/ModuleBase';
import { isObject } from '../../utils';
import { getNativeModule } from '../../utils/native';
import type App from '../core/app';
import firebase from '../core/firebase';
import HttpsError from './HttpsError';
import type {
HttpsCallable,
HttpsErrorCode,
HttpsCallablePromise,
} from './types.flow';
export const NAMESPACE = 'functions';
export const MODULE_NAME = 'RNFirebaseFunctions';
/**
* -------------
* INTERNALS
* -------------
*/
function errorOrResult(possibleError): HttpsCallablePromise {
if (isObject(possibleError) && possibleError.__error) {
const { code, message, details } = possibleError;
return Promise.reject(
new HttpsError(
statics.HttpsErrorCode[code] || statics.HttpsErrorCode.UNKNOWN,
message,
details
)
);
}
return Promise.resolve(possibleError);
}
/**
* -------------
* functions()
* -------------
*/
export default class Functions extends ModuleBase {
constructor(appOrRegion: App, region?: string) {
let _app = appOrRegion;
let _region = region || 'us-central1';
if (typeof _app === 'string') {
_region = _app;
_app = firebase.app();
}
super(
_app,
{
hasMultiAppSupport: true,
hasCustomUrlSupport: false,
hasRegionsSupport: true,
namespace: NAMESPACE,
moduleName: MODULE_NAME,
},
_region
);
}
/**
* -------------
* PUBLIC API
* -------------
*/
/**
* Returns a reference to the callable https trigger with the given name.
* @param name The name of the trigger.
*/
httpsCallable(name: string): HttpsCallable {
return (data?: any): HttpsCallablePromise => {
const promise = getNativeModule(this).httpsCallable(name, {
data,
});
return promise.then(errorOrResult);
};
}
/**
* Changes this instance to point to a Cloud Functions emulator running
* locally.
*
* See https://firebase.google.com/docs/functions/local-emulator
*
* @param origin the origin string of the local emulator started via firebase tools
* "http://10.0.0.8:1337".
*/
useFunctionsEmulator(origin: string): Promise<null> {
return getNativeModule(this).useFunctionsEmulator(origin);
}
}
export const statics: { HttpsErrorCode: HttpsErrorCode } = {
HttpsErrorCode: {
OK: 'ok',
CANCELLED: 'cancelled',
UNKNOWN: 'unknown',
INVALID_ARGUMENT: 'invalid-argument',
DEADLINE_EXCEEDED: 'deadline-exceeded',
NOT_FOUND: 'not-found',
ALREADY_EXISTS: 'already-exists',
PERMISSION_DENIED: 'permission-denied',
UNAUTHENTICATED: 'unauthenticated',
RESOURCE_EXHAUSTED: 'resource-exhausted',
FAILED_PRECONDITION: 'failed-precondition',
ABORTED: 'aborted',
OUT_OF_RANGE: 'out-of-range',
UNIMPLEMENTED: 'unimplemented',
INTERNAL: 'internal',
UNAVAILABLE: 'unavailable',
DATA_LOSS: 'data-loss',
},
};