FileLink-PsiTransfer/README.md

40 lines
2.1 KiB
Markdown

# 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 `/<sid>` 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-<version>.xpi`.
Do not assume PsiTransfer exposes a polished external API. This scaffold is intentionally conservative and keeps unresolved behavior as explicit TODOs.