Skip to content

feat: Blossom uploads for applets, asked first, to the account's file servers - #23

Merged
dskvr merged 3 commits into
mainfrom
feat/blossom-upload
Nov 10, 2026
Merged

dskvr merged 3 commits into
mainfrom
feat/blossom-upload

Conversation

@dskvr

@dskvr dskvr commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Adds the upload capability (NAP-UPLOAD), which 16 published applets require.

  • Transfer: hzrd149's blossom-client-sdk (multiServerUpload) behind kehto's createUploadService. The file goes to the first server and is mirrored to the rest. Any server storing it is a success (D-028), and the result lists every copy plus NIP-94 tags.
  • Where files go: kernl.files follows the account's file-server list (BUD-03, kind 10063), with defaults blossom.primal.net, nostr.download and blossom.band. Settings has a File servers section to edit and publish the list. Applets never choose servers.
  • Consent: the person is asked once per file, before anything is signed or sent: name and type, size, servers, and "Anyone who has its address". It is marked public, a new ConsentSummary severity. One kind 24242 authorization covers every server. Read-only sessions are refused, and an applet the shell cannot name is refused without asking.
  • Records: D-033.

Verification

  • pnpm check passes: 1449 tests, 100% coverage, slop 100.
  • New feature file-uploads.feature.
  • A kernl scenario drives an applet's upload.upload over its port to the consent prompt, and a "no" cancels it.
  • Preview browser test of the File servers settings.
  • Real network: a 16-byte blob from a throwaway key was asked about, uploaded, and fetched back identical. nostr.download stored it; primal and blossom.band refused an anonymous blob, which counted as a success with two refusals.

🤖 Generated with Claude Code

dskvr and others added 3 commits November 10, 2026 10:14
…sked first

The shell offers the upload domain. kernl.files follows the account's
file-server list (kind 10063) with well-known defaults, and Settings
edits it. createBlossomUploader uses blossom-client-sdk to upload to
the first server and mirror to the rest; any server storing the file is
a success. The person is asked once per file, with its type, size,
servers and who can see it, before anything is signed or sent. Records
D-032.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main took D-032 for the link gate; the upload decision is D-033.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…capability still unoffered

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dskvr
dskvr merged commit beb3f2e into main Nov 10, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant