# FileLink-PsiTransfer Thunderbird Manifest V3 Filelink/cloudFile provider for PsiTransfer. Current status: minimal v1 upload path implemented. The extension now performs a source-informed tus upload, locks the PsiTransfer bucket, and returns the bucket share URL to Thunderbird. Delete, rename, and upload reuse remain intentionally unimplemented until the PsiTransfer source proves a stable provider-facing contract. The real integration contract must be derived from: - `/tmp/psitransfer` - https://webextension-api.thunderbird.net/en/mv3/cloudFile.html This repository already includes: - `manifest.json` for a Thunderbird MV3 `cloud_file` provider - background and provider scaffolding under `src/` - a minimal account management UI under `ui/` - a vendored local copy of `tus-js-client` at `vendor/tus.js` - implementation notes in `docs/psitransfer-notes.md` - agent workflow guidance in `AGENTS.md` Current provider behavior: 1. Read `GET /config.json` from the configured base URL with the optional `x-passwd` header. 2. Upload one Thunderbird attachment to one PsiTransfer bucket using the vendored tus client. 3. Lock the bucket with `PATCH /files/:sid?lock=yes`. 4. Return the bucket share URL `/` to Thunderbird. Configuration notes: - `baseUrl` should point at the PsiTransfer download/share root. - `uploadAppPath` is optional and defaults to `/`. Use it only when the server mounts uploads under a subpath relative to `baseUrl`, because `config.json` does not expose `uploadAppPath`. - The provider validates retention values and max file size against `config.json`. - If the PsiTransfer server requires bucket passwords, the provider currently stops with an explicit error because bucket-password UI is not implemented yet. Building: - Run `./build-xpi.sh` on Unix-like systems or `powershell ./build-xpi.ps1` on Windows. - The scripts read the version from `manifest.json` and write `release/psitransfer-filelink-.xpi`. Do not assume PsiTransfer exposes a polished external API. This scaffold is intentionally conservative and keeps unresolved behavior as explicit TODOs.