@openclaw/buzz 2026.8.1-beta.2 → 2026.9.1-beta.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.
Files changed (137) hide show
  1. package/dist/{adapter.runtime-D0uEmTwf.js → adapter.runtime-DA6guOQ_.js} +5 -5
  2. package/dist/api.js +2 -2
  3. package/dist/{channel-CCmyE6Yq.js → channel-BulZqShF.js} +234 -270
  4. package/dist/channel-plugin-api.js +1 -1
  5. package/dist/{directory-config-BXa3Vqzu.js → directory-config-BesCse0q.js} +1 -1
  6. package/dist/directory-contract-api.js +1 -1
  7. package/dist/qa-runner-api.js +2 -2
  8. package/dist/{room-membership-CNBlHjTj.js → room-membership-DSAkyE0a.js} +55 -5
  9. package/dist/setup-plugin-api.js +2 -2
  10. package/dist/{setup-surface-DCxlD2oY.js → setup-surface-BvQgEJ7O.js} +20 -42
  11. package/dist/{types-CPFsIZ5Z.js → types-BN_HOsnq.js} +18 -5
  12. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js +7 -5
  13. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js.map +2 -2
  14. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js +6 -4
  15. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js.map +2 -2
  16. package/node_modules/nostr-tools/lib/cjs/core.js +10 -6
  17. package/node_modules/nostr-tools/lib/cjs/core.js.map +2 -2
  18. package/node_modules/nostr-tools/lib/cjs/index.js +17 -11
  19. package/node_modules/nostr-tools/lib/cjs/index.js.map +2 -2
  20. package/node_modules/nostr-tools/lib/cjs/kinds.js +2 -0
  21. package/node_modules/nostr-tools/lib/cjs/kinds.js.map +2 -2
  22. package/node_modules/nostr-tools/lib/cjs/nip04.js.map +1 -1
  23. package/node_modules/nostr-tools/lib/cjs/nip10.js +2 -0
  24. package/node_modules/nostr-tools/lib/cjs/nip10.js.map +2 -2
  25. package/node_modules/nostr-tools/lib/cjs/nip13.js.map +1 -1
  26. package/node_modules/nostr-tools/lib/cjs/nip17.js +2 -0
  27. package/node_modules/nostr-tools/lib/cjs/nip17.js.map +2 -2
  28. package/node_modules/nostr-tools/lib/cjs/nip18.js +2 -0
  29. package/node_modules/nostr-tools/lib/cjs/nip18.js.map +2 -2
  30. package/node_modules/nostr-tools/lib/cjs/nip19.js.map +1 -1
  31. package/node_modules/nostr-tools/lib/cjs/nip21.js.map +1 -1
  32. package/node_modules/nostr-tools/lib/cjs/nip22.js +2 -0
  33. package/node_modules/nostr-tools/lib/cjs/nip22.js.map +2 -2
  34. package/node_modules/nostr-tools/lib/cjs/nip25.js +2 -0
  35. package/node_modules/nostr-tools/lib/cjs/nip25.js.map +2 -2
  36. package/node_modules/nostr-tools/lib/cjs/nip27.js.map +1 -1
  37. package/node_modules/nostr-tools/lib/cjs/nip28.js +2 -0
  38. package/node_modules/nostr-tools/lib/cjs/nip28.js.map +2 -2
  39. package/node_modules/nostr-tools/lib/cjs/nip29.js +288 -12
  40. package/node_modules/nostr-tools/lib/cjs/nip29.js.map +2 -2
  41. package/node_modules/nostr-tools/lib/cjs/nip44.js.map +1 -1
  42. package/node_modules/nostr-tools/lib/cjs/nip45.js +2 -0
  43. package/node_modules/nostr-tools/lib/cjs/nip45.js.map +2 -2
  44. package/node_modules/nostr-tools/lib/cjs/nip46.js +9 -5
  45. package/node_modules/nostr-tools/lib/cjs/nip46.js.map +2 -2
  46. package/node_modules/nostr-tools/lib/cjs/nip47.js +2 -0
  47. package/node_modules/nostr-tools/lib/cjs/nip47.js.map +2 -2
  48. package/node_modules/nostr-tools/lib/cjs/nip57.js +2 -0
  49. package/node_modules/nostr-tools/lib/cjs/nip57.js.map +2 -2
  50. package/node_modules/nostr-tools/lib/cjs/nip59.js +2 -0
  51. package/node_modules/nostr-tools/lib/cjs/nip59.js.map +2 -2
  52. package/node_modules/nostr-tools/lib/cjs/nip98.js +2 -0
  53. package/node_modules/nostr-tools/lib/cjs/nip98.js.map +2 -2
  54. package/node_modules/nostr-tools/lib/cjs/nipb0.js +2 -0
  55. package/node_modules/nostr-tools/lib/cjs/nipb0.js.map +2 -2
  56. package/node_modules/nostr-tools/lib/cjs/nipb7.js +2 -0
  57. package/node_modules/nostr-tools/lib/cjs/nipb7.js.map +2 -2
  58. package/node_modules/nostr-tools/lib/cjs/pool.js +9 -5
  59. package/node_modules/nostr-tools/lib/cjs/pool.js.map +2 -2
  60. package/node_modules/nostr-tools/lib/cjs/pure.js +10 -6
  61. package/node_modules/nostr-tools/lib/cjs/pure.js.map +2 -2
  62. package/node_modules/nostr-tools/lib/cjs/references.js.map +1 -1
  63. package/node_modules/nostr-tools/lib/cjs/relay.js +8 -4
  64. package/node_modules/nostr-tools/lib/cjs/relay.js.map +2 -2
  65. package/node_modules/nostr-tools/lib/cjs/signer.js +2 -0
  66. package/node_modules/nostr-tools/lib/cjs/signer.js.map +2 -2
  67. package/node_modules/nostr-tools/lib/cjs/utils.js +2 -0
  68. package/node_modules/nostr-tools/lib/cjs/utils.js.map +2 -2
  69. package/node_modules/nostr-tools/lib/cjs/wasm.js +10 -6
  70. package/node_modules/nostr-tools/lib/cjs/wasm.js.map +2 -2
  71. package/node_modules/nostr-tools/lib/esm/abstract-pool.js +7 -5
  72. package/node_modules/nostr-tools/lib/esm/abstract-pool.js.map +2 -2
  73. package/node_modules/nostr-tools/lib/esm/abstract-relay.js +6 -4
  74. package/node_modules/nostr-tools/lib/esm/abstract-relay.js.map +2 -2
  75. package/node_modules/nostr-tools/lib/esm/core.js +10 -6
  76. package/node_modules/nostr-tools/lib/esm/core.js.map +2 -2
  77. package/node_modules/nostr-tools/lib/esm/index.js +17 -11
  78. package/node_modules/nostr-tools/lib/esm/index.js.map +2 -2
  79. package/node_modules/nostr-tools/lib/esm/kinds.js +2 -0
  80. package/node_modules/nostr-tools/lib/esm/kinds.js.map +2 -2
  81. package/node_modules/nostr-tools/lib/esm/nip04.js.map +1 -1
  82. package/node_modules/nostr-tools/lib/esm/nip10.js +2 -0
  83. package/node_modules/nostr-tools/lib/esm/nip10.js.map +2 -2
  84. package/node_modules/nostr-tools/lib/esm/nip13.js.map +1 -1
  85. package/node_modules/nostr-tools/lib/esm/nip17.js +2 -0
  86. package/node_modules/nostr-tools/lib/esm/nip17.js.map +2 -2
  87. package/node_modules/nostr-tools/lib/esm/nip18.js +2 -0
  88. package/node_modules/nostr-tools/lib/esm/nip18.js.map +2 -2
  89. package/node_modules/nostr-tools/lib/esm/nip19.js.map +1 -1
  90. package/node_modules/nostr-tools/lib/esm/nip21.js.map +1 -1
  91. package/node_modules/nostr-tools/lib/esm/nip22.js +2 -0
  92. package/node_modules/nostr-tools/lib/esm/nip22.js.map +2 -2
  93. package/node_modules/nostr-tools/lib/esm/nip25.js +2 -0
  94. package/node_modules/nostr-tools/lib/esm/nip25.js.map +2 -2
  95. package/node_modules/nostr-tools/lib/esm/nip27.js.map +1 -1
  96. package/node_modules/nostr-tools/lib/esm/nip28.js +2 -0
  97. package/node_modules/nostr-tools/lib/esm/nip28.js.map +2 -2
  98. package/node_modules/nostr-tools/lib/esm/nip29.js +288 -12
  99. package/node_modules/nostr-tools/lib/esm/nip29.js.map +2 -2
  100. package/node_modules/nostr-tools/lib/esm/nip44.js.map +1 -1
  101. package/node_modules/nostr-tools/lib/esm/nip45.js +2 -0
  102. package/node_modules/nostr-tools/lib/esm/nip45.js.map +2 -2
  103. package/node_modules/nostr-tools/lib/esm/nip46.js +9 -5
  104. package/node_modules/nostr-tools/lib/esm/nip46.js.map +2 -2
  105. package/node_modules/nostr-tools/lib/esm/nip47.js +2 -0
  106. package/node_modules/nostr-tools/lib/esm/nip47.js.map +2 -2
  107. package/node_modules/nostr-tools/lib/esm/nip57.js +2 -0
  108. package/node_modules/nostr-tools/lib/esm/nip57.js.map +2 -2
  109. package/node_modules/nostr-tools/lib/esm/nip59.js +2 -0
  110. package/node_modules/nostr-tools/lib/esm/nip59.js.map +2 -2
  111. package/node_modules/nostr-tools/lib/esm/nip98.js +2 -0
  112. package/node_modules/nostr-tools/lib/esm/nip98.js.map +2 -2
  113. package/node_modules/nostr-tools/lib/esm/nipb0.js +2 -0
  114. package/node_modules/nostr-tools/lib/esm/nipb0.js.map +2 -2
  115. package/node_modules/nostr-tools/lib/esm/nipb7.js +2 -0
  116. package/node_modules/nostr-tools/lib/esm/nipb7.js.map +2 -2
  117. package/node_modules/nostr-tools/lib/esm/pool.js +9 -5
  118. package/node_modules/nostr-tools/lib/esm/pool.js.map +2 -2
  119. package/node_modules/nostr-tools/lib/esm/pure.js +10 -6
  120. package/node_modules/nostr-tools/lib/esm/pure.js.map +2 -2
  121. package/node_modules/nostr-tools/lib/esm/references.js.map +1 -1
  122. package/node_modules/nostr-tools/lib/esm/relay.js +8 -4
  123. package/node_modules/nostr-tools/lib/esm/relay.js.map +2 -2
  124. package/node_modules/nostr-tools/lib/esm/signer.js +2 -0
  125. package/node_modules/nostr-tools/lib/esm/signer.js.map +2 -2
  126. package/node_modules/nostr-tools/lib/esm/utils.js +2 -0
  127. package/node_modules/nostr-tools/lib/esm/utils.js.map +2 -2
  128. package/node_modules/nostr-tools/lib/esm/wasm.js +10 -6
  129. package/node_modules/nostr-tools/lib/esm/wasm.js.map +2 -2
  130. package/node_modules/nostr-tools/lib/nostr.bundle.js +17 -11
  131. package/node_modules/nostr-tools/lib/nostr.bundle.js.map +2 -2
  132. package/node_modules/nostr-tools/lib/types/core.d.ts +5 -0
  133. package/node_modules/nostr-tools/lib/types/nip29.d.ts +243 -3
  134. package/node_modules/nostr-tools/lib/types/nip29.test.d.ts +1 -0
  135. package/node_modules/nostr-tools/package.json +1 -1
  136. package/openclaw.plugin.json +24 -0
  137. package/package.json +5 -5
