@calimero-network/mero-js 26.9.1 → 26.11.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.
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from '../http-client/index.js';
2
- import type { HealthStatus, ReadinessStatus, AdminAuthStatus, InstallApplicationRequest, InstallApplicationResponseData, InstallDevApplicationRequest, UninstallApplicationResponseData, ListApplicationsResponseData, GetApplicationResponseData, ApplicationVersionEntry, GetApplicationAbiResponseData, GetLatestVersionResponseData, ListPackagesResponseData, ListVersionsResponseData, CreateContextRequest, CreateContextResponseData, DeleteContextResponseData, GetContextsResponseData, Context, GenerateContextIdentityResponseData, GetContextIdentitiesResponseData, JoinContextResponseData, JoinSubgroupInheritanceResponseData, ContextGroupResponseData, ContextStorageResponseData, UpdateContextApplicationRequest, ResyncContextRequest, ResyncContextResponseData, ContextsWithExecutorsResponseData, UploadBlobRequest, UploadBlobResponseData, DeleteBlobResponseData, ListBlobsResponseData, GetBlobInfoResponseData, BlobReadOptions, CreateContextAliasRequest, CreateApplicationAliasRequest, CreateDeviceAliasRequest, CreateAliasResponseData, LookupAliasResponseData, DeleteAliasResponseData, ListAliasesResponseData, ListNamespacesResponseData, CreateNamespaceRequest, CreateNamespaceResponseData, DeleteNamespaceResponseData, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, JoinNamespaceRequest, JoinNamespaceResponseData, CreateGroupInNamespaceRequest, CreateGroupInNamespaceResponseData, SubgroupEntry, Namespace, NodeIdentity, AccountPairInitRequest, AccountPairInitResponseData, AccountPairCompleteRequest, AccountPairCompleteResponseData, AccountSignWithRootRequest, AccountSignWithRootResponseData, RelinkDeviceRequest, RelinkDeviceResponseData, RescopeDeviceRequest, RescopeDeviceResponseData, LabelDeviceRequest, LabelDeviceResponseData, AccountDeviceEntry, AccountApplicationEntry, RevokeAccountDeviceRequest, LinkAccountDeviceRequest, LinkAccountDeviceResponseData, RevokeAccountDeviceResponseData, MemberDevicesEntry, ListMemberDevicesOptions, GroupInfoResponseData, CreateGroupRequest, CreateGroupResponseData, DeleteGroupResponseData, ListGroupMembersResponseData, ListGroupContextsResponseData, AddGroupMembersRequest, RemoveGroupMembersRequest, UpdateMemberRoleRequest, MemberCapabilities, SetMemberCapabilitiesRequest, SetDefaultCapabilitiesRequest, SetMemberAutoFollowRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, GetTeeAdmissionPolicyResponseData, SetTeeAuthoringPolicyRequest, TransferOwnershipRequest, ChangeNamespaceAdminRequest, OwnerDeleteGroupRequest, RootGuardedOpRequest, SetGroupMetadataRequest, SetMemberMetadataRequest, SetContextMetadataRequest, MetadataRecord, SyncGroupResponseData, ActivateGroupUpgradeRequest, ActivateGroupUpgradeResponseData, UpgradeGroupRequest, UpgradeGroupResponseData, GroupUpgradeStatusResponseData, MigrationStatus, NamespaceRevokedDevices, CascadeStatusEntry, RetryGroupUpgradeResponseData, ReparentGroupRequest, ReparentGroupResponseData, IssueOwnershipProofRequest, IssueNamespaceOwnershipProofRequest, IssueOwnershipProofResponseData, CreateGroupInvitationRequest, CreateGroupInvitationResponseData, CreateRecursiveGroupInvitationResponseData, JoinGroupRequest, JoinGroupResponseData, TeeInfoResponseData, TeeAttestRequest, TeeAttestResponseData, PerformIntentRequest, PerformIntentResponseData, IntentRelayInfo, QueryContextRequest, QueryContextResponseData, ListMemberDevicesResponseData, SealToAccountRequest, SealedEnvelope, AdmitJoinRequest, AdmitJoinResponseData, CreateAccessGrantRequest, AccessGrant, CreatedAccessGrant, RevokeAccessGrantResponseData, AccessGrantCallRequest, AccessGrantCallResponseData } from './admin-types.js';
2
+ import type { HealthStatus, ReadinessStatus, AdminAuthStatus, InstallApplicationRequest, InstallApplicationResponseData, InstallDevApplicationRequest, UninstallApplicationResponseData, ListApplicationsResponseData, GetApplicationResponseData, ApplicationVersionEntry, GetApplicationAbiResponseData, GetLatestVersionResponseData, ListPackagesResponseData, ListVersionsResponseData, CreateContextRequest, CreateContextResponseData, DeleteContextResponseData, GetContextsResponseData, Context, GenerateContextIdentityResponseData, GetContextIdentitiesResponseData, JoinContextResponseData, JoinSubgroupInheritanceResponseData, ContextGroupResponseData, ContextStorageResponseData, UpdateContextApplicationRequest, ResyncContextRequest, ResyncContextResponseData, ContextsWithExecutorsResponseData, UploadBlobRequest, UploadBlobResponseData, DeleteBlobResponseData, ListBlobsResponseData, GetBlobInfoResponseData, BlobReadOptions, CreateContextAliasRequest, CreateApplicationAliasRequest, CreateDeviceAliasRequest, CreateAliasResponseData, LookupAliasResponseData, DeleteAliasResponseData, ListAliasesResponseData, ListNamespacesResponseData, CreateNamespaceRequest, CreateNamespaceResponseData, OutboundApproval, SetOutboundApprovalRequest, SetOutboundApprovalResponseData, DeleteNamespaceResponseData, CreateNamespaceInvitationRequest, CreateNamespaceInvitationResponseData, CreateRecursiveInvitationResponseData, JoinNamespaceRequest, JoinNamespaceResponseData, CreateGroupInNamespaceRequest, CreateGroupInNamespaceResponseData, SubgroupEntry, Namespace, NodeIdentity, AccountPairInitRequest, AccountPairInitResponseData, AccountPairCompleteRequest, AccountPairCompleteResponseData, AccountSignWithRootRequest, AccountSignWithRootResponseData, RelinkDeviceRequest, RelinkDeviceResponseData, RescopeDeviceRequest, RescopeDeviceResponseData, LabelDeviceRequest, LabelDeviceResponseData, AccountDeviceEntry, AccountApplicationEntry, RevokeAccountDeviceRequest, LinkAccountDeviceRequest, LinkAccountDeviceResponseData, RevokeAccountDeviceResponseData, MemberDevicesEntry, ListMemberDevicesOptions, GroupInfoResponseData, CreateGroupRequest, CreateGroupResponseData, DeleteGroupResponseData, ListGroupMembersResponseData, ListGroupContextsResponseData, AddGroupMembersRequest, RemoveGroupMembersRequest, UpdateMemberRoleRequest, MemberCapabilities, SetMemberCapabilitiesRequest, SetDefaultCapabilitiesRequest, SetMemberAutoFollowRequest, SetSubgroupVisibilityRequest, SetTeeAdmissionPolicyRequest, GetTeeAdmissionPolicyResponseData, SetTeeAuthoringPolicyRequest, TransferOwnershipRequest, ChangeNamespaceAdminRequest, OwnerDeleteGroupRequest, RootGuardedOpRequest, SetGroupMetadataRequest, SetMemberMetadataRequest, SetContextMetadataRequest, MetadataRecord, SyncGroupResponseData, ActivateGroupUpgradeRequest, ActivateGroupUpgradeResponseData, UpgradeGroupRequest, UpgradeGroupResponseData, GroupUpgradeStatusResponseData, MissingRelease, MigrationStatus, NamespaceRevokedDevices, CascadeStatusEntry, RetryGroupUpgradeResponseData, ReparentGroupRequest, ReparentGroupResponseData, IssueOwnershipProofRequest, IssueNamespaceOwnershipProofRequest, IssueOwnershipProofResponseData, CreateGroupInvitationRequest, CreateGroupInvitationResponseData, CreateRecursiveGroupInvitationResponseData, JoinGroupRequest, JoinGroupResponseData, TeeInfoResponseData, TeeAttestRequest, TeeAttestResponseData, PerformIntentRequest, PerformIntentResponseData, IntentRelayInfo, QueryContextRequest, QueryContextResponseData, ListMemberDevicesResponseData, SealToAccountRequest, SealedEnvelope, AdmitJoinRequest, AdmitJoinResponseData, CreateAccessGrantRequest, AccessGrant, CreatedAccessGrant, RevokeAccessGrantResponseData, AccessGrantCallRequest, AccessGrantCallResponseData } from './admin-types.js';
3
3
  import { type RedeemOutcome } from './redeem-invitation.js';
