mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Signed-off-by: Wes <wesbillman@users.noreply.github.com> Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
/**
|
|
* Community icon, Buzz extension to NIP-43 + standard NIP-11 `icon`.
|
|
*
|
|
* An admin/owner publishes a kind:9033 command carrying the icon in an
|
|
* `["icon", value]` tag; the relay validates the sender's relay role and
|
|
* stores the icon per community, serving it in the standard `icon` field of
|
|
* its NIP-11 relay information document. Every member's client reads NIP-11,
|
|
* so the whole community sees the same icon.
|
|
*
|
|
* The icon value is a small `data:image/*` URL (downscaled client-side
|
|
* before publish) so it renders for INACTIVE communities straight from the
|
|
* document — no cross-relay media fetch behind another relay's auth wall.
|
|
*/
|
|
|
|
import { relayClient } from "@/shared/api/relayClient";
|
|
import { invokeTauri, signRelayEvent } from "@/shared/api/tauri";
|
|
|
|
/** Buzz: admin command to set the community profile (icon). */
|
|
export const KIND_SET_COMMUNITY_PROFILE = 9033;
|
|
|
|
/**
|
|
* Fetch a community's icon from its relay's NIP-11 document (plain
|
|
* unauthenticated HTTP via the Tauri backend — works for inactive
|
|
* communities too). Unreachable relay or no icon → null.
|
|
*/
|
|
export async function fetchCommunityIcon(
|
|
relayUrl: string,
|
|
): Promise<string | null> {
|
|
const icon = await invokeTauri<string | null>("fetch_workspace_icon", {
|
|
relayUrl,
|
|
});
|
|
return icon || null;
|
|
}
|
|
|
|
/**
|
|
* Publish a kind:9033 command setting (or clearing, with "") the community
|
|
* icon on the active relay. Requires relay admin/owner role — the relay
|
|
* rejects the command otherwise.
|
|
*/
|
|
export async function setCommunityIcon(icon: string): Promise<void> {
|
|
const event = await signRelayEvent({
|
|
kind: KIND_SET_COMMUNITY_PROFILE,
|
|
content: "",
|
|
tags: [["icon", icon]],
|
|
});
|
|
await relayClient.publishEvent(
|
|
event,
|
|
"Timed out while updating the community icon.",
|
|
"Failed to update the community icon.",
|
|
);
|
|
}
|