@openvtc/trust-tasks 0.28.18 → 0.28.19

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 (160) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/_shared/components.d.ts +228 -0
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/index.d.ts +75 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +75 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/vtc/badges/_shared/0.1/badge.d.ts +22 -0
  9. package/dist/vtc/badges/_shared/0.1/badge.d.ts.map +1 -0
  10. package/dist/vtc/badges/_shared/0.1/badge.js +6 -0
  11. package/dist/vtc/badges/_shared/0.1/badge.js.map +1 -0
  12. package/dist/vtc/badges/awards/list/0.1/payload.d.ts +1228 -0
  13. package/dist/vtc/badges/awards/list/0.1/payload.d.ts.map +1 -0
  14. package/dist/vtc/badges/awards/list/0.1/payload.js +699 -0
  15. package/dist/vtc/badges/awards/list/0.1/payload.js.map +1 -0
  16. package/dist/vtc/badges/awards/offer/0.1/payload.d.ts +793 -0
  17. package/dist/vtc/badges/awards/offer/0.1/payload.d.ts.map +1 -0
  18. package/dist/vtc/badges/awards/offer/0.1/payload.js +461 -0
  19. package/dist/vtc/badges/awards/offer/0.1/payload.js.map +1 -0
  20. package/dist/vtc/badges/awards/revoke/0.1/payload.d.ts +605 -0
  21. package/dist/vtc/badges/awards/revoke/0.1/payload.d.ts.map +1 -0
  22. package/dist/vtc/badges/awards/revoke/0.1/payload.js +351 -0
  23. package/dist/vtc/badges/awards/revoke/0.1/payload.js.map +1 -0
  24. package/dist/vtc/badges/awards/withdraw/0.1/payload.d.ts +605 -0
  25. package/dist/vtc/badges/awards/withdraw/0.1/payload.d.ts.map +1 -0
  26. package/dist/vtc/badges/awards/withdraw/0.1/payload.js +351 -0
  27. package/dist/vtc/badges/awards/withdraw/0.1/payload.js.map +1 -0
  28. package/dist/vtc/badges/create/0.1/payload.d.ts +1829 -0
  29. package/dist/vtc/badges/create/0.1/payload.d.ts.map +1 -0
  30. package/dist/vtc/badges/create/0.1/payload.js +1051 -0
  31. package/dist/vtc/badges/create/0.1/payload.js.map +1 -0
  32. package/dist/vtc/badges/holders/list/0.1/payload.d.ts +984 -0
  33. package/dist/vtc/badges/holders/list/0.1/payload.d.ts.map +1 -0
  34. package/dist/vtc/badges/holders/list/0.1/payload.js +555 -0
  35. package/dist/vtc/badges/holders/list/0.1/payload.js.map +1 -0
  36. package/dist/vtc/badges/images/get/0.1/payload.d.ts +454 -0
  37. package/dist/vtc/badges/images/get/0.1/payload.d.ts.map +1 -0
  38. package/dist/vtc/badges/images/get/0.1/payload.js +266 -0
  39. package/dist/vtc/badges/images/get/0.1/payload.js.map +1 -0
  40. package/dist/vtc/badges/images/upload/0.1/payload.d.ts +455 -0
  41. package/dist/vtc/badges/images/upload/0.1/payload.d.ts.map +1 -0
  42. package/dist/vtc/badges/images/upload/0.1/payload.js +276 -0
  43. package/dist/vtc/badges/images/upload/0.1/payload.js.map +1 -0
  44. package/dist/vtc/badges/kudos/give/0.1/payload.d.ts +613 -0
  45. package/dist/vtc/badges/kudos/give/0.1/payload.d.ts.map +1 -0
  46. package/dist/vtc/badges/kudos/give/0.1/payload.js +353 -0
  47. package/dist/vtc/badges/kudos/give/0.1/payload.js.map +1 -0
  48. package/dist/vtc/badges/kudos/list/0.1/payload.d.ts +1766 -0
  49. package/dist/vtc/badges/kudos/list/0.1/payload.d.ts.map +1 -0
  50. package/dist/vtc/badges/kudos/list/0.1/payload.js +995 -0
  51. package/dist/vtc/badges/kudos/list/0.1/payload.js.map +1 -0
  52. package/dist/vtc/badges/list/0.1/payload.d.ts +1096 -0
  53. package/dist/vtc/badges/list/0.1/payload.d.ts.map +1 -0
  54. package/dist/vtc/badges/list/0.1/payload.js +617 -0
  55. package/dist/vtc/badges/list/0.1/payload.js.map +1 -0
  56. package/dist/vtc/badges/mine/accept/0.1/payload.d.ts +1376 -0
  57. package/dist/vtc/badges/mine/accept/0.1/payload.d.ts.map +1 -0
  58. package/dist/vtc/badges/mine/accept/0.1/payload.js +799 -0
  59. package/dist/vtc/badges/mine/accept/0.1/payload.js.map +1 -0
  60. package/dist/vtc/badges/mine/arrange/0.1/payload.d.ts +1217 -0
  61. package/dist/vtc/badges/mine/arrange/0.1/payload.d.ts.map +1 -0
  62. package/dist/vtc/badges/mine/arrange/0.1/payload.js +698 -0
  63. package/dist/vtc/badges/mine/arrange/0.1/payload.js.map +1 -0
  64. package/dist/vtc/badges/mine/decline/0.1/payload.d.ts +589 -0
  65. package/dist/vtc/badges/mine/decline/0.1/payload.d.ts.map +1 -0
  66. package/dist/vtc/badges/mine/decline/0.1/payload.js +344 -0
  67. package/dist/vtc/badges/mine/decline/0.1/payload.js.map +1 -0
  68. package/dist/vtc/badges/mine/hide/0.1/payload.d.ts +1093 -0
  69. package/dist/vtc/badges/mine/hide/0.1/payload.d.ts.map +1 -0
  70. package/dist/vtc/badges/mine/hide/0.1/payload.js +630 -0
  71. package/dist/vtc/badges/mine/hide/0.1/payload.js.map +1 -0
  72. package/dist/vtc/badges/mine/list/0.1/payload.d.ts +1897 -0
  73. package/dist/vtc/badges/mine/list/0.1/payload.d.ts.map +1 -0
  74. package/dist/vtc/badges/mine/list/0.1/payload.js +1087 -0
  75. package/dist/vtc/badges/mine/list/0.1/payload.js.map +1 -0
  76. package/dist/vtc/badges/mine/show/0.1/payload.d.ts +1093 -0
  77. package/dist/vtc/badges/mine/show/0.1/payload.d.ts.map +1 -0
  78. package/dist/vtc/badges/mine/show/0.1/payload.js +630 -0
  79. package/dist/vtc/badges/mine/show/0.1/payload.js.map +1 -0
  80. package/dist/vtc/badges/promote/0.1/payload.d.ts +1757 -0
  81. package/dist/vtc/badges/promote/0.1/payload.d.ts.map +1 -0
  82. package/dist/vtc/badges/promote/0.1/payload.js +1018 -0
  83. package/dist/vtc/badges/promote/0.1/payload.js.map +1 -0
  84. package/dist/vtc/badges/retire/0.1/payload.d.ts +904 -0
  85. package/dist/vtc/badges/retire/0.1/payload.d.ts.map +1 -0
  86. package/dist/vtc/badges/retire/0.1/payload.js +524 -0
  87. package/dist/vtc/badges/retire/0.1/payload.js.map +1 -0
  88. package/dist/vtc/badges/settings/show/0.1/payload.d.ts +731 -0
  89. package/dist/vtc/badges/settings/show/0.1/payload.d.ts.map +1 -0
  90. package/dist/vtc/badges/settings/show/0.1/payload.js +421 -0
  91. package/dist/vtc/badges/settings/show/0.1/payload.js.map +1 -0
  92. package/dist/vtc/badges/settings/update/0.1/payload.d.ts +775 -0
  93. package/dist/vtc/badges/settings/update/0.1/payload.d.ts.map +1 -0
  94. package/dist/vtc/badges/settings/update/0.1/payload.js +444 -0
  95. package/dist/vtc/badges/settings/update/0.1/payload.js.map +1 -0
  96. package/dist/vtc/badges/show/0.1/payload.d.ts +1056 -0
  97. package/dist/vtc/badges/show/0.1/payload.d.ts.map +1 -0
  98. package/dist/vtc/badges/show/0.1/payload.js +613 -0
  99. package/dist/vtc/badges/show/0.1/payload.js.map +1 -0
  100. package/dist/vtc/badges/update/0.1/payload.d.ts +1033 -0
  101. package/dist/vtc/badges/update/0.1/payload.d.ts.map +1 -0
  102. package/dist/vtc/badges/update/0.1/payload.js +588 -0
  103. package/dist/vtc/badges/update/0.1/payload.js.map +1 -0
  104. package/dist/vtc/badges/wall/show/0.1/payload.d.ts +1099 -0
  105. package/dist/vtc/badges/wall/show/0.1/payload.d.ts.map +1 -0
  106. package/dist/vtc/badges/wall/show/0.1/payload.js +634 -0
  107. package/dist/vtc/badges/wall/show/0.1/payload.js.map +1 -0
  108. package/dist/vtc/groups/create/0.1/payload.d.ts +42 -2
  109. package/dist/vtc/groups/create/0.1/payload.d.ts.map +1 -1
  110. package/dist/vtc/groups/create/0.1/payload.js +20 -0
  111. package/dist/vtc/groups/create/0.1/payload.js.map +1 -1
  112. package/dist/vtc/groups/list/0.1/payload.d.ts +42 -2
  113. package/dist/vtc/groups/list/0.1/payload.d.ts.map +1 -1
  114. package/dist/vtc/groups/list/0.1/payload.js +20 -0
  115. package/dist/vtc/groups/list/0.1/payload.js.map +1 -1
  116. package/dist/vtc/groups/list/0.2/payload.d.ts +42 -2
  117. package/dist/vtc/groups/list/0.2/payload.d.ts.map +1 -1
  118. package/dist/vtc/groups/list/0.2/payload.js +20 -0
  119. package/dist/vtc/groups/list/0.2/payload.js.map +1 -1
  120. package/dist/vtc/groups/show/0.1/payload.d.ts +42 -2
  121. package/dist/vtc/groups/show/0.1/payload.d.ts.map +1 -1
  122. package/dist/vtc/groups/show/0.1/payload.js +20 -0
  123. package/dist/vtc/groups/show/0.1/payload.js.map +1 -1
  124. package/dist/vtc/groups/update/0.1/payload.d.ts +42 -2
  125. package/dist/vtc/groups/update/0.1/payload.d.ts.map +1 -1
  126. package/dist/vtc/groups/update/0.1/payload.js +20 -0
  127. package/dist/vtc/groups/update/0.1/payload.js.map +1 -1
  128. package/package.json +1 -1
  129. package/src/_shared/components.ts +228 -0
  130. package/src/index.ts +75 -0
  131. package/src/vtc/badges/_shared/0.1/badge.ts +23 -0
  132. package/src/vtc/badges/awards/list/0.1/payload.ts +768 -0
  133. package/src/vtc/badges/awards/offer/0.1/payload.ts +530 -0
  134. package/src/vtc/badges/awards/revoke/0.1/payload.ts +395 -0
  135. package/src/vtc/badges/awards/withdraw/0.1/payload.ts +395 -0
  136. package/src/vtc/badges/create/0.1/payload.ts +1137 -0
  137. package/src/vtc/badges/holders/list/0.1/payload.ts +628 -0
  138. package/src/vtc/badges/images/get/0.1/payload.ts +311 -0
  139. package/src/vtc/badges/images/upload/0.1/payload.ts +324 -0
  140. package/src/vtc/badges/kudos/give/0.1/payload.ts +401 -0
  141. package/src/vtc/badges/kudos/list/0.1/payload.ts +1080 -0
  142. package/src/vtc/badges/list/0.1/payload.ts +695 -0
  143. package/src/vtc/badges/mine/accept/0.1/payload.ts +840 -0
  144. package/src/vtc/badges/mine/arrange/0.1/payload.ts +768 -0
  145. package/src/vtc/badges/mine/decline/0.1/payload.ts +384 -0
  146. package/src/vtc/badges/mine/hide/0.1/payload.ts +670 -0
  147. package/src/vtc/badges/mine/list/0.1/payload.ts +1153 -0
  148. package/src/vtc/badges/mine/show/0.1/payload.ts +670 -0
  149. package/src/vtc/badges/promote/0.1/payload.ts +1088 -0
  150. package/src/vtc/badges/retire/0.1/payload.ts +565 -0
  151. package/src/vtc/badges/settings/show/0.1/payload.ts +457 -0
  152. package/src/vtc/badges/settings/update/0.1/payload.ts +490 -0
  153. package/src/vtc/badges/show/0.1/payload.ts +675 -0
  154. package/src/vtc/badges/update/0.1/payload.ts +656 -0
  155. package/src/vtc/badges/wall/show/0.1/payload.ts +684 -0
  156. package/src/vtc/groups/create/0.1/payload.ts +22 -2
  157. package/src/vtc/groups/list/0.1/payload.ts +22 -2
  158. package/src/vtc/groups/list/0.2/payload.ts +22 -2
  159. package/src/vtc/groups/show/0.1/payload.ts +22 -2
  160. package/src/vtc/groups/update/0.1/payload.ts +22 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,38 @@ 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.28.19 — 2026-11-06
