@calimero-network/mero-js 29.2.0 → 29.3.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.mjs CHANGED
@@ -1418,6 +1418,21 @@ var OriginTaken = class extends CalimeroError {
1418
1418
  this.name = "OriginTaken";
1419
1419
  }
1420
1420
  };
1421
+ var SignUpRefused = class extends CalimeroError {
1422
+ constructor(message, details = {}) {
1423
+ super(403, "SIGN_UP_REFUSED", message, details);
1424
+ this.name = "SignUpRefused";
1425
+ this.reason = signUpRefusal(message);
1426
+ }
1427
+ };
1428
+ function signUpRefusal(message) {
1429
+ if (/invite only/.test(message)) return "invite-only";
1430
+ if (/pre-authorized|sign-up invite/.test(message)) return "closed";
1431
+ if (/unknown invite/.test(message)) return "unknown-invite";
1432
+ if (/invite has expired/.test(message)) return "expired-invite";
1433
+ if (/organization is gone/.test(message)) return "org-gone";
1434
+ return "other";
1435
+ }
1421
1436
  var QuotaExceeded = class extends CalimeroError {
1422
1437
  constructor(message, details = {}) {
1423
1438
  super(429, "QUOTA_EXCEEDED", message, details);
@@ -1492,6 +1507,8 @@ function errorFrom(status, body, retryAfterHeader) {
1492
1507
  return new OriginTaken(message, details);
1493
1508
  case "429 QUOTA_EXCEEDED":
1494
1509
  return new QuotaExceeded(message, details);
1510
+ case "403 SIGN_UP_REFUSED":
1511
+ return new SignUpRefused(message, details);
1495
1512
  case "412 CONFIRM_REQUIRED":
1496
1513
  return new ConfirmRequired(message, details);
1497
1514
  case "413 ARGS_TOO_LARGE":
@@ -2060,23 +2077,33 @@ var CalimeroClient = class _CalimeroClient {
2060
2077
  * origin's relying party (the confirmation's `rpId` is that origin's too)
2061
2078
  * and binds the session to the package the origin is registered for; an
2062
2079
  * unregistered origin is refused with {@link OriginNotRegistered}.
2080
+ *
2081
+ * `invite` ({@link SignUpOptions}) goes on both halves and on the retry,
2082
+ * as the node judges it on each before it spends anything; a sign-up the
2083
+ * cluster's policy refuses, or an unknown, expired or used invite, is
2084
+ * {@link SignUpRefused} (from `begin`, before any passkey is made).
2063
2085
  */
2064
2086
  async signUp(passkey, name, options = {}) {
2065
2087
  const origin = this.pageOrigin(options);
2088
+ const invite = options.invite ? { invite: options.invite } : {};
2066
2089
  const begin = await this.begin(
2067
2090
  "auth/passkey/register/begin",
2068
- origin === void 0 ? { name } : { name, origin },
2091
+ origin === void 0 ? { name, ...invite } : { name, origin, ...invite },
2069
2092
  origin
2070
2093
  );
2071
2094
  const registration = await passkey.create(begin.options);
2072
2095
  const session = await this.postConfirmed(
2073
2096
  "auth/passkey/register/finish",
2074
- { challengeId: begin.challengeId, registration },
2097
+ { challengeId: begin.challengeId, registration, ...invite },
2075
2098
  passkey
2076
2099
  );
2077
2100
  this.useSession(session);
2078
2101
  return session;
2079
2102
  }
2103
+ /** Who may create an account on the cluster (`GET /sign-up`); needs no session. */
2104
+ signUpPolicy() {
2105
+ return this.get("sign-up");
2106
+ }
2080
2107
  /**
2081
2108
  * Sign in with an existing passkey. On a page whose origin is not the
2082
2109
  * cluster's ({@link SignInOptions}), the assertion is made for that
@@ -3373,6 +3400,7 @@ export {
3373
3400
  SEALED_CONTENT_TYPE,
3374
3401
  SEALED_PATH,
3375
3402
  SealedTransportError,
3403
+ SignUpRefused,
3376
3404
  StaleTransportKeyError,
3377
3405
  TrapError,
3378
3406
  UnavailableError,