@arbidocs/sdk 0.3.1 → 0.3.3
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.cjs +39 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +39 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -948,6 +948,39 @@ var DEFAULT_WORKSPACE_KEY_URL_CONFIG = {
|
|
|
948
948
|
"/api/tag/"
|
|
949
949
|
]
|
|
950
950
|
};
|
|
951
|
+
var RETRYABLE_CODES = /* @__PURE__ */ new Set([
|
|
952
|
+
"ECONNREFUSED",
|
|
953
|
+
"ECONNRESET",
|
|
954
|
+
"ETIMEDOUT",
|
|
955
|
+
"UND_ERR_CONNECT_TIMEOUT"
|
|
956
|
+
]);
|
|
957
|
+
var MAX_RETRIES = 3;
|
|
958
|
+
var BASE_DELAY_MS = 200;
|
|
959
|
+
function isRetryableError(err) {
|
|
960
|
+
if (!(err instanceof Error)) return false;
|
|
961
|
+
const cause = err.cause;
|
|
962
|
+
if (cause?.code && RETRYABLE_CODES.has(cause.code)) return true;
|
|
963
|
+
const msg = err.message || "";
|
|
964
|
+
return RETRYABLE_CODES.has(msg) || msg.includes("ECONNREFUSED") || msg.includes("ECONNRESET");
|
|
965
|
+
}
|
|
966
|
+
function createRetryFetch() {
|
|
967
|
+
return async (input, init) => {
|
|
968
|
+
let lastError;
|
|
969
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
970
|
+
try {
|
|
971
|
+
return await globalThis.fetch(input, init);
|
|
972
|
+
} catch (err) {
|
|
973
|
+
lastError = err;
|
|
974
|
+
if (attempt < MAX_RETRIES && isRetryableError(err)) {
|
|
975
|
+
await new Promise((r) => setTimeout(r, BASE_DELAY_MS * 2 ** attempt));
|
|
976
|
+
continue;
|
|
977
|
+
}
|
|
978
|
+
throw err;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
throw lastError;
|
|
982
|
+
};
|
|
983
|
+
}
|
|
951
984
|
function createArbiClient(options) {
|
|
952
985
|
const {
|
|
953
986
|
baseUrl,
|
|
@@ -958,6 +991,7 @@ function createArbiClient(options) {
|
|
|
958
991
|
ssoTokenProvider = null,
|
|
959
992
|
onReloginSuccess
|
|
960
993
|
} = options;
|
|
994
|
+
const retryFetch = createRetryFetch();
|
|
961
995
|
const session = createSessionManager();
|
|
962
996
|
const tokenProvider = createTokenProvider(session);
|
|
963
997
|
const workspaceKeyProvider = createWorkspaceKeyProvider(session);
|
|
@@ -974,7 +1008,8 @@ function createArbiClient(options) {
|
|
|
974
1008
|
async login(payload) {
|
|
975
1009
|
const rawFetch = createFetchClient__default.default({
|
|
976
1010
|
baseUrl,
|
|
977
|
-
credentials
|
|
1011
|
+
credentials,
|
|
1012
|
+
fetch: retryFetch
|
|
978
1013
|
});
|
|
979
1014
|
const response = await rawFetch.POST("/api/user/login", {
|
|
980
1015
|
body: {
|
|
@@ -998,7 +1033,7 @@ function createArbiClient(options) {
|
|
|
998
1033
|
};
|
|
999
1034
|
const workspaceKeyRefreshProvider = {
|
|
1000
1035
|
async getWrappedKey(accessToken, workspaceId) {
|
|
1001
|
-
const workspacesResponse = await
|
|
1036
|
+
const workspacesResponse = await retryFetch(`${baseUrl}/api/user/workspaces`, {
|
|
1002
1037
|
method: "GET",
|
|
1003
1038
|
headers: {
|
|
1004
1039
|
Authorization: `Bearer ${accessToken}`,
|
|
@@ -1025,7 +1060,8 @@ function createArbiClient(options) {
|
|
|
1025
1060
|
});
|
|
1026
1061
|
const fetchClient = createFetchClient__default.default({
|
|
1027
1062
|
baseUrl,
|
|
1028
|
-
credentials
|
|
1063
|
+
credentials,
|
|
1064
|
+
fetch: retryFetch
|
|
1029
1065
|
});
|
|
1030
1066
|
fetchClient.use(createBearerAuthMiddleware({ tokenProvider }));
|
|
1031
1067
|
fetchClient.use(
|