15
+
16
+
17
+ ### Added
18
+
19
+ - **vtc/badges**: Member badges — community badges backed by groups, awards accepted by the member, kudos, Open Badges credentials (vtc/badges/*/0.1) (#1052)
20
+
21
+ * feat(vtc/badges): member badges — community badges backed by groups, awards accepted by the member, kudos, Open Badges credentials (vtc/badges/*/0.1)
22
+
23
+ A new family for the VTI Community Badges chapter (VTI-BDG-001 – 095): pictures
24
+ with a name a member earns, holds and shows on their directory card.
25
+
26
+ - A community badge is backed by a community group: `create` creates the group
27
+ as vtc/groups/create does, its managers are the badge's owners, its members
28
+ the holders; requests reuse vtc/groups/join and requests/decide, owners reuse
29
+ managers/add and remove. The shared Group record gains an optional `badgeId`
30
+ (additive).
31
+ - An award is an offer until its recipient accepts (awards/offer → mine/accept
32
+ or mine/decline); mine/accept issues the badge credential as the group's DID
33
+ first and records the membership after. mine/accept states the credential
34
+ profile: an Open Badges 3.0 OpenBadgeCredential with the community as the
35
+ Achievement's creator and endorser, one evidence entry per award; short-lived
36
+ with no status inside the community, long-lived with a slot in the community's
37
+ own status set where holders may show it outside.
38
+ - Hidden is portal-only (mine/hide, mine/show): walls, holders/list and counts
39
+ leave a hidden holder out; awards/list shows owners the hidden mark.
40
+ - Kudos badges (kudos/give, kudos/list): given by any member to any other within
41
+ per-giver limits, each giving an award of its own; promote turns one into a
42
+ community badge.
43
+ - settings/show and settings/update hold the community's switches and limits.
44
+ - images/upload and images/get mirror the directory's picture pipeline.
45
+
14
46
  ## 0.28.18 — 2026-11-05
