@calimero-network/mero-react 4.5.0 → 4.6.1

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.d.cts CHANGED
@@ -2,9 +2,9 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { CSSProperties, ReactNode } from 'react';
4
4
  import * as _calimero_network_mero_js from '@calimero-network/mero-js';
5
- import { MeroJs, TokenStore, SetMetadataRequest, AddGroupMembersRequest, CreateContextRequest, CreateGroupInNamespaceRequest, CreateNamespaceRequest, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, DeleteGroupRequest, DeleteNamespaceRequest, DetachContextFromGroupRequest, GroupUpgradeStatusResponseData, GroupContextEntry, GroupInfo, CreateGroupInvitationRequest, MetadataRecord, JoinGroupRequest, JoinNamespaceRequest, MigrationStatus, MigrationStatusRollup, MemberMigrationStatusEntry, MigrateMyEntriesSummary, Namespace, SubgroupEntry, NamespaceIdentity, RegisterGroupSigningKeyRequest, RemoveGroupMembersRequest, ReparentGroupRequest, ResyncContextRequest, RetryGroupUpgradeRequest, SetDefaultCapabilitiesRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, SseEventData, SyncGroupRequest, UpdateGroupSettingsRequest, UpdateMemberRoleRequest, UpgradeGroupRequest, TokenData } from '@calimero-network/mero-js';
5
+ import { MeroJs, TokenStore, SetMetadataRequest, SseEventData, GroupMembershipEventData, AddGroupMembersRequest, CreateContextRequest, CreateGroupInNamespaceRequest, CreateNamespaceRequest, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, DeleteGroupRequest, DeleteNamespaceRequest, DetachContextFromGroupRequest, GroupUpgradeStatusResponseData, GroupContextEntry, GroupInfo, CreateGroupInvitationRequest, MetadataRecord, JoinGroupRequest, JoinNamespaceRequest, MigrationStatus, MigrationStatusRollup, MemberMigrationStatusEntry, MigrateMyEntriesSummary, Namespace, SubgroupEntry, NamespaceIdentity, RegisterGroupSigningKeyRequest, RemoveGroupMembersRequest, ReparentGroupRequest, ResyncContextRequest, RetryGroupUpgradeRequest, SetDefaultCapabilitiesRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, SyncGroupRequest, UpdateGroupSettingsRequest, UpdateMemberRoleRequest, UpgradeGroupRequest, TokenData } from '@calimero-network/mero-js';
6
6
  export * from '@calimero-network/mero-js';
7
- export { CAPABILITIES, MetadataRecord, hasCap, withCap, withoutCap } from '@calimero-network/mero-js';
7
+ export { CAPABILITIES, DEFAULT_LOCAL_NODE_PORTS, DiscoverLocalNodesOptions, MetadataRecord, discoverLocalNodes, hasCap, localNodeUrl, nodeEndpoint, probeNodeHealth, withCap, withoutCap } from '@calimero-network/mero-js';
8
8
 
9
9
  /**
10
10
  * Types for mero-react
@@ -336,54 +336,6 @@ interface MigrationAdminPanelProps {
336
336
  */
337
337
  declare function MigrationAdminPanel({ namespaceId, pollIntervalMs, className }: MigrationAdminPanelProps): react_jsx_runtime.JSX.Element;
338
338
 
