@zoreal/oauth2-react 0.2.17 → 0.2.18

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.js CHANGED
@@ -5,7 +5,7 @@ import { createContext, useContext, useMemo, useState as useState2 } from "react
5
5
 
6
6
  // src/wire.ts
7
7
  var WIRE_VERSION = 1;
8
- var SDK_VERSION = "0.2.17";
8
+ var SDK_VERSION = "0.2.18";
9
9
  var DEFAULT_ISSUER = "https://id.zoreal.com";
10
10
  var POLL_INTERVAL_MS = 2e3;
11
11
  var POLL_INTERVAL_ENROLLING_MS = 5e3;
@@ -1691,6 +1691,8 @@ var sleep = (ms, signal) => new Promise((resolve, reject) => {
1691
1691
  }, ms);
1692
1692
  signal?.addEventListener("abort", onAbort, { once: true });
1693
1693
  });
1694
+ var SETTLE_MS = 1500;
1695
+ var NETWORK_FAILURES_TOLERATED = 4;
1694
1696
  async function pollUntilApproved(issuer, requestId, onState, signal, options = {}) {
1695
1697
  let last = { status: "pending" };
1696
1698
  const emit = (state) => {
@@ -1719,11 +1721,27 @@ async function pollUntilApproved(issuer, requestId, onState, signal, options = {
1719
1721
  })().catch(() => {
1720
1722
  });
1721
1723
  };
1724
+ const settlingUntil = options.tolerateUnknownUntil ?? 0;
1725
+ let networkFailures = 0;
1722
1726
  try {
1727
+ if (settlingUntil > Date.now()) await sleep(SETTLE_MS, signal);
1723
1728
  for (; ; ) {
1724
- const response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
1725
- signal
1726
- });
1729
+ let response;
1730
+ try {
1731
+ response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
1732
+ signal
1733
+ });
1734
+ networkFailures = 0;
1735
+ } catch (e) {
1736
+ if (e instanceof DOMException && e.name === "AbortError") throw e;
1737
+ networkFailures += 1;
1738
+ if (settlingUntil > Date.now() || networkFailures <= NETWORK_FAILURES_TOLERATED) {
1739
+ emit({ ...last, status: last.status });
1740
+ await sleep(POLL_INTERVAL_MS, signal);
1741
+ continue;
1742
+ }
1743
+ throw e;
1744
+ }
1727
1745
  const body = await parseJson(response);
1728
1746
  if (response.status === 404 && (options.tolerateUnknownUntil ?? 0) > Date.now()) {
1729
1747
  emit({ status: "pending" });