15
47
 
16
48
 
@@ -385,12 +385,48 @@ export type AuthModel = "aws-roles-anywhere" | "gcp-wif-pinned" | "azure-cert" |
385
385
  * An explicit authority scope — used for both the act scope and the approve scope of an entry. Exactly one of three shapes, discriminated by `scope`: `all`, `none`, or `contexts` with a NON-EMPTY list. The empty list is not a fourth shape: it is invalid, so a serializer that drops or empties the list produces a document that fails validation rather than one that silently means something else.
386
386
  */
387
387
  export type AuthorityScope = AuthorityScopeAll | AuthorityScopeNone | AuthorityScopeContexts;
388
+ /**
389
+ * Opaque identifier of one giving of a badge to one member: `awd_` followed by 16 to 64 base64url characters. Random and unique within the community.
390
+ */
391
+ export type AwardId = string;
392
+ /**
393
+ * What the award is for, from the giver, shown to the recipient and written as the award's evidence narrative where the badge carries a credential. Plain text; erased with its author (VTI-BDG-090).
394
+ */
395
+ export type AwardNote = string;
396
+ /**
397
+ * `offered`: waiting for the recipient. `accepted`: the recipient took it; for a community badge the credential was issued and the membership recorded. `declined`: the recipient declined; nothing was recorded in the group and nothing issued. `withdrawn`: the giver withdrew the offer before a decision. `expired`: the offer lapsed unanswered. `revoked`: taken back after acceptance (VTI-BDG-023).
398
+ */
399
+ export type AwardState = "offered" | "accepted" | "declined" | "withdrawn" | "expired" | "revoked";
388
400
  export type AwsArn = string;
