Rocket.Chat.ReactNative/app/utils/fetch.ts

46 lines
1.5 KiB
TypeScript
Raw Normal View History

import { Platform } from 'react-native';
import DeviceInfo from 'react-native-device-info';
import { settings as RocketChatSettings } from '@rocket.chat/sdk';
import RocketChat from '../lib/rocketchat';
interface CustomHeaders {
'User-Agent': string;
Authorization?: string;
}
// this form is required by Rocket.Chat's parser in "app/statistics/server/lib/UAParserCustom.js"
export const headers: CustomHeaders = {
'User-Agent': `RC Mobile; ${
Platform.OS
} ${DeviceInfo.getSystemVersion()}; v${DeviceInfo.getVersion()} (${DeviceInfo.getBuildNumber()})`
};
let _basicAuth;
export const setBasicAuth = (basicAuth: string): void => {
_basicAuth = basicAuth;
if (basicAuth) {
RocketChatSettings.customHeaders = { ...headers, Authorization: `Basic ${_basicAuth}` };
} else {
RocketChatSettings.customHeaders = headers;
}
};
export const BASIC_AUTH_KEY = 'BASIC_AUTH_KEY';
RocketChatSettings.customHeaders = headers;
export default (url: string, options: { headers?: Headers; signal?: AbortSignal } = {}): Promise<Response> => {
let customOptions = { ...options, headers: RocketChatSettings.customHeaders };
if (options && options.headers) {
customOptions = { ...customOptions, headers: { ...options.headers, ...customOptions.headers } };
}
// TODO: Refactor when migrate rocketchat.js
// @ts-ignore
if (RocketChat.controller) {
// @ts-ignore
const { signal } = RocketChat.controller;
customOptions = { ...customOptions, signal };
}
return fetch(url, customOptions);
};