4
4
  /**
5
5
  * Compare two version strings by SemVer 2.0 precedence, ascending: negative if
@@ -219,6 +219,14 @@ export declare class AdminApiClient {
219
219
  getIntentRelay(contextId: string): Promise<IntentRelayInfo>;
220
220
  listNamespacesForApplication(applicationId: string): Promise<ListNamespacesResponseData>;
221
221
  createNamespace(request: CreateNamespaceRequest): Promise<CreateNamespaceResponseData>;
222
+ /** What `namespaceId` approves for outbound requests, one entry per publisher. */
223
+ listOutboundApprovals(namespaceId: string): Promise<OutboundApproval[]>;
224
+ /**
225
+ * Set what `namespaceId` approves for the publisher of `request.applicationId`
226
+ * to exactly `request.approve`: `'manifest'` or a list of URL prefixes, and
227
+ * `[]` revokes everything. Takes effect at the app's next run.
228
+ */
229
+ setOutboundApproval(namespaceId: string, request: SetOutboundApprovalRequest): Promise<SetOutboundApprovalResponseData>;
222
230
  deleteNamespace(namespaceId: string): Promise<DeleteNamespaceResponseData>;
223
231
  createNamespaceInvitation(namespaceId: string, request?: CreateNamespaceInvitationRequest): Promise<CreateNamespaceInvitationResponseData | CreateRecursiveInvitationResponseData>;