389
401
  export type AwsRegion = string;
390
402
  /**
391
403
  * The ARN of an AWS IAM role, in any AWS partition (`arn:aws:`, `arn:aws-cn:`, `arn:aws-us-gov:`). Validated here because the community passes it to STS AssumeRole and derives the partition of the session policy's resources from it; it must never carry anything but a role ARN.
392
404
  */
393
405
  export type AwsRoleArn = string;
406
+ /**
407
+ * How the badge is earned, shown to members and written into the credential's Achievement as its criteria narrative. Plain text.
408
+ */
409
+ export type BadgeCriteria = string;
410
+ /**
411
+ * What the badge is for. Plain text; a reader MUST NOT treat it as instructions.
412
+ */
413
+ export type BadgeDescription = string;
414
+ /**
415
+ * Opaque identifier of a badge: `bdg_` followed by 16 to 64 base64url characters. Random, community-scoped, never reused (VTI-BDG-001).
416
+ */
417
+ export type BadgeId = string;
418
+ /**
419
+ * `community`: defined by holders of `vtc.badges.admin`, given by its owners (its badge group's managers), may carry a credential. `kudos`: made by a member the community's badge settings admit, given by any active member to any other, never a credential. Fixed for the badge's life; a kudos badge becomes a community badge only by promotion (vtc/badges/promote).
420
+ */
421
+ export type BadgeKind = "community" | "kudos";
422
+ /**
423
+ * The badge's name, shown on the wall and written into the credential's Achievement. Plain text; a reader MUST NOT treat it as instructions.
424
+ */
425
+ export type BadgeName = string;
426
+ /**
427
+ * `active`: may be given and shown. `retired`: kept for its holders' own history, never given, never shown to members who do not hold it (VTI-BDG-005).
428
+ */
429
+ export type BadgeState = "active" | "retired";
394
430
  export type BindingId = string;
