@openclaw/buzz 2026.8.1-beta.3 → 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.
- package/dist/{adapter.runtime-B0130te-.js → adapter.runtime-DA6guOQ_.js} +4 -4
- package/dist/api.js +1 -1
- package/dist/{channel-Bg5qZukN.js → channel-BulZqShF.js} +215 -252
- package/dist/channel-plugin-api.js +1 -1
- package/dist/qa-runner-api.js +2 -2
- package/dist/{room-membership-CRuRK8PE.js → room-membership-DSAkyE0a.js} +54 -4
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-sJVYSY73.js → setup-surface-BvQgEJ7O.js} +19 -41
- package/node_modules/nostr-tools/lib/cjs/abstract-pool.js +7 -5
- package/node_modules/nostr-tools/lib/cjs/abstract-pool.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/abstract-relay.js +6 -4
- package/node_modules/nostr-tools/lib/cjs/abstract-relay.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/core.js +10 -6
- package/node_modules/nostr-tools/lib/cjs/core.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/index.js +17 -11
- package/node_modules/nostr-tools/lib/cjs/index.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/kinds.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/kinds.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip04.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip10.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip10.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip13.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip17.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip17.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip18.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip18.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip19.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip21.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip22.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip22.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip25.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip25.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip27.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip28.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip28.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip29.js +288 -12
- package/node_modules/nostr-tools/lib/cjs/nip29.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip44.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/nip45.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip45.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip46.js +9 -5
- package/node_modules/nostr-tools/lib/cjs/nip46.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip47.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip47.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip57.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip57.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip59.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip59.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nip98.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nip98.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nipb0.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nipb0.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/nipb7.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/nipb7.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/pool.js +9 -5
- package/node_modules/nostr-tools/lib/cjs/pool.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/pure.js +10 -6
- package/node_modules/nostr-tools/lib/cjs/pure.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/references.js.map +1 -1
- package/node_modules/nostr-tools/lib/cjs/relay.js +8 -4
- package/node_modules/nostr-tools/lib/cjs/relay.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/signer.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/signer.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/utils.js +2 -0
- package/node_modules/nostr-tools/lib/cjs/utils.js.map +2 -2
- package/node_modules/nostr-tools/lib/cjs/wasm.js +10 -6
- package/node_modules/nostr-tools/lib/cjs/wasm.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/abstract-pool.js +7 -5
- package/node_modules/nostr-tools/lib/esm/abstract-pool.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/abstract-relay.js +6 -4
- package/node_modules/nostr-tools/lib/esm/abstract-relay.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/core.js +10 -6
- package/node_modules/nostr-tools/lib/esm/core.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/index.js +17 -11
- package/node_modules/nostr-tools/lib/esm/index.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/kinds.js +2 -0
- package/node_modules/nostr-tools/lib/esm/kinds.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip04.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip10.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip10.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip13.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip17.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip17.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip18.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip18.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip19.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip21.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip22.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip22.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip25.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip25.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip27.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip28.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip28.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip29.js +288 -12
- package/node_modules/nostr-tools/lib/esm/nip29.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip44.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/nip45.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip45.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip46.js +9 -5
- package/node_modules/nostr-tools/lib/esm/nip46.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip47.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip47.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip57.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip57.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip59.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip59.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nip98.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nip98.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nipb0.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nipb0.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/nipb7.js +2 -0
- package/node_modules/nostr-tools/lib/esm/nipb7.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/pool.js +9 -5
- package/node_modules/nostr-tools/lib/esm/pool.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/pure.js +10 -6
- package/node_modules/nostr-tools/lib/esm/pure.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/references.js.map +1 -1
- package/node_modules/nostr-tools/lib/esm/relay.js +8 -4
- package/node_modules/nostr-tools/lib/esm/relay.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/signer.js +2 -0
- package/node_modules/nostr-tools/lib/esm/signer.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/utils.js +2 -0
- package/node_modules/nostr-tools/lib/esm/utils.js.map +2 -2
- package/node_modules/nostr-tools/lib/esm/wasm.js +10 -6
- package/node_modules/nostr-tools/lib/esm/wasm.js.map +2 -2
- package/node_modules/nostr-tools/lib/nostr.bundle.js +17 -11
- package/node_modules/nostr-tools/lib/nostr.bundle.js.map +2 -2
- package/node_modules/nostr-tools/lib/types/core.d.ts +5 -0
- package/node_modules/nostr-tools/lib/types/nip29.d.ts +243 -3
- package/node_modules/nostr-tools/lib/types/nip29.test.d.ts +1 -0
- package/node_modules/nostr-tools/package.json +1 -1
- package/openclaw.plugin.json +24 -0
- 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 "
|
|
286
|
-
metadata.
|
|
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 "
|
|
289
|
-
metadata.
|
|
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
|
};
|