librechat-data-provider 0.2.0 → 0.2.5
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/dist/index.es.js +67 -60
- package/dist/index.js +67 -59
- package/package.json +2 -2
- package/src/api-endpoints.ts +1 -1
- package/src/data-service.ts +3 -3
- package/src/index.ts +1 -1
- package/src/react-query-service.ts +19 -9
- package/src/request.ts +34 -32
- package/src/types.ts +2 -1
- package/types/api-endpoints.d.ts +1 -1
- package/types/data-service.d.ts +3 -3
- package/types/index.d.ts +1 -1
- package/types/react-query-service.d.ts +3 -3
- package/types/types.d.ts +2 -1
package/dist/index.es.js
CHANGED
|
@@ -94,49 +94,62 @@ var processQueue = function (error, token) {
|
|
|
94
94
|
});
|
|
95
95
|
failedQueue = [];
|
|
96
96
|
};
|
|
97
|
-
axios.interceptors.response.use(function (response) { return response; }, function (error) {
|
|
98
|
-
var originalRequest
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
.
|
|
97
|
+
axios.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
98
|
+
var originalRequest, token, err_1, token, err_2;
|
|
99
|
+
var _a;
|
|
100
|
+
return __generator(this, function (_b) {
|
|
101
|
+
switch (_b.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
originalRequest = error.config;
|
|
104
|
+
if (!(error.response.status === 401 && !originalRequest._retry)) return [3 /*break*/, 13];
|
|
105
|
+
originalRequest._retry = true;
|
|
106
|
+
if (!isRefreshing) return [3 /*break*/, 5];
|
|
107
|
+
_b.label = 1;
|
|
108
|
+
case 1:
|
|
109
|
+
_b.trys.push([1, 4, , 5]);
|
|
110
|
+
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
111
|
+
failedQueue.push({ resolve: resolve, reject: reject });
|
|
112
|
+
})];
|
|
113
|
+
case 2:
|
|
114
|
+
token = _b.sent();
|
|
105
115
|
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
106
|
-
return axios(originalRequest);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
.
|
|
116
|
+
return [4 /*yield*/, axios(originalRequest)];
|
|
117
|
+
case 3: return [2 /*return*/, _b.sent()];
|
|
118
|
+
case 4:
|
|
119
|
+
err_1 = _b.sent();
|
|
120
|
+
return [2 /*return*/, Promise.reject(err_1)];
|
|
121
|
+
case 5:
|
|
122
|
+
isRefreshing = true;
|
|
123
|
+
_b.label = 6;
|
|
124
|
+
case 6:
|
|
125
|
+
_b.trys.push([6, 11, 12, 13]);
|
|
126
|
+
return [4 /*yield*/, refreshToken(
|
|
127
|
+
// Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request
|
|
128
|
+
((_a = originalRequest.url) === null || _a === void 0 ? void 0 : _a.includes('api/auth/refresh')) ? true : false)];
|
|
129
|
+
case 7:
|
|
130
|
+
token = (_b.sent()).token;
|
|
131
|
+
if (!token) return [3 /*break*/, 9];
|
|
132
|
+
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
133
|
+
setTokenHeader(token);
|
|
134
|
+
window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));
|
|
135
|
+
processQueue(null, token);
|
|
136
|
+
return [4 /*yield*/, axios(originalRequest)];
|
|
137
|
+
case 8: return [2 /*return*/, _b.sent()];
|
|
138
|
+
case 9:
|
|
139
|
+
window.location.href = '/login';
|
|
140
|
+
_b.label = 10;
|
|
141
|
+
case 10: return [3 /*break*/, 13];
|
|
142
|
+
case 11:
|
|
143
|
+
err_2 = _b.sent();
|
|
144
|
+
processQueue(err_2, null);
|
|
145
|
+
return [2 /*return*/, Promise.reject(err_2)];
|
|
146
|
+
case 12:
|
|
134
147
|
isRefreshing = false;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
});
|
|
148
|
+
return [7 /*endfinally*/];
|
|
149
|
+
case 13: return [2 /*return*/, Promise.reject(error)];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}); });
|
|
140
153
|
function _get(url, options) {
|
|
141
154
|
return __awaiter(this, void 0, void 0, function () {
|
|
142
155
|
var response;
|
|
@@ -273,7 +286,7 @@ var login$1 = function () { return '/api/auth/login'; };
|
|
|
273
286
|
var logout$1 = function () { return '/api/auth/logout'; };
|
|
274
287
|
var register$1 = function () { return '/api/auth/register'; };
|
|
275
288
|
var loginGoogle = function () { return '/api/auth/google'; };
|
|
276
|
-
var refreshToken$1 = function () { return
|
|
289
|
+
var refreshToken$1 = function (retry) { return "/api/auth/refresh".concat(retry ? '?retry=true' : ''); };
|
|
277
290
|
var requestPasswordReset$1 = function () { return '/api/auth/requestPasswordReset'; };
|
|
278
291
|
var resetPassword$1 = function () { return '/api/auth/resetPassword'; };
|
|
279
292
|
var plugins = function () { return '/api/plugins'; };
|
|
@@ -350,9 +363,11 @@ var searchConversations = function (q, pageNumber) { return __awaiter(void 0, vo
|
|
|
350
363
|
var getAIEndpoints = function () {
|
|
351
364
|
return request.get(aiEndpoints());
|
|
352
365
|
};
|
|
353
|
-
var getModels = function () {
|
|
354
|
-
return
|
|
355
|
-
|
|
366
|
+
var getModels = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
367
|
+
return __generator(this, function (_a) {
|
|
368
|
+
return [2 /*return*/, request.get(models())];
|
|
369
|
+
});
|
|
370
|
+
}); };
|
|
356
371
|
var updateTokenCount = function (text) {
|
|
357
372
|
return request.post(tokenizer(), { arg: text });
|
|
358
373
|
};
|
|
@@ -365,7 +380,7 @@ var logout = function () {
|
|
|
365
380
|
var register = function (payload) {
|
|
366
381
|
return request.post(register$1(), payload);
|
|
367
382
|
};
|
|
368
|
-
var refreshToken = function () { return request.post(refreshToken$1()); };
|
|
383
|
+
var refreshToken = function (retry) { return request.post(refreshToken$1(retry)); };
|
|
369
384
|
var userKeyQuery = function (name) {
|
|
370
385
|
return request.get(userKeyQuery$1(name));
|
|
371
386
|
};
|
|
@@ -702,7 +717,7 @@ var getResponseSender = function (endpointOption) {
|
|
|
702
717
|
|
|
703
718
|
var QueryKeys;
|
|
704
719
|
(function (QueryKeys) {
|
|
705
|
-
QueryKeys["messages"] = "
|
|
720
|
+
QueryKeys["messages"] = "messages";
|
|
706
721
|
QueryKeys["allConversations"] = "allConversations";
|
|
707
722
|
QueryKeys["conversation"] = "conversation";
|
|
708
723
|
QueryKeys["searchEnabled"] = "searchEnabled";
|
|
@@ -815,19 +830,11 @@ var useGetConversationsQuery = function (pageNumber, config) {
|
|
|
815
830
|
var useGetSearchEnabledQuery = function (config) {
|
|
816
831
|
return useQuery([QueryKeys.searchEnabled], function () { return getSearchEnabled(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
817
832
|
};
|
|
818
|
-
var useGetEndpointsQuery = function () {
|
|
819
|
-
return useQuery([QueryKeys.endpoints], function () { return getAIEndpoints(); }, {
|
|
820
|
-
refetchOnWindowFocus: false,
|
|
821
|
-
refetchOnReconnect: false,
|
|
822
|
-
refetchOnMount: false,
|
|
823
|
-
});
|
|
833
|
+
var useGetEndpointsQuery = function (config) {
|
|
834
|
+
return useQuery([QueryKeys.endpoints], function () { return getAIEndpoints(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
824
835
|
};
|
|
825
|
-
var useGetModelsQuery = function () {
|
|
826
|
-
return useQuery([QueryKeys.models], function () { return getModels(); }, {
|
|
827
|
-
refetchOnWindowFocus: false,
|
|
828
|
-
refetchOnReconnect: false,
|
|
829
|
-
refetchOnMount: false,
|
|
830
|
-
});
|
|
836
|
+
var useGetModelsQuery = function (config) {
|
|
837
|
+
return useQuery([QueryKeys.models], function () { return getModels(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
831
838
|
};
|
|
832
839
|
var useCreatePresetMutation = function () {
|
|
833
840
|
var queryClient = useQueryClient();
|
|
@@ -1205,4 +1212,4 @@ function createPayload(submission) {
|
|
|
1205
1212
|
return { server: server, payload: payload };
|
|
1206
1213
|
}
|
|
1207
1214
|
|
|
1208
|
-
export { EModelEndpoint, QueryKeys, SSE, abortRequestWithMessage, anthropicSchema, bingAISchema, chatGPTBrowserSchema, clearAllConversations, createPayload, createPreset, deleteConversation, deletePreset, eModelEndpointSchema, getAIEndpoints, getAvailablePlugins, getConversationById, getConversations, getLoginGoogle, getMessagesByConvoId, getModels, getPresets, getResponseSender, getSearchEnabled, getStartupConfig, getUser, getUserBalance, googleSchema, gptPluginsSchema, login, logout, openAISchema, parseConvo, refreshToken, register, requestPasswordReset, resetPassword, revokeAllUserKeys, revokeUserKey, searchConversations, setAcceptLanguageHeader, setTokenHeader, tAgentOptionsSchema, tConversationSchema, tExampleSchema, tMessageSchema, tPluginAuthConfigSchema, tPluginSchema, tPresetSchema, updateConversation, updateMessage, updatePreset, updateTokenCount, updateUserKey, updateUserPlugins, useAbortRequestWithMessage, useAvailablePluginsQuery, useClearConversationsMutation, useCreatePresetMutation, useDeleteConversationMutation, useDeletePresetMutation, useGetConversationByIdMutation, useGetConversationByIdQuery, useGetConversationsQuery, useGetEndpointsQuery, useGetMessagesByConvoId, useGetModelsQuery, useGetPresetsQuery, useGetSearchEnabledQuery, useGetStartupConfig, useGetUserBalance, useGetUserQuery, useLoginUserMutation, useLogoutUserMutation, useRefreshTokenMutation, useRegisterUserMutation, useRequestPasswordResetMutation, useResetPasswordMutation, useRevokeAllUserKeysMutation, useRevokeUserKeyMutation, useSearchQuery, useUpdateConversationMutation, useUpdateMessageMutation, useUpdatePresetMutation, useUpdateTokenCountMutation, useUpdateUserKeysMutation, useUpdateUserPluginsMutation, useUserKeyQuery, userKeyQuery };
|
|
1215
|
+
export { EModelEndpoint, QueryKeys, SSE, abortRequestWithMessage, anthropicSchema, bingAISchema, chatGPTBrowserSchema, clearAllConversations, createPayload, createPreset, deleteConversation, deletePreset, eModelEndpointSchema, getAIEndpoints, getAvailablePlugins, getConversationById, getConversations, getLoginGoogle, getMessagesByConvoId, getModels, getPresets, getResponseSender, getSearchEnabled, getStartupConfig, getUser, getUserBalance, googleSchema, gptPluginsSchema, login, logout, openAISchema, parseConvo, refreshToken, register, request, requestPasswordReset, resetPassword, revokeAllUserKeys, revokeUserKey, searchConversations, setAcceptLanguageHeader, setTokenHeader, tAgentOptionsSchema, tConversationSchema, tExampleSchema, tMessageSchema, tPluginAuthConfigSchema, tPluginSchema, tPresetSchema, updateConversation, updateMessage, updatePreset, updateTokenCount, updateUserKey, updateUserPlugins, useAbortRequestWithMessage, useAvailablePluginsQuery, useClearConversationsMutation, useCreatePresetMutation, useDeleteConversationMutation, useDeletePresetMutation, useGetConversationByIdMutation, useGetConversationByIdQuery, useGetConversationsQuery, useGetEndpointsQuery, useGetMessagesByConvoId, useGetModelsQuery, useGetPresetsQuery, useGetSearchEnabledQuery, useGetStartupConfig, useGetUserBalance, useGetUserQuery, useLoginUserMutation, useLogoutUserMutation, useRefreshTokenMutation, useRegisterUserMutation, useRequestPasswordResetMutation, useResetPasswordMutation, useRevokeAllUserKeysMutation, useRevokeUserKeyMutation, useSearchQuery, useUpdateConversationMutation, useUpdateMessageMutation, useUpdatePresetMutation, useUpdateTokenCountMutation, useUpdateUserKeysMutation, useUpdateUserPluginsMutation, useUserKeyQuery, userKeyQuery };
|
package/dist/index.js
CHANGED
|
@@ -96,49 +96,62 @@ var processQueue = function (error, token) {
|
|
|
96
96
|
});
|
|
97
97
|
failedQueue = [];
|
|
98
98
|
};
|
|
99
|
-
axios.interceptors.response.use(function (response) { return response; }, function (error) {
|
|
100
|
-
var originalRequest
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
.
|
|
99
|
+
axios.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
100
|
+
var originalRequest, token, err_1, token, err_2;
|
|
101
|
+
var _a;
|
|
102
|
+
return __generator(this, function (_b) {
|
|
103
|
+
switch (_b.label) {
|
|
104
|
+
case 0:
|
|
105
|
+
originalRequest = error.config;
|
|
106
|
+
if (!(error.response.status === 401 && !originalRequest._retry)) return [3 /*break*/, 13];
|
|
107
|
+
originalRequest._retry = true;
|
|
108
|
+
if (!isRefreshing) return [3 /*break*/, 5];
|
|
109
|
+
_b.label = 1;
|
|
110
|
+
case 1:
|
|
111
|
+
_b.trys.push([1, 4, , 5]);
|
|
112
|
+
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
113
|
+
failedQueue.push({ resolve: resolve, reject: reject });
|
|
114
|
+
})];
|
|
115
|
+
case 2:
|
|
116
|
+
token = _b.sent();
|
|
107
117
|
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
108
|
-
return axios(originalRequest);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
.
|
|
118
|
+
return [4 /*yield*/, axios(originalRequest)];
|
|
119
|
+
case 3: return [2 /*return*/, _b.sent()];
|
|
120
|
+
case 4:
|
|
121
|
+
err_1 = _b.sent();
|
|
122
|
+
return [2 /*return*/, Promise.reject(err_1)];
|
|
123
|
+
case 5:
|
|
124
|
+
isRefreshing = true;
|
|
125
|
+
_b.label = 6;
|
|
126
|
+
case 6:
|
|
127
|
+
_b.trys.push([6, 11, 12, 13]);
|
|
128
|
+
return [4 /*yield*/, refreshToken(
|
|
129
|
+
// Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request
|
|
130
|
+
((_a = originalRequest.url) === null || _a === void 0 ? void 0 : _a.includes('api/auth/refresh')) ? true : false)];
|
|
131
|
+
case 7:
|
|
132
|
+
token = (_b.sent()).token;
|
|
133
|
+
if (!token) return [3 /*break*/, 9];
|
|
134
|
+
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
135
|
+
setTokenHeader(token);
|
|
136
|
+
window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));
|
|
137
|
+
processQueue(null, token);
|
|
138
|
+
return [4 /*yield*/, axios(originalRequest)];
|
|
139
|
+
case 8: return [2 /*return*/, _b.sent()];
|
|
140
|
+
case 9:
|
|
141
|
+
window.location.href = '/login';
|
|
142
|
+
_b.label = 10;
|
|
143
|
+
case 10: return [3 /*break*/, 13];
|
|
144
|
+
case 11:
|
|
145
|
+
err_2 = _b.sent();
|
|
146
|
+
processQueue(err_2, null);
|
|
147
|
+
return [2 /*return*/, Promise.reject(err_2)];
|
|
148
|
+
case 12:
|
|
136
149
|
isRefreshing = false;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
});
|
|
150
|
+
return [7 /*endfinally*/];
|
|
151
|
+
case 13: return [2 /*return*/, Promise.reject(error)];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}); });
|
|
142
155
|
function _get(url, options) {
|
|
143
156
|
return __awaiter(this, void 0, void 0, function () {
|
|
144
157
|
var response;
|
|
@@ -275,7 +288,7 @@ var login$1 = function () { return '/api/auth/login'; };
|
|
|
275
288
|
var logout$1 = function () { return '/api/auth/logout'; };
|
|
276
289
|
var register$1 = function () { return '/api/auth/register'; };
|
|
277
290
|
var loginGoogle = function () { return '/api/auth/google'; };
|
|
278
|
-
var refreshToken$1 = function () { return
|
|
291
|
+
var refreshToken$1 = function (retry) { return "/api/auth/refresh".concat(retry ? '?retry=true' : ''); };
|
|
279
292
|
var requestPasswordReset$1 = function () { return '/api/auth/requestPasswordReset'; };
|
|
280
293
|
var resetPassword$1 = function () { return '/api/auth/resetPassword'; };
|
|
281
294
|
var plugins = function () { return '/api/plugins'; };
|
|
@@ -352,9 +365,11 @@ var searchConversations = function (q, pageNumber) { return __awaiter(void 0, vo
|
|
|
352
365
|
var getAIEndpoints = function () {
|
|
353
366
|
return request.get(aiEndpoints());
|
|
354
367
|
};
|
|
355
|
-
var getModels = function () {
|
|
356
|
-
return
|
|
357
|
-
|
|
368
|
+
var getModels = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
369
|
+
return __generator(this, function (_a) {
|
|
370
|
+
return [2 /*return*/, request.get(models())];
|
|
371
|
+
});
|
|
372
|
+
}); };
|
|
358
373
|
var updateTokenCount = function (text) {
|
|
359
374
|
return request.post(tokenizer(), { arg: text });
|
|
360
375
|
};
|
|
@@ -367,7 +382,7 @@ var logout = function () {
|
|
|
367
382
|
var register = function (payload) {
|
|
368
383
|
return request.post(register$1(), payload);
|
|
369
384
|
};
|
|
370
|
-
var refreshToken = function () { return request.post(refreshToken$1()); };
|
|
385
|
+
var refreshToken = function (retry) { return request.post(refreshToken$1(retry)); };
|
|
371
386
|
var userKeyQuery = function (name) {
|
|
372
387
|
return request.get(userKeyQuery$1(name));
|
|
373
388
|
};
|
|
@@ -704,7 +719,7 @@ var getResponseSender = function (endpointOption) {
|
|
|
704
719
|
|
|
705
720
|
exports.QueryKeys = void 0;
|
|
706
721
|
(function (QueryKeys) {
|
|
707
|
-
QueryKeys["messages"] = "
|
|
722
|
+
QueryKeys["messages"] = "messages";
|
|
708
723
|
QueryKeys["allConversations"] = "allConversations";
|
|
709
724
|
QueryKeys["conversation"] = "conversation";
|
|
710
725
|
QueryKeys["searchEnabled"] = "searchEnabled";
|
|
@@ -817,19 +832,11 @@ var useGetConversationsQuery = function (pageNumber, config) {
|
|
|
817
832
|
var useGetSearchEnabledQuery = function (config) {
|
|
818
833
|
return reactQuery.useQuery([exports.QueryKeys.searchEnabled], function () { return getSearchEnabled(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
819
834
|
};
|
|
820
|
-
var useGetEndpointsQuery = function () {
|
|
821
|
-
return reactQuery.useQuery([exports.QueryKeys.endpoints], function () { return getAIEndpoints(); }, {
|
|
822
|
-
refetchOnWindowFocus: false,
|
|
823
|
-
refetchOnReconnect: false,
|
|
824
|
-
refetchOnMount: false,
|
|
825
|
-
});
|
|
835
|
+
var useGetEndpointsQuery = function (config) {
|
|
836
|
+
return reactQuery.useQuery([exports.QueryKeys.endpoints], function () { return getAIEndpoints(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
826
837
|
};
|
|
827
|
-
var useGetModelsQuery = function () {
|
|
828
|
-
return reactQuery.useQuery([exports.QueryKeys.models], function () { return getModels(); }, {
|
|
829
|
-
refetchOnWindowFocus: false,
|
|
830
|
-
refetchOnReconnect: false,
|
|
831
|
-
refetchOnMount: false,
|
|
832
|
-
});
|
|
838
|
+
var useGetModelsQuery = function (config) {
|
|
839
|
+
return reactQuery.useQuery([exports.QueryKeys.models], function () { return getModels(); }, __assign({ refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }, config));
|
|
833
840
|
};
|
|
834
841
|
var useCreatePresetMutation = function () {
|
|
835
842
|
var queryClient = reactQuery.useQueryClient();
|
|
@@ -1239,6 +1246,7 @@ exports.openAISchema = openAISchema;
|
|
|
1239
1246
|
exports.parseConvo = parseConvo;
|
|
1240
1247
|
exports.refreshToken = refreshToken;
|
|
1241
1248
|
exports.register = register;
|
|
1249
|
+
exports.request = request;
|
|
1242
1250
|
exports.requestPasswordReset = requestPasswordReset;
|
|
1243
1251
|
exports.resetPassword = resetPassword;
|
|
1244
1252
|
exports.revokeAllUserKeys = revokeAllUserKeys;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "librechat-data-provider",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "data services for librechat apps",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.es.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@tanstack/react-query": "^4.28.0",
|
|
30
30
|
"axios": "^1.3.4",
|
|
31
|
-
"openai": "
|
|
31
|
+
"openai": "4.11.1",
|
|
32
32
|
"zod": "^3.22.4"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
package/src/api-endpoints.ts
CHANGED
|
@@ -52,7 +52,7 @@ export const loginFacebook = () => '/api/auth/facebook';
|
|
|
52
52
|
|
|
53
53
|
export const loginGoogle = () => '/api/auth/google';
|
|
54
54
|
|
|
55
|
-
export const refreshToken = () =>
|
|
55
|
+
export const refreshToken = (retry?: boolean) => `/api/auth/refresh${retry ? '?retry=true' : ''}`;
|
|
56
56
|
|
|
57
57
|
export const requestPasswordReset = () => '/api/auth/requestPasswordReset';
|
|
58
58
|
|
package/src/data-service.ts
CHANGED
|
@@ -101,11 +101,11 @@ export const searchConversations = async (
|
|
|
101
101
|
return request.get(endpoints.search(q, pageNumber));
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
-
export const getAIEndpoints = () => {
|
|
104
|
+
export const getAIEndpoints = (): Promise<t.TEndpointsConfig> => {
|
|
105
105
|
return request.get(endpoints.aiEndpoints());
|
|
106
106
|
};
|
|
107
107
|
|
|
108
|
-
export const getModels = () => {
|
|
108
|
+
export const getModels = async (): Promise<t.TModelsConfig> => {
|
|
109
109
|
return request.get(endpoints.models());
|
|
110
110
|
};
|
|
111
111
|
|
|
@@ -125,7 +125,7 @@ export const register = (payload: t.TRegisterUser) => {
|
|
|
125
125
|
return request.post(endpoints.register(), payload);
|
|
126
126
|
};
|
|
127
127
|
|
|
128
|
-
export const refreshToken = () => request.post(endpoints.refreshToken());
|
|
128
|
+
export const refreshToken = (retry?: boolean) => request.post(endpoints.refreshToken(retry));
|
|
129
129
|
|
|
130
130
|
export const userKeyQuery = (name: string): Promise<t.TCheckUserKeyResponse> =>
|
|
131
131
|
request.get(endpoints.userKeyQuery(name));
|
package/src/index.ts
CHANGED
|
@@ -11,7 +11,7 @@ import * as s from './schemas';
|
|
|
11
11
|
import * as dataService from './data-service';
|
|
12
12
|
|
|
13
13
|
export enum QueryKeys {
|
|
14
|
-
messages = '
|
|
14
|
+
messages = 'messages',
|
|
15
15
|
allConversations = 'allConversations',
|
|
16
16
|
conversation = 'conversation',
|
|
17
17
|
searchEnabled = 'searchEnabled',
|
|
@@ -230,19 +230,29 @@ export const useGetSearchEnabledQuery = (
|
|
|
230
230
|
});
|
|
231
231
|
};
|
|
232
232
|
|
|
233
|
-
export const useGetEndpointsQuery =
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
233
|
+
export const useGetEndpointsQuery = <TData = t.TEndpointsConfig>(
|
|
234
|
+
config?: UseQueryOptions<t.TEndpointsConfig, unknown, TData>,
|
|
235
|
+
): QueryObserverResult<TData> => {
|
|
236
|
+
return useQuery<t.TEndpointsConfig, unknown, TData>(
|
|
237
|
+
[QueryKeys.endpoints],
|
|
238
|
+
() => dataService.getAIEndpoints(),
|
|
239
|
+
{
|
|
240
|
+
refetchOnWindowFocus: false,
|
|
241
|
+
refetchOnReconnect: false,
|
|
242
|
+
refetchOnMount: false,
|
|
243
|
+
...config,
|
|
244
|
+
},
|
|
245
|
+
);
|
|
239
246
|
};
|
|
240
247
|
|
|
241
|
-
export const useGetModelsQuery = (
|
|
242
|
-
|
|
248
|
+
export const useGetModelsQuery = (
|
|
249
|
+
config?: UseQueryOptions<t.TModelsConfig>,
|
|
250
|
+
): QueryObserverResult<t.TModelsConfig> => {
|
|
251
|
+
return useQuery<t.TModelsConfig>([QueryKeys.models], () => dataService.getModels(), {
|
|
243
252
|
refetchOnWindowFocus: false,
|
|
244
253
|
refetchOnReconnect: false,
|
|
245
254
|
refetchOnMount: false,
|
|
255
|
+
...config,
|
|
246
256
|
});
|
|
247
257
|
};
|
|
248
258
|
|
package/src/request.ts
CHANGED
|
@@ -21,47 +21,49 @@ const processQueue = (error: AxiosError | null, token: string | null = null) =>
|
|
|
21
21
|
|
|
22
22
|
axios.interceptors.response.use(
|
|
23
23
|
(response) => response,
|
|
24
|
-
(error) => {
|
|
24
|
+
async (error) => {
|
|
25
25
|
const originalRequest = error.config;
|
|
26
|
+
|
|
26
27
|
if (error.response.status === 401 && !originalRequest._retry) {
|
|
28
|
+
originalRequest._retry = true;
|
|
29
|
+
|
|
27
30
|
if (isRefreshing) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.then((token) => {
|
|
32
|
-
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
33
|
-
return axios(originalRequest);
|
|
34
|
-
})
|
|
35
|
-
.catch((err) => {
|
|
36
|
-
return Promise.reject(err);
|
|
31
|
+
try {
|
|
32
|
+
const token = await new Promise((resolve, reject) => {
|
|
33
|
+
failedQueue.push({ resolve, reject });
|
|
37
34
|
});
|
|
35
|
+
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
36
|
+
return await axios(originalRequest);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
return Promise.reject(err);
|
|
39
|
+
}
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
originalRequest._retry = true;
|
|
41
42
|
isRefreshing = true;
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
refreshToken(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
44
|
+
try {
|
|
45
|
+
const { token } = await refreshToken(
|
|
46
|
+
// Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request
|
|
47
|
+
originalRequest.url?.includes('api/auth/refresh') ? true : false,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
if (token) {
|
|
51
|
+
originalRequest.headers['Authorization'] = 'Bearer ' + token;
|
|
52
|
+
setTokenHeader(token);
|
|
53
|
+
window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));
|
|
54
|
+
processQueue(null, token);
|
|
55
|
+
return await axios(originalRequest);
|
|
56
|
+
} else {
|
|
57
|
+
window.location.href = '/login';
|
|
58
|
+
}
|
|
59
|
+
} catch (err) {
|
|
60
|
+
processQueue(err as AxiosError, null);
|
|
61
|
+
return Promise.reject(err);
|
|
62
|
+
} finally {
|
|
63
|
+
isRefreshing = false;
|
|
64
|
+
}
|
|
64
65
|
}
|
|
66
|
+
|
|
65
67
|
return Promise.reject(error);
|
|
66
68
|
},
|
|
67
69
|
);
|
package/src/types.ts
CHANGED
|
@@ -120,7 +120,7 @@ export type TConfig = {
|
|
|
120
120
|
availableModels?: [];
|
|
121
121
|
userProvide?: boolean | null;
|
|
122
122
|
availableTools?: [];
|
|
123
|
-
plugins?:
|
|
123
|
+
plugins?: Record<string, string>;
|
|
124
124
|
azure?: boolean;
|
|
125
125
|
};
|
|
126
126
|
|
|
@@ -181,6 +181,7 @@ export type TStartupConfig = {
|
|
|
181
181
|
socialLoginEnabled: boolean;
|
|
182
182
|
emailEnabled: boolean;
|
|
183
183
|
checkBalance: boolean;
|
|
184
|
+
customFooter?: string;
|
|
184
185
|
};
|
|
185
186
|
|
|
186
187
|
export type TRefreshTokenResponse = {
|
package/types/api-endpoints.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare const logout: () => string;
|
|
|
23
23
|
export declare const register: () => string;
|
|
24
24
|
export declare const loginFacebook: () => string;
|
|
25
25
|
export declare const loginGoogle: () => string;
|
|
26
|
-
export declare const refreshToken: () => string;
|
|
26
|
+
export declare const refreshToken: (retry?: boolean) => string;
|
|
27
27
|
export declare const requestPasswordReset: () => string;
|
|
28
28
|
export declare const resetPassword: () => string;
|
|
29
29
|
export declare const plugins: () => string;
|
package/types/data-service.d.ts
CHANGED
|
@@ -19,13 +19,13 @@ export declare function getSearchEnabled(): Promise<boolean>;
|
|
|
19
19
|
export declare function getUser(): Promise<t.TUser>;
|
|
20
20
|
export declare function getUserBalance(): Promise<string>;
|
|
21
21
|
export declare const searchConversations: (q: string, pageNumber: string) => Promise<t.TSearchResults>;
|
|
22
|
-
export declare const getAIEndpoints: () => Promise<
|
|
23
|
-
export declare const getModels: () => Promise<
|
|
22
|
+
export declare const getAIEndpoints: () => Promise<t.TEndpointsConfig>;
|
|
23
|
+
export declare const getModels: () => Promise<t.TModelsConfig>;
|
|
24
24
|
export declare const updateTokenCount: (text: string) => Promise<any>;
|
|
25
25
|
export declare const login: (payload: t.TLoginUser) => Promise<any>;
|
|
26
26
|
export declare const logout: () => Promise<any>;
|
|
27
27
|
export declare const register: (payload: t.TRegisterUser) => Promise<any>;
|
|
28
|
-
export declare const refreshToken: () => Promise<any>;
|
|
28
|
+
export declare const refreshToken: (retry?: boolean) => Promise<any>;
|
|
29
29
|
export declare const userKeyQuery: (name: string) => Promise<t.TCheckUserKeyResponse>;
|
|
30
30
|
export declare const getLoginGoogle: () => Promise<unknown>;
|
|
31
31
|
export declare const requestPasswordReset: (payload: t.TRequestPasswordReset) => Promise<t.TRequestPasswordResetResponse>;
|
package/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { UseQueryOptions, UseMutationResult, QueryObserverResult } from '@tansta
|
|
|
2
2
|
import * as t from './types';
|
|
3
3
|
import * as s from './schemas';
|
|
4
4
|
export declare enum QueryKeys {
|
|
5
|
-
messages = "
|
|
5
|
+
messages = "messages",
|
|
6
6
|
allConversations = "allConversations",
|
|
7
7
|
conversation = "conversation",
|
|
8
8
|
searchEnabled = "searchEnabled",
|
|
@@ -36,8 +36,8 @@ export declare const useRevokeUserKeyMutation: (name: string) => UseMutationResu
|
|
|
36
36
|
export declare const useRevokeAllUserKeysMutation: () => UseMutationResult<unknown>;
|
|
37
37
|
export declare const useGetConversationsQuery: (pageNumber: string, config?: UseQueryOptions<t.TGetConversationsResponse>) => QueryObserverResult<t.TGetConversationsResponse>;
|
|
38
38
|
export declare const useGetSearchEnabledQuery: (config?: UseQueryOptions<boolean>) => QueryObserverResult<boolean>;
|
|
39
|
-
export declare const useGetEndpointsQuery: () => QueryObserverResult<
|
|
40
|
-
export declare const useGetModelsQuery: () => QueryObserverResult<t.TModelsConfig>;
|
|
39
|
+
export declare const useGetEndpointsQuery: <TData = t.TEndpointsConfig>(config?: UseQueryOptions<t.TEndpointsConfig, unknown, TData, import("@tanstack/react-query").QueryKey> | undefined) => QueryObserverResult<TData>;
|
|
40
|
+
export declare const useGetModelsQuery: (config?: UseQueryOptions<t.TModelsConfig>) => QueryObserverResult<t.TModelsConfig>;
|
|
41
41
|
export declare const useCreatePresetMutation: () => UseMutationResult<s.TPreset[], unknown, s.TPreset, unknown>;
|
|
42
42
|
export declare const useUpdatePresetMutation: () => UseMutationResult<s.TPreset[], unknown, s.TPreset, unknown>;
|
|
43
43
|
export declare const useGetPresetsQuery: (config?: UseQueryOptions<s.TPreset[]>) => QueryObserverResult<s.TPreset[], unknown>;
|
package/types/types.d.ts
CHANGED
|
@@ -101,7 +101,7 @@ export type TConfig = {
|
|
|
101
101
|
availableModels?: [];
|
|
102
102
|
userProvide?: boolean | null;
|
|
103
103
|
availableTools?: [];
|
|
104
|
-
plugins?:
|
|
104
|
+
plugins?: Record<string, string>;
|
|
105
105
|
azure?: boolean;
|
|
106
106
|
};
|
|
107
107
|
export type TModelsConfig = Record<string, string[]>;
|
|
@@ -150,6 +150,7 @@ export type TStartupConfig = {
|
|
|
150
150
|
socialLoginEnabled: boolean;
|
|
151
151
|
emailEnabled: boolean;
|
|
152
152
|
checkBalance: boolean;
|
|
153
|
+
customFooter?: string;
|
|
153
154
|
};
|
|
154
155
|
export type TRefreshTokenResponse = {
|
|
155
156
|
token: string;
|