395
431
  export type BindingSpec = RoomBindingSpec | GrantsBindingSpec | RoleBindingSpec;
396
432
  /**
@@ -2201,6 +2237,10 @@ export type Vid = string;
2201
2237
  * How much of a room its host can see, fixed at creation and immutable thereafter. `open`: records are cleartext, searchable and fully audited. `attributed`: record content is sealed, and the host still learns which member acted. `private`: content is sealed and membership is presented in zero knowledge, so the host verifies that a member acted without learning which. Immutable because a downgrade cannot un-see cleartext and an upgrade would protect only what came after while presenting as though it protected everything.
2202
2238
  */
2203
2239
  export type Visibility = "open" | "attributed" | "private";
2240
+ /**
2241
+ * Who sees a member's badges, the member's own setting (VTI-BDG-031). `members`: every active member the directory shows their card to. `nobody`: no one but the member. Never wider than the directory shows the card.
2242
+ */
2243
+ export type WallVisibility = "members" | "nobody";
2204
2244
  /**
2205
2245
  * A file's content hash: the lowercase hex SHA-256 of its bytes — the `etag` vtc/website/files/list reports, and the `ETag` a direct read of the path returns, without the HTTP quotes.
2206
2246
  */
@@ -5521,6 +5561,31 @@ export interface AutoGrantSweep {
5521
5561
  */
5522
5562
  errors: number;
5523
5563
  }