224
232
  /**
@@ -616,6 +624,8 @@ export declare class AdminApiClient {
616
624
  syncGroup(groupId: string): Promise<SyncGroupResponseData>;
617
625
  upgradeGroup(groupId: string, request: UpgradeGroupRequest): Promise<UpgradeGroupResponseData>;
618
626
  getGroupUpgradeStatus(groupId: string): Promise<GroupUpgradeStatusResponseData>;
627
+ /** Releases to install before activating the upgrade, in list order (oldest first). An older server returns []. */
628
+ getGroupMissingReleases(groupId: string): Promise<MissingRelease[]>;
619
629
  /**
620
630
  * The operator-facing "have all peers migrated?" rollup for a namespace.
621
631
  * The handler serializes the payload directly, so there is no `{ data }`
@@ -507,6 +507,20 @@ export class AdminApiClient {
507
507
  async createNamespace(request) {
508
508
  return unwrap(await this.httpClient.post('/admin-api/namespaces', request));
509
509
  }
510
+ /** What `namespaceId` approves for outbound requests, one entry per publisher. */
511
+ async listOutboundApprovals(namespaceId) {
512
+ return unwrap(await this.httpClient.get(`/admin-api/namespaces/${pathSegment(namespaceId)}/outbound-approvals`));
513
+ }
514
+ /**
515
+ * Set what `namespaceId` approves for the publisher of `request.applicationId`
516
+ * to exactly `request.approve`: `'manifest'` or a list of URL prefixes, and
517
+ * `[]` revokes everything. Takes effect at the app's next run.
518
+ */
519
+ async setOutboundApproval(namespaceId, request) {
520
+ return unwrap(await this.httpClient.put(`/admin-api/namespaces/${pathSegment(namespaceId)}/outbound-approvals`,
521
+ // Core declares this body `deny_unknown_fields`, so send exactly these.
522
+ { applicationId: request.applicationId, approve: request.approve }));
523
+ }
510
524
  async deleteNamespace(namespaceId) {
511
525
  // Core requires `Content-Type: application/json` on this DELETE even though
512
526
  // the body is always empty, so send the header and an empty JSON object.
@@ -1097,6 +1111,11 @@ export class AdminApiClient {
1097
1111
  async getGroupUpgradeStatus(groupId) {
1098
1112
  return unwrap(await this.httpClient.get(`/admin-api/groups/${pathSegment(groupId)}/upgrade/status`));
1099
1113
  }
1114
+ /** Releases to install before activating the upgrade, in list order (oldest first). An older server returns []. */
1115
+ async getGroupMissingReleases(groupId) {
1116
+ const res = await this.httpClient.get(`/admin-api/groups/${pathSegment(groupId)}/upgrade/status`);
1117
+ return res.missingReleases ?? [];
1118
+ }
1100
1119
  /**
1101
1120
  * The operator-facing "have all peers migrated?" rollup for a namespace.
1102
1121
  * The handler serializes the payload directly, so there is no `{ data }`
@@ -672,11 +672,50 @@ export interface CreateNamespaceRequest {
672
672
  name?: string;
673
673
  /** Hex 32-byte blob id; pins the namespace to a specific installed version. */
674
674
  appKey?: string;
675
+ /**
676
+ * Approve outbound requests for the app's publisher in the new namespace, in
677
+ * the same call. Absent approves none, and the app's requests are refused
678
+ * (`NotApproved`) until an admin approves them.
679
+ */
680
+ approveOutbound?: OutboundSelection;
675
681
  }
676
682
  export interface CreateNamespaceResponseData {
677
683
  namespaceId: string;
678
684
  /** What the id was derived from. Absent on nodes that predate derived ids. */
679
685
  founding?: NamespaceFounding;
686
+ /** What the namespace approves for the app's publisher; present only when the request set `approveOutbound`. */
687
+ outboundApproval?: OutboundApproval;
688
+ }
689
+ /**
690
+ * Which outbound URL prefixes a namespace approves for an app's publisher:
691
+ * `'manifest'` approves every prefix the app's manifest declares, a list
692
+ * approves exactly those prefixes. The node rejects any other string.
693
+ */
694
+ export type OutboundSelection = 'manifest' | string[];
695
+ /**
696
+ * What a namespace approves for one publisher (the bundle signer): the URL
697
+ * prefixes its apps may send outbound requests under, and the prefixes an
698
+ * approver was shown.
699
+ */
700
+ export interface OutboundApproval {
701
+ /** The publisher's signer id (`did:key`). */
702
+ signer: string;
703
+ prefixes: string[];
704
+ reviewed: string[];
705
+ }
706
+ /**
707
+ * `PUT /admin-api/namespaces/:namespaceId/outbound-approvals` — set what the
708
+ * namespace approves for an installed app's publisher to exactly `approve`.
709
+ * `[]` revokes everything.
710
+ */
711
+ export interface SetOutboundApprovalRequest {
712
+ applicationId: string;
713
+ approve: OutboundSelection;
714
+ }
715
+ export interface SetOutboundApprovalResponseData extends OutboundApproval {
716
+ namespaceId: string;
717
+ /** `false` when nothing changed, so no op was published. */
718
+ published: boolean;
680
719
  }
681
720
  export interface DeleteNamespaceResponseData {
682
721
  isDeleted: boolean;
@@ -1311,6 +1350,11 @@ export interface CreateGroupRequest {
1311
1350
  export interface CreateGroupResponseData {
1312
1351
  groupId: string;
1313
1352
  }
1353
+ export interface MissingRelease {
1354
+ package: string;
1355
+ version: string;
1356
+ applicationId: string;
1357
+ }
1314
1358
  export interface GroupUpgradeStatus {
1315
1359
  fromVersion: string;
1316
1360
  toVersion: string;
@@ -1768,6 +1812,10 @@ export interface UpgradeGroupRequest {
1768
1812
  /** Publish without first trialling the migration on the admin's own contexts.
1769
1813
  * Server default: false, so a migration that fails the trial is refused with a 409. */
1770
1814
  skipTrial?: boolean;
1815
+ /** Approve outbound requests for the target's publisher in the group's
1816
+ * namespace before upgrading. Added to what the namespace already approves;
1817
+ * a prefix the target declares that nobody approved waits (`AwaitingApproval`). */
1818
+ approveOutbound?: OutboundSelection;
1771
1819
  }
1772
1820
  export interface UpgradeGroupResponseData {
1773
1821
  groupId: string;
@@ -1777,6 +1825,8 @@ export interface UpgradeGroupResponseData {
1777
1825
  localContextsFailed?: number;
1778
1826
  contextsTrialled?: number;
1779
1827
  contextsNotHeld?: number;
1828
+ /** What the namespace approves for the target's publisher; present only when the request set `approveOutbound`. */
1829
+ outboundApproval?: OutboundApproval;
1780
1830
  }
1781
1831
  export type GroupUpgradeStatusResponseData = GroupUpgradeStatus | null;
1782
1832
  export type RetryGroupUpgradeResponseData = UpgradeGroupResponseData;