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>
58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import type { PluginManifest } from '@@/plugins/manifest';
|
|
|
|
/**
|
|
* Jellyfin — films and shows from your own server, with a player that handles direct, HLS and
|
|
* progressive playback.
|
|
*
|
|
* ── What this plugin is, and what it is not ──
|
|
*
|
|
* It does not install or supervise Jellyfin, and it stores no media. You point it at a server and it
|
|
* speaks Jellyfin's API on your behalf, holding the access token server-side so no device carries it.
|
|
*
|
|
* ── Where the connection lives ──
|
|
*
|
|
* In this plugin's OWN table, unlike transmission and soulseek. `jellyfin_servers` is a registry — label,
|
|
* URL, encrypted token, one active — because more than one Jellyfin really is a thing someone has (a
|
|
* home server and a friend's, say). That is the same reason `photos_config` is plural and
|
|
* `service_connections` is not.
|
|
*
|
|
* ── The vendored player ──
|
|
*
|
|
* `web/vendor/hls.mjs` is a checked-in third-party build, ~1.3 MB. It is deliberately excluded from
|
|
* formatting and lint: reformatting it would destroy the diff against upstream, which is the only thing
|
|
* that makes a vendored library reviewable. See the README beside it.
|
|
*
|
|
* ── No `osDependencies` ──
|
|
*
|
|
* Nothing shells out. The sidecar speaks Jellyfin's HTTP API over `fetch`, and transcoding is the
|
|
* server's job, not ours.
|
|
*/
|
|
export const manifest: PluginManifest = {
|
|
publisher: 'officerdev',
|
|
version: '2026.08.27.01',
|
|
platform: '>=1.0.0',
|
|
|
|
label: 'Video',
|
|
summary: 'Films and shows, with a player that handles direct, HLS and progressive',
|
|
/** the classic self-hosted media case. */
|
|
tags: ['Homelab', 'Personal'],
|
|
icon: 'Clapperboard',
|
|
color: '#a855f7',
|
|
|
|
// Jellyfin 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: 'jellyfin',
|
|
label: 'Video',
|
|
description: 'Browse and play the Jellyfin library',
|
|
},
|
|
],
|
|
};
|