@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.cjs CHANGED
@@ -41,7 +41,7 @@ var import_react2 = require("react");
41
41
 
42
42
  // src/wire.ts
43
43
  var WIRE_VERSION = 1;
44
- var SDK_VERSION = "0.2.17";
44
+ var SDK_VERSION = "0.2.18";
45
45
  var DEFAULT_ISSUER = "https://id.zoreal.com";
46
46
  var POLL_INTERVAL_MS = 2e3;
47
47
  var POLL_INTERVAL_ENROLLING_MS = 5e3;
@@ -1727,6 +1727,8 @@ var sleep = (ms, signal) => new Promise((resolve, reject) => {
1727
1727
  }, ms);
1728
1728
  signal?.addEventListener("abort", onAbort, { once: true });
1729
1729
  });
1730
+ var SETTLE_MS = 1500;
1731
+ var NETWORK_FAILURES_TOLERATED = 4;
1730
1732
  async function pollUntilApproved(issuer, requestId, onState, signal, options = {}) {
1731
1733
  let last = { status: "pending" };
1732
1734
  const emit = (state) => {
@@ -1755,11 +1757,27 @@ async function pollUntilApproved(issuer, requestId, onState, signal, options = {
1755
1757
  })().catch(() => {
1756
1758
  });
1757
1759
  };
1760
+ const settlingUntil = options.tolerateUnknownUntil ?? 0;
1761
+ let networkFailures = 0;
1758
1762
  try {
1763
+ if (settlingUntil > Date.now()) await sleep(SETTLE_MS, signal);
1759
1764
  for (; ; ) {
1760
- const response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
1761
- signal
1762
- });
1765
+ let response;
1766
+ try {
1767
+ response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
1768
+ signal
1769
+ });
1770
+ networkFailures = 0;
1771
+ } catch (e) {
1772
+ if (e instanceof DOMException && e.name === "AbortError") throw e;
1773
+ networkFailures += 1;
1774
+ if (settlingUntil > Date.now() || networkFailures <= NETWORK_FAILURES_TOLERATED) {
1775
+ emit({ ...last, status: last.status });
1776
+ await sleep(POLL_INTERVAL_MS, signal);
1777
+ continue;
1778
+ }
1779
+ throw e;
1780
+ }
1763
1781
  const body = await parseJson(response);
1764
1782
  if (response.status === 404 && (options.tolerateUnknownUntil ?? 0) > Date.now()) {
1765
1783
  emit({ status: "pending" });