@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
@@ -151,20 +151,33 @@ var GroupAdminPermission = /* @__PURE__ */ ((GroupAdminPermission2) => {
151
151
  GroupAdminPermission2["CreateGroup"] = "create-group";
152
152
  GroupAdminPermission2["DeleteGroup"] = "delete-group";
153
153
  GroupAdminPermission2["CreateInvite"] = "create-invite";
154
+ GroupAdminPermission2["UpdatePinList"] = "update-pin-list";
154
155
  return GroupAdminPermission2;
155
156
  })(GroupAdminPermission || {});
157
+ function buildGroupMetadataTags(metadata) {
158
+ const tags = [];
159
+ metadata.name && tags.push(["name", metadata.name]);
160
+ metadata.picture && tags.push(["picture", metadata.picture]);
161
+ metadata.banner && tags.push(["banner", metadata.banner]);
162
+ metadata.about && tags.push(["about", metadata.about]);
163
+ metadata.isPrivate && tags.push(["private"]);
164
+ metadata.isRestricted && tags.push(["restricted"]);
165
+ metadata.isHidden && tags.push(["hidden"]);
166
+ metadata.isClosed && tags.push(["closed"]);
167
+ metadata.hasLiveKit && tags.push(["livekit"]);
168
+ metadata.supportedKinds && metadata.supportedKinds.length > 0 && tags.push(["supported_kinds", ...metadata.supportedKinds]);
169
+ metadata.parent && tags.push(["parent", metadata.parent]);
170
+ metadata.children && metadata.children.forEach((child) => {
171
+ tags.push(["child", child]);
172
+ });
173
+ return tags;
174
+ }
156
175
  function generateGroupMetadataEventTemplate(group) {
157
- const tags = [["d", group.metadata.id]];
158
- group.metadata.name && tags.push(["name", group.metadata.name]);
159
- group.metadata.picture && tags.push(["picture", group.metadata.picture]);
160
- group.metadata.about && tags.push(["about", group.metadata.about]);
161
- group.metadata.isPublic && tags.push(["public"]);
162
- group.metadata.isOpen && tags.push(["open"]);
163
176
  return {
164
177
  content: "",
165
178
  created_at: Math.floor(Date.now() / 1e3),
166
179
  kind: 39e3,
167
- tags
180
+ tags: [["d", group.metadata.id], ...buildGroupMetadataTags(group.metadata)]
168
181
  };
169
182
  }
170
183
  function validateGroupMetadataEvent(event) {
@@ -279,17 +292,38 @@ function parseGroupMetadataEvent(event) {
279
292
  case "picture":
280
293
  metadata.picture = value;
281
294
  break;
295
+ case "banner":
296
+ metadata.banner = value;
297
+ break;
282
298
  case "about":
283
299
  metadata.about = value;
284
300
  break;
285
- case "public":
286
- metadata.isPublic = true;
301
+ case "private":
302
+ metadata.isPrivate = true;
303
+ break;
304
+ case "restricted":
305
+ metadata.isRestricted = true;
306
+ break;
307
+ case "hidden":
308
+ metadata.isHidden = true;
309
+ break;
310
+ case "closed":
311
+ metadata.isClosed = true;
312
+ break;
313
+ case "livekit":
314
+ metadata.hasLiveKit = true;
287
315
  break;
288
- case "open":
289
- metadata.isOpen = true;
316
+ case "parent":
317
+ metadata.parent = value;
290
318
  break;
291
319
  }
292
320
  }
321
+ const supportedKinds = event.tags.filter(([tag]) => tag === "supported_kinds").flatMap(([, ...values]) => values);
322
+ if (supportedKinds.length > 0)
323
+ metadata.supportedKinds = supportedKinds;
324
+ const children = event.tags.filter(([tag]) => tag === "child").map(([, value]) => value);
325
+ if (children.length > 0)
326
+ metadata.children = children;
293
327
  return metadata;
294
328
  }