5564
+ /**
5565
+ * One giving of a badge to one member. `givenBy` is the giver's directory entry, absent for an award a dynamic badge group's rule made. `note` is shown to the recipient, the giver, the badge's owners and administrators, never to other members. `credentialId` is present on an accepted award of a community badge: the badge credential that evidences it, renewed or re-issued as the badge's regime requires.
5566
+ */
5567
+ export interface Award {
5568
+ awardId: AwardId;
5569
+ badgeId: BadgeId;
5570
+ /**
5571
+ * The recipient.
5572
+ */
5573
+ entryId: EntryId;
5574
+ givenBy?: EntryId;
5575
+ note?: AwardNote;
5576
+ state: AwardState;
5577
+ offeredAt: string;
5578
+ /**
5579
+ * When the recipient accepted or declined, the giver withdrew, the offer expired, or the award was revoked.
5580
+ */
5581
+ decidedAt?: string;
5582
+ /**
5583
+ * When an unanswered offer lapses, where the community expires offers.
5584
+ */
5585
+ expiresAt?: string;
5586
+ credentialId?: GroupCredentialId;
5587
+ ext?: Ext;
5588
+ }
5524
5589
  /**
5525
5590
  * Unencrypted metadata plus the encrypted payload. The KDF and cipher parameters travel in the clear so a reader can decrypt without knowing this specification's defaults.
5526
5591
  */
@@ -5556,6 +5621,108 @@ export interface BackupEnvelope {
5556
5621
  */
5557
5622
  ciphertext: string;
5558
5623
  }
