Skip to content

feat: add S3 asset sharing with pre-signed URLs and public publish#52

Open
andrewhopper wants to merge 4 commits intomasterfrom
claude/s3-asset-sharing-N3ulF
Open

feat: add S3 asset sharing with pre-signed URLs and public publish#52
andrewhopper wants to merge 4 commits intomasterfrom
claude/s3-asset-sharing-N3ulF

Conversation

@andrewhopper
Copy link
Owner

Add the ability to share assets via S3 with two modes:

  • Pre-signed URL sharing with configurable expiry (15min to 7 days)
  • Public publish with permanent URL via public-read ACL

Includes S3 service, API routes, share modal UI, and CLI/env configuration.

https://claude.ai/code/session_01KmkxntcBJNYR3N47LGGDXp

claude added 4 commits March 7, 2026 21:50
Add the ability to share assets via S3 with two modes:
- Pre-signed URL sharing with configurable expiry (15min to 7 days)
- Public publish with permanent URL via public-read ACL

Includes S3 service, API routes, share modal UI, and CLI/env configuration.

https://claude.ai/code/session_01KmkxntcBJNYR3N47LGGDXp
…rganize by project/session

- Remove public-read ACL publish endpoint (breaks on modern S3 buckets)
- Consolidate to single `share()` method with presigned URLs only
- Fix path traversal vulnerability in share routes (resolve + startsWith check)
- Deduplicate validation logic into shared `validateFileRequest()` helper
- Organize S3 keys as `prefix/project/session/id-filename`
- Clamp expiresIn to valid AWS range (60s–7 days)
- Remove unused HeadObjectCommand import
- Stop leaking bucket/region in /share/status endpoint
- Stop leaking internal error messages in 500 responses
- Add .env.example documenting all S3 config vars
- Add --project-name CLI option (defaults to directory name)

https://claude.ai/code/session_01KmkxntcBJNYR3N47LGGDXp
…3 sharing

Resolves merge conflicts across 5 files, keeping both feature sets:
- S3 presigned-URL sharing (our branch)
- Tunnel support, file info modal, preferences panel, EXIF (master)
- Removed publish button from share modal (presigned-only)

https://claude.ai/code/session_01KmkxntcBJNYR3N47LGGDXp
Resolves conflicts from master's full TypeScript + React + Vite + shadcn conversion:
- Converted s3-service.js to s3-service.ts with full type annotations
- Converted share-routes.js to share-routes.ts using FileService.getFilePath()
- Created ShareModal.tsx React component using shadcn Dialog
- Wired S3 Share button into App.tsx action bar
- Resolved server.ts imports to include S3Service + share routes
- Merged AWS SDK deps with Radix UI + Tailwind deps in package.json
- Accepted deletion of old public/app.js and public/index.html

https://claude.ai/code/session_01KmkxntcBJNYR3N47LGGDXp
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.

2 participants