@calimero-network/mero-js 23.5.0 → 23.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
@@ -35,6 +35,7 @@ __export(index_exports, {
35
35
  EphemeralClient: () => EphemeralClient,
36
36
  HANDSHAKE_PATH: () => HANDSHAKE_PATH,
37
37
  HTTPError: () => HTTPError,
38
+ HaRequestPendingError: () => HaRequestPendingError,
38
39
  INVITED_ROLE: () => INVITED_ROLE,
39
40
  IntentRefusedError: () => IntentRefusedError,
40
41
  LocalStorageTokenStore: () => LocalStorageTokenStore,
@@ -47,6 +48,7 @@ __export(index_exports, {
47
48
  PRESENCE_DOMAIN: () => PRESENCE_DOMAIN,
48
49
  REQUEST_PROOF_HEADER: () => REQUEST_PROOF_HEADER,
49
50
  RelayClient: () => RelayClient,
51
+ RelayNotDialableError: () => RelayNotDialableError,
50
52
  RelayObserver: () => RelayObserver,
51
53
  RelayPresenceClient: () => RelayPresenceClient,
52
54
  RelayTransport: () => RelayTransport,
@@ -58,6 +60,7 @@ __export(index_exports, {
58
60
  SealedTransportError: () => SealedTransportError,
59
61
  SseClient: () => SseClient,
60
62
  StaleTransportKeyError: () => StaleTransportKeyError,
63
+ UnknownRelayError: () => UnknownRelayError,
61
64
  WarrantNonceExhaustedError: () => WarrantNonceExhaustedError,
62
65
  WarrantNonceRouteUnavailableError: () => WarrantNonceRouteUnavailableError,
63
66
  WebHttpClient: () => WebHttpClient,
@@ -3696,6 +3699,7 @@ async function resolveSigner(secret, signer, label2) {
3696
3699
  var DOMAIN = new TextEncoder().encode("calimero.mdma.account-ownership-claim.v1\0");
3697
3700
  var DEFAULT_TTL_MS = 6e4;
3698
3701
  var MAX_TTL_MS = 5 * 6e4;
3702
+ var MAX_RELAY_URL = 1024;
3699
3703
  var ACCOUNT_OWNERSHIP_AUDIENCE = "mdma:enable-ha-namespace";
3700
3704
  var ACCOUNT_HA_AUDIENCE = "mdma:enable-ha-namespace-as-account";
3701
3705
  function base64(bytes) {
@@ -3707,7 +3711,10 @@ var hex32 = (value, what) => {
3707
3711
  if (!/^[0-9a-fA-F]{64}$/.test(value)) throw new Error(`${what} must be 64 hex characters`);
3708
3712
  return value.toLowerCase();
3709
3713
  };
3710
- async function signClaim(input, audience, subject) {
3714
+ async function signClaim(input, audience, subject, relayUrl) {
3715
+ if (relayUrl !== void 0 && !(relayUrl.length > 0 && relayUrl.length <= MAX_RELAY_URL)) {
3716
+ throw new Error(`relayUrl must be a non-empty string of at most ${MAX_RELAY_URL} characters`);
3717
+ }
3711
3718
  const ttl = input.ttlMs ?? DEFAULT_TTL_MS;
3712
3719
  if (!(ttl > 0 && ttl <= MAX_TTL_MS)) throw new Error(`ttlMs must be in (0, ${MAX_TTL_MS}]`);
3713
3720
  const groupId = hex32(input.namespaceId, "namespaceId");
@@ -3726,7 +3733,8 @@ async function signClaim(input, audience, subject) {
3726
3733
  ...subject === void 0 ? {} : { subject },
3727
3734
  nonce: nonce2,
3728
3735
  issued_at_ms: issued,
3729
- expires_at_ms: issued + ttl
3736
+ expires_at_ms: issued + ttl,
3737
+ ...relayUrl === void 0 ? {} : { relay_url: relayUrl }
3730
3738
  })
3731
3739
  );
3732
3740
  const signature = await signer.sign(concat(DOMAIN, payload));
@@ -3737,7 +3745,7 @@ async function signAccountOwnershipClaim(input) {
3737
3745
  return signClaim(input, ACCOUNT_OWNERSHIP_AUDIENCE, input.subject);
3738
3746
  }
3739
3747
  async function signAccountHaClaim(input) {
3740
- return signClaim(input, ACCOUNT_HA_AUDIENCE, void 0);
3748
+ return signClaim(input, ACCOUNT_HA_AUDIENCE, void 0, input.relayUrl);
3741
3749
  }
3742
3750
 
3743
3751
  // src/device-cert/device-cert.ts
@@ -6162,6 +6170,31 @@ var AccountLinkedToSeveralUsersError = class extends AccountHaRefusedError {
6162
6170
  }
6163
6171
  };
6164
6172
  AccountLinkedToSeveralUsersError.CODE = "account_linked_to_several_users";
6173
+ var HaRequestPendingError = class extends AccountHaRefusedError {
6174
+ constructor() {
6175
+ super(...arguments);
6176
+ this.name = "HaRequestPendingError";
6177
+ }
6178
+ };
6179
+ HaRequestPendingError.CODE = "ha_request_pending";
6180
+ var UnknownRelayError = class extends AccountHaRefusedError {
6181
+ constructor() {
6182
+ super(...arguments);
6183
+ this.name = "UnknownRelayError";
6184
+ }
6185
+ };
6186
+ UnknownRelayError.CODE = "unknown_relay";
6187
+ var RelayNotDialableError = class extends AccountHaRefusedError {
6188
+ constructor() {
6189
+ super(...arguments);
6190
+ this.name = "RelayNotDialableError";
6191
+ }
6192
+ };
6193
+ RelayNotDialableError.CODE = "relay_not_dialable";
6194
+ var ACCOUNT_HA_REFUSALS = {
6195
+ 409: [AccountNotLinkedError, AccountLinkedToSeveralUsersError, HaRequestPendingError],
6196
+ 422: [UnknownRelayError, RelayNotDialableError]
6197
+ };
6165
6198
  function conflictCode(bodyText) {
6166
6199
  if (!bodyText) return void 0;
6167
6200
  try {
@@ -6659,7 +6692,8 @@ var CloudClient = class {
6659
6692
  credential: options.credential,
6660
6693
  deviceSecret: options.deviceSecret,
6661
6694
  signer: options.signer,
6662
- ttlMs: options.ttlMs
6695
+ ttlMs: options.ttlMs,
6696
+ relayUrl: options.relayUrl
6663
6697
  });
6664
6698
  const account = options.accountId.toLowerCase();
6665
6699
  const namespace = options.namespaceId.toLowerCase();
@@ -6670,9 +6704,9 @@ var CloudClient = class {
6670
6704
  { body: { ownership_proof: proof }, anonymous: true }
6671
6705
  );
6672
6706
  } catch (err) {
6673
- if (err instanceof HTTPError && err.status === 409) {
6707
+ if (err instanceof HTTPError && ACCOUNT_HA_REFUSALS[err.status]) {
6674
6708
  const code = conflictCode(err.bodyText);
6675
- const Typed = code === AccountNotLinkedError.CODE ? AccountNotLinkedError : code === AccountLinkedToSeveralUsersError.CODE ? AccountLinkedToSeveralUsersError : void 0;
6709
+ const Typed = ACCOUNT_HA_REFUSALS[err.status].find((t) => t.CODE === code);
6676
6710
  if (Typed && code) {
6677
6711
  throw new Typed(code, err.status, err.statusText, err.url, err.headers, err.bodyText);
6678
6712
  }