diff --git a/nostr/commit-signatures.jsonl b/nostr/commit-signatures.jsonl
index 0aab414..349db95 100644
--- a/nostr/commit-signatures.jsonl
+++ b/nostr/commit-signatures.jsonl
@@ -92,3 +92,4 @@
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772087425,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactoring 1"]],"content":"Signed commit: refactoring 1","id":"533e9f7acbdd4dc16dbe304245469d57d8d37f0c0cce53b60d99719e2acf4502","sig":"0fad2d7c44f086ceb06ce40ea8cea2d4d002ebe8caec7d78e83483348b1404cfb6256d8d3796ebd9ae6f7866a431ec4a1abe84e417d3e238b9b554b4a32481e4"}
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772090269,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","refactoring 2"]],"content":"Signed commit: refactoring 2","id":"9375bfe35e0574bc722cad243c22fdf374dcc9016f91f358ff9ddf1d0a03bb50","sig":"10fbbcbc7cab48dfd2340f0c9eceafe558d893789e4838cbe26493e5c339f7a1f015d1cc4af8bfa51d57e9a9da94bb1bb44841305d5ce7cf92db9938985d0459"}
{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772104036,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","fix build"]],"content":"Signed commit: fix build","id":"830b91f4efe7d208128a008d44fd3b4352c09af0a83b40ea1fab769f9c8563cf","sig":"49a9772580d5ba1b9b9800bdb53f0f4b55661f6062f9968b18cbbd4983d7a042b477281769488d44b4f43c7bdf627d621d83c16659d3d8d226fb32fe0a450756"}
+{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772105581,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","fdix build"]],"content":"Signed commit: fdix build","id":"aa457cd97e3af5c7e7e6f8938d159f62de2eee27afcf9a9a415192a8b39cd038","sig":"1959bae547fefff3b3fd72e23071e989724ab71f2042bad9cb5a969133045119a068b529df17ded13db96b54372f662760df79a34f1b6072dcabf5d2f003000b"}
diff --git a/src/routes/repos/[npub]/[repo]/+page.svelte b/src/routes/repos/[npub]/[repo]/+page.svelte
index db83f41..6d33344 100644
--- a/src/routes/repos/[npub]/[repo]/+page.svelte
+++ b/src/routes/repos/[npub]/[repo]/+page.svelte
@@ -17,6 +17,20 @@
import PatchesTab from './components/PatchesTab.svelte';
import DocsTab from './components/DocsTab.svelte';
import DiscussionsTab from './components/DiscussionsTab.svelte';
+ import CreateFileDialog from './components/dialogs/CreateFileDialog.svelte';
+ import CreateBranchDialog from './components/dialogs/CreateBranchDialog.svelte';
+ import CreateTagDialog from './components/dialogs/CreateTagDialog.svelte';
+ import CreateReleaseDialog from './components/dialogs/CreateReleaseDialog.svelte';
+ import CreateIssueDialog from './components/dialogs/CreateIssueDialog.svelte';
+ import CreateThreadDialog from './components/dialogs/CreateThreadDialog.svelte';
+ import ReplyDialog from './components/dialogs/ReplyDialog.svelte';
+ import CreatePRDialog from './components/dialogs/CreatePRDialog.svelte';
+ import CreatePatchDialog from './components/dialogs/CreatePatchDialog.svelte';
+ import PatchHighlightDialog from './components/dialogs/PatchHighlightDialog.svelte';
+ import PatchCommentDialog from './components/dialogs/PatchCommentDialog.svelte';
+ import CommitDialog from './components/dialogs/CommitDialog.svelte';
+ import VerificationDialog from './components/dialogs/VerificationDialog.svelte';
+ import CloneUrlVerificationDialog from './components/dialogs/CloneUrlVerificationDialog.svelte';
import { downloadRepository as downloadRepoUtil } from './utils/download.js';
import { buildApiHeaders } from './utils/api-client.js';
import '$lib/styles/repo.css';
@@ -5893,675 +5907,113 @@
{/if}
-
- {#if state.openDialog === 'createFile' && state.user.pubkey && state.maintainers.isMaintainer}
-
state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New File
- {#if state.git.branches.length > 0}
-
- Branch:
-
- {#each state.git.branches as branch}
- {@const branchName = typeof branch === 'string' ? branch : branch.name}
- {branchName}{#if branchName === state.git.defaultBranch} (default){/if}
- {/each}
-
-
- {:else if state.git.currentBranch}
-
- Branch:
-
-
- {/if}
-
- File Name:
-
-
-
- Content:
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.saving ? 'Creating...' : 'Create'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createBranch' && state.user.pubkey && state.maintainers.isMaintainer}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New Branch
-
- Branch Name:
-
-
-
- From Branch:
-
- {#if state.git.branches.length === 0}
- No state.git.branches - will create initial branch
- {:else}
- {#each state.git.branches as branch}
- {@const branchName = typeof branch === 'string' ? branch : (branch as { name: string }).name}
- {@const isDefaultBranch = branchName === state.forms.branch.defaultName}
- {#if !isDefaultBranch}
- {branchName}
- {/if}
- {/each}
- {/if}
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.saving ? 'Creating...' : 'Create Branch'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createTag' && state.user.pubkey && state.maintainers.isMaintainer}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New Tag
-
- Tag Name:
-
-
-
- Reference (commit/branch):
-
-
-
- Message (optional, for annotated tag):
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.saving ? 'Creating...' : 'Create Tag'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createRelease' && state.user.pubkey && (state.maintainers.isMaintainer || state.user.pubkeyHex === repoOwnerPubkeyDerived) && state.clone.isCloned}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createIssue' && state.user.pubkey}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New Issue
-
- Subject:
-
-
-
- Description:
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.saving ? 'Creating...' : 'Create Issue'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createThread' && state.user.pubkey}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New Discussion Thread
-
- Title:
-
-
-
- Content:
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.creating.thread ? 'Creating...' : 'Create Thread'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'reply' && state.user.pubkey && (state.discussion.replyingToThread || state.discussion.replyingToComment)}
- {
- state.openDialog = null;
- state.discussion.replyingToThread = null;
- state.discussion.replyingToComment = null;
- state.forms.discussion.replyContent = '';
- }}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
- {#if state.discussion.replyingToComment}
- Reply to Comment
- {:else if state.discussion.replyingToThread}
- Reply to Thread
- {:else}
- Reply
- {/if}
-
-
- Your Reply:
-
-
-
- {
- state.openDialog = null;
- state.discussion.replyingToThread = null;
- state.discussion.replyingToComment = null;
- state.forms.discussion.replyContent = '';
- }}
- class="cancel-button"
- >
- Cancel
-
- createThreadReply()}
- disabled={!state.forms.discussion.replyContent.trim() || state.creating.reply}
- class="save-button"
- >
- {state.creating.reply ? 'Posting...' : 'Post Reply'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createPR' && state.user.pubkey}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'createPatch' && state.user.pubkey}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Create New Patch
-
Enter your patch content in git format-patch format. Patches should be under 60KB.
-
- Subject (optional):
-
-
-
- Patch Content:
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.creating.patch ? 'Creating...' : 'Create Patch'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'patchHighlight'}
- state.openDialog = null}
- onkeydown={(e) => {
- if (e.key === 'Escape') {
- state.openDialog = null;
- }
- }}
- >
-
-
-
e.stopPropagation()}>
-
Create Highlight
-
-
{state.forms.patchHighlight.text}
-
-
- Comment (optional):
-
-
-
- state.openDialog = null} class="cancel-btn">Cancel
-
- {state.creating.patchHighlight ? 'Creating...' : 'Create Highlight'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'patchComment'}
- { state.openDialog = null; state.forms.patchComment.replyingTo = null; }}
- onkeydown={(e) => {
- if (e.key === 'Escape') {
- state.openDialog = null;
- state.forms.patchComment.replyingTo = null;
- }
- }}
- >
-
-
-
e.stopPropagation()}>
-
{state.forms.patchComment.replyingTo ? 'Reply to Comment' : 'Add Comment'}
-
- Comment:
-
-
-
- { state.openDialog = null; state.forms.patchComment.replyingTo = null; }} class="cancel-btn">Cancel
-
- {state.creating.patchComment ? 'Creating...' : (state.forms.patchComment.replyingTo ? 'Reply' : 'Add Comment')}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'commit' && state.user.pubkey && state.maintainers.isMaintainer}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
Commit Changes
- {#if state.git.branches.length > 0}
-
- Branch:
-
- {#each state.git.branches as branch}
- {@const branchName = typeof branch === 'string' ? branch : branch.name}
- {branchName}{#if branchName === state.git.defaultBranch} (default){/if}
- {/each}
-
-
- {:else if state.git.currentBranch}
-
- Branch:
-
-
- {/if}
-
- Commit Message:
-
-
-
- state.openDialog = null} class="cancel-button">Cancel
-
- {state.saving ? 'Saving...' : 'Commit & Save'}
-
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'verification' && state.verification.fileContent}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
-
-
- The announcement event should be saved to nostr/repo-events.jsonl in your repository.
- You can download the announcement event JSON below for reference.
-
-
-
-
{state.verification.fileContent}
-
-
-
- state.openDialog = null} class="cancel-button">Close
-
-
-
- {/if}
-
-
- {#if state.openDialog === 'cloneUrlVerification'}
- state.openDialog = null}
- onkeydown={(e) => e.key === 'Escape' && (state.openDialog = null)}
- tabindex="-1"
- >
-
-
-
e.stopPropagation()}
- >
-
-
-
- Verify this repository by committing the repo announcement event to it.
-
- {#if state.verification.selectedCloneUrl}
-
- Clone URL: {state.verification.selectedCloneUrl}
-
- {/if}
- {#if state.clone.isCloned !== true}
-
- Repository must be cloned first. Please clone this repository to the server before verifying ownership.
-
- {:else}
-
- This will commit the repository announcement event to nostr/repo-events.jsonl in the default branch, which verifies that you control this repository.
-
- {/if}
- {#if state.error}
-
- {state.error}
-
- {/if}
-
-
-
-
- {/if}
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
+
+ state.openDialog = null}
+ />
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CommitDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CommitDialog.svelte
new file mode 100644
index 0000000..12ef4b1
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CommitDialog.svelte
@@ -0,0 +1,99 @@
+
+
+
+ {#if state.git.branches.length > 0}
+
+ Branch:
+
+ {#each state.git.branches as branch}
+ {@const branchName = typeof branch === 'string' ? branch : branch.name}
+ {branchName}{#if branchName === state.git.defaultBranch} (default){/if}
+ {/each}
+
+
+ {:else if state.git.currentBranch}
+
+ Branch:
+
+
+ {/if}
+
+ Commit Message:
+
+
+
+ Cancel
+
+ {state.saving ? 'Saving...' : 'Commit & Save'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateBranchDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateBranchDialog.svelte
new file mode 100644
index 0000000..f3307c9
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateBranchDialog.svelte
@@ -0,0 +1,96 @@
+
+
+
+ {#snippet children()}
+
+ Branch Name:
+
+
+
+ From Branch:
+
+ {#if state.git.branches.length === 0}
+ No branches - will create initial branch
+ {:else}
+ {#each state.git.branches as branch}
+ {@const branchName = typeof branch === 'string' ? branch : (branch as { name: string }).name}
+ {@const isDefaultBranch = branchName === state.forms.branch.defaultName}
+ {#if !isDefaultBranch}
+ {branchName}
+ {/if}
+ {/each}
+ {/if}
+
+
+
+ Cancel
+
+ {state.saving ? 'Creating...' : 'Create Branch'}
+
+
+ {/snippet}
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateFileDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateFileDialog.svelte
new file mode 100644
index 0000000..b63a31c
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateFileDialog.svelte
@@ -0,0 +1,101 @@
+
+
+
+ {#snippet children()}
+ {#if state.git.branches.length > 0}
+
+ Branch:
+
+ {#each state.git.branches as branch}
+ {@const branchName = typeof branch === 'string' ? branch : branch.name}
+ {branchName}{#if branchName === state.git.defaultBranch} (default){/if}
+ {/each}
+
+
+ {:else if state.git.currentBranch}
+
+ Branch:
+
+
+ {/if}
+
+ File Name:
+
+
+
+ Content:
+
+
+
+ Cancel
+
+ {state.saving ? 'Creating...' : 'Create'}
+
+
+ {/snippet}
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateIssueDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateIssueDialog.svelte
new file mode 100644
index 0000000..42bd317
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateIssueDialog.svelte
@@ -0,0 +1,79 @@
+
+
+
+
+ Subject:
+
+
+
+ Description:
+
+
+
+ Cancel
+
+ {state.saving ? 'Creating...' : 'Create Issue'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePRDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePRDialog.svelte
new file mode 100644
index 0000000..662d063
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePRDialog.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+ Subject:
+
+
+
+ Description:
+
+
+
+ Commit ID:
+
+
+
+ Branch Name (optional):
+
+
+
+ Cancel
+
+ {state.saving ? 'Creating...' : 'Create PR'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePatchDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePatchDialog.svelte
new file mode 100644
index 0000000..75de925
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreatePatchDialog.svelte
@@ -0,0 +1,86 @@
+
+
+
+ Enter your patch content in git format-patch format. Patches should be under 60KB.
+
+ Subject (optional):
+
+
+
+ Patch Content:
+
+
+
+ Cancel
+
+ {state.creating.patch ? 'Creating...' : 'Create Patch'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateReleaseDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateReleaseDialog.svelte
new file mode 100644
index 0000000..a7afc8e
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateReleaseDialog.svelte
@@ -0,0 +1,96 @@
+
+
+
+
+ Tag Name:
+
+
+
+ Tag Hash (commit hash):
+
+
+
+ Release Notes:
+
+
+
+
+ Draft Release
+
+
+
+ Pre-release
+
+
+ Cancel
+
+ {state.creating.release ? 'Creating...' : 'Create Release'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateTagDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateTagDialog.svelte
new file mode 100644
index 0000000..4eaa454
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateTagDialog.svelte
@@ -0,0 +1,86 @@
+
+
+
+
+ Tag Name:
+
+
+
+ Reference (commit/branch):
+
+
+
+ Message (optional, for annotated tag):
+
+
+
+ Cancel
+
+ {state.saving ? 'Creating...' : 'Create Tag'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/CreateThreadDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateThreadDialog.svelte
new file mode 100644
index 0000000..01f0941
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/CreateThreadDialog.svelte
@@ -0,0 +1,79 @@
+
+
+
+
+ Title:
+
+
+
+ Content:
+
+
+
+ Cancel
+
+ {state.creating.thread ? 'Creating...' : 'Create Thread'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/Modal.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/Modal.svelte
new file mode 100644
index 0000000..2eb21b5
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/Modal.svelte
@@ -0,0 +1,67 @@
+
+
+{#if open}
+ e.key === 'Escape' && onClose()}
+ tabindex="-1"
+ >
+
+
+
e.stopPropagation()}
+ onkeydown={(e) => e.stopPropagation()}
+ tabindex="-1"
+ >
+
{title}
+ {#if children}{@render children()}{/if}
+
+
+{/if}
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/PatchCommentDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/PatchCommentDialog.svelte
new file mode 100644
index 0000000..f23ac7a
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/PatchCommentDialog.svelte
@@ -0,0 +1,84 @@
+
+
+
+
+ Comment:
+
+
+
+ Cancel
+
+ {state.creating.patchComment ? 'Creating...' : (state.forms.patchComment.replyingTo ? 'Reply' : 'Add Comment')}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/PatchHighlightDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/PatchHighlightDialog.svelte
new file mode 100644
index 0000000..7ae3b7b
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/PatchHighlightDialog.svelte
@@ -0,0 +1,94 @@
+
+
+
+
+
{state.forms.patchHighlight.text}
+
+
+ Comment (optional):
+
+
+
+ Cancel
+
+ {state.creating.patchHighlight ? 'Creating...' : 'Create Highlight'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/ReplyDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/ReplyDialog.svelte
new file mode 100644
index 0000000..cd75ef6
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/ReplyDialog.svelte
@@ -0,0 +1,86 @@
+
+
+
+
+ Your Reply:
+
+
+
+ Cancel
+
+ {state.creating.reply ? 'Posting...' : 'Post Reply'}
+
+
+
+
+
diff --git a/src/routes/repos/[npub]/[repo]/components/dialogs/VerificationDialog.svelte b/src/routes/repos/[npub]/[repo]/components/dialogs/VerificationDialog.svelte
new file mode 100644
index 0000000..82754c0
--- /dev/null
+++ b/src/routes/repos/[npub]/[repo]/components/dialogs/VerificationDialog.svelte
@@ -0,0 +1,117 @@
+
+
+
+
+
+ The announcement event should be saved to nostr/repo-events.jsonl in your repository.
+ You can download the announcement event JSON below for reference.
+
+
+
+
{state.verification.fileContent}
+
+
+
+ Close
+
+
+
+