@calimero-network/mero-js 26.5.0 → 26.6.0

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
@@ -69,11 +69,13 @@ __export(index_exports, {
69
69
  RELAY_NODE_KEY_RETRY_MS: () => RELAY_NODE_KEY_RETRY_MS,
70
70
  REQUEST_PROOF_HEADER: () => REQUEST_PROOF_HEADER,
71
71
  RelayClient: () => RelayClient,
72
+ RelayLoginError: () => RelayLoginError,
72
73
  RelayNotDialableError: () => RelayNotDialableError,
73
74
  RelayObserver: () => RelayObserver,
74
75
  RelayPresenceClient: () => RelayPresenceClient,
75
76
  RelayTransport: () => RelayTransport,
76
77
  RelaysUnavailableError: () => RelaysUnavailableError,
78
+ RequestAuthError: () => RequestAuthError,
77
79
  RpcClient: () => RpcClient,
78
80
  RpcError: () => RpcError,
79
81
  SEALED_CONTENT_TYPE: () => SEALED_CONTENT_TYPE,
@@ -613,6 +615,12 @@ var AuthRevokedError = class extends HTTPError {
613
615
  this.message = `Authentication revoked (${reason}): HTTP ${status} ${statusText}`;
614
616
  }
615
617
  };
618
+ var RequestAuthError = class extends Error {
619
+ constructor() {
620
+ super(...arguments);
621
+ this.name = "RequestAuthError";
622
+ }
623
+ };
616
624
  function headersToRecord(headers) {
617
625
  const record = {};
618
626
  headers.forEach((value, key) => {
@@ -940,6 +948,7 @@ var WebHttpClient = class {
940
948
  headers.Authorization = `Bearer ${token}`;
941
949
  }
942
950
  } catch (error) {
951
+ if (error instanceof RequestAuthError) throw error;
943
952
  }
944
953
  }
945
954
  if (initHeaders) {
@@ -1375,6 +1384,30 @@ function withoutCap(mask, cap) {
1375
1384
  return (mask & ~cap) >>> 0;
1376
1385
  }
1377
1386
 
1387
+ // src/account/relay-login-error.ts
1388
+ var RelayLoginError = class extends RequestAuthError {
1389
+ constructor(relayUrl, cause) {
1390
+ const kind = relayLoginFailureKind(cause);
1391
+ const detail = cause instanceof Error ? cause.message : String(cause);
1392
+ super(
1393
+ kind === "signed-out" ? `the relay ${relayUrl} refused this device's credential (${detail}); sign in again` : `could not log in to the relay ${relayUrl}: ${detail}`
1394
+ );
1395
+ this.name = "RelayLoginError";
1396
+ this.cause = cause;
1397
+ this.relayUrl = relayUrl;
1398
+ this.kind = kind;
1399
+ this.loginStatus = loginStatusOf(cause);
1400
+ }
1401
+ };
1402
+ function relayLoginFailureKind(cause) {
1403
+ const status = loginStatusOf(cause);
1404
+ return status === 401 || status === 403 ? "signed-out" : "unavailable";
1405
+ }
1406
+ function loginStatusOf(cause) {
1407
+ const status = cause?.status;
1408
+ return typeof status === "number" && Number.isFinite(status) ? status : void 0;
1409
+ }
1410
+
1378
1411
  // src/errors/classify.ts
1379
1412
  var RETRYABLE = {
1380
1413
  invalid: false,
@@ -1445,6 +1478,11 @@ function messageOf(err, fallback = "Request failed") {
1445
1478
  return fallback;
1446
1479
  }
1447
1480
  function classifyError(err) {
1481
+ if (err instanceof RelayLoginError) {
1482
+ const status2 = err.loginStatus;
1483
+ const kind2 = err.kind === "signed-out" ? "unauthorized" : status2 ? kindForStatus(status2) : "unreachable";
1484
+ return { kind: kind2, status: status2, retryable: RETRYABLE[kind2], message: messageOf(err) };
1485
+ }
1448
1486
  const status = statusOf(err);
1449
1487
  let kind;
1450
1488
  if (status !== void 0) {
@@ -1499,6 +1537,9 @@ function reasonFromMessage(message) {
1499
1537
  }
1500
1538
  var FINAL_FROM_TEXT = /* @__PURE__ */ new Set(["already-used", "removed"]);
1501
1539
  function classifyJoinFailure(err, message) {
1540
+ if (err instanceof RelayLoginError) {
1541
+ return { reason: err.kind === "signed-out" ? "signed-out" : "node-unreachable", retryable: true };
1542
+ }
1502
1543
  const { kind, status } = classifyError(err);
1503
1544
  const fromText = reasonFromMessage(message);
1504
1545
  const code = refusalCodeOf(err);
@@ -9702,9 +9743,8 @@ function relaySession(s, nodeKey) {
9702
9743
  token = minted.accessToken;
9703
9744
  return token;
9704
9745
  }).catch((e) => {
9705
- console.warn("[mero-js] relay login failed", e);
9706
9746
  token = null;
9707
- return void 0;
9747
+ throw new RelayLoginError(s.relayUrl, e);
9708
9748
  }).finally(() => {
9709
9749
  inflight = null;
9710
9750
  });