Implements every command that the v2 surface (bb692d7) added as a stub, across mail, webdav and calendar. It also fixes mail send --attach, which silently dropped the attachments.
Not yet run against a live server. Everything is tested against in-process fakes built from the suite's own source (ordner.fyi).
mail #
send --attachnow works: each file is uploaded as a blob, and the email references it. Before, the files were read and then ignored.send --draft <id>(new) sends a stored draft. Thedrafthelp already promised this, but no such option existed.copyadds the message to one more mailbox, the same way the IMAP gateway's COPY works; the id does not change.marksets or clears only the read and flagged keywords you name.rmmoves the message to Trash, as the webmail does.--destroydeletes it for good.draftstores a message in Drafts, attachments included.attachmentdownloads one part, chosen by part id or file name.
webdav #
copy/cp,move/mv: done by the server. An existing target is never replaced without--force;copy --shallowcopies a folder without its contents.quotareads RFC 4331 used/available.share <folder> --to <id> [--access read|read-write|upload-only],unshare: sharing goes through the WebDAV ACL method, which awebdav-scoped app password may use. Other grants on the folder are kept, and protected grants are never sent back.shareprints the share link.
calendar #
show <id> [--occurrence <rid>]shows a whole event or a single occurrence.find <text>uses the server'stextfilter, which matches titles only.exportwrites one VCALENDAR in the shape of the suite's export. The VTIMEZONEs are generated from Temporal's IANA data and tested against IANA offsets up to 2045.import:- groups a master and its RECURRENCE-ID instances into one event;
- maps Windows/Mozilla zone names to IANA;
- skips UIDs the account already holds, so a re-import is a no-op;
--updatereplaces them where they live instead.
Changes to what bb692d7 declared #
- mail
rm: the default is now Trash (the stub destroyed and needed--yes). - mail
copy: returns the original id. - mail
mark:--read --unreadtogether is a usage error. - calendar
find: matches titles only, not description and location. - calendar
--tz: replaces the hard-codedEurope/Vienna. --account: every new command takes it now; the stubs ignored it.- Duplicate
--json: the per-command--jsondeclarations are removed, since--jsonis global. -a:--attachhad taken-a, which--accountowns.- Port types: they grew to return what the commands report (see
protocols/types.ts).
A new test walks the command tree and fails if one short flag is given to two options.
Checks #
npm run typecheck,npm test(122, up from 88),npm run pack,npm run smoke: all pass.- Tests and smoke run under the loopback-only network guard.
Not verified against a real server #
- mail: whether an
imap-scoped app password may upload; whether a stored draft comes back with itsbcc. - webdav: whether the proxy passes the ACL method through and keeps the COPY/MOVE
Destinationhost; the exact share-link URL. Also,sharereads and then writes with no precondition, so a concurrent edit in the web app could be lost. - calendar: how the
uidlookup behaves across calendars; how real clients read the generated VTIMEZONEs; large imports against the aggregator's timeout.