index.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import { toast } from 'react-toastify';
  2. const axios = require('axios');
  3. axios.defaults.baseURL = 'http://localhost:3000/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>(name: string,lastName: string):Promise<T | undefined> => {
  74. try {
  75. const { data : {data} } = await axios.patch('/users/current', { name, lastName });
  76. return data
  77. } catch (e) {
  78. forbidden(e)
  79. return undefined
  80. }
  81. };
  82. const updateUserAvatar = async <T>(formData: object): Promise<T | undefined> => {
  83. try {
  84. const { data : {data} } = await axios.patch('/users/avatars', formData);
  85. return data
  86. } catch (e) {
  87. forbidden(e)
  88. return undefined
  89. }
  90. };
  91. const currentUser = async <T>(): Promise<T | undefined> => {
  92. try {
  93. const { data : {data} } = await axios.get('/users/current');
  94. return data
  95. } catch (e) {
  96. forbidden(e)
  97. return undefined
  98. }
  99. };
  100. const addContact = async <T>(number:string): Promise<T | undefined> => {
  101. try {
  102. const { data : {data} } = await axios.post('/contacts', { number });
  103. return data
  104. } catch (e) {
  105. forbidden(e)
  106. return undefined
  107. }
  108. };
  109. const getContacts = async <T>(): Promise<T | undefined> => {
  110. try {
  111. const { data : {data} } = await axios.get('/contacts');
  112. return data
  113. } catch (e) {
  114. forbidden(e)
  115. return undefined
  116. }
  117. };
  118. const getChat = async <T>(id:string): Promise<T | undefined> => {
  119. try {
  120. const { data: { data } } = await axios.get(`/chats/${id}`);
  121. return data
  122. } catch (e) {
  123. forbidden(e)
  124. return undefined
  125. }
  126. };
  127. const startChat = async <T>(id:string): Promise<T | undefined> => {
  128. try {
  129. const { data : {data} } = await axios.post('/chats',{id});
  130. return data
  131. } catch (e) {
  132. forbidden(e)
  133. return undefined
  134. }
  135. };
  136. const muteChat = async <T>(id:string): Promise<T | undefined> => {
  137. try {
  138. const { data: { data } } = await axios.patch('/chats/mute', {id});
  139. return data
  140. } catch (e) {
  141. forbidden(e)
  142. return undefined
  143. }
  144. };
  145. const seenChat = async <T>(id:string): Promise<T | undefined> => {
  146. try {
  147. const { data: { data } } = await axios.patch('/chats/seen', { id });
  148. return data
  149. } catch (e) {
  150. forbidden(e)
  151. return undefined
  152. }
  153. };
  154. const typingChat = async <T>(id:string,typing:boolean): Promise<T | undefined> => {
  155. try {
  156. const { data: { data } } = await axios.patch('/chats/typing', { id,typing});
  157. return data
  158. } catch (e) {
  159. forbidden(e)
  160. return undefined
  161. }
  162. };
  163. const getChats = async <T>(): Promise<T | undefined> => {
  164. try {
  165. const { data: { data } } = await axios.get('/chats');
  166. return data
  167. } catch (e) {
  168. forbidden(e)
  169. return undefined
  170. }
  171. };
  172. const sentMessageById = async <T>(id:string,message:any): Promise<T | undefined> => {
  173. try {
  174. const { data: { data } } = await axios.post('/messages', { id, message });
  175. return data
  176. } catch (e) {
  177. forbidden(e)
  178. return undefined
  179. }
  180. };
  181. const sentImgMessageById = async <T>(id:string,formData: object): Promise<T | undefined> => {
  182. try {
  183. const { data: { data } } = await axios.post(`/messages/img/${id}`, formData);
  184. return data
  185. } catch (e) {
  186. forbidden(e)
  187. return undefined
  188. }
  189. };
  190. const getMessagesById = async <T>(id:string): Promise<T | undefined> => {
  191. try {
  192. const { data : {data} } = await axios.get(`/messages/${id}`);
  193. return data
  194. } catch (e) {
  195. forbidden(e)
  196. return undefined
  197. }
  198. };
  199. export {
  200. setToken,
  201. error,
  202. success,
  203. authorizeUser,
  204. loginUser,
  205. logoutUser,
  206. onlineUser,
  207. updateCredentials,
  208. updateUserAvatar,
  209. currentUser,
  210. addContact,
  211. getContacts,
  212. startChat,
  213. getChat,
  214. muteChat,
  215. seenChat,
  216. typingChat,
  217. getChats,
  218. sentMessageById,
  219. sentImgMessageById,
  220. getMessagesById
  221. };