5624
+ /**
5625
+ * A badge as a caller who may see it sees it. `groupId` is present exactly when `kind` is `community`. `holderCount` only to callers who may see the badge's holders, counted over holders who have not hidden it (VTI-BDG-030, VTI-BDG-033). `createdBy` is the directory entry of the administrator or member who made it, where they have one.
5626
+ */
5627
+ export interface Badge {
5628
+ badgeId: BadgeId;
5629
+ kind: BadgeKind;
5630
+ name: BadgeName;
5631
+ description: BadgeDescription;
5632
+ criteria?: BadgeCriteria;
5633
+ /**
5634
+ * The badge's picture, re-encoded and stored by the community (vtc/badges/images/upload), read with vtc/badges/images/get. `url` and `urlExpiresAt` MAY appear in a projection as for a card picture; for a badge whose holders may show it outside, `url` MAY be the picture's stable public location.
5635
+ */
5636
+ image: CardBlobRef;
5637
+ /**
5638
+ * Whether one member may hold the badge more than once, each giving an award of its own (VTI-BDG-022). Always true for a kudos badge.
5639
+ */
5640
+ repeatable: boolean;
5641
+ /**
5642
+ * Community badges only. Whether a member may ask for it: a request to join its badge group, decided by its owners (VTI-BDG-014). Absent reads as false.
5643
+ */
5644
+ requestable?: boolean;
5645
+ /**
5646
+ * Whether members who do not hold the badge see it in the community's badge list. An unlisted badge is seen by its holders, its owners and administrators.
5647
+ */
5648
+ listed: boolean;
5649
+ /**
5650
+ * Community badges only. Whether its holders may show it outside the community, which decides the credential's regime: short-lived and renewed with no status when false, long-lived with a status in the community's own status set when true (VTI-BDG-061, VTI-BDG-062). Absent reads as false.
5651
+ */
5652
+ shareableOutside?: boolean;
5653
+ /**
5654
+ * The badge group that backs a community badge: its managers are the badge's owners, its members the holders, its DID the credential's issuer.
5655
+ */
5656
+ groupId?: GroupId;
5657
+ state: BadgeState;
5658
+ /**
5659
+ * Holders who show the badge. Only to callers who may see the holders.
5660
+ */
5661
+ holderCount?: number;
5662
+ createdAt: string;
5663
+ createdBy?: EntryId;
5664
+ updatedAt?: string;
5665
+ retiredAt?: string;
5666
+ /**
5667
+ * Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT carry authority.
5668
+ */
5669
+ ext?: Ext;
5670
+ }
5671
+ /**
5672
+ * The community's bounds (VTI-BDG-032, VTI-BDG-040). Each has a default a community that states none applies.
5673
+ */
5674
+ export interface BadgeLimits {
5675
+ /**
5676
+ * Kudos one member may give in a day. Default 10.
5677
+ */
5678
+ kudosPerGiverPerDay?: number;
5679
+ /**
5680
+ * How often the same member may give a kudos badge to the same member: at most once a day, once a week, or without bound. Default `day`.
5681
+ */
5682
+ sameGiverSameMember?: "day" | "week" | "unbounded";
5683
+ /**
5684
+ * Days of membership before a member may give kudos or make a kudos badge. Default 7.
5685
+ */
5686
+ minTenureDays?: number;
5687
+ /**
5688
+ * Kudos badges one member may make in a calendar month. Default 5.
5689
+ */
5690
+ kudosBadgesPerMakerPerMonth?: number;
5691
+ /**
5692
+ * Badges a member may pin beside their name. Default 2.
5693
+ */
5694
+ maxPinned?: number;
5695
+ /**
5696
+ * Days an unanswered offer stands before it expires. Absent: offers do not expire.
5697
+ */
5698
+ offerExpiresAfterDays?: number;
5699
+ }
5700
+ /**
5701
+ * The community's badge settings (VTI-BDG-004). `enabled` false hides every badge surface and keeps every record; nothing is given or issued while it is false.
5702
+ */
5703
+ export interface BadgeSettings {
5704
+ enabled: boolean;
5705
+ kudosMakers: KudosMakers;
5706
+ limits?: BadgeLimits;
5707
+ /**
5708
+ * Whether a member's kudos total is shown on their card (VTI-BDG-043).
5709
+ */
5710
+ showKudosTotals: boolean;
5711
+ /**
5712
+ * Whether dynamic badge groups are computed (VTI-BDG-013). False: a community badge may not be created on a dynamic group, and existing ones are not recomputed.
5713
+ */
5714
+ automaticBadges: boolean;
5715
+ /**
5716
+ * Whether any community badge may be marked `requestable`. False: every badge group is closed.
5717
+ */
5718
+ membersMayRequest: boolean;
5719
+ /**
5720
+ * Validity of a badge credential its holders may show outside (VTI-BDG-062). Default 730.
5721
+ */
5722
+ credentialValidDays?: number;
5723
+ updatedAt?: string;
5724
+ ext?: Ext;
5725
+ }
5559
5726
  /**
5560
5727
  * An open ballot: one answer per question of the manifest, in any order. The bytes a cast's proof binds are the RFC 8785 (JCS) canonicalization of this object as received.
5561
5728
  */
