first dated version. plugins were all sitting on 1.0.0, which said nothing about when a build was made or which of two copies is newer — the platform already uses YYYY.MM.DD.NN and this follows it. the version lives in manifest.ts because a plugin has no package.json; that is the field the marketplace publishes and the installer compares. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.5 KiB
TypeScript
36 lines
1.5 KiB
TypeScript
import type { PluginManifest } from '@@/plugins/manifest';
|
|
|
|
// Mail: IMAP and Gmail sync into a per-account SQLite store, read and composed in the browser.
|
|
//
|
|
// Extracted from the platform on 2026-08-17. It was switched off in place on 2026-08-13 along with every
|
|
// other plugin router, and had never been turned back on — so this plugin's first install is also the
|
|
// first time the feature has run in four days. See PLUGIN.md.
|
|
//
|
|
// `appName` is not declared: it is the directory name, so the id cannot disagree with where the code sits.
|
|
export const manifest: PluginManifest = {
|
|
publisher: 'officerdev',
|
|
version: '2026.08.27.01',
|
|
platform: '>=1.0.0',
|
|
|
|
label: 'Email',
|
|
summary: 'IMAP and Gmail accounts, synced locally and searchable offline',
|
|
/** the single biggest thing people move off Google. */
|
|
tags: ['Personal', 'Degoogling'],
|
|
icon: 'Mail',
|
|
color: '#38bdf8',
|
|
|
|
// One permission over the whole surface — the mail, the accounts and the compose window are one feature
|
|
// and there is no useful split where a member may read mail but not manage the account it arrives on.
|
|
//
|
|
// Grantable per role at read or write, like every plugin permission. What a grant MEANS is this plugin's
|
|
// job: `email_accounts` is scoped by `user_id` and every query takes the caller, so a granted member sees
|
|
// their own accounts rather than the owner's.
|
|
permissions: [
|
|
{
|
|
key: 'email',
|
|
label: 'Email',
|
|
description: 'Mail accounts and messages',
|
|
},
|
|
],
|
|
};
|