295
329
  async function fetchGroupAdminsEvent({
@@ -349,6 +383,69 @@ async function fetchGroupMembersEvent({
349
383
  throw new Error(`members for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
350
384
  return groupMembersEvent;
351
385
  }
386
+ async function fetchGroupRolesEvent({
387
+ pool,
388
+ groupReference,
389
+ relayInformation,
390
+ normalizedRelayURL
391
+ }) {
392
+ if (!normalizedRelayURL) {
393
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
394
+ }
395
+ if (!relayInformation) {
396
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
397
+ }
398
+ const groupRolesEvent = await pool.get([normalizedRelayURL], {
399
+ kinds: [39003],
400
+ authors: [relayInformation.pubkey],
401
+ "#d": [groupReference.id]
402
+ });
403
+ if (!groupRolesEvent)
404
+ throw new Error(`roles for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
405
+ return groupRolesEvent;
406
+ }
407
+ async function fetchGroupLivekitParticipantsEvent({
408
+ pool,
409
+ groupReference,
410
+ relayInformation,
411
+ normalizedRelayURL
412
+ }) {
413
+ if (!normalizedRelayURL) {
414
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
415
+ }
416
+ if (!relayInformation) {
417
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
418
+ }
419
+ const groupLivekitParticipantsEvent = await pool.get([normalizedRelayURL], {
420
+ kinds: [39004],
421
+ authors: [relayInformation.pubkey],
422
+ "#d": [groupReference.id]
423
+ });
424
+ if (!groupLivekitParticipantsEvent)
425
+ throw new Error(`livekit participants for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
426
+ return groupLivekitParticipantsEvent;
427
+ }
428
+ async function fetchGroupPinnedEventsEvent({
429
+ pool,
430
+ groupReference,
431
+ relayInformation,
432
+ normalizedRelayURL
433
+ }) {
434
+ if (!normalizedRelayURL) {
435
+ normalizedRelayURL = getNormalizedRelayURLByGroupReference(groupReference);
436
+ }
437
+ if (!relayInformation) {
438
+ relayInformation = await fetchRelayInformation(normalizedRelayURL);
439
+ }
440
+ const groupPinnedEventsEvent = await pool.get([normalizedRelayURL], {
441
+ kinds: [39005],
442
+ authors: [relayInformation.pubkey],
443
+ "#d": [groupReference.id]
444
+ });
445
+ if (!groupPinnedEventsEvent)
446
+ throw new Error(`pinned events for group '${groupReference.id}' not found on ${normalizedRelayURL}`);
447
+ return groupPinnedEventsEvent;
448
+ }
352
449
  function parseGroupMembersEvent(event) {
353
450
  if (!validateGroupMembersEvent(event))
354
451
  throw new Error("invalid group members event");
@@ -363,6 +460,163 @@ function parseGroupMembersEvent(event) {
363
460
  }
364
461
  return members;
365
462
  }
463
+ function generateGroupRolesEventTemplate(group, roles) {
464
+ const tags = [["d", group.metadata.id]];
465
+ for (const role of roles) {
466
+ const tag = ["role", role.name];
467
+ role.description && tag.push(role.description);
468
+ tags.push(tag);
469
+ }
470
+ return {
471
+ content: "",
472
+ created_at: Math.floor(Date.now() / 1e3),
473
+ kind: 39003,
474
+ tags
475
+ };
476
+ }
477
+ function validateGroupRolesEvent(event) {
478
+ if (event.kind !== 39003)
479
+ return false;
480
+ const requiredTags = ["d"];
481
+ for (const tag of requiredTags) {
482
+ if (!event.tags.find(([t]) => t == tag))
483
+ return false;
484
+ }
485
+ return true;
486
+ }
487
+ function parseGroupRolesEvent(event) {
488
+ if (!validateGroupRolesEvent(event))
489
+ throw new Error("invalid group roles event");
490
+ const roles = [];
491
+ for (const [tag, name, description] of event.tags) {
492
+ if (tag !== "role")
493
+ continue;
494
+ roles.push({ name, description });
495
+ }
496
+ return roles;
497
+ }
498
+ function generateGroupLivekitParticipantsEventTemplate(group, participants) {
499
+ const tags = [["d", group.metadata.id]];
500
+ participants.forEach((pubkey) => {
501
+ tags.push(["participant", pubkey]);
502
+ });
503
+ return {
504
+ content: "",
505
+ created_at: Math.floor(Date.now() / 1e3),
506
+ kind: 39004,
507
+ tags
508
+ };
509
+ }
510
+ function validateGroupLivekitParticipantsEvent(event) {
511
+ if (event.kind !== 39004)
512
+ return false;
513
+ const requiredTags = ["d"];
514
+ for (const tag of requiredTags) {
515
+ if (!event.tags.find(([t]) => t == tag))
516
+ return false;
517
+ }
518
+ return true;
519
+ }
520
+ function parseGroupLivekitParticipantsEvent(event) {
521
+ if (!validateGroupLivekitParticipantsEvent(event))
522
+ throw new Error("invalid group livekit participants event");
523
+ return event.tags.filter(([tag]) => tag === "participant").map(([, pubkey]) => pubkey);
524
+ }
525
+ function generateGroupPinnedEventsEventTemplate(group, pinnedEvents) {
526
+ const tags = [["d", group.metadata.id]];
527
+ pinnedEvents.forEach((pinnedEvent) => {
528
+ tags.push([pinnedEvent.type, pinnedEvent.value]);
529
+ });
530
+ return {
531
+ content: "",
532
+ created_at: Math.floor(Date.now() / 1e3),
533
+ kind: 39005,
534
+ tags
535
+ };
536
+ }
537
+ function validateGroupPinnedEventsEvent(event) {
538
+ if (event.kind !== 39005)
539
+ return false;
540
+ const requiredTags = ["d"];
541
+ for (const tag of requiredTags) {
542
+ if (!event.tags.find(([t]) => t == tag))
543
+ return false;
544
+ }
545
+ return true;
546
+ }
547
+ function parseGroupPinnedEventsEvent(event) {
548
+ if (!validateGroupPinnedEventsEvent(event))
549
+ throw new Error("invalid group pinned events event");
550
+ const pinnedEvents = [];
551
+ for (const [tag, value] of event.tags) {
552
+ if (tag !== "e" && tag !== "a")
553
+ continue;
554
+ pinnedEvents.push({ type: tag, value });
555
+ }
556
+ return pinnedEvents;
557
+ }
558
+ function generateGroupModerationEventTemplate(kind, groupId, content, tags, previous) {
559
+ const allTags = [["h", groupId], ...tags];
560
+ previous && previous.length > 0 && allTags.push(["previous", ...previous]);
561
+ return {
562
+ content,
563
+ created_at: Math.floor(Date.now() / 1e3),
564
+ kind,
565
+ tags: allTags
566
+ };
567
+ }
568
+ function generatePutUserEventTemplate(groupId, pubkey, roles, reason, previous) {
569
+ return generateGroupModerationEventTemplate(9e3, groupId, reason || "", [["p", pubkey, ...roles || []]], previous);
570
+ }
571
+ function generateRemoveUserEventTemplate(groupId, pubkey, reason, previous) {
572
+ return generateGroupModerationEventTemplate(9001, groupId, reason || "", [["p", pubkey]], previous);
573
+ }
574
+ function generateEditGroupMetadataEventTemplate(group, reason, previous) {
575
+ return generateGroupModerationEventTemplate(
576
+ 9002,
577
+ group.metadata.id,
578
+ reason || "",
579
+ buildGroupMetadataTags(group.metadata),
580
+ previous
581
+ );
582
+ }
583
+ function generateDeleteEventEventTemplate(groupId, eventId, reason, previous) {
584
+ return generateGroupModerationEventTemplate(9005, groupId, reason || "", [["e", eventId]], previous);
585
+ }
586
+ function generateCreateGroupEventTemplate(groupId, reason, previous) {
587
+ return generateGroupModerationEventTemplate(9007, groupId, reason || "", [], previous);
588
+ }
589
+ function generateDeleteGroupEventTemplate(groupId, reason, previous) {
590
+ return generateGroupModerationEventTemplate(9008, groupId, reason || "", [], previous);
591
+ }
592
+ function generateCreateInviteEventTemplate(groupId, code, reason, previous) {
593
+ return generateGroupModerationEventTemplate(9009, groupId, reason || "", [["code", code]], previous);
594
+ }
595
+ function generateUpdatePinListEventTemplate(groupId, pinnedEvents, reason, previous) {
596
+ const tags = pinnedEvents.map((pinnedEvent) => [pinnedEvent.type, pinnedEvent.value]);
597
+ return generateGroupModerationEventTemplate(9010, groupId, reason || "", tags, previous);
598
+ }
599
+ function generateGroupJoinRequestEventTemplate(groupId, inviteCode, reason, previous) {
600
+ const tags = [["h", groupId]];
601
+ inviteCode && tags.push(["code", inviteCode]);
602
+ previous && previous.length > 0 && tags.push(["previous", ...previous]);
603
+ return {
604
+ content: reason || "",
605
+ created_at: Math.floor(Date.now() / 1e3),
606
+ kind: 9021,
607
+ tags
608
+ };
609
+ }
610
+ function generateGroupLeaveRequestEventTemplate(groupId, reason, previous) {
611
+ const tags = [["h", groupId]];
612
+ previous && previous.length > 0 && tags.push(["previous", ...previous]);
613
+ return {
614
+ content: reason || "",
615
+ created_at: Math.floor(Date.now() / 1e3),
616
+ kind: 9022,
617
+ tags
618
+ };
619
+ }
366
620
  async function loadGroup({
367
621
  pool,
368
622
  groupReference,
@@ -458,21 +712,43 @@ export {
458
712
  GroupAdminPermission,
459
713
  encodeGroupReference,
460
714
  fetchGroupAdminsEvent,
715
+ fetchGroupLivekitParticipantsEvent,
461
716
  fetchGroupMembersEvent,
462
717
  fetchGroupMetadataEvent,
718
+ fetchGroupPinnedEventsEvent,
719
+ fetchGroupRolesEvent,
463
720
  fetchRelayInformationByGroupReference,
721
+ generateCreateGroupEventTemplate,
722
+ generateCreateInviteEventTemplate,
723
+ generateDeleteEventEventTemplate,
724
+ generateDeleteGroupEventTemplate,
725
+ generateEditGroupMetadataEventTemplate,
464
726
  generateGroupAdminsEventTemplate,
727
+ generateGroupJoinRequestEventTemplate,
728
+ generateGroupLeaveRequestEventTemplate,
729
+ generateGroupLivekitParticipantsEventTemplate,
465
730
  generateGroupMembersEventTemplate,
466
731
  generateGroupMetadataEventTemplate,
732
+ generateGroupPinnedEventsEventTemplate,
733
+ generateGroupRolesEventTemplate,
734
+ generatePutUserEventTemplate,
735
+ generateRemoveUserEventTemplate,
736
+ generateUpdatePinListEventTemplate,
467
737
  getNormalizedRelayURLByGroupReference,
468
738
  loadGroup,
469
739
  loadGroupFromCode,
470
740
  parseGroupAdminsEvent,
471
741
  parseGroupCode,
742
+ parseGroupLivekitParticipantsEvent,
472
743
  parseGroupMembersEvent,
473
744
  parseGroupMetadataEvent,
745
+ parseGroupPinnedEventsEvent,
746
+ parseGroupRolesEvent,
474
747
  subscribeRelayGroupsMetadataEvents,
475
748
  validateGroupAdminsEvent,
749
+ validateGroupLivekitParticipantsEvent,
476
750
  validateGroupMembersEvent,
477
- validateGroupMetadataEvent
751
+ validateGroupMetadataEvent,
752
+ validateGroupPinnedEventsEvent,
753
+ validateGroupRolesEvent
478
754
  };