@@ -23,23 +23,45 @@ __export(nip29_exports, {
23
23
  GroupAdminPermission: () => GroupAdminPermission,
24
24
  encodeGroupReference: () => encodeGroupReference,
25
25
  fetchGroupAdminsEvent: () => fetchGroupAdminsEvent,
26
+ fetchGroupLivekitParticipantsEvent: () => fetchGroupLivekitParticipantsEvent,
26
27
  fetchGroupMembersEvent: () => fetchGroupMembersEvent,
27
28
  fetchGroupMetadataEvent: () => fetchGroupMetadataEvent,
29
+ fetchGroupPinnedEventsEvent: () => fetchGroupPinnedEventsEvent,
30
+ fetchGroupRolesEvent: () => fetchGroupRolesEvent,
28
31
  fetchRelayInformationByGroupReference: () => fetchRelayInformationByGroupReference,
32
+ generateCreateGroupEventTemplate: () => generateCreateGroupEventTemplate,
33
+ generateCreateInviteEventTemplate: () => generateCreateInviteEventTemplate,
34
+ generateDeleteEventEventTemplate: () => generateDeleteEventEventTemplate,
35
+ generateDeleteGroupEventTemplate: () => generateDeleteGroupEventTemplate,
36
+ generateEditGroupMetadataEventTemplate: () => generateEditGroupMetadataEventTemplate,
29
37
  generateGroupAdminsEventTemplate: () => generateGroupAdminsEventTemplate,
38
+ generateGroupJoinRequestEventTemplate: () => generateGroupJoinRequestEventTemplate,
39
+ generateGroupLeaveRequestEventTemplate: () => generateGroupLeaveRequestEventTemplate,
40
+ generateGroupLivekitParticipantsEventTemplate: () => generateGroupLivekitParticipantsEventTemplate,
30
41
  generateGroupMembersEventTemplate: () => generateGroupMembersEventTemplate,
31
42
  generateGroupMetadataEventTemplate: () => generateGroupMetadataEventTemplate,
43
+ generateGroupPinnedEventsEventTemplate: () => generateGroupPinnedEventsEventTemplate,
44
+ generateGroupRolesEventTemplate: () => generateGroupRolesEventTemplate,
45
+ generatePutUserEventTemplate: () => generatePutUserEventTemplate,
46
+ generateRemoveUserEventTemplate: () => generateRemoveUserEventTemplate,
47
+ generateUpdatePinListEventTemplate: () => generateUpdatePinListEventTemplate,
32
48
  getNormalizedRelayURLByGroupReference: () => getNormalizedRelayURLByGroupReference,
33
49
  loadGroup: () => loadGroup,
34
50
  loadGroupFromCode: () => loadGroupFromCode,
35
51
  parseGroupAdminsEvent: () => parseGroupAdminsEvent,
36
52
  parseGroupCode: () => parseGroupCode,
53
+ parseGroupLivekitParticipantsEvent: () => parseGroupLivekitParticipantsEvent,
37
54
  parseGroupMembersEvent: () => parseGroupMembersEvent,
38
55
  parseGroupMetadataEvent: () => parseGroupMetadataEvent,
56
+ parseGroupPinnedEventsEvent: () => parseGroupPinnedEventsEvent,
57
+ parseGroupRolesEvent: () => parseGroupRolesEvent,
39
58
  subscribeRelayGroupsMetadataEvents: () => subscribeRelayGroupsMetadataEvents,
40
59
  validateGroupAdminsEvent: () => validateGroupAdminsEvent,
60
+ validateGroupLivekitParticipantsEvent: () => validateGroupLivekitParticipantsEvent,
41
61
  validateGroupMembersEvent: () => validateGroupMembersEvent,
42
- validateGroupMetadataEvent: () => validateGroupMetadataEvent
62
+ validateGroupMetadataEvent: () => validateGroupMetadataEvent,
63
+ validateGroupPinnedEventsEvent: () => validateGroupPinnedEventsEvent,
64
+ validateGroupRolesEvent: () => validateGroupRolesEvent
43
65
  });
