From c425a9d39a34d6a9d0124b7a8c29640e55ead0db Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 3 Apr 2025 12:29:45 -0500 Subject: [PATCH 1/4] DittoPgStore: index "client" tag --- packages/ditto/storages/DittoPgStore.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ditto/storages/DittoPgStore.ts b/packages/ditto/storages/DittoPgStore.ts index a1499f1d..63d32d56 100644 --- a/packages/ditto/storages/DittoPgStore.ts +++ b/packages/ditto/storages/DittoPgStore.ts @@ -83,6 +83,7 @@ export class DittoPgStore extends NPostgres { /** Conditions for when to index certain tags. */ static tagConditions: Record = { 'a': ({ count }) => count < 15, + 'client': ({ count, value }) => count === 0 && value.length < 50, 'd': ({ event, count }) => count === 0 && NKinds.parameterizedReplaceable(event.kind), 'e': DittoPgStore.eTagCondition, 'k': ({ count }) => count < 3, From 0abee76e38539a9540339c0111fd463d1eac249c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 3 Apr 2025 12:29:58 -0500 Subject: [PATCH 2/4] nip89: add ["t", "ditto"] tag to application handler event --- packages/ditto/utils/nip89.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ditto/utils/nip89.ts b/packages/ditto/utils/nip89.ts index 2e0cd0d1..b0d7ba4b 100644 --- a/packages/ditto/utils/nip89.ts +++ b/packages/ditto/utils/nip89.ts @@ -24,6 +24,7 @@ export async function createNip89(opts: CreateNip89Opts): Promise { tags: [ ['d', 'ditto'], ['k', '1'], + ['t', 'ditto'], ['web', conf.local('/'), 'web'], ], content: JSON.stringify(metadata), From 621d92dcf63af8f7dda8173e8dd8d44a3c64f3dd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 3 Apr 2025 12:31:10 -0500 Subject: [PATCH 3/4] Render "client" tags in statuses even if they don't have an application handler event --- packages/ditto/views/mastodon/statuses.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/ditto/views/mastodon/statuses.ts b/packages/ditto/views/mastodon/statuses.ts index 579aea2b..58c9653e 100644 --- a/packages/ditto/views/mastodon/statuses.ts +++ b/packages/ditto/views/mastodon/statuses.ts @@ -123,7 +123,7 @@ async function renderStatus( if (event.client) { const result = n.json().pipe(n.metadata()).safeParse(event.client.content); if (result.success) { - const name = result.data.name ?? result.data.display_name ?? event.tags.find(([name]) => name === 'client')?.[1]; + const name = result.data.name ?? event.tags.find(([name]) => name === 'client')?.[1]; if (name) { application = { name, @@ -131,6 +131,14 @@ async function renderStatus( }; } } + } else { + const name = event.tags.find(([name]) => name === 'client')?.[1]; + if (name) { + application = { + name, + website: null, + }; + } } const expiresAt = new Date(Number(event.tags.find(([name]) => name === 'expiration')?.[1]) * 1000); From 1c2d7a67931476461e12af7e25cca2e010516292 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 3 Apr 2025 12:38:39 -0500 Subject: [PATCH 4/4] Index client addr in search extensions --- packages/ditto/storages/DittoPgStore.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/ditto/storages/DittoPgStore.ts b/packages/ditto/storages/DittoPgStore.ts index 63d32d56..5152ec09 100644 --- a/packages/ditto/storages/DittoPgStore.ts +++ b/packages/ditto/storages/DittoPgStore.ts @@ -522,6 +522,12 @@ export class DittoPgStore extends NPostgres { } } + const client = event.tags.find(([name]) => name === 'client')?.[2]; + + if (client && /^31990:([0-9a-f]{64}):(.+)$/.test(client)) { + ext.client = client; + } + ext.protocol = event.tags.find(([name]) => name === 'proxy')?.[2] ?? 'nostr'; return ext;