90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
/**
|
|
* @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 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);
|
|
}
|
|
|
|
export default class Functions extends ModuleBase {
|
|
constructor(app: App) {
|
|
super(app, {
|
|
multiApp: false,
|
|
hasShards: false,
|
|
namespace: NAMESPACE,
|
|
moduleName: MODULE_NAME,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* -------------
|
|
* 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);
|
|
};
|
|
}
|
|
}
|
|
|
|
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',
|
|
},
|
|
};
|