44
66
  module.exports = __toCommonJS(nip29_exports);
45
67
 
@@ -196,20 +218,33 @@ var GroupAdminPermission = /* @__PURE__ */ ((GroupAdminPermission2) => {
196
218
  GroupAdminPermission2["CreateGroup"] = "create-group";
197
219
  GroupAdminPermission2["DeleteGroup"] = "delete-group";
198
220
  GroupAdminPermission2["CreateInvite"] = "create-invite";
221
+ GroupAdminPermission2["UpdatePinList"] = "update-pin-list";
199
222
  return GroupAdminPermission2;
200
223
  })(GroupAdminPermission || {});
224
+ function buildGroupMetadataTags(metadata) {
225
+ const tags = [];
226
+ metadata.name && tags.push(["name", metadata.name]);
227
+ metadata.picture && tags.push(["picture", metadata.picture]);
228
+ metadata.banner && tags.push(["banner", metadata.banner]);
229
+ metadata.about && tags.push(["about", metadata.about]);
230
+ metadata.isPrivate && tags.push(["private"]);
231
+ metadata.isRestricted && tags.push(["restricted"]);
232
+ metadata.isHidden && tags.push(["hidden"]);
233
+ metadata.isClosed && tags.push(["closed"]);
234
+ metadata.hasLiveKit && tags.push(["livekit"]);
235
+ metadata.supportedKinds && metadata.supportedKinds.length > 0 && tags.push(["supported_kinds", ...metadata.supportedKinds]);
236
+ metadata.parent && tags.push(["parent", metadata.parent]);
237
+ metadata.children && metadata.children.forEach((child) => {
238
+ tags.push(["child", child]);
239
+ });
240
+ return tags;
241
+ }
201
242
  function generateGroupMetadataEventTemplate(group) {
202
- const tags = [["d", group.metadata.id]];
203
- group.metadata.name && tags.push(["name", group.metadata.name]);
204
- group.metadata.picture && tags.push(["picture", group.metadata.picture]);
205
- group.metadata.about && tags.push(["about", group.metadata.about]);
206
- group.metadata.isPublic && tags.push(["public"]);
207
- group.metadata.isOpen && tags.push(["open"]);
208
243
  return {
209
244
  content: "",
210
245
  created_at: Math.floor(Date.now() / 1e3),
211
246
  kind: 39e3,
212
- tags
247
+ tags: [["d", group.metadata.id], ...buildGroupMetadataTags(group.metadata)]
213
248
  };
214
249
  }
