tags are how the marketplace is browsed rather than scrolled: a list of them on the left, the plugins that carry one on the right. a closed vocabulary (PLUGIN_TAGS in the platform) because free text becomes homelab, home-lab, Home Lab and selfhosted inside a month, and a filter list of synonyms is worse than no filter at all. declared here rather than curated in the catalogue, so a plugin can say what it is and nobody edits a table when one ships. the marketplace caches it on sync, exactly as it already does for label and summary.
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: '1.0.0',
|
|
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',
|
|
},
|
|
],
|
|
};
|