339
- /**
340
- * Local-node discovery.
341
- *
342
- * Calimero dev/desktop nodes expose a public, unauthenticated health endpoint
343
- * at `GET {nodeUrl}/admin-api/health` that returns `{ "data": { "status":
344
- * "alive" } }`. The most common local layouts run on a small, well-known set of
345
- * ports, so instead of forcing the user to type a URL we probe those ports and
346
- * offer whatever is actually running.
347
- */
348
- /**
349
- * Default ports probed when discovering local nodes. Covers the two-node dev
350
- * stacks used across the Calimero apps (RPC + alt ports for node1 / node2).
351
- */
352
- declare const DEFAULT_LOCAL_NODE_PORTS: readonly [2428, 2429, 2528, 2529];
353
- interface DiscoverLocalNodesOptions {
354
- /** Ports to probe. Defaults to {@link DEFAULT_LOCAL_NODE_PORTS}. */
355
- ports?: readonly number[];
356
- /** Per-probe timeout in ms. Defaults to 2000. */
357
- timeoutMs?: number;
358
- /** Abort the whole discovery (e.g. when the modal closes). */
359
- signal?: AbortSignal;
360
- }
361
- /** Build the canonical base URL for a local node on the given port. */
362
- declare function localNodeUrl(port: number): string;
363
- /**
364
- * Resolve an API `path` against a node `baseUrl`. Ensures the base ends with a
365
- * slash first, so a base that carries a path prefix (e.g. a `NODE_PATH_PREFIX`
366
- * deployment like `http://host/node1`) keeps that segment instead of having it
367
- * stripped by relative URL resolution.
368
- */
369
- declare function nodeEndpoint(baseUrl: string, path: string): string;
370
- /**
371
- * Probe a single node's health endpoint. Resolves `true` only when the node
372
- * answers with a 2xx and (when the body is JSON) reports a non-dead status.
373
- * Any network error, timeout, or non-ok response resolves `false` — never
374
- * throws (except on an external abort, which is swallowed as `false`).
375
- */
376
- declare function probeNodeHealth(baseUrl: string, options?: {
377
- timeoutMs?: number;
378
- signal?: AbortSignal;
379
- }): Promise<boolean>;
380
- /**
381
- * Probe the configured local ports in parallel and return the base URLs that
382
- * responded as healthy, in the same order as the `ports` argument (which
383
- * defaults to ascending). Returns an empty array when nothing local is running.
384
- */
385
- declare function discoverLocalNodes(options?: DiscoverLocalNodesOptions): Promise<string[]>;
386
-
387
339
  /**
388
340
  * Shape accepted by the metadata-setter hooks — re-exported from mero-js so
389
341
  * callers have one canonical type. A `set*Metadata` call **replaces the whole
@@ -400,12 +352,20 @@ declare function useExecute(contextId: string | null, executorId: string | null)
400
352
  loading: boolean;
401
353
  error: Error | null;
402
354
  };
355
+ /** Event payload delivered to a `useSubscription` callback. */
356
+ type SubscriptionEventData = SseEventData | GroupMembershipEventData;
357
+ /** Ids to subscribe to. Either can be omitted, but not both. */
358
+ interface SubscriptionInput {
359
+ contextIds?: string[];
360
+ groupIds?: string[];
361
+ }
403
362
  /**
404
- * Subscribe to SSE events for context IDs.
363
+ * Subscribe to SSE events for context and/or group IDs.
405
364
  * StrictMode-safe: tracks the SseClient instance in a ref to avoid
406
365
  * double-connect on mount/unmount/remount cycles.
407
366
  */
408
- declare function useSubscription(contextIds: string[], callback: (event: SseEventData) => void): void;
367
+ declare function useSubscription(contextIds: string[], callback: (event: SubscriptionEventData) => void): void;
368
+ declare function useSubscription(input: SubscriptionInput, callback: (event: SubscriptionEventData) => void): void;
409
369
  /**
410
370
  * Fetch contexts for the current node, optionally filtered by application ID.
411
371
  */
@@ -854,4 +814,4 @@ declare function clearContextIdentity(): void;
854
814
  */
855
815
  declare function clearAllStorage(): void;
856
816
 