215
250
  function validateGroupMetadataEvent(event) {
@@ -324,17 +359,38 @@ function parseGroupMetadataEvent(event) {
324
359
  case "picture":
325
360
  metadata.picture = value;
326
361
  break;
362
+ case "banner":
363
+ metadata.banner = value;
364
+ break;
327
365
  case "about":
328
366
  metadata.about = value;
329
367
  break;
330
- case "public":
331
- metadata.isPublic = true;
368
+ case "private":
369
+ metadata.isPrivate = true;
370
+ break;
371
+ case "restricted":
372
+ metadata.isRestricted = true;
373
+ break;
374
+ case "hidden":
375
+ metadata.isHidden = true;
376
+ break;
377
+ case "closed":
378
+ metadata.isClosed = true;
379
+ break;
380
+ case "livekit":
381
+ metadata.hasLiveKit = true;
332
382
  break;
333
- case "open":
334
- metadata.isOpen = true;
383
+ case "parent":
384
+ metadata.parent = value;
335
385
  break;
336
386
  }
337
387
  }
388
+ const supportedKinds = event.tags.filter(([tag]) => tag === "supported_kinds").flatMap(([, ...values]) => values);
389
+ if (supportedKinds.length > 0)
390
+ metadata.supportedKinds = supportedKinds;
391
+ const children = event.tags.filter(([tag]) => tag === "child").map(([, value]) => value);
392
+ if (children.length > 0)
393
+ metadata.children = children;
338
394
  return metadata;
