From 00913065699d44e1c8c1d256c77034f2f944ab0d Mon Sep 17 00:00:00 2001 From: Silberengel Date: Mon, 16 Feb 2026 21:13:37 +0100 Subject: [PATCH] grasp clone urls --- src/lib/components/layout/PageHeader.svelte | 8 +- .../components/write/CreateEventForm.svelte | 161 +----------------- src/lib/services/content/git-repo-fetcher.ts | 34 ++-- src/routes/repos/+page.svelte | 82 +++++++-- src/routes/repos/[naddr]/+page.svelte | 50 ++++-- static/changelog.yaml | 2 +- 6 files changed, 135 insertions(+), 202 deletions(-) diff --git a/src/lib/components/layout/PageHeader.svelte b/src/lib/components/layout/PageHeader.svelte index bb293ab..d69e977 100644 --- a/src/lib/components/layout/PageHeader.svelte +++ b/src/lib/components/layout/PageHeader.svelte @@ -43,13 +43,14 @@ @@ -123,7 +124,8 @@ cursor: not-allowed; } - .page-header-button.loading { + .page-header-button span.loading { + display: inline-block; animation: spin 1s linear infinite; } diff --git a/src/lib/components/write/CreateEventForm.svelte b/src/lib/components/write/CreateEventForm.svelte index ab2cb25..82dab6f 100644 --- a/src/lib/components/write/CreateEventForm.svelte +++ b/src/lib/components/write/CreateEventForm.svelte @@ -70,7 +70,6 @@ let tags = $state(getInitialTags()); let publishing = $state(false); let showAdvancedEditor = $state(false); - let hasGraspList = $state(null); // null = not checked yet let richTextEditorRef: { clearUploadedFiles: () => void; getUploadedFiles: () => Array<{ url: string; imetaTag: string[] }> } | null = $state(null); let uploadedFiles: Array<{ url: string; imetaTag: string[] }> = $state([]); @@ -107,32 +106,6 @@ } }); - // Check if user has grasp list when creating repo announcement - $effect(() => { - if (effectiveKind === 30617 || effectiveKind === KIND.REPO_ANNOUNCEMENT) { - const currentPubkey = sessionManager.getCurrentPubkey(); - if (currentPubkey) { - (async () => { - try { - const graspListEvents = await nostrClient.fetchEvents( - [{ kinds: [10317], authors: [currentPubkey], limit: 1 }], - relayManager.getProfileReadRelays(), - { useCache: 'cache-first', cacheResults: true } - ); - hasGraspList = graspListEvents.length > 0; - } catch (error) { - console.warn('Failed to check for grasp list:', error); - hasGraspList = false; // Assume missing on error - } - })(); - } else { - hasGraspList = false; - } - } else { - hasGraspList = null; // Reset when not creating repo announcement - } - }); - // Restore draft from IndexedDB if no initial event $effect(() => { if (typeof window === 'undefined' || initialEvent) return; @@ -211,7 +184,6 @@ const helpText = $derived(kindMetadata.helpText); const isKind30040 = $derived(selectedKind === 30040); const isKind10895 = $derived(selectedKind === 10895); - const allPublishRelays = $derived([...new Set([...config.documentationPublishRelays, ...config.graspRelays])]); // Clear content for metadata-only kinds (but preserve content when cloning/editing) $effect(() => { @@ -413,9 +385,9 @@ true ); - // For repo announcements, also add documentation and GRASP relays + // For repo announcements, also add documentation relays if (effectiveKind === 30617 || effectiveKind === KIND.REPO_ANNOUNCEMENT) { - relays = [...new Set([...relays, ...config.documentationPublishRelays, ...config.graspRelays])]; + relays = [...new Set([...relays, ...config.documentationPublishRelays])]; } const results = await signAndPublish(eventTemplate, relays); @@ -423,46 +395,6 @@ publicationModalOpen = true; if (results.success.length > 0) { - // For repo announcements, check if we need to create a grasp list - if (effectiveKind === 30617 || effectiveKind === KIND.REPO_ANNOUNCEMENT) { - try { - const currentPubkey = session.pubkey; - const graspListEvents = await nostrClient.fetchEvents( - [{ kinds: [10317], authors: [currentPubkey], limit: 1 }], - relayManager.getProfileReadRelays(), - { useCache: 'cache-first', cacheResults: true } - ); - - if (graspListEvents.length === 0) { - // User doesn't have a grasp list, create one - // Only include actual GRASP relays in the g tags (not documentation relays) - // Filter out thecitadel since it's not a GRASP server - const graspRelaysForTags = config.graspRelays.filter(r => !r.includes('thecitadel')); - - const graspListEventTemplate: Omit = { - kind: 10317, - pubkey: currentPubkey, - created_at: Math.floor(Date.now() / 1000), - tags: graspRelaysForTags.map(server => ['g', server]), // Only GRASP relays in g tags - content: '' - }; - - const signedGraspListEvent = await session.signer(graspListEventTemplate); - await cacheEvent(signedGraspListEvent); - - // Publish grasp list to documentation and GRASP relays - // (documentation relay accepts these kinds but isn't a GRASP relay, so not in g tags) - const allGraspRelays = [...new Set([...config.documentationPublishRelays, ...config.graspRelays])]; - - await signAndPublish(graspListEventTemplate, allGraspRelays); - console.log('Auto-created and published user grasp list (kind 10317)'); - } - } catch (error) { - console.warn('Failed to check/create grasp list:', error); - // Non-critical, continue - } - } - content = ''; tags = []; uploadedFiles = []; @@ -477,7 +409,6 @@ if (dTag) { try { // Only include documentation relay as relay hint (keeps naddr shorter) - // Both events are published to documentation and GRASP relays, but we only hint at documentation relay const relayHints = config.documentationPublishRelays; const naddr = nip19.naddrEncode({ kind: signedEvent.kind, @@ -795,34 +726,6 @@
- {#if (effectiveKind === 30617 || effectiveKind === KIND.REPO_ANNOUNCEMENT) && hasGraspList === false} -
- -
-

- A User Grasp List (kind 10317) will be created automatically on your behalf. -

-

- Events will be published to: -

-
    - {#each allPublishRelays as relay} -
  • - {relay} - {#if config.documentationPublishRelays.includes(relay)} - (documentation relay, accepts these kinds but not a GRASP relay) - {:else} - (GRASP relay) - {/if} -
  • - {/each} -
-

- Note: Only GRASP relays will be included in the g tags of the kind 10317 event. -

-
-
- {/if}