mirror of
https://github.com/PreMiD/PreMiD.git
synced 2026-04-05 20:31:58 +02:00
* chore: release v1.1.0 * chore: pd stuff * chore: release v1.1.1 * feat: add ratelimit environment variables * chore: release v1.1.2 * chore: improve memory usage * chore: release v1.1.3 * feat: use sentinels * chore: release v1.1.4 * chore: update name * chore: release v1.1.5 * fix(pd): use correct env variable * chore: release v1.1.6 * wip: docs * wip: docs * wip: api * wip: website * wip: website * wip: website * wip: website * chore: cleanup * chore: add lib folder to .gitignore * chore: remove blank * wip: csp * wip: csp * fix(ci): use correct context * wip: cd * wip: cd * wip: cd * wip: cd * wip: cd * wip: cd * chore: use correct port * wip: csp * wip: csp * wip: csp * wip: csp * chore: update security headers in nuxt.config.ts * chore: update security headers in nuxt.config.ts * chore: remove comments * chore: update npm dependencies * chore: bump dependencies & add missing * fix: broken lockfile * chore: set client host * chore: update depencies * style: small layout fixes * ci: testing * chore: update CI workflow to trigger on 'monorepo' branch * chore: use full build image * chore: test (#1048) * chore: setup qemu * chore: remove docs prefix from scripts (#1046) * style: fix centering (#1050) * style: render 3 columns (#1049) * ci: use alpine base (#1051) * style: make footer follow max width (#1052) * feat: Add Crowdin configuration for website localization. (#1054) * chore: change dest in crowdin * chore: improve crowdin pr * chore: improve crowdin pr * chore: lint * chore: update language folder * chore: update crowdin configuration to skip untranslated strings and files * chore: add crowdin badge * chore: release v1.0.1 * chore: release v1.1.7 * chore: fix build * chore: release v1.1.8 * chore: release v1.0.2 * chore: fix docker * chore: release v1.1.9 * chore: release v1.0.3 * feat: add more api endpoints (#1059) * chore: worked on the api and lint * chore: small fixes * chore: uhm I think this sort is broken * chore: worked on the api and lint * chore: small fixes * chore: uhm I think this sort is broken * feat: heartbeat * chore: add prettier ignore * feat: websocket * chore: update tsconfig * chore: lint * chore: dont require unused fields * chore: use djs rest * fix: websocket * chore: v5 * chore: fix build --------- Co-authored-by: Florian Metz <me@timeraa.dev> * chore: wip api * chore: wip api * chore: release v0.0.1 * chore: deploy on tag * chore: release v0.0.1 * chore(api): remove old sentry tracing * chore: release v0.0.2 * chore: release v0.0.2 * feat(api-master): add logs * chore: release v0.0.3 * chore: bump dep * feat: add feature flags * chore: release v0.0.3 * feat: metrics? * chore: release v0.0.4 * chore: update npm dependencies * feat: add session-keep-alive * chore: fix build * chore: release v0.0.5 * chore: release v0.0.4 * chore: update arktype * chore: release v0.0.6 * chore: hash the key * chore: release v0.0.7 * chore: release v0.0.5 * chore: revert redis stuff * chore: release v0.0.6 * chore: release v0.0.8 * feat(api-master): add metrics * chore: release v0.0.7 * chore: update lockfile * chore: release v0.0.8 * chore: idk kek * chore: iodk * chore: release v0.0.8 * feat: use scan * chore: release v0.0.9 * chore: skip clearOldSesssions if another in progress * chore: release v0.0.10 * chore: optimize session cleanup with batch deletion * chore: release v0.0.11 * chore: move some code * chore: release v0.0.12 * chore: add timeout to headless session deletion * chore: release v0.0.13 * chore: add p-limit dependency for session cleanup * chore: release v0.0.14 * chore: always return the key * chore: release v0.0.15 * chore: add p-limit dependency for session cleanup * chore: release v0.0.16 * chore: why does it not abort * chore: release v0.0.17 * chore: fix time * chore: release v0.0.18 * chore: add reason * chore: release v0.0.19 * feat: use scienceId * chore: release v0.0.20 * chore: release v0.0.9 * chore: update log * chore: release v0.0.20 * chore: use ky * chore: release v0.0.21 * chore: 202 on disabled flag * chore: release v0.0.10 * chore: test * chore: release v0.0.22 * chore: release v0.0.11 * chore: test * chore: test * chore: release v0.0.12 * chore: test * chore: release v0.0.23 * chore: update hash * chore: release v0.0.24 * chore: release v0.0.13 * feat: update tracing (#1067) * chore: release v0.0.14 * chore: release v0.0.25 * fix: store ip data in postgres * chore: lint * chore: release v0.0.26 * chore: reduce batch size * chore: release v0.0.27 * chore: disable ip stuff for now * chore: release v0.0.28 * chore: reduce memory * chore: release v0.0.29 * chore: release v0.0.29 * chore: release v0.0.29 * chore: small updates * chore: release v0.0.30 * chore: optimize active presence gauge update with concurrency limit * chore: release v0.0.31 * chore: some improvements * chore: forgot to save * chore: release v0.0.32 * chore: some testing * chore: release v0.0.33 * chore: scan count config * chore: release v0.0.34 * feat: schema v1.11 * chore: release v1.0.4 * feat: use prom-client * chore: release v0.0.35 * chore: scan keys instead * chore: release v0.0.36 * feat: ip data * chore: release v0.0.37 * feat: discord-bot (#1069) * feat: discord-bot * feat: final things * chore: add to matrix * feat: add sentry * chore: move some things * chore: update version * chore: release v1.0.0 * fix(discord-bot): fixes credits * chore: release v1.0.1 * feat(discord-bot): add beta command * chore: release v1.0.2 * chore: un-ingore config files * chore: lint * fix(discord-bot): update developer roles constant (#1070) * chore: disable commitlint * fix(discord-bot): update developer roles constant * Update commit-msg * chore: release v1.0.3 * Update presence.ts (#1072) * fix: get presence list correctly * chore: release v1.0.4 * chore: change info message * chore: release v1.0.5 * fix(api): metadata types * chore: release v0.0.15 * chore: fix type * chore: release v0.0.16 * fix: add dbName * chore: release v0.0.17 * feat: fix presence endpoints * chore: release v0.0.18 * fix: show displayName * chore: release v1.0.6 * feat: extension version gauge (#1074) * feat: extension version gauge * chore: lint * feat: new schema version * chore: release v1.0.5 * chore: release v0.0.38 * chore: remove ip lookup * chore: lint * chore: release v0.0.39 * chore: add environment variable to disable * chore: release v0.0.19 * chore(bot): rename presence to activity (#1077) * chore: release v1.0.7 * feat(schema-server): add v1.13 * chore: release v1.0.6 * chore: add mobile and update descriptions * chore: release v1.0.7 * chore: lint * chore: release v1.0.8 * chore: add Social Media Manager role and color to constants (#1084) * chore: add Social Media Manager role and color to constants * chore: bump version * feat: v1.14 of schema * chore: release v1.0.9 * feat: schema 1.15 * chore: release v1.0.10 * feat: add file extension * chore: release v1.2.0 * fix: return image directly * chore: release v1.2.1 * chore: remove cache headers * chore: release v1.2.2 * chore: set more headers * chore: release v1.2.3 * fix: ttl * chore: release v1.2.4 * chore: strip monorepo down to pd and schema-server only Remove all apps except pd and schema-server to create a minimal repository. Deleted apps: api-master, api-worker, discord-bot, docs, website Deleted packages directory and all monorepo configuration files Removed unnecessary config files: eslint, prettier, commitlint, vitest, etc. * docs: update README to be more user-friendly and generic - Rewritten to focus on what PreMiD is rather than repository structure - Added friendly introduction to PreMiD's features and capabilities - Highlighted the open source Presences repository at github.com/PreMiD/Presences - Removed monorepo-specific content and development instructions - Added community section with helpful links - Overall more welcoming tone for users and contributors * chore: restore TypeScript build configuration and update dependencies - Added back tsconfig.base.json and tsconfig.app.json needed for builds - Updated both pd and schema-server tsconfig files to exclude test files - Installed TypeScript and @types/node dependencies for both apps - Updated README to include feedback.premid.app link - Verified both apps build successfully The apps can now be built with: npx tsc -b tsconfig.app.json * docs: update README to use Activities terminology - Changed "Presences" to "Activities" throughout - Updated repository link to github.com/PreMiD/Activities - Updated examples: YouTube, Disney+, Netflix, Twitch - Noted that Spotify has native Discord support * docs: clarify open source status and installation process - Added Contributing section explaining that Activities are open source but the main app is not - Clarified this helps the small team manage maintenance burden - Updated "install PreMiD" to "add the browser extension" for accuracy - Provided clear ways to contribute: Activities, translations, feedback * docs: clarify extension-only model and development speed - Changed "application and extension" to just "extension" - Updated reasoning: allows team to move fast and iterate quickly - No separate application exists, only the browser extension * docs: add Discord server link * docs: add banner image to README * docs: move logo inline with heading --------- Co-authored-by: Bas950 <me@bas950.com> Co-authored-by: veryCrunchy <verycrunchydev@gmail.com> Co-authored-by: veryCrunchy <me@verycrunchy.dev> Co-authored-by: Claude <noreply@anthropic.com>
258 lines
6.8 KiB
JSON
258 lines
6.8 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema",
|
|
"$id": "https://schemas.premid.app/metadata/1.3",
|
|
|
|
"title": "Metadata",
|
|
"type": "object",
|
|
"description": "Metadata that describes a presence.",
|
|
|
|
"definitions": {
|
|
"user": {
|
|
"type": "object",
|
|
"description": "User information.",
|
|
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the user."
|
|
},
|
|
|
|
"id": {
|
|
"type": "string",
|
|
"description": "The Discord snowflake of the user.",
|
|
"pattern": "^\\d+$"
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false,
|
|
"required": ["name", "id"]
|
|
}
|
|
},
|
|
|
|
"properties": {
|
|
"$schema": {
|
|
"$comment": "This is required otherwise the schema will fail itself when it is applied to a document via $schema. This is optional so that validators that use this schema don't fail if the metadata doesn't have the $schema property.",
|
|
|
|
"type": "string",
|
|
"description": "The metadata schema URL."
|
|
},
|
|
|
|
"author": {
|
|
"$ref": "#/definitions/user",
|
|
"description": "The author of this presence."
|
|
},
|
|
|
|
"contributors": {
|
|
"type": "array",
|
|
"description": "Any extra contributors to this presence.",
|
|
|
|
"items": {
|
|
"$ref": "#/definitions/user"
|
|
}
|
|
},
|
|
|
|
"service": {
|
|
"type": "string",
|
|
"description": "The service this presence is for."
|
|
},
|
|
|
|
"altnames": {
|
|
"type": "array",
|
|
"description": "Alternative names for the service.",
|
|
|
|
"items": {
|
|
"type": "string",
|
|
"description": "An alternative name."
|
|
},
|
|
"minItems": 1
|
|
},
|
|
|
|
"description": {
|
|
"type": "object",
|
|
"description": "A description of the presence in multiple languages.",
|
|
|
|
"propertyNames": {
|
|
"type": "string",
|
|
"description": "The language key. The key must be languagecode(_REGIONCODE).",
|
|
"pattern": "^[a-z]{2}(_[A-Z]{2})?$"
|
|
},
|
|
"patternProperties": {
|
|
"^[a-z]{2}(_[A-Z]{2})?$": {
|
|
"type": "string",
|
|
"description": "The description of the presence in the key's language."
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false,
|
|
"required": ["en"]
|
|
},
|
|
|
|
"url": {
|
|
"type": ["string", "array"],
|
|
"description": "The service's website URL, or an array of URLs. Protocols should not be added.",
|
|
"pattern": "^(([a-z0-9-]+\\.)*[0-9a-z_-]+(\\.[a-z]+)+|(\\d{1,3}\\.){3}\\d{1,3}|localhost)$",
|
|
|
|
"items": {
|
|
"type": "string",
|
|
"description": "One of the service's website URLs.",
|
|
"pattern": "^(([a-z0-9-]+\\.)*[0-9a-z_-]+(\\.[a-z]+)+|(\\d{1,3}\\.){3}\\d{1,3}|localhost)$"
|
|
},
|
|
"minItems": 2
|
|
},
|
|
|
|
"version": {
|
|
"type": "string",
|
|
"description": "The SemVer version of the presence. Must just be major.minor.patch.",
|
|
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
},
|
|
|
|
"logo": {
|
|
"type": "string",
|
|
"description": "The logo of the service this presence is for.",
|
|
"pattern": "^https?:\\/\\/?(?:[a-z0-9-]+\\.)*[0-9a-z_-]+(?:\\.[a-z]+)+\\/.*$"
|
|
},
|
|
|
|
"thumbnail": {
|
|
"type": "string",
|
|
"description": "A thumbnail of the service this presence is for.",
|
|
"pattern": "^https?:\\/\\/?([a-z0-9-]+\\.)*[0-9a-z_-]+(\\.[a-z]+)+\\/.*$"
|
|
},
|
|
|
|
"color": {
|
|
"type": "string",
|
|
"description": "The theme color of the service this presence is for. Must be either a 6 digit or a 3 digit hex code.",
|
|
"pattern": "^#([A-Fa-f0-9]{3}){1,2}$"
|
|
},
|
|
|
|
"tags": {
|
|
"type": ["array"],
|
|
"description": "The tags for the presence.",
|
|
|
|
"items": {
|
|
"type": "string",
|
|
"description": "A tag.",
|
|
"pattern": "^[^A-Z\\s!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^_`{|}~]+$"
|
|
},
|
|
"minItems": 1
|
|
},
|
|
|
|
"category": {
|
|
"type": "string",
|
|
"description": "The category the presence falls under.",
|
|
"enum": ["anime", "games", "music", "socials", "videos", "other"]
|
|
},
|
|
|
|
"iframe": {
|
|
"type": "boolean",
|
|
"description": "Whether or not the presence should run in IFrames."
|
|
},
|
|
|
|
"readLogs": {
|
|
"type": "boolean",
|
|
"description": "Whether or not the extension should be reading logs."
|
|
},
|
|
|
|
"regExp": {
|
|
"type": "string",
|
|
"description": "A regular expression used to match URLs for the presence to inject into."
|
|
},
|
|
|
|
"iFrameRegExp": {
|
|
"type": "string",
|
|
"description": "A regular expression used to match IFrames for the presence to inject into."
|
|
},
|
|
|
|
"button": {
|
|
"type": "boolean",
|
|
"description": "Controls whether the presence is automatically added when the extension is installed. For partner presences only."
|
|
},
|
|
|
|
"warning": {
|
|
"type": "boolean",
|
|
"description": "Shows a warning saying that it requires additional steps for the presence to function correctly."
|
|
},
|
|
|
|
"settings": {
|
|
"type": "array",
|
|
"description": "An array of settings the user can change in the presence.",
|
|
|
|
"items": {
|
|
"type": "object",
|
|
"description": "A setting.",
|
|
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "The ID of the setting."
|
|
},
|
|
|
|
"title": {
|
|
"type": "string",
|
|
"description": "The title of the setting. Required only if `multiLanguage` is disabled."
|
|
},
|
|
|
|
"icon": {
|
|
"type": "string",
|
|
"description": "The icon of the setting. Required only if `multiLanguage` is disabled.",
|
|
"pattern": "^fa[bsd] fa-[0-9a-z-]+$"
|
|
},
|
|
|
|
"if": {
|
|
"type": "object",
|
|
"description": "Restrict showing this setting if another setting is the defined value.",
|
|
|
|
"propertyNames": {
|
|
"type": "string",
|
|
"description": "The ID of the setting."
|
|
},
|
|
|
|
"patternProperties": {
|
|
"": {
|
|
"type": ["string", "number", "boolean"],
|
|
"description": "The value of the setting."
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false
|
|
},
|
|
|
|
"placeholder": {
|
|
"type": "string",
|
|
"description": "The placeholder for settings that require input. Shown when the input is empty."
|
|
},
|
|
|
|
"value": {
|
|
"type": ["string", "number", "boolean"],
|
|
"description": "The default value of the setting. Not compatible with `values`."
|
|
},
|
|
|
|
"values": {
|
|
"type": "array",
|
|
"description": "The default values of the setting. Not compatible with `value`.",
|
|
|
|
"items": {
|
|
"type": ["string", "number", "boolean"],
|
|
"description": "The value of the setting."
|
|
}
|
|
},
|
|
|
|
"multiLanguage": {
|
|
"type": ["string", "boolean", "array"],
|
|
"description": "When false, multi-localization is disabled. When true, strings from the `general.json` file are available for use. When a string, it is the name of a file (excluding .json) of a used language from the localization GitHub repo. When an array of strings, it is all of the file names (excluding .json) of used languages from the localization GitHub repo.",
|
|
|
|
"items": {
|
|
"type": "string",
|
|
"description": "The name of a file from the localization GitHub repository."
|
|
}
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false,
|
|
"required": ["author", "service", "description", "url", "version", "logo", "thumbnail", "color", "tags", "category"]
|
|
}
|