339
395
  }
340
396
  async function fetchGroupAdminsEvent({
@@ -394,6 +450,69 @@ async function fetchGroupMembersEvent({
394
450
  throw new Error(`members for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
395
451
  return groupMembersEvent;
396
452
  }
453
+ async function fetchGroupRolesEvent({
454
+ pool,
455
+ groupReference,
456
+ relayInformation,
457
+ normalizedRelayURL
458
+ }) {
459
+ if (!normalizedRelayURL) {
460
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
461
+ }
462
+ if (!relayInformation) {
463
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
464
+ }
465
+ const groupRolesEvent = await pool.get([normalizedRelayURL], {
466
+ kinds: [39003],
467
+ authors: [relayInformation.pubkey],
468
+ "#d": [groupReference.id]
469
+ });
470
+ if (!groupRolesEvent)
471
+ throw new Error(`roles for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
472
+ return groupRolesEvent;
473
+ }
474
+ async function fetchGroupLivekitParticipantsEvent({
475
+ pool,
476
+ groupReference,
477
+ relayInformation,
478
+ normalizedRelayURL
479
+ }) {
480
+ if (!normalizedRelayURL) {
481
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
482
+ }
483
+ if (!relayInformation) {
484
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
485
+ }
486
+ const groupLivekitParticipantsEvent = await pool.get([normalizedRelayURL], {
487
+ kinds: [39004],
488
+ authors: [relayInformation.pubkey],
489
+ "#d": [groupReference.id]
490
+ });
491
+ if (!groupLivekitParticipantsEvent)
492
+ throw new Error(`livekit participants for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
493
+ return groupLivekitParticipantsEvent;
494
+ }
495
+ async function fetchGroupPinnedEventsEvent({
496
+ pool,
497
+ groupReference,
498
+ relayInformation,
499
+ normalizedRelayURL
500
+ }) {
501
+ if (!normalizedRelayURL) {
502
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
503
+ }
504
+ if (!relayInformation) {
505
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
506
+ }
507
+ const groupPinnedEventsEvent = await pool.get([normalizedRelayURL], {
508
+ kinds: [39005],
509
+ authors: [relayInformation.pubkey],
510
+ "#d": [groupReference.id]
511
+ });
512
+ if (!groupPinnedEventsEvent)
513
+ throw new Error(`pinned events for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
514
+ return groupPinnedEventsEvent;
515
+ }
397
516
  function parseGroupMembersEvent(event) {
398
517
  if (!validateGroupMembersEvent(event))
399
518
  throw new Error("invalid group members event");
@@ -408,6 +527,163 @@ function parseGroupMembersEvent(event) {
408
527
  }
409
528
  return members;
410
529
  }
530
+ function generateGroupRolesEventTemplate(group, roles) {
531
+ const tags = [["d", group.metadata.id]];
532
+ for (const role of roles) {
533
+ const tag = ["role", role.name];
534
+ role.description && tag.push(role.description);
535
+ tags.push(tag);
536
+ }
537
+ return {
538
+ content: "",
539
+ created_at: Math.floor(Date.now() / 1e3),
540
+ kind: 39003,
541
+ tags
542
+ };
543
+ }
544
+ function validateGroupRolesEvent(event) {
545
+ if (event.kind !== 39003)
546
+ return false;
547
+ const requiredTags = ["d"];
548
+ for (const tag of requiredTags) {
549
+ if (!event.tags.find(([t]) => t == tag))
550
+ return false;
551
+ }
552
+ return true;
553
+ }
554
+ function parseGroupRolesEvent(event) {
555
+ if (!validateGroupRolesEvent(event))
556
+ throw new Error("invalid group roles event");
557
+ const roles = [];
558
+ for (const [tag, name, description] of event.tags) {
559
+ if (tag !== "role")
560
+ continue;
561
+ roles.push({ name, description });
562
+ }
563
+ return roles;
564
+ }
565
+ function generateGroupLivekitParticipantsEventTemplate(group, participants) {
566
+ const tags = [["d", group.metadata.id]];
567
+ participants.forEach((pubkey) => {
568
+ tags.push(["participant", pubkey]);
569
+ });
570
+ return {
571
+ content: "",
572
+ created_at: Math.floor(Date.now() / 1e3),
573
+ kind: 39004,
574
+ tags
575
+ };
576
+ }
577
+ function validateGroupLivekitParticipantsEvent(event) {
578
+ if (event.kind !== 39004)
579
+ return false;
580
+ const requiredTags = ["d"];
581
+ for (const tag of requiredTags) {
582
+ if (!event.tags.find(([t]) => t == tag))
583
+ return false;
584
+ }
585
+ return true;
586
+ }
587
+ function parseGroupLivekitParticipantsEvent(event) {
588
+ if (!validateGroupLivekitParticipantsEvent(event))
589
+ throw new Error("invalid group livekit participants event");
590
+ return event.tags.filter(([tag]) => tag === "participant").map(([, pubkey]) => pubkey);
591
+ }
592
+ function generateGroupPinnedEventsEventTemplate(group, pinnedEvents) {
593
+ const tags = [["d", group.metadata.id]];
594
+ pinnedEvents.forEach((pinnedEvent) => {
595
+ tags.push([pinnedEvent.type, pinnedEvent.value]);
596
+ });
597
+ return {
598
+ content: "",
599
+ created_at: Math.floor(Date.now() / 1e3),
600
+ kind: 39005,
601
+ tags
602
+ };
603
+ }
604
+ function validateGroupPinnedEventsEvent(event) {
605
+ if (event.kind !== 39005)
606
+ return false;
607
+ const requiredTags = ["d"];
608
+ for (const tag of requiredTags) {
609
+ if (!event.tags.find(([t]) => t == tag))
610
+ return false;
611
+ }
612
+ return true;
613
+ }
614
+ function parseGroupPinnedEventsEvent(event) {
615
+ if (!validateGroupPinnedEventsEvent(event))
616
+ throw new Error("invalid group pinned events event");
617
+ const pinnedEvents = [];
618
+ for (const [tag, value] of event.tags) {
619
+ if (tag !== "e" && tag !== "a")
620
+ continue;
621
+ pinnedEvents.push({ type: tag, value });
622
+ }
623
+ return pinnedEvents;
624
+ }
625
+ function generateGroupModerationEventTemplate(kind, groupId, content, tags, previous) {
626
+ const allTags = [["h", groupId], ...tags];
627
+ previous && previous.length > 0 && allTags.push(["previous", ...previous]);
628
+ return {
629
+ content,
630
+ created_at: Math.floor(Date.now() / 1e3),
631
+ kind,
632
+ tags: allTags
633
+ };
634
+ }
635
+ function generatePutUserEventTemplate(groupId, pubkey, roles, reason, previous) {
636
+ return generateGroupModerationEventTemplate(9e3, groupId, reason || "", [["p", pubkey, ...roles || []]], previous);
637
+ }
638
+ function generateRemoveUserEventTemplate(groupId, pubkey, reason, previous) {
639
+ return generateGroupModerationEventTemplate(9001, groupId, reason || "", [["p", pubkey]], previous);
640
+ }
641
+ function generateEditGroupMetadataEventTemplate(group, reason, previous) {
642
+ return generateGroupModerationEventTemplate(
643
+ 9002,
644
+ group.metadata.id,
645
+ reason || "",
646
+ buildGroupMetadataTags(group.metadata),
647
+ previous
648
+ );
649
+ }
650
+ function generateDeleteEventEventTemplate(groupId, eventId, reason, previous) {
651
+ return generateGroupModerationEventTemplate(9005, groupId, reason || "", [["e", eventId]], previous);
652
+ }
653
+ function generateCreateGroupEventTemplate(groupId, reason, previous) {
654
+ return generateGroupModerationEventTemplate(9007, groupId, reason || "", [], previous);
655
+ }
656
+ function generateDeleteGroupEventTemplate(groupId, reason, previous) {
657
+ return generateGroupModerationEventTemplate(9008, groupId, reason || "", [], previous);
658
+ }
659
+ function generateCreateInviteEventTemplate(groupId, code, reason, previous) {
660
+ return generateGroupModerationEventTemplate(9009, groupId, reason || "", [["code", code]], previous);
661
+ }
662
+ function generateUpdatePinListEventTemplate(groupId, pinnedEvents, reason, previous) {
663
+ const tags = pinnedEvents.map((pinnedEvent) => [pinnedEvent.type, pinnedEvent.value]);
664
+ return generateGroupModerationEventTemplate(9010, groupId, reason || "", tags, previous);
665
+ }
666
+ function generateGroupJoinRequestEventTemplate(groupId, inviteCode, reason, previous) {
667
+ const tags = [["h", groupId]];
668
+ inviteCode && tags.push(["code", inviteCode]);
669
+ previous && previous.length > 0 && tags.push(["previous", ...previous]);
670
+ return {
671
+ content: reason || "",
672
+ created_at: Math.floor(Date.now() / 1e3),
673
+ kind: 9021,
674
+ tags
675
+ };
676
+ }
677
+ function generateGroupLeaveRequestEventTemplate(groupId, reason, previous) {
678
+ const tags = [["h", groupId]];
679
+ previous && previous.length > 0 && tags.push(["previous", ...previous]);
680
+ return {
681
+ content: reason || "",
682
+ created_at: Math.floor(Date.now() / 1e3),
683
+ kind: 9022,
684
+ tags
685
+ };
686
+ }
411
687
  async function loadGroup({
412
688
  pool,
413
689
  groupReference,