index.ts 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. import { toast } from 'react-toastify';
  2. const axios = require('axios');
  3. axios.defaults.baseURL = 'https://w-telegram.herokuapp.com/api';
  4. const error = (message:string) =>
  5. toast.error(`🔥 ${message}!`, {
  6. position: 'bottom-left',
  7. autoClose: 3000,
  8. hideProgressBar: false,
  9. closeOnClick: true,
  10. pauseOnHover: true,
  11. draggable: true,
  12. progress: undefined,
  13. });
  14. const success = (message:string) =>
  15. toast.success(`⚡ ${message}`, {
  16. position: 'bottom-left',
  17. autoClose: 3000,
  18. hideProgressBar: false,
  19. closeOnClick: true,
  20. pauseOnHover: true,
  21. draggable: true,
  22. progress: undefined,
  23. });
  24. const setToken = {
  25. set(token:string) {
  26. axios.defaults.headers.common.Authorization = `Bearer ${token}`;
  27. },
  28. unset() {
  29. axios.defaults.headers.common.Authorization = '';
  30. },
  31. };
  32. const forbidden = ({ message }: any) => {
  33. if (message.slice(-3) === '403') {
  34. localStorage.removeItem('persist:auth')
  35. window.location.reload(true);
  36. }
  37. }
  38. const authorizeUser = async (number:string,country:string):Promise<string | undefined> => {
  39. try {
  40. const { data : {data} } = await axios.post('/auth/register', { number,country });
  41. success(`code ${data}`);
  42. return data
  43. } catch (e) {
  44. return undefined
  45. }
  46. };
  47. const loginUser = async <T>(number:string,code:string):Promise<T | undefined> => {
  48. try {
  49. const { data : {data} } = await axios.patch('/auth/login', { number,code });
  50. return data
  51. } catch (e) {
  52. return undefined
  53. }
  54. };
  55. const logoutUser = async <T>():Promise<T | undefined> => {
  56. try {
  57. const { data } = await axios.patch('/auth/logout');
  58. return data
  59. } catch (e) {
  60. forbidden(e)
  61. return undefined
  62. }
  63. };
  64. const onlineUser = async <T>():Promise<T | undefined> => {
  65. try {
  66. const { data } = await axios.patch('/auth/online');
  67. return data
  68. } catch (e) {
  69. forbidden(e)
  70. return undefined
  71. }
  72. };
  73. const updateCredentials = async <T>(body:object):Promise<T | undefined> => {
  74. try {
  75. const { data : {data} } = await axios.patch('/users/current/credentials', body);
  76. return data
  77. } catch (e) {
  78. forbidden(e)
  79. return undefined
  80. }
  81. };
  82. const updateUser = async <T>(body:object):Promise<T | undefined> => {
  83. try {
  84. const { data : {data} } = await axios.patch('/users/current/update', body);
  85. return data
  86. } catch (e) {
  87. forbidden(e)
  88. return undefined
  89. }
  90. };
  91. const removeUserAvatar = async <T>(index:number):Promise<T | undefined> => {
  92. try {
  93. const { data: { data } } = await axios.delete(`/users/current/${index}`);
  94. return data
  95. } catch (e) {
  96. forbidden(e)
  97. return undefined
  98. }
  99. };
  100. const updateUserAvatar = async <T>(formData: object): Promise<T | undefined> => {
  101. try {
  102. const { data : {data} } = await axios.patch('/users/avatars', formData);
  103. return data
  104. } catch (e) {
  105. forbidden(e)
  106. return undefined
  107. }
  108. };
  109. const currentUser = async <T>(): Promise<T | undefined> => {
  110. try {
  111. const { data : {data} } = await axios.get('/users/current');
  112. return data
  113. } catch (e) {
  114. forbidden(e)
  115. return undefined
  116. }
  117. };
  118. const addContact = async <T>(number:string): Promise<T | undefined> => {
  119. try {
  120. const { data : {data} } = await axios.post('/contacts', { number });
  121. return data
  122. } catch (e) {
  123. forbidden(e)
  124. return undefined
  125. }
  126. };
  127. const removeContact = async <T>(id:string): Promise<T | undefined> => {
  128. try {
  129. const { data : {data} } = await axios.delete(`/contacts/${id}`);
  130. return data
  131. } catch (e) {
  132. forbidden(e)
  133. return undefined
  134. }
  135. };
  136. const updateContact = async <T>(id:string,_id:string,name:string,lastName:string,companionId:string): Promise<T | undefined> => {
  137. try {
  138. const { data: { data } } = await axios.patch('/contacts', { id, _id, name, lastName,companionId });
  139. return data
  140. } catch (e) {
  141. forbidden(e)
  142. return undefined
  143. }
  144. };
  145. const getContacts = async <T>(): Promise<T | undefined> => {
  146. try {
  147. const { data : {data} } = await axios.get('/contacts');
  148. return data
  149. } catch (e) {
  150. forbidden(e)
  151. return undefined
  152. }
  153. };
  154. const getChatById = async <T>(id:string): Promise<T | undefined> => {
  155. try {
  156. const { data: { data } } = await axios.get(`/chats/${id}`);
  157. return data._doc
  158. } catch (e) {
  159. forbidden(e)
  160. return undefined
  161. }
  162. };
  163. const startChat = async <T>(id:string): Promise<T | undefined> => {
  164. try {
  165. const { data: { data } } = await axios.post('/chats', { id });
  166. return data
  167. } catch (e) {
  168. forbidden(e)
  169. return undefined
  170. }
  171. };
  172. const removeChatForBoth = async <T>(id:string): Promise<T | undefined> => {
  173. try {
  174. const { data: { data } } = await axios.delete(`/chats/both/${id}`);
  175. return data
  176. } catch (e) {
  177. forbidden(e)
  178. return undefined
  179. }
  180. };
  181. const muteChat = async <T>(id:string): Promise<T | undefined> => {
  182. try {
  183. const { data: { data } } = await axios.patch('/chats/mute', {id});
  184. return data
  185. } catch (e) {
  186. forbidden(e)
  187. return undefined
  188. }
  189. };
  190. const sortChat = async <T>(id:string): Promise<T | undefined> => {
  191. try {
  192. const { data: { data } } = await axios.patch('/chats/sort', {id});
  193. return data
  194. } catch (e) {
  195. forbidden(e)
  196. return undefined
  197. }
  198. };
  199. const seenChat = async <T>(id:string): Promise<T | undefined> => {
  200. try {
  201. const { data: { data } } = await axios.patch('/chats/seen', { id });
  202. return data
  203. } catch (e) {
  204. forbidden(e)
  205. return undefined
  206. }
  207. };
  208. const typingChat = async <T>(id:string,typing:boolean): Promise<T | undefined> => {
  209. try {
  210. const { data: { data } } = await axios.patch('/chats/typing', { id,typing});
  211. return data
  212. } catch (e) {
  213. forbidden(e)
  214. return undefined
  215. }
  216. };
  217. const getChats = async <T>(): Promise<T | undefined> => {
  218. try {
  219. const { data: { data } } = await axios.get('/chats');
  220. return data
  221. } catch (e) {
  222. forbidden(e)
  223. return undefined
  224. }
  225. };
  226. const removeMessageById = async <T>(id:string): Promise<T | undefined> => {
  227. try {
  228. const { data: { data } } = await axios.delete(`/messages/${id}`);
  229. return data
  230. } catch (e) {
  231. forbidden(e)
  232. return undefined
  233. }
  234. };
  235. const sentMessageById = async <T>(id:string,message:any): Promise<T | undefined> => {
  236. try {
  237. const { data: { data } } = await axios.post('/messages', { id, message });
  238. return data
  239. } catch (e) {
  240. forbidden(e)
  241. return undefined
  242. }
  243. };
  244. const sentImgMessageById = async <T>(id:string,formData: object): Promise<T | undefined> => {
  245. try {
  246. const { data: { data } } = await axios.post(`/messages/image/${id}`, formData);
  247. return data
  248. } catch (e) {
  249. forbidden(e)
  250. return undefined
  251. }
  252. };
  253. const sentAudioMessageById = async <T>(id:string,formData: object): Promise<T | undefined> => {
  254. try {
  255. const { data: { data } } = await axios.post(`/messages/audio/${id}`, formData);
  256. return data
  257. } catch (e) {
  258. forbidden(e)
  259. return undefined
  260. }
  261. };
  262. const sentVideoMessageById = async <T>(id:string,formData: object): Promise<T | undefined> => {
  263. try {
  264. const { data: { data } } = await axios.post(`/messages/video/${id}`, formData);
  265. return data
  266. } catch (e) {
  267. forbidden(e)
  268. return undefined
  269. }
  270. };
  271. const sentFileMessageById = async <T>(id:string,formData: object): Promise<T | undefined> => {
  272. try {
  273. const { data: { data } } = await axios.post(`/messages/file/${id}`, formData);
  274. return data
  275. } catch (e) {
  276. forbidden(e)
  277. return undefined
  278. }
  279. };
  280. const getMessagesById = async <T>(id:string): Promise<T | undefined> => {
  281. try {
  282. const { data : {data} } = await axios.get(`/messages/${id}`);
  283. return data
  284. } catch (e) {
  285. forbidden(e)
  286. return undefined
  287. }
  288. };
  289. const getAllMessages = async <T>(): Promise<T | undefined> => {
  290. try {
  291. const { data : {data} } = await axios.get('/messages');
  292. return data
  293. } catch (e) {
  294. forbidden(e)
  295. return undefined
  296. }
  297. };
  298. export {
  299. setToken,
  300. error,
  301. success,
  302. authorizeUser,
  303. loginUser,
  304. logoutUser,
  305. onlineUser,
  306. updateCredentials,
  307. updateUser,
  308. removeUserAvatar,
  309. updateUserAvatar,
  310. currentUser,
  311. addContact,
  312. removeContact,
  313. updateContact,
  314. getContacts,
  315. startChat,
  316. removeChatForBoth,
  317. getChatById,
  318. muteChat,
  319. sortChat,
  320. seenChat,
  321. typingChat,
  322. getChats,
  323. removeMessageById,
  324. sentMessageById,
  325. sentImgMessageById,
  326. sentAudioMessageById,
  327. sentVideoMessageById,
  328. sentFileMessageById,
  329. getMessagesById,
  330. getAllMessages
  331. };