@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 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 fetch(`${baseUrl}/api/user/workspaces`, {
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(