@openvtc/trust-tasks 0.26.0 → 0.26.2

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.
Files changed (103) hide show
  1. package/CHANGELOG.md +170 -0
  2. package/dist/_shared/components.d.ts +107 -1
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/index.d.ts +16 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +16 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/rooms/owner/group/add/0.1/payload.d.ts +417 -0
  9. package/dist/rooms/owner/group/add/0.1/payload.d.ts.map +1 -0
  10. package/dist/rooms/owner/group/add/0.1/payload.js +218 -0
  11. package/dist/rooms/owner/group/add/0.1/payload.js.map +1 -0
  12. package/dist/rooms/owner/group/create/0.1/payload.d.ts +299 -0
  13. package/dist/rooms/owner/group/create/0.1/payload.d.ts.map +1 -0
  14. package/dist/rooms/owner/group/create/0.1/payload.js +163 -0
  15. package/dist/rooms/owner/group/create/0.1/payload.js.map +1 -0
  16. package/dist/rooms/owner/group/remove/0.1/payload.d.ts +343 -0
  17. package/dist/rooms/owner/group/remove/0.1/payload.d.ts.map +1 -0
  18. package/dist/rooms/owner/group/remove/0.1/payload.js +184 -0
  19. package/dist/rooms/owner/group/remove/0.1/payload.js.map +1 -0
  20. package/dist/rooms/owner/register/0.1/payload.d.ts +3 -3
  21. package/dist/rooms/owner/register/0.1/payload.js +1 -1
  22. package/dist/rooms/owner/register/0.1/payload.js.map +1 -1
  23. package/dist/vtc/_shared/0.1/community-room.d.ts +16 -0
  24. package/dist/vtc/_shared/0.1/community-room.d.ts.map +1 -0
  25. package/dist/vtc/_shared/0.1/community-room.js +6 -0
  26. package/dist/vtc/_shared/0.1/community-room.js.map +1 -0
  27. package/dist/vtc/admin/events/_shared/0.1/topic.d.ts +1 -1
  28. package/dist/vtc/admin/events/_shared/0.1/topic.d.ts.map +1 -1
  29. package/dist/vtc/admin/events/_shared/0.2/topic.d.ts +28 -0
  30. package/dist/vtc/admin/events/_shared/0.2/topic.d.ts.map +1 -0
  31. package/dist/vtc/admin/events/_shared/0.2/topic.js +6 -0
  32. package/dist/vtc/admin/events/_shared/0.2/topic.js.map +1 -0
  33. package/dist/vtc/admin/events/event/0.1/payload.d.ts +1 -1
  34. package/dist/vtc/admin/events/event/0.1/payload.d.ts.map +1 -1
  35. package/dist/vtc/admin/events/event/0.2/payload.d.ts +172 -0
  36. package/dist/vtc/admin/events/event/0.2/payload.d.ts.map +1 -0
  37. package/dist/vtc/admin/events/event/0.2/payload.js +100 -0
  38. package/dist/vtc/admin/events/event/0.2/payload.js.map +1 -0
  39. package/dist/vtc/admin/events/subscribe/0.1/payload.d.ts +1 -1
  40. package/dist/vtc/admin/events/subscribe/0.1/payload.d.ts.map +1 -1
  41. package/dist/vtc/admin/events/subscribe/0.2/payload.d.ts +409 -0
  42. package/dist/vtc/admin/events/subscribe/0.2/payload.d.ts.map +1 -0
  43. package/dist/vtc/admin/events/subscribe/0.2/payload.js +232 -0
  44. package/dist/vtc/admin/events/subscribe/0.2/payload.js.map +1 -0
  45. package/dist/vtc/oid4vp/identities/list/0.1/payload.d.ts +938 -0
  46. package/dist/vtc/oid4vp/identities/list/0.1/payload.d.ts.map +1 -0
  47. package/dist/vtc/oid4vp/identities/list/0.1/payload.js +559 -0
  48. package/dist/vtc/oid4vp/identities/list/0.1/payload.js.map +1 -0
  49. package/dist/vtc/rooms/community/create/0.1/payload.d.ts +789 -0
  50. package/dist/vtc/rooms/community/create/0.1/payload.d.ts.map +1 -0
  51. package/dist/vtc/rooms/community/create/0.1/payload.js +463 -0
  52. package/dist/vtc/rooms/community/create/0.1/payload.js.map +1 -0
  53. package/dist/vtc/rooms/community/get/0.1/payload.d.ts +711 -0
  54. package/dist/vtc/rooms/community/get/0.1/payload.d.ts.map +1 -0
  55. package/dist/vtc/rooms/community/get/0.1/payload.js +429 -0
  56. package/dist/vtc/rooms/community/get/0.1/payload.js.map +1 -0
  57. package/dist/vtc/rooms/community/list/0.1/payload.d.ts +772 -0
  58. package/dist/vtc/rooms/community/list/0.1/payload.d.ts.map +1 -0
  59. package/dist/vtc/rooms/community/list/0.1/payload.js +452 -0
  60. package/dist/vtc/rooms/community/list/0.1/payload.js.map +1 -0
  61. package/dist/vtc/rooms/community/members/add/0.1/payload.d.ts +535 -0
  62. package/dist/vtc/rooms/community/members/add/0.1/payload.d.ts.map +1 -0
  63. package/dist/vtc/rooms/community/members/add/0.1/payload.js +314 -0
  64. package/dist/vtc/rooms/community/members/add/0.1/payload.js.map +1 -0
  65. package/dist/vtc/rooms/community/members/list/0.1/payload.d.ts +554 -0
  66. package/dist/vtc/rooms/community/members/list/0.1/payload.d.ts.map +1 -0
  67. package/dist/vtc/rooms/community/members/list/0.1/payload.js +315 -0
  68. package/dist/vtc/rooms/community/members/list/0.1/payload.js.map +1 -0
  69. package/dist/vtc/rooms/community/members/remove/0.1/payload.d.ts +533 -0
  70. package/dist/vtc/rooms/community/members/remove/0.1/payload.d.ts.map +1 -0
  71. package/dist/vtc/rooms/community/members/remove/0.1/payload.js +313 -0
  72. package/dist/vtc/rooms/community/members/remove/0.1/payload.js.map +1 -0
  73. package/dist/vtc/rooms/offers/accept/0.1/payload.d.ts +349 -0
  74. package/dist/vtc/rooms/offers/accept/0.1/payload.d.ts.map +1 -0
  75. package/dist/vtc/rooms/offers/accept/0.1/payload.js +188 -0
  76. package/dist/vtc/rooms/offers/accept/0.1/payload.js.map +1 -0
  77. package/dist/vtc/rooms/offers/list/0.1/payload.d.ts +692 -0
  78. package/dist/vtc/rooms/offers/list/0.1/payload.d.ts.map +1 -0
  79. package/dist/vtc/rooms/offers/list/0.1/payload.js +408 -0
  80. package/dist/vtc/rooms/offers/list/0.1/payload.js.map +1 -0
  81. package/package.json +1 -1
  82. package/src/_shared/components.ts +120 -1
  83. package/src/index.ts +16 -0
  84. package/src/rooms/owner/group/add/0.1/payload.ts +288 -0
  85. package/src/rooms/owner/group/create/0.1/payload.ts +213 -0
  86. package/src/rooms/owner/group/remove/0.1/payload.ts +242 -0
  87. package/src/rooms/owner/register/0.1/payload.ts +2 -2
  88. package/src/vtc/_shared/0.1/community-room.ts +17 -0
  89. package/src/vtc/admin/events/_shared/0.1/topic.ts +1 -1
  90. package/src/vtc/admin/events/_shared/0.2/topic.ts +29 -0
  91. package/src/vtc/admin/events/event/0.1/payload.ts +1 -1
  92. package/src/vtc/admin/events/event/0.2/payload.ts +134 -0
  93. package/src/vtc/admin/events/subscribe/0.1/payload.ts +1 -1
  94. package/src/vtc/admin/events/subscribe/0.2/payload.ts +306 -0
  95. package/src/vtc/oid4vp/identities/list/0.1/payload.ts +706 -0
  96. package/src/vtc/rooms/community/create/0.1/payload.ts +509 -0
  97. package/src/vtc/rooms/community/get/0.1/payload.ts +461 -0
  98. package/src/vtc/rooms/community/list/0.1/payload.ts +495 -0
  99. package/src/vtc/rooms/community/members/add/0.1/payload.ts +356 -0
  100. package/src/vtc/rooms/community/members/list/0.1/payload.ts +366 -0
  101. package/src/vtc/rooms/community/members/remove/0.1/payload.ts +351 -0
  102. package/src/vtc/rooms/offers/accept/0.1/payload.ts +240 -0
  103. package/src/vtc/rooms/offers/list/0.1/payload.ts +451 -0