857
- export { type AppContext, AppMode, type ApplicationContextRecord, CalimeroLogo, type CalimeroLogoProps, ConnectButton, type ConnectButtonProps, ConnectionType, type ContextDiscoveryOptions, type ContextDiscoveryState, type CustomConnectionConfig, DEFAULT_LOCAL_NODE_PORTS, type DiscoverLocalNodesOptions, type ExecutionResult, LoginModal, type LoginModalProps, MERO_CSS_VARS, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, type MeroTheme, MigrationAdminPanel, type MigrationAdminPanelProps, MigrationPendingBanner, type MigrationPendingBannerProps, type ResolvedMeroTheme, type SetMetadataInput, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, discoverLocalNodes, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localNodeUrl, localStorageTokenStorage, nodeEndpoint, probeNodeHealth, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
817
+ export { type AppContext, AppMode, type ApplicationContextRecord, CalimeroLogo, type CalimeroLogoProps, ConnectButton, type ConnectButtonProps, ConnectionType, type ContextDiscoveryOptions, type ContextDiscoveryState, type CustomConnectionConfig, type ExecutionResult, LoginModal, type LoginModalProps, MERO_CSS_VARS, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, type MeroTheme, MigrationAdminPanel, type MigrationAdminPanelProps, MigrationPendingBanner, type MigrationPendingBannerProps, type ResolvedMeroTheme, type SetMetadataInput, type SubscriptionEventData, type SubscriptionInput, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localStorageTokenStorage, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { CSSProperties, ReactNode } from 'react';
4
4
  import * as _calimero_network_mero_js from '@calimero-network/mero-js';
5
- import { MeroJs, TokenStore, SetMetadataRequest, AddGroupMembersRequest, CreateContextRequest, CreateGroupInNamespaceRequest, CreateNamespaceRequest, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, DeleteGroupRequest, DeleteNamespaceRequest, DetachContextFromGroupRequest, GroupUpgradeStatusResponseData, GroupContextEntry, GroupInfo, CreateGroupInvitationRequest, MetadataRecord, JoinGroupRequest, JoinNamespaceRequest, MigrationStatus, MigrationStatusRollup, MemberMigrationStatusEntry, MigrateMyEntriesSummary, Namespace, SubgroupEntry, NamespaceIdentity, RegisterGroupSigningKeyRequest, RemoveGroupMembersRequest, ReparentGroupRequest, ResyncContextRequest, RetryGroupUpgradeRequest, SetDefaultCapabilitiesRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, SseEventData, SyncGroupRequest, UpdateGroupSettingsRequest, UpdateMemberRoleRequest, UpgradeGroupRequest, TokenData } from '@calimero-network/mero-js';
5
+ import { MeroJs, TokenStore, SetMetadataRequest, SseEventData, GroupMembershipEventData, AddGroupMembersRequest, CreateContextRequest, CreateGroupInNamespaceRequest, CreateNamespaceRequest, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, DeleteGroupRequest, DeleteNamespaceRequest, DetachContextFromGroupRequest, GroupUpgradeStatusResponseData, GroupContextEntry, GroupInfo, CreateGroupInvitationRequest, MetadataRecord, JoinGroupRequest, JoinNamespaceRequest, MigrationStatus, MigrationStatusRollup, MemberMigrationStatusEntry, MigrateMyEntriesSummary, Namespace, SubgroupEntry, NamespaceIdentity, RegisterGroupSigningKeyRequest, RemoveGroupMembersRequest, ReparentGroupRequest, ResyncContextRequest, RetryGroupUpgradeRequest, SetDefaultCapabilitiesRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, SyncGroupRequest, UpdateGroupSettingsRequest, UpdateMemberRoleRequest, UpgradeGroupRequest, TokenData } from '@calimero-network/mero-js';
6
6
  export * from '@calimero-network/mero-js';
7
- export { CAPABILITIES, MetadataRecord, hasCap, withCap, withoutCap } from '@calimero-network/mero-js';
7
+ export { CAPABILITIES, DEFAULT_LOCAL_NODE_PORTS, DiscoverLocalNodesOptions, MetadataRecord, discoverLocalNodes, hasCap, localNodeUrl, nodeEndpoint, probeNodeHealth, withCap, withoutCap } from '@calimero-network/mero-js';
8
8
 
9
9
  /**
10
10
  * Types for mero-react
@@ -336,54 +336,6 @@ interface MigrationAdminPanelProps {
336
336
  */
337
337
  declare function MigrationAdminPanel({ namespaceId, pollIntervalMs, className }: MigrationAdminPanelProps): react_jsx_runtime.JSX.Element;
338
338
 
339
- /**
340
- * Local-node discovery.
341
- *
342
- * Calimero dev/desktop nodes expose a public, unauthenticated health endpoint
343
- * at `GET {nodeUrl}/admin-api/health` that returns `{ "data": { "status":
344
- * "alive" } }`. The most common local layouts run on a small, well-known set of
345
- * ports, so instead of forcing the user to type a URL we probe those ports and
346
- * offer whatever is actually running.
347
- */
348
- /**
349
- * Default ports probed when discovering local nodes. Covers the two-node dev
350
- * stacks used across the Calimero apps (RPC + alt ports for node1 / node2).
351
- */
352
- declare const DEFAULT_LOCAL_NODE_PORTS: readonly [2428, 2429, 2528, 2529];
353
- interface DiscoverLocalNodesOptions {
354
- /** Ports to probe. Defaults to {@link DEFAULT_LOCAL_NODE_PORTS}. */
355
- ports?: readonly number[];
356
- /** Per-probe timeout in ms. Defaults to 2000. */
357
- timeoutMs?: number;
358
- /** Abort the whole discovery (e.g. when the modal closes). */
359
- signal?: AbortSignal;
360
- }
361
- /** Build the canonical base URL for a local node on the given port. */
362
- declare function localNodeUrl(port: number): string;
363
- /**
364
- * Resolve an API `path` against a node `baseUrl`. Ensures the base ends with a
365
- * slash first, so a base that carries a path prefix (e.g. a `NODE_PATH_PREFIX`
366
- * deployment like `http://host/node1`) keeps that segment instead of having it
367
- * stripped by relative URL resolution.
368
- */
369
- declare function nodeEndpoint(baseUrl: string, path: string): string;
370
- /**
371
- * Probe a single node's health endpoint. Resolves `true` only when the node
372
- * answers with a 2xx and (when the body is JSON) reports a non-dead status.
373
- * Any network error, timeout, or non-ok response resolves `false` — never
374
- * throws (except on an external abort, which is swallowed as `false`).
375
- */
376
- declare function probeNodeHealth(baseUrl: string, options?: {
377
- timeoutMs?: number;
378
- signal?: AbortSignal;
379
- }): Promise<boolean>;
380
- /**
381
- * Probe the configured local ports in parallel and return the base URLs that
382
- * responded as healthy, in the same order as the `ports` argument (which
383
- * defaults to ascending). Returns an empty array when nothing local is running.
384
- */
385
- declare function discoverLocalNodes(options?: DiscoverLocalNodesOptions): Promise<string[]>;
386
-
387
339
  /**
388
340
  * Shape accepted by the metadata-setter hooks — re-exported from mero-js so
389
341
  * callers have one canonical type. A `set*Metadata` call **replaces the whole
@@ -400,12 +352,20 @@ declare function useExecute(contextId: string | null, executorId: string | null)
400
352
  loading: boolean;
401
353
  error: Error | null;
402
354
  };
355
+ /** Event payload delivered to a `useSubscription` callback. */
356
+ type SubscriptionEventData = SseEventData | GroupMembershipEventData;
357
+ /** Ids to subscribe to. Either can be omitted, but not both. */
358
+ interface SubscriptionInput {
359
+ contextIds?: string[];
360
+ groupIds?: string[];
361
+ }
403
362
  /**
404
- * Subscribe to SSE events for context IDs.
363
+ * Subscribe to SSE events for context and/or group IDs.
405
364
  * StrictMode-safe: tracks the SseClient instance in a ref to avoid
406
365
  * double-connect on mount/unmount/remount cycles.
407
366
  */
408
- declare function useSubscription(contextIds: string[], callback: (event: SseEventData) => void): void;
367
+ declare function useSubscription(contextIds: string[], callback: (event: SubscriptionEventData) => void): void;
368
+ declare function useSubscription(input: SubscriptionInput, callback: (event: SubscriptionEventData) => void): void;
409
369
  /**
410
370
  * Fetch contexts for the current node, optionally filtered by application ID.
411
371
  */
@@ -854,4 +814,4 @@ declare function clearContextIdentity(): void;
854
814
  */
855
815
  declare function clearAllStorage(): void;
856
816
 
857
- export { type AppContext, AppMode, type ApplicationContextRecord, CalimeroLogo, type CalimeroLogoProps, ConnectButton, type ConnectButtonProps, ConnectionType, type ContextDiscoveryOptions, type ContextDiscoveryState, type CustomConnectionConfig, DEFAULT_LOCAL_NODE_PORTS, type DiscoverLocalNodesOptions, type ExecutionResult, LoginModal, type LoginModalProps, MERO_CSS_VARS, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, type MeroTheme, MigrationAdminPanel, type MigrationAdminPanelProps, MigrationPendingBanner, type MigrationPendingBannerProps, type ResolvedMeroTheme, type SetMetadataInput, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, discoverLocalNodes, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localNodeUrl, localStorageTokenStorage, nodeEndpoint, probeNodeHealth, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
817
+ export { type AppContext, AppMode, type ApplicationContextRecord, CalimeroLogo, type CalimeroLogoProps, ConnectButton, type ConnectButtonProps, ConnectionType, type ContextDiscoveryOptions, type ContextDiscoveryState, type CustomConnectionConfig, type ExecutionResult, LoginModal, type LoginModalProps, MERO_CSS_VARS, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, type MeroTheme, MigrationAdminPanel, type MigrationAdminPanelProps, MigrationPendingBanner, type MigrationPendingBannerProps, type ResolvedMeroTheme, type SetMetadataInput, type SubscriptionEventData, type SubscriptionInput, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localStorageTokenStorage, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createContext, useMemo, useState, useRef, useCallback, useEffect, useContext } from 'react';
2
- import { LocalStorageTokenStore, parseAuthCallback, MeroJs, buildAuthLoginUrl, compareSemver } from '@calimero-network/mero-js';
2
+ import { LocalStorageTokenStore, parseAuthCallback, MeroJs, buildAuthLoginUrl, DEFAULT_LOCAL_NODE_PORTS, discoverLocalNodes, nodeEndpoint, compareSemver } from '@calimero-network/mero-js';
3
3
  export * from '@calimero-network/mero-js';
4
- export { CAPABILITIES, hasCap, withCap, withoutCap } from '@calimero-network/mero-js';
4
+ export { CAPABILITIES, DEFAULT_LOCAL_NODE_PORTS, discoverLocalNodes, hasCap, localNodeUrl, nodeEndpoint, probeNodeHealth, withCap, withoutCap } from '@calimero-network/mero-js';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { createPortal } from 'react-dom';
7
7
 
@@ -569,59 +569,6 @@ function CalimeroLogo({
569
569
  );
570
570
  }
571
571
 
572
- // src/utils/nodeDiscovery.ts
573
- var DEFAULT_LOCAL_NODE_PORTS = [2428, 2429, 2528, 2529];
574
- var LOCAL_HOST = "localhost";
575
- var DEFAULT_PROBE_TIMEOUT_MS = 2e3;
576
- function localNodeUrl(port) {
577
- return `http://${LOCAL_HOST}:${port}`;
578
- }
579
- function nodeEndpoint(baseUrl, path) {
580
- const base = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
581
- return new URL(path, base).toString();
582
- }
583
- async function probeNodeHealth(baseUrl, options = {}) {
584
- const { timeoutMs = DEFAULT_PROBE_TIMEOUT_MS, signal } = options;
585
- if (signal?.aborted) return false;
586
- const controller = new AbortController();
587
- const onAbort = () => controller.abort();
588
- const listenerAdded = !!signal;
589
- if (listenerAdded) signal.addEventListener("abort", onAbort, { once: true });
590
- const timer = setTimeout(() => controller.abort(), timeoutMs);
591
- try {
592
- const url = nodeEndpoint(baseUrl, "admin-api/health");
593
- const res = await fetch(url, {
594
- method: "GET",
595
- signal: controller.signal
596
- });
597
- if (!res.ok) return false;
598
- try {
599
- const body = await res.json();
600
- const status = body?.data?.status !== void 0 ? body?.data?.status : body?.status;
601
- if (status === void 0) return true;
602
- return typeof status === "string" && status.toLowerCase() === "alive";
603
- } catch {
604
- return true;
605
- }
606
- } catch {
607
- return false;
608
- } finally {
609
- clearTimeout(timer);
610
- if (listenerAdded) signal.removeEventListener("abort", onAbort);
611
- }
612
- }
613
- async function discoverLocalNodes(options = {}) {
614
- const { ports = DEFAULT_LOCAL_NODE_PORTS, timeoutMs, signal } = options;
615
- const results = await Promise.all(
616
- ports.map(async (port) => {
617
- const url = localNodeUrl(port);
618
- const ok = await probeNodeHealth(url, { timeoutMs, signal });
619
- return ok ? url : null;
620
- })
621
- );
622
- return results.filter((url) => url !== null);
623
- }
624
-
625
572
  // src/theme.ts
626
573
  var defaultMeroTheme = Object.freeze({
627
574
  primary: "#a5ff11",
@@ -1470,13 +1417,15 @@ function useExecute(contextId, executorId) {
1470
1417
  );
1471
1418
  return { execute, loading, error };
1472
1419
  }
1473
- function useSubscription(contextIds, callback) {
1420
+ function useSubscription(input, callback) {
1474
1421
  const { mero } = useMero();
1475
1422
  const callbackRef = useRef(callback);
1476
1423
  callbackRef.current = callback;
1424
+ const { contextIds = [], groupIds = [] } = Array.isArray(input) ? { contextIds: input, groupIds: [] } : input;
1477
1425
  const contextIdsKey = JSON.stringify(contextIds);
1426
+ const groupIdsKey = JSON.stringify(groupIds);
1478
1427
  useEffect(() => {
1479
- if (!mero || contextIds.length === 0) return;
1428
+ if (!mero || contextIds.length === 0 && groupIds.length === 0) return;
1480
1429
  const sse = mero.events;
1481
1430
  const handler = (event) => {
1482
1431
  callbackRef.current(event);
@@ -1484,12 +1433,12 @@ function useSubscription(contextIds, callback) {
1484
1433
  sse.on("event", handler);
1485
1434
  sse.connect().catch(() => {
1486
1435
  });
1487
- sse.subscribe(contextIds).catch(() => {
1436
+ sse.subscribe({ contextIds, groupIds }).catch(() => {
1488
1437
  });
1489
1438
  return () => {
1490
1439
  sse.off("event", handler);
1491
1440
  };
1492
- }, [mero, contextIdsKey]);
1441
+ }, [mero, contextIdsKey, groupIdsKey]);
1493
1442
  }
1494
1443
  function useContexts(applicationId) {
1495
1444
  const { mero } = useMero();
@@ -2659,6 +2608,6 @@ function MigrationAdminPanel({ namespaceId, pollIntervalMs, className }) {
2659
2608
  ] });
2660
2609
  }
2661
2610
 
2662
- export { AppMode, CalimeroLogo, ConnectButton, ConnectionType, DEFAULT_LOCAL_NODE_PORTS, LoginModal, MERO_CSS_VARS, MeroContext, MeroProvider, MigrationAdminPanel, MigrationPendingBanner, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, discoverLocalNodes, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localNodeUrl, localStorageTokenStorage, nodeEndpoint, probeNodeHealth, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
2611
+ export { AppMode, CalimeroLogo, ConnectButton, ConnectionType, LoginModal, MERO_CSS_VARS, MeroContext, MeroProvider, MigrationAdminPanel, MigrationPendingBanner, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, clearTokenNodeUrl, cssVar, defaultMeroTheme, getApplicationId, getContextId, getContextIdentity, getNodeUrl, getTokenNodeUrl, localStorageTokenStorage, resolveMeroTheme, setApplicationId, setContextId, setContextIdentity, setNodeUrl, setTokenNodeUrl, themeToCssVars, useAddGroupMembers, useAppVersion, useApplicationContexts, useContextDiscovery, useContextGroup, useContexts, useCreateContext, useCreateGroupInNamespace, useCreateNamespace, useCreateNamespaceInvitation, useDefaultCapabilities, useDeleteContext, useDeleteGroup, useDeleteNamespace, useDetachContextFromGroup, useExecute, useGroupAppVersion, useGroupCapabilities, useGroupContexts, useGroupInfo, useGroupInvitations, useGroupMembers, useGroupMetadata, useGroupUpgradeStatus, useInstallFromRegistry, useJoinContext, useJoinGroup, useJoinNamespace, useJoinSubgroupInheritance, useLatestVersion, useMemberMetadata, useMero, useMigrationStatus, useMyAuthoredMigration, useNamespace, useNamespaceGroups, useNamespaceIdentity, useNamespaces, useNamespacesForApplication, useRegisterGroupSigningKey, useRemoveGroupMembers, useReparentGroup, useResyncContext, useRetryGroupUpgrade, useSetContextMetadata, useSetDefaultCapabilities, useSetGroupMetadata, useSetMemberMetadata, useSetSubgroupVisibility, useSetTeeAdmissionPolicy, useSubgroupVisibility, useSubgroups, useSubscription, useSyncGroup, useUpdateGroupSettings, useUpdateMemberRole, useUpgradeGroup };
2663
2612
  //# sourceMappingURL=index.js.map
2664
2613
  //# sourceMappingURL=index.js.map