@ethora/chat-component-rn 26.6.11 → 26.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +2 -2
- package/lib/commonjs/components/AuthForms/Login.js +2 -1
- package/lib/commonjs/components/AuthForms/Login.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +4 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +14 -13
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/LoginWrapper.js +2 -1
- package/lib/commonjs/components/MainComponents/LoginWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +18 -7
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js +1 -1
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +4 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +15 -11
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +2 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +5 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +10 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +4 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +4 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js +6 -3
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/commonjs/components/styled/AudioMessage.js +2 -1
- package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/MediaFilePreview.js +1 -1
- package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/commonjs/components/styled/MessageImage.js +34 -8
- package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +36 -64
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +44 -18
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/initXmppRooms.js +5 -1
- package/lib/commonjs/helpers/initXmppRooms.js.map +1 -1
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +126 -12
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/commonjs/helpers/secureFileUrl.js +101 -0
- package/lib/commonjs/helpers/secureFileUrl.js.map +1 -0
- package/lib/commonjs/hooks/useChatWrapperInit.js +3 -3
- package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/commonjs/hooks/useFileToken.js +10 -0
- package/lib/commonjs/hooks/useFileToken.js.map +1 -0
- package/lib/commonjs/hooks/useSendMessage.js +23 -13
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/main.js +25 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +99 -54
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/roomMembers.api.js +1 -1
- package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +9 -9
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/user.api.js +9 -9
- package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
- package/lib/commonjs/networking/apiClient.js +62 -112
- package/lib/commonjs/networking/apiClient.js.map +1 -1
- package/lib/commonjs/networking/authRefresh.js +323 -0
- package/lib/commonjs/networking/authRefresh.js.map +1 -0
- package/lib/commonjs/networking/xmppClient.js +33 -5
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js +20 -2
- package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/module/components/AuthForms/Login.js +2 -1
- package/lib/module/components/AuthForms/Login.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +4 -1
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +14 -13
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/LoginWrapper.js +2 -1
- package/lib/module/components/MainComponents/LoginWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +18 -7
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/InteractionsOverlay.js +1 -1
- package/lib/module/components/MessageBubble/InteractionsOverlay.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +1 -1
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +4 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +15 -11
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +2 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +5 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +10 -2
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +4 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +4 -1
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/VideoCalls/VideoCallSession.js +6 -3
- package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/module/components/styled/AudioMessage.js +2 -1
- package/lib/module/components/styled/AudioMessage.js.map +1 -1
- package/lib/module/components/styled/MediaFilePreview.js +1 -1
- package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/module/components/styled/MessageImage.js +34 -8
- package/lib/module/components/styled/MessageImage.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +36 -64
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/context/xmppProvider.js +43 -18
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/initXmppRooms.js +5 -1
- package/lib/module/helpers/initXmppRooms.js.map +1 -1
- package/lib/module/helpers/resolveInitBeforeLoadUser.js +126 -11
- package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/module/helpers/secureFileUrl.js +91 -0
- package/lib/module/helpers/secureFileUrl.js.map +1 -0
- package/lib/module/hooks/useChatWrapperInit.js +3 -3
- package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/module/hooks/useFileToken.js +5 -0
- package/lib/module/hooks/useFileToken.js.map +1 -0
- package/lib/module/hooks/useSendMessage.js +24 -14
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/main.js +12 -1
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +96 -53
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/roomMembers.api.js +1 -1
- package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +9 -9
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/api-requests/user.api.js +8 -7
- package/lib/module/networking/api-requests/user.api.js.map +1 -1
- package/lib/module/networking/apiClient.js +61 -113
- package/lib/module/networking/apiClient.js.map +1 -1
- package/lib/module/networking/authRefresh.js +312 -0
- package/lib/module/networking/authRefresh.js.map +1 -0
- package/lib/module/networking/xmppClient.js +33 -5
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/chatSettingsSlice.js +20 -2
- package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/LoginWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
- package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/styled/MessageImage.d.ts +8 -0
- package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/initXmppRooms.d.ts.map +1 -1
- package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
- package/lib/typescript/helpers/secureFileUrl.d.ts +7 -0
- package/lib/typescript/helpers/secureFileUrl.d.ts.map +1 -0
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts +16 -4
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts.map +1 -1
- package/lib/typescript/hooks/useFileToken.d.ts +2 -0
- package/lib/typescript/hooks/useFileToken.d.ts.map +1 -0
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +6 -1
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +3 -27
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
- package/lib/typescript/networking/apiClient.d.ts +12 -6
- package/lib/typescript/networking/apiClient.d.ts.map +1 -1
- package/lib/typescript/networking/authRefresh.d.ts +92 -0
- package/lib/typescript/networking/authRefresh.d.ts.map +1 -0
- package/lib/typescript/networking/xmppClient.d.ts +6 -0
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts +16 -0
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +17 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/package.json +29 -28
- package/src/components/AuthForms/Login.tsx +1 -0
- package/src/components/MainComponents/ChatHeader.tsx +4 -1
- package/src/components/MainComponents/ChatWrapper.tsx +14 -19
- package/src/components/MainComponents/LoginWrapper.tsx +1 -0
- package/src/components/MainComponents/MediaMessage.tsx +15 -5
- package/src/components/MessageBubble/InteractionsOverlay.tsx +1 -1
- package/src/components/MessageBubble/Message.tsx +1 -1
- package/src/components/MessageBubble/MessageInteractions.tsx +1 -1
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +4 -1
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +14 -10
- package/src/components/Modals/FilePreviewModal/GViewWebView.tsx +1 -1
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +2 -1
- package/src/components/RoomComponents/ChatRoomItem.tsx +9 -1
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +14 -2
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +4 -1
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +4 -1
- package/src/components/VideoCalls/VideoCallSession.tsx +8 -3
- package/src/components/styled/AudioMessage.tsx +2 -1
- package/src/components/styled/MediaFilePreview.tsx +1 -1
- package/src/components/styled/MessageImage.tsx +45 -6
- package/src/components/styled/VideoMessage.tsx +36 -60
- package/src/context/xmppProvider.tsx +45 -20
- package/src/helpers/initXmppRooms.tsx +5 -1
- package/src/helpers/resolveInitBeforeLoadUser.ts +123 -11
- package/src/helpers/secureFileUrl.ts +103 -0
- package/src/hooks/useChatWrapperInit.ts +3 -3
- package/src/hooks/useFileToken.ts +7 -0
- package/src/hooks/useSendMessage.tsx +28 -13
- package/src/main.ts +22 -1
- package/src/networking/api-requests/auth.api.ts +125 -52
- package/src/networking/api-requests/roomMembers.api.ts +1 -1
- package/src/networking/api-requests/rooms.api.ts +9 -9
- package/src/networking/api-requests/user.api.ts +8 -7
- package/src/networking/apiClient.ts +68 -123
- package/src/networking/authRefresh.ts +435 -0
- package/src/networking/xmppClient.ts +37 -5
- package/src/roomStore/chatSettingsSlice.ts +28 -3
- package/src/types/types.ts +17 -0
|
@@ -10,12 +10,12 @@ exports.getExportMyData = getExportMyData;
|
|
|
10
10
|
exports.getMyUser = getMyUser;
|
|
11
11
|
exports.updateMe = updateMe;
|
|
12
12
|
exports.updateProfile = updateProfile;
|
|
13
|
-
var _apiClient =
|
|
13
|
+
var _apiClient = _interopRequireWildcard(require("../apiClient"));
|
|
14
14
|
var _roomStore = require("../../roomStore");
|
|
15
|
-
function
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
16
16
|
async function getMyUser(options) {
|
|
17
17
|
const token = options?.token || _roomStore.store.getState().chatSettingStore.user.token || '';
|
|
18
|
-
const endpoint = options?.endpoint || '/users/my';
|
|
18
|
+
const endpoint = (0, _apiClient.normalizeApiPath)(options?.endpoint) || '/v1/users/my';
|
|
19
19
|
const response = await _apiClient.default.get(endpoint, {
|
|
20
20
|
headers: {
|
|
21
21
|
Authorization: token
|
|
@@ -28,7 +28,7 @@ async function getMyUser(options) {
|
|
|
28
28
|
}
|
|
29
29
|
function getDocuments(walletAddress) {
|
|
30
30
|
const token = _roomStore.store.getState().chatSettingStore.user.token || '';
|
|
31
|
-
return _apiClient.default.get(`/docs/${walletAddress}`, {
|
|
31
|
+
return _apiClient.default.get(`/v1/docs/${walletAddress}`, {
|
|
32
32
|
headers: {
|
|
33
33
|
Authorization: `Bearer ${token}`
|
|
34
34
|
}
|
|
@@ -36,7 +36,7 @@ function getDocuments(walletAddress) {
|
|
|
36
36
|
}
|
|
37
37
|
function getExportMyData() {
|
|
38
38
|
const token = _roomStore.store.getState().chatSettingStore.user.token || '';
|
|
39
|
-
return _apiClient.default.get('/users/exportData', {
|
|
39
|
+
return _apiClient.default.get('/v1/users/exportData', {
|
|
40
40
|
headers: {
|
|
41
41
|
Authorization: token,
|
|
42
42
|
responseType: 'arraybuffer'
|
|
@@ -45,22 +45,22 @@ function getExportMyData() {
|
|
|
45
45
|
}
|
|
46
46
|
function deleteDocument(fileId) {
|
|
47
47
|
const token = _roomStore.store.getState().chatSettingStore.user.token || '';
|
|
48
|
-
return _apiClient.default.delete(`/files/${fileId}`, {
|
|
48
|
+
return _apiClient.default.delete(`/v1/files/${fileId}`, {
|
|
49
49
|
headers: {
|
|
50
50
|
Authorization: token
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
function deleteMe() {
|
|
55
|
-
return _apiClient.default.delete('/users');
|
|
55
|
+
return _apiClient.default.delete('/v1/users');
|
|
56
56
|
}
|
|
57
57
|
function updateMe(data) {
|
|
58
|
-
return _apiClient.default.put('/users', data);
|
|
58
|
+
return _apiClient.default.put('/v1/users', data);
|
|
59
59
|
}
|
|
60
60
|
async function updateProfile(fd) {
|
|
61
61
|
const token = _roomStore.store.getState().chatSettingStore.user.token || '';
|
|
62
62
|
try {
|
|
63
|
-
const response = await _apiClient.default.put('/users', fd, {
|
|
63
|
+
const response = await _apiClient.default.put('/v1/users', fd, {
|
|
64
64
|
headers: {
|
|
65
65
|
Authorization: token,
|
|
66
66
|
'Content-Type': 'multipart/form-data'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_apiClient","
|
|
1
|
+
{"version":3,"names":["_apiClient","_interopRequireWildcard","require","_roomStore","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getMyUser","options","token","store","getState","chatSettingStore","user","endpoint","normalizeApiPath","response","http","headers","Authorization","data","getDocuments","walletAddress","getExportMyData","responseType","deleteDocument","fileId","delete","deleteMe","updateMe","put","updateProfile","fd","error","Error"],"sourceRoot":"../../../../src","sources":["networking/api-requests/user.api.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
exports.getCurrentAppToken = getCurrentAppToken;
|
|
8
8
|
exports.getCurrentBaseURL = getCurrentBaseURL;
|
|
9
|
+
exports.normalizeApiPath = void 0;
|
|
9
10
|
exports.refresh = refresh;
|
|
10
11
|
exports.setBaseURL = setBaseURL;
|
|
11
12
|
var _axios = _interopRequireDefault(require("axios"));
|
|
12
13
|
var _roomStore = require("../roomStore");
|
|
13
14
|
var _chatSettingsSlice = require("../roomStore/chatSettingsSlice");
|
|
14
15
|
var _devLogger = require("../utils/devLogger");
|
|
16
|
+
var _authRefresh = require("./authRefresh");
|
|
15
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
18
|
// Per product-code-policy: no compiled-in Ethora endpoints or tokens.
|
|
17
19
|
// Consumers must call `setBaseURL(baseUrl, appToken)` (or pass
|
|
@@ -27,10 +29,25 @@ const http = _axios.default.create({
|
|
|
27
29
|
// Dev-logger hook: capture every request + response on the shared
|
|
28
30
|
// `http` instance.
|
|
29
31
|
(0, _devLogger.installAxiosCapture)(http);
|
|
32
|
+
const stripApiVersion = baseUrl => baseUrl.replace(/\/+$/, '').replace(/\/v\d+$/, '');
|
|
33
|
+
const normalizeApiPath = path => {
|
|
34
|
+
if (!path) {
|
|
35
|
+
return path;
|
|
36
|
+
}
|
|
37
|
+
if (/^https?:\/\//i.test(path)) {
|
|
38
|
+
return path;
|
|
39
|
+
}
|
|
40
|
+
if (/^\/v\d+\//.test(path)) {
|
|
41
|
+
return path;
|
|
42
|
+
}
|
|
43
|
+
return `/v1${path.startsWith('/') ? '' : '/'}${path}`;
|
|
44
|
+
};
|
|
45
|
+
exports.normalizeApiPath = normalizeApiPath;
|
|
30
46
|
function setBaseURL(baseUrl, appToken) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
const normalized = baseUrl ? stripApiVersion(baseUrl) : baseUrl;
|
|
48
|
+
if (normalized && normalized !== currentBaseURL) {
|
|
49
|
+
currentBaseURL = normalized;
|
|
50
|
+
http.defaults.baseURL = normalized;
|
|
34
51
|
}
|
|
35
52
|
if (appToken && appToken !== currentAppToken) {
|
|
36
53
|
currentAppToken = appToken;
|
|
@@ -42,132 +59,65 @@ function getCurrentAppToken() {
|
|
|
42
59
|
function getCurrentBaseURL() {
|
|
43
60
|
return currentBaseURL;
|
|
44
61
|
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @deprecated Import `refreshAuthTokens` from `./authRefresh` instead.
|
|
65
|
+
*
|
|
66
|
+
* Kept as a thin forwarder so existing call sites keep working while
|
|
67
|
+
* they migrate. Declared as a function (not `const refresh =
|
|
68
|
+
* refreshAuthTokens`) on purpose: this module and `authRefresh` import
|
|
69
|
+
* each other, and a const would capture the binding before the other
|
|
70
|
+
* module finished evaluating.
|
|
71
|
+
*/
|
|
45
72
|
function refresh() {
|
|
46
|
-
return
|
|
47
|
-
const user = _roomStore.store.getState().chatSettingStore.user;
|
|
48
|
-
try {
|
|
49
|
-
http.post('/users/login/refresh', {}, {
|
|
50
|
-
headers: {
|
|
51
|
-
Authorization: user.refreshToken
|
|
52
|
-
}
|
|
53
|
-
}).then(response => {
|
|
54
|
-
_roomStore.store.dispatch((0, _chatSettingsSlice.refreshTokens)({
|
|
55
|
-
token: response.data.token,
|
|
56
|
-
refreshToken: response.data.refreshToken
|
|
57
|
-
}));
|
|
58
|
-
// BUGFIX: previously the `.then` only dispatched and never
|
|
59
|
-
// resolved, so every `await refresh()` callsite hung forever
|
|
60
|
-
// on the happy path. Resolve with the axios response shape so
|
|
61
|
-
// the interceptor can read `tokens.data.token` to retry.
|
|
62
|
-
resolve(response);
|
|
63
|
-
}).catch(error => {
|
|
64
|
-
reject(error);
|
|
65
|
-
});
|
|
66
|
-
} catch (error) {
|
|
67
|
-
// BUGFIX: previously the outer-try catch dispatched logout but
|
|
68
|
-
// never rejected, so a synchronous throw from `http.post` (e.g.
|
|
69
|
-
// a bad URL) would hang the promise. Reject explicitly.
|
|
70
|
-
console.log('errr');
|
|
71
|
-
_roomStore.store.dispatch((0, _chatSettingsSlice.logout)());
|
|
72
|
-
reject(error);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
73
|
+
return (0, _authRefresh.refreshAuthTokens)();
|
|
75
74
|
}
|
|
76
|
-
let isRefreshing = false;
|
|
77
|
-
let failedQueue = [];
|
|
78
|
-
const addRequestToQueue = config => {
|
|
79
|
-
return new Promise((resolve, reject) => {
|
|
80
|
-
failedQueue.push({
|
|
81
|
-
resolve,
|
|
82
|
-
reject,
|
|
83
|
-
config
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
const processQueue = newAccessToken => {
|
|
88
|
-
for (const request of failedQueue) {
|
|
89
|
-
if (newAccessToken) {
|
|
90
|
-
request.config.headers.Authorization = newAccessToken;
|
|
91
|
-
}
|
|
92
|
-
request.resolve(http(request.config));
|
|
93
|
-
}
|
|
94
|
-
failedQueue = [];
|
|
95
|
-
};
|
|
96
75
|
http.interceptors.response.use(response => response, async error => {
|
|
97
|
-
// BUGFIX: the original condition was `if (!enabled)` — inverted, so
|
|
98
|
-
// turning `refreshTokens.enabled: true` actually DISABLED the refresh
|
|
99
|
-
// path on 401. Use the correct sense.
|
|
100
|
-
if (!_roomStore.store.getState().chatSettingStore?.config?.refreshTokens?.enabled) {
|
|
101
|
-
// BUGFIX: previously this branch fell off the end of the async
|
|
102
|
-
// function and returned `undefined`, which axios treats as a
|
|
103
|
-
// resolved-with-undefined response. Callers expecting an error
|
|
104
|
-
// got `undefined` instead, silently swallowing every failure
|
|
105
|
-
// when the refresh path isn't configured. Re-reject so the
|
|
106
|
-
// original error reaches the caller.
|
|
107
|
-
return Promise.reject(error);
|
|
108
|
-
}
|
|
109
76
|
const originalRequest = error.config;
|
|
110
77
|
const status = error.response?.status;
|
|
111
78
|
|
|
112
79
|
// Refresh paths only fire on 401. Anything else passes through.
|
|
113
|
-
if (!error.response || status !== 401) {
|
|
80
|
+
if (!error.response || status !== 401 || !originalRequest) {
|
|
114
81
|
return Promise.reject(error);
|
|
115
82
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const result = await fn();
|
|
123
|
-
const {
|
|
124
|
-
refreshToken: newRefreshToken,
|
|
125
|
-
accessToken
|
|
126
|
-
} = result || {
|
|
127
|
-
refreshToken: '',
|
|
128
|
-
accessToken: ''
|
|
129
|
-
};
|
|
130
|
-
_roomStore.store.dispatch((0, _chatSettingsSlice.refreshTokens)({
|
|
131
|
-
token: accessToken,
|
|
132
|
-
refreshToken: newRefreshToken || ''
|
|
133
|
-
}));
|
|
134
|
-
// BUGFIX: previously this branch returned `undefined` after
|
|
135
|
-
// dispatching, so the original request was never retried and
|
|
136
|
-
// the caller resolved with undefined. Stamp the new token on
|
|
137
|
-
// the original config and replay.
|
|
138
|
-
if (originalRequest?.headers) {
|
|
139
|
-
originalRequest.headers.Authorization = accessToken;
|
|
140
|
-
}
|
|
141
|
-
return http(originalRequest);
|
|
142
|
-
} catch (refreshErr) {
|
|
143
|
-
return Promise.reject(refreshErr);
|
|
144
|
-
}
|
|
83
|
+
|
|
84
|
+
// Never retry twice, and never touch the auth endpoints themselves —
|
|
85
|
+
// both would recurse. (`_retry` was set but never checked before,
|
|
86
|
+
// so a request could bounce between 401 and replay indefinitely.)
|
|
87
|
+
if (originalRequest._retry || originalRequest.url === '/v1/users/login/refresh' || originalRequest.url === '/v1/users/login') {
|
|
88
|
+
return Promise.reject(error);
|
|
145
89
|
}
|
|
90
|
+
const refreshConfig = _roomStore.store.getState().chatSettingStore?.config?.refreshTokens;
|
|
146
91
|
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
if (
|
|
92
|
+
// BUGFIX (kept): the original condition here was inverted, so
|
|
93
|
+
// `refreshTokens.enabled: true` actually DISABLED the refresh path.
|
|
94
|
+
if (!refreshConfig?.enabled) {
|
|
150
95
|
return Promise.reject(error);
|
|
151
96
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
97
|
+
|
|
98
|
+
// Nothing to rotate with — reject rather than firing a doomed
|
|
99
|
+
// refresh that would look like a bad-token event to the backend.
|
|
100
|
+
const hasRefreshableSession = Boolean(refreshConfig.refreshFunction || _roomStore.store.getState().chatSettingStore.user?.refreshToken);
|
|
101
|
+
if (!hasRefreshableSession) {
|
|
102
|
+
return Promise.reject(error);
|
|
156
103
|
}
|
|
157
|
-
|
|
104
|
+
originalRequest._retry = true;
|
|
158
105
|
try {
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
-
originalRequest.headers
|
|
164
|
-
|
|
106
|
+
// One shared rotation for every 401 in flight — `refreshAuthTokens`
|
|
107
|
+
// dedupes internally, which replaces the old isRefreshing/
|
|
108
|
+
// failedQueue machinery entirely.
|
|
109
|
+
const tokens = await (0, _authRefresh.refreshAuthTokens)();
|
|
110
|
+
originalRequest.headers = originalRequest.headers || {};
|
|
111
|
+
originalRequest.headers.Authorization = tokens.token;
|
|
165
112
|
return http(originalRequest);
|
|
166
113
|
} catch (refreshErr) {
|
|
167
|
-
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
//
|
|
114
|
+
// Only a genuinely dead session logs the user out. A network
|
|
115
|
+
// blip, a 5xx, or a REFRESH_IN_PROGRESS race must leave the
|
|
116
|
+
// session alone — logging out on those is exactly the mass-logout
|
|
117
|
+
// failure mode the new backend scheme would otherwise cause.
|
|
118
|
+
if ((0, _authRefresh.isRefreshFatalError)(refreshErr)) {
|
|
119
|
+
_roomStore.store.dispatch((0, _chatSettingsSlice.logout)());
|
|
120
|
+
}
|
|
171
121
|
return Promise.reject(refreshErr);
|
|
172
122
|
}
|
|
173
123
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_axios","_interopRequireDefault","require","_roomStore","_chatSettingsSlice","_devLogger","e","__esModule","default","DEFAULT_BASE_URL","currentBaseURL","currentAppToken","http","axios","create","baseURL","installAxiosCapture","
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireDefault","require","_roomStore","_chatSettingsSlice","_devLogger","_authRefresh","e","__esModule","default","DEFAULT_BASE_URL","currentBaseURL","currentAppToken","http","axios","create","baseURL","installAxiosCapture","stripApiVersion","baseUrl","replace","normalizeApiPath","path","test","startsWith","exports","setBaseURL","appToken","normalized","defaults","getCurrentAppToken","getCurrentBaseURL","refresh","refreshAuthTokens","interceptors","response","use","error","originalRequest","config","status","Promise","reject","_retry","url","refreshConfig","store","getState","chatSettingStore","refreshTokens","enabled","hasRefreshableSession","Boolean","refreshFunction","user","refreshToken","tokens","headers","Authorization","token","refreshErr","isRefreshFatalError","dispatch","logout","_default"],"sourceRoot":"../../../src","sources":["networking/apiClient.ts"],"mappings":"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","ignoreList":[]}
|