@@ -9312,6 +9479,10 @@ export interface Group {
9312
9479
  * `true` while the group has a `grants` or `role` binding. Such a group is `static` and `closed` for as long as it does.
9313
9480
  */
9314
9481
  carriesAuthority: boolean;
9482
+ /**
9483
+ * Present exactly when the group backs a community badge (vtc/badges/*): its managers are the badge's owners, its members the badge's holders, and its DID issues the badge credential in place of a membership credential. A badge group never carries authority, is not counted among the groups two members share, and is listed among the community's groups only to a caller who asks for badge groups (VTI-BDG-010 – VTI-BDG-012).
9484
+ */
9485
+ badgeId?: BadgeId;
9315
9486
  /**
9316
9487
  * Active members. Only to callers who may see the member list.
9317
9488
  */
@@ -10319,6 +10490,24 @@ export interface KeyScopeListed {
10319
10490
  export interface KeyScopeNone {
10320
10491
  scope: "none";
10321
10492
  }
10493
+ /**
10494
+ * Who may make a kudos badge (VTI-BDG-004). `nobody`: no kudos badges. `roles`: holders of any of `roles`, or members of any of `groups`. `members`: every active member.
10495
+ */
10496
+ export interface KudosMakers {
10497
+ policy: "nobody" | "roles" | "members";
10498
+ /**
10499
+ * Community role names. Read exactly when `policy` is `roles`.
10500
+ *
10501
+ * @maxItems 32
10502
+ */
10503
+ roles?: string[];
10504
+ /**
10505
+ * Read exactly when `policy` is `roles`.
10506
+ *
10507
+ * @maxItems 32
10508
+ */
10509
+ groups?: GroupId[];
10510
+ }
10322
10511
  /**
10323
10512
  * Which limits an override applies to. `room`: the room as a whole. `memberDefault`: every member of the room who has no override of their own. `member`: one named member — `member` is REQUIRED with this kind and forbidden with the others, a rule this schema does not express; a community refuses a violation with `malformedRequest`.
10324
10513
  */
@@ -10956,6 +11145,26 @@ export interface MonitorFilter {
10956
11145
  */
10957
11146
  failuresOnly?: boolean;
10958
11147
  }
11148
+ /**
11149
+ * A badge as its holder sees it in their own list: the wall entry plus what only the holder knows — whether they hid it, their position for it, and the credential that evidences it.
11150
+ */
11151
+ export interface MyBadge {
11152
+ badge: Badge;
11153
+ count: number;
11154
+ since: string;
11155
+ latestAt?: string;
11156
+ pinned: boolean;
11157
+ /**
11158
+ * The holder hid it: off their wall, out of the badge's holder list for members, out of its count; the awards, the membership and the credential stand (VTI-BDG-030).
11159
+ */
11160
+ hidden: boolean;
11161
+ /**
11162
+ * The holder's order on their wall, lowest first.
11163
+ */
11164
+ position?: number;
11165
+ credentialId?: GroupCredentialId;
11166
+ credentialValidUntil?: string;
11167
+ }
10959
11168
  export interface NetworkMembership {
10960
11169
  /**
10961
11170
  * The network's DID.
@@ -15852,6 +16061,25 @@ export interface WakeTriggerPolicy {
15852
16061
  */
15853
16062
  allowedTriggers: string[];
15854
16063
  }
16064
+ /**
16065
+ * One badge on a member's wall as a viewer sees it: the badge, how many times the member holds it, since when, and whether the member pinned it. Hidden badges are never wall entries (VTI-BDG-030).
16066
+ */
16067
+ export interface WallEntry {
16068
+ badge: Badge;
16069
+ /**
16070
+ * Accepted awards of this badge the member holds.
16071
+ */
16072
+ count: number;
16073
+ /**
16074
+ * When the member first accepted this badge.
16075
+ */
16076
+ since: string;
16077
+ /**
16078
+ * When the member last accepted an award of this badge.
16079
+ */
16080
+ latestAt?: string;
16081
+ pinned: boolean;
16082
+ }
15855
16083
  export interface WalrusSettings {
15856
16084
  kind: "walrus";
15857
16085
  /**