react-native-firebase-for-netmera
Version:
112 lines (99 loc) • 2.68 kB
JavaScript
/**
*
* Functions representation wrapper
*/
import ModuleBase from '../../utils/ModuleBase';
import { isObject } from '../../utils';
import { getNativeModule } from '../../utils/native';
import firebase from '../core/firebase';
import HttpsError from './HttpsError';
export const NAMESPACE = 'functions';
export const MODULE_NAME = 'RNFirebaseFunctions';
/**
* -------------
* INTERNALS
* -------------
*/
function errorOrResult(possibleError) {
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, region) {
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) {
return data => {
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) {
return getNativeModule(this).useFunctionsEmulator(origin);
}
}
export const statics = {
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'
}
};