@zoreal/oauth2-js 0.1.18 → 0.1.19

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
@@ -60,7 +60,7 @@ function unsafeClaims(idToken) {
60
60
 
61
61
  // src/wire.ts
62
62
  var WIRE_VERSION = 1;
63
- var SDK_VERSION = "0.1.18";
63
+ var SDK_VERSION = "0.1.19";
64
64
  var SDK_NAME = "@zoreal/oauth2-js";
65
65
  var DEFAULT_ISSUER = "https://id.zoreal.com";
66
66
  var POLL_INTERVAL_MS = 2e3;
@@ -138,11 +138,30 @@ var sleep = (ms, signal) => new Promise((resolve, reject) => {
138
138
  }, ms);
139
139
  signal?.addEventListener("abort", onAbort, { once: true });
140
140
  });
141
+ var SETTLE_MS = 1500;
142
+ var NETWORK_FAILURES_TOLERATED = 4;
141
143
  async function pollUntilApproved(issuer, requestId, onState, signal, options = {}) {
144
+ const settlingUntil = options.tolerateUnknownUntil ?? 0;
145
+ let networkFailures = 0;
146
+ let last = { status: "pending" };
147
+ if (settlingUntil > Date.now()) await sleep(SETTLE_MS, signal);
142
148
  for (; ; ) {
143
- const response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
144
- signal
145
- });
149
+ let response;
150
+ try {
151
+ response = await fetch(`${issuer}/pair/${encodeURIComponent(requestId)}/status`, {
152
+ signal
153
+ });
154
+ networkFailures = 0;
155
+ } catch (e) {
156
+ if (e instanceof DOMException && e.name === "AbortError") throw e;
157
+ networkFailures += 1;
158
+ if (settlingUntil > Date.now() || networkFailures <= NETWORK_FAILURES_TOLERATED) {
159
+ onState?.(last);
160
+ await sleep(POLL_INTERVAL_MS, signal);
161
+ continue;
162
+ }
163
+ throw e;
164
+ }
146
165
  const body = await parseJson(response);
147
166
  if (response.status === 404 && (options.tolerateUnknownUntil ?? 0) > Date.now()) {
148
167
  onState?.({ status: "pending" });
@@ -155,11 +174,12 @@ async function pollUntilApproved(issuer, requestId, onState, signal, options = {
155
174
  body.error_description ?? `Pairing status failed (${response.status})`
156
175
  );
157
176
  }
158
- onState?.({
177
+ last = {
159
178
  status: body.status,
160
179
  expiresIn: body.expires_in,
161
180
  enrolmentDeadline: body.enrolment_deadline
162
- });
181
+ };
182
+ onState?.(last);
163
183
  switch (body.status) {
164
184
  case "approved":
165
185
  if (!body.code) {