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>
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import type { PluginManifest } from '@@/plugins/manifest';
|
|
|
|
/**
|
|
* Photos — your Immich library, reached through Officer.
|
|
*
|
|
* ── What this plugin is, and what it is not ──
|
|
*
|
|
* It does NOT store photographs, and it does not install Immich. You point it at an instance you already
|
|
* run and it forwards to it, holding the API key server-side so no device ever carries one. The library,
|
|
* the originals and every thumbnail stay where they are.
|
|
*
|
|
* The account registry is per-user and already server-side (`photos_config`): a label, a URL and an
|
|
* encrypted API key, with one marked active. Adding and switching instances happens in the app rather
|
|
* than in a shell, which is why nothing here reads `process.env` — an `IMMICH_API_KEY` in `.env` would
|
|
* also sit in the environment of every other pm2 process, including the one with the largest attack
|
|
* surface and no code to use it.
|
|
*
|
|
* ── No `osDependencies` ──
|
|
*
|
|
* Nothing shells out. The sidecar is a Bun HTTP proxy and reaches Immich with `fetch`.
|
|
*/
|
|
export const manifest: PluginManifest = {
|
|
publisher: 'officerdev',
|
|
version: '2026.08.27.01',
|
|
platform: '>=1.0.0',
|
|
|
|
label: 'Photos',
|
|
summary: 'Your Immich library — browse, search, upload from the phone',
|
|
/** Google Photos is the thing it replaces. */
|
|
tags: ['Personal', 'Degoogling'],
|
|
icon: 'Images',
|
|
color: '#10b981',
|
|
|
|
// Immich accounts are created one per Officer account. Declared here so the owner sees it on the install
|
|
// screen beside the permissions — "this plugin will be told who your users are" belongs where a person
|
|
// decides, not in a log afterwards.
|
|
//
|
|
// What it turns on: the sidecar receives `users:list` when it registers and whenever an account is
|
|
// created or removed. See src/servers/plugins/user-provisioning.ts and plugins/USER_PROVISIONING.md.
|
|
userProvisioning: true,
|
|
|
|
permissions: [
|
|
{
|
|
key: 'photos',
|
|
label: 'Photos',
|
|
description: 'Browse the photo library',
|
|
},
|
|
],
|
|
};
|