package/CHANGELOG.md CHANGED
@@ -11,6 +11,176 @@ The package versions over **its own API** — what a consumer compiles against
11
11
  not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
12
12
  component.
13
13
 
14
+ ## 0.26.2 — 2026-10-14
15
+
16
+
17
+ ### Added
18
+
19
+ - **vtc**: Community-owned rooms and member offers — vtc/rooms/community/* and vtc/rooms/offers/* (#768)
20
+
21
+ A community hosts rooms its members own, and can now own rooms itself — the
22
+ board's papers, a working group's drafts, a members' library — run from its
23
+ console. Design: verifiable-trust-infrastructure docs/05-design-notes/
24
+ data-rooms-files.md §8.4.
25
+
26
+ The community is the owner, and its own VTA is the key holder: the VTA mints
27
+ the room's DID, signs its credentials and holds the community's place in a
28
+ sealed room's group, through the same rooms/owner/* and rooms/keys/* tasks any
29
+ owner's key holder serves. The community holds no room key and no group
30
+ secret.
31
+
32
+ Administrators, holding the new vtc.rooms.manage (the owner's authority,
33
+ distinct from hosting's vtc.rooms.admin):
34
+ - vtc/rooms/community/create — the VTA mints, founds the group, issues the
35
+ community's own admin authority; the room is stored only after every
36
+ remote step, so a failure leaves no room behind.
37
+ - vtc/rooms/community/{list,get} — the owner's view, with counts and when the
38
+ community's own authority lapses.
39
+ - vtc/rooms/community/members/{add,remove,list} — add has the VTA issue the
40
+ invitation, membership and authority credentials (never admin) and keeps
41
+ them as an offer; remove advances a sealed room's epoch through the owner's
42
+ group removal and says what removal does not do (no recall; an authority
43
+ credential is honoured until it expires, so open rooms want short expiries).
44
+ members/list is paged and separate from get, because a community library
45
+ can admit the whole community.
46
+
47
+ Members, on their own DID (pull-shaped admission: a member's VTA has no
48
+ inbound address):
49
+ - vtc/rooms/offers/list — the caller's offers and the credentials to store with
50
+ their own key holder; never anyone else's.
51
+ - vtc/rooms/offers/accept — on a sealed tier, a KeyPackage in and the Welcome
52
+ out, after the VTA adds the member. A repeat with the same KeyPackage gets the
53
+ same Welcome; an unknown outcome is admissionPending, retried safely because
54
+ the VTA settles a pending admission first.
55
+
56
+ Only active members of the community are admitted to its rooms. Step-up and
57
+ consent are described as the intended model, not declared (SPEC §7.3 item 13).
58
+ The owner's record of whom it admitted lives apart from anything the host path
59
+ reads, so invariant I5 and portability hold.
60
+
61
+ New shared schema vtc/_shared/0.1/community-room.schema.json. Additive for the
62
+ generated types: new modules only.
63
+
64
+
65
+
66
+ ### Specifications
67
+
68
+ - **rooms,vtc**: Rooms/owner/group/remove, and a `rooms` topic on the console's live events (vtc/admin/events 0.2) (#767)
69
+
70
+ rooms/owner/group/remove/0.1 — the last of the owner's group tasks
71
+ (data-rooms-files.md §11). Removal is an epoch advance and nothing else is:
72
+ the key holder drops the member's leaf and advances the room at its host
73
+ with the link and commit, under the caller's `admin` authority. Same
74
+ remote-first rules as group/add as corrected in #766: the advanced state is
75
+ kept durably before the host is contacted, applied only once the host
76
+ accepts, discarded only on a refusal, kept on an unknown outcome and settled
77
+ by the next request through rooms/info. At most one pending advance per room,
78
+ admission or removal. Refuses `ownLeaf` (an owner leaving hands the room on
79
+ with rooms/owner/transfer). States what removal does not do: no recall of
80
+ what was read, and the authority credential is a separate thing.
81
+
82
+ vtc/admin/events {_shared,subscribe,event} 0.2 — the topic set is closed per
83
+ version ("a topic not listed here is a new MINOR version of this
84
+ component"), so the `rooms` topic is a new version rather than an `ext`
85
+ member. `rooms` prompts vtc/rooms/list, vtc/rooms/usage and
86
+ vtc/storage/configs/list, goes to holders of vtc.rooms.admin, carries no
87
+ count, and is hinted when a room is registered or removed or changes
88
+ lifecycle state, when a room's usage or a storage config's held bytes
89
+ crosses 80, 95 or 100 percent of a limit or capacity in either direction,
90
+ and when a storage config is created, changed or changes state — naming
91
+ none of them (data-rooms-files.md §6.3 alerts). subscribe 0.2 allows up to
92
+ seven topics. 0.1 is unchanged; a community serving both answers each at its
93
+ own version.
94
+
95
+ Additive for the generated types: new modules; the TypeScript 0.1 modules
96
+ keep exporting `Topic` (the generator now disambiguates the two shared
97
+ definitions internally).
98
+
99
+ - **rooms**: Group/add keeps a pending admission on an unknown outcome; details schemas for group codes (#766)
100
+
101
+ Corrections to rooms/owner/group/{create,add}/0.1 (drafts, #763), found
102
+ implementing them in the VTA:
103
+
104
+ - add, item 5: discard the pending admission only on a refusal. An
105
+ unreachable or silent host is an unknown outcome — it may have accepted —
106
+ and discarding then would leave the owner an epoch behind their own room.
107
+ The pending admission is kept for item 6; hostUnreachable's meaning says so
108
+ instead of "nothing was changed".
109
+ - add, items 2-3: what is kept is the advanced group state with the link,
110
+ commit and Welcome, beside the group the recipient holds, since a
111
+ committer cannot process its own commit later.
112
+ - add, item 6: the host's epoch is read with rooms/info under the caller's
113
+ read authority, from the host the admission was sent to; a host at neither
114
+ epoch has moved on, so discard and refuse epochConflict.
115
+ - detailsSchema for create's alreadyExists (epoch) and add's epochConflict
116
+ (hostEpoch), which the text already promised.
117
+ - create, item 1: the gates on naming the key are issue-membership's, but
118
+ nothing is signed, so a signing quota is not consumed or consulted.
119
+
120
+ - **rooms**: Rooms/owner/group/{create,add} — the owner's agent founds and grows a sealed room's group; register signs as the owner (#763)
121
+
122
+ * spec(rooms): rooms/owner/group/{create,add} — the owner's agent founds and grows a sealed room's group; register signs as the owner
123
+
124
+ A sealed room (`attributed`, `private`) cannot be written to until its MLS
125
+ group exists, and every member reaches the group by a Welcome — except the
126
+ owner, whom nobody can welcome. The member half is specified
127
+ (`rooms/keys/{key-package,welcome,commit}`); the owner half was not, so no
128
+ surface could found a sealed room or admit anyone to one.
129
+
130
+ - `rooms/owner/group/create/0.1`: the owner's key holder forms the room's
131
+ group with the owner as its only leaf, at room epoch 1 (the epoch a host
132
+ records at registration). Entitlement: control of the room's signing key,
133
+ as for issuing its credentials. Refuses `alreadyExists` rather than
134
+ replacing a group whose key schedule sealed records depend on.
135
+ - `rooms/owner/group/add/0.1`: the key holder admits a member's KeyPackage,
136
+ advances the room at its host with `rooms/epoch/mint` (link and commit
137
+ included, the caller's `admin` authority presented), and returns the
138
+ Welcome for the caller to deliver with `rooms/keys/welcome` — never
139
+ through the host. Remote first: the pending commit is kept durably, sent,
140
+ and applied only once the host accepts, and reconciled against the host's
141
+ epoch after a crash, since a key holder cannot process its own commit
142
+ from the wire.
143
+ - `rooms/owner/register/0.1` (draft, clarified in place): the key holder
144
+ sends `rooms/create` with `ownerDid` as its issuer, signed with a key of
145
+ that DID it holds, and never as itself; it refuses with `permissionDenied`
146
+ before contacting the host when it holds none. `rooms/create` names the
147
+ Owner as issuer, and a host running a creation policy (a community
148
+ admitting rooms for its members) checks the party asking is the owner it
149
+ names — a registration issued by the agent in another party's name is one
150
+ no host can tell from registering rooms in a stranger's name. No schema
151
+ change beyond the `ownerDid` description.
152
+
153
+ Additive for the generated types: two new modules, no change to an
154
+ existing type.
155
+
156
+ ## 0.26.1 — 2026-10-14
157
+
158
+
159
+ ### Added
160
+
161
+ - **vtc**: Verifier identities list — the OpenID4VP verifier's state for administrators (#761)
162
+
163
+ vtc/oid4vp/identities/list/0.1 lets a community's configuration
164
+ administrator read the OpenID4VP verifier identities the community presents
165
+ to swiyu and EUDI wallets, and what stops each from serving one.
166
+
167
+ A verifier identity is installed out of band — a DID registered with an
168
+ ecosystem, an access certificate from a registrar, trust statements from a
169
+ registry — and each part expires on its own schedule. A wallet that refuses
170
+ a request object tells the community nothing. Per identity the response
171
+ gives the client identifier wallets see, the DID and signing method, where
172
+ the key is held (cached, or kept by the community's agent), the access
173
+ certificate's subject, issuer and validity, each verifier_info attestation
174
+ with its expiry, whether it is the default, and whether a session could be
175
+ opened on it now. Problems use a fixed vocabulary with error/warning
176
+ severity: invalid key custody, no loaded signer, no link to the agent, a
177
+ missing, not-yet-valid, expired or expiring certificate, a missing identity
178
+ trust statement, an expired or expiring statement; and, community-wide, a
179
+ default identity that is not installed, or no https public URL.
180
+
181
+ The response never carries key material, nor the identifier under which the
182
+ agent holds a key.
183
+
14
184
  ## 0.26.0 — 2026-10-13
15
185
 
16
186
 
@@ -707,6 +707,21 @@ export type LimitSource = "policy" | "override" | "default";
707
707
  * The two-digit number the service chooses at claim, shows only to the starter (through redeem), and the approver types from the starter's screen. A string so that a leading zero survives.
708
708
  */
709
709
  export type MatchNumber = string;
710
+ /**
711
+ * What a member of a community-owned room may do there. `admin` is not among them: minting epochs, admitting and removing members are the community's, as the room's owner, and are exercised through the vtc/rooms/community/* tasks rather than by any member's credential. `curate` is not implied by `write`.
712
+ */
713
+ export type MemberAction = "read" | "write" | "curate";
714
+ /**
715
+ * The actions granted, at least one. An empty list confers nothing rather than everything, and a schema that allowed it would make the more dangerous reading available to a careless consumer.
716
+ *
717
+ * @minItems 1
718
+ * @maxItems 3
719
+ */
720
+ export type MemberActions = [MemberAction] | [MemberAction, MemberAction] | [MemberAction, MemberAction, MemberAction];
721
+ /**
722
+ * Where an admission stands. `offered`: credentials issued and waiting for the member to collect and accept them. `admitted`: accepted — on a sealed tier, the member is in the room's group. `removed`: an administrator removed them; on a sealed tier the room has advanced past them.
723
+ */
724
+ export type MemberState = "offered" | "admitted" | "removed";
710
725
  /**
711
726
  * How the request reaches the approver. A CLOSED list. Version 0.1 defines `scan`: the starter shows a trigger link (as a QR code that is also a clickable link, TRIGGER-LINK.md) and the approver's wallet reads it. `code` (a typed code of at least 8 characters, under strict rate limits) and `push` (sent to the approver's enrolled devices) are reserved names.
712
727
  */
@@ -866,6 +881,10 @@ export type PushRegistration = Apns | Fcm | WebPush;
866
881
  * Which of an account's two queues. `receive` holds messages addressed to the account awaiting its pickup. `send` holds messages the account sent that are still held against it until their recipient deletes them — so a stalled recipient fills its senders' send queues.
867
882
  */
868
883
  export type Queue = "receive" | "send";
884
+ /**
885
+ * Why the administrator is making this change. Recorded with it in the audit trail. Attributed to its author on every surface and untrusted: it MUST NOT carry personal data or a credential, and a reader MUST NOT treat it as instructions.
886
+ */
887
+ export type Reason = string;
869
888
  /**
870
889
  * How many records the room held when `DataCommitment` was computed — the number of leaves in that tree, tombstones included, since a tombstone is a record.
871
890
  *
@@ -970,6 +989,10 @@ export type RoleKeyState = "pending" | "staged" | "active" | "retiring" | "retir
970
989
  * A role identifier: lowercase, hyphen-separated, at most 64 characters. Compared by exact string equality. It is the value an AclEntry 0.2 carries in `role`.
971
990
  */
972
991
  export type RoleName = string;
992
+ /**
993
+ * A name for the room, chosen by an administrator: shown to administrators and to the members a room is offered to. Not part of the room's identity and not sent to the room's host path. MUST NOT carry personal data.
994
+ */
995
+ export type RoomLabel = string;
973
996
  /**
974
997
  * `planned` — a successor was staged, activated, and the predecessor retired on the operator's schedule. `compromise` — a key was revoked and, where the role would otherwise be empty, replaced in the same log entry. `addition` — a key was added to a role without anything leaving it (for example a post-quantum key alongside a classical one).
975
998
  */
@@ -1133,7 +1156,11 @@ export type TickLength = string;
1133
1156
  /**
1134
1157
  * One kind of change a console can be told about. A closed set: a topic not listed here is a new MINOR version of this component, not an `ext` member, because each topic is bound to the read that authorizes it.
1135
1158
  */
1136
- export type Topic = "actions" | "acknowledgements" | "joinRequests" | "members" | "singleAdminMode" | "config";
1159
+ export type Topic_VtcAdminEventsV0_1 = "actions" | "acknowledgements" | "joinRequests" | "members" | "singleAdminMode" | "config";
1160
+ /**
1161
+ * One kind of change a console can be told about. A closed set: a topic not listed here is a new MINOR version of this component, not an `ext` member, because each topic is bound to the read that authorizes it.
1162
+ */
1163
+ export type Topic_VtcAdminEventsV0_2 = "actions" | "acknowledgements" | "joinRequests" | "members" | "singleAdminMode" | "config" | "rooms";
1137
1164
  /**
1138
1165
  * How the traffic reached or left the mediator. `peerMediator` is mediator-to-mediator forwarding.
1139
1166
  */
@@ -4323,6 +4350,33 @@ export interface CommunityProfileView {
4323
4350
  */
4324
4351
  personhood?: PersonhoodGovernance;
4325
4352
  }
4353
+ /**
4354
+ * One room the community owns, as its administrators see it.
4355
+ */
4356
+ export interface CommunityRoom {
4357
+ room: HostedRoom;
4358
+ label: RoomLabel;
4359
+ /**
4360
+ * The storage config receiving the room's new uploads.
4361
+ */
4362
+ storageConfig?: StorageConfigId;
4363
+ /**
4364
+ * Members in state `admitted`.
4365
+ */
4366
+ admitted: number;
4367
+ /**
4368
+ * Offers not yet accepted or withdrawn.
4369
+ */
4370
+ offered: number;
4371
+ /**
4372
+ * When the community's own `admin` authority over the room expires. A room whose owner's authority lapses can no longer advance its epoch, admit or remove; a community SHOULD renew it well before.
4373
+ */
4374
+ ownerAuthorityValidUntil?: string;
4375
+ /**
4376
+ * The administrator who created it.
4377
+ */
4378
+ createdBy?: string;
4379
+ }
4326
4380
  /**
4327
4381
  * A community's portable configuration: its profile plus the configuration overrides a maintainer stores for itself. Deliberately excludes per-host layers (environment variables, on-disk config files) — those describe where a maintainer runs, not what the community is, and carrying them would make an import overwrite the target host's own deployment settings.
4328
4382
  *
@@ -6470,6 +6524,43 @@ export interface MonitorFilter {
6470
6524
  */
6471
6525
  failuresOnly?: boolean;
6472
6526
  }
6527
+ /**
6528
+ * A community's offer of admission to a room it owns, as the member it is addressed to sees it.
6529
+ */
6530
+ export interface Offer {
6531
+ roomId: string;
6532
+ /**
6533
+ * The room's host: this community.
6534
+ */
6535
+ host: string;
6536
+ label: RoomLabel;
6537
+ visibility: Visibility;
6538
+ actions: MemberActions;
6539
+ validUntil: string;
6540
+ offeredAt: string;
6541
+ /**
6542
+ * `open`: not yet accepted. `accepted`: accepted, kept listed while a repeated accept can still be answered.
6543
+ */
6544
+ state: "open" | "accepted";
6545
+ credentials: OfferCredentials;
6546
+ }
6547
+ /**
6548
+ * The three credentials the room issued to the member, serialized as rooms/owner/{invite,issue-membership,issue-authority} return them. None is a secret: each names its subject, and a presentation of it must be signed by that subject. The member stores them in their own key holder's vault.
6549
+ */
6550
+ export interface OfferCredentials {
6551
+ /**
6552
+ * The Verifiable Invitation Credential. On a sealed tier the member's key holder needs it to mint a KeyPackage (rooms/keys/key-package) and to accept the Welcome (rooms/keys/welcome).
6553
+ */
6554
+ invitation: string;
6555
+ /**
6556
+ * The Verifiable Membership Credential.
6557
+ */
6558
+ membership: string;
6559
+ /**
6560
+ * The Verifiable Authority Credential granting `actions` until `validUntil`.
6561
+ */
6562
+ authority: string;
6563
+ }
6473
6564
  export interface PasskeyVerificationMethod {
6474
6565
  /**
6475
6566
  * The verificationMethod id as it appears in the DID document: `<did>#passkey-<base64url(sha256(credentialId))>`. The fragment is content-derived so a verifier can locate this VM by recomputing `sha256(credential.id)`.
@@ -7609,6 +7700,21 @@ export interface RoomLimits {
7609
7700
  */
7610
7701
  member?: ScopeLimits;
7611
7702
  }
7703
+ /**
7704
+ * One party the community admitted to a room it owns, or offered admission to.
7705
+ */
7706
+ export interface RoomMember {
7707
+ member: string;
7708
+ actions: MemberActions;
7709
+ /**
7710
+ * When the member's authority credential expires.
7711
+ */
7712
+ validUntil: string;
7713
+ state: MemberState;
7714
+ offeredAt: string;
7715
+ admittedAt?: string;
7716
+ removedAt?: string;
7717
+ }
7612
7718
  /**
7613
7719
  * One change to a role's key set, from preview to completion. The rotation history of a DID is the list of these; the log is the authority for what was published, and this record adds what the log cannot say — which change was which, and (custody projection only) who asked, who approved, and why.
7614
7720
  */