From 25fab61f9217521e96aa7e192e76777c96620aea Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Wed, 1 May 2024 17:40:24 -1000 Subject: [PATCH] feat: :sparkles: Finish the Lysand 3.0 update --- .vitepress/config.mts | 25 +++++- .vitepress/theme/custom.css | 61 ++++++++++++++ .vitepress/theme/index.ts | 4 + bun.lockb | Bin 64788 -> 75332 bytes components/Features.vue | 78 ++++++++++++++++++ components/Team.vue | 92 +++++++++++++++++++++ docs/extensions/interactivity.md | 10 +++ docs/extensions/vanity.md | 23 +++++- docs/groups.md | 2 +- docs/index.md | 31 ++----- docs/objects/publications.md | 103 +++++++++++++++++++++++- docs/public/assets/discord-buttons.webp | Bin 0 -> 31498 bytes package.json | 7 +- 13 files changed, 400 insertions(+), 36 deletions(-) create mode 100644 .vitepress/theme/custom.css create mode 100644 .vitepress/theme/index.ts create mode 100644 components/Features.vue create mode 100644 components/Team.vue create mode 100644 docs/extensions/interactivity.md create mode 100644 docs/public/assets/discord-buttons.webp diff --git a/.vitepress/config.mts b/.vitepress/config.mts index fa72384..779187b 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,9 +1,20 @@ +import tailwindcss from "@tailwindcss/vite"; import { defineConfig } from "vitepress"; // https://vitepress.dev/reference/site-config export default defineConfig({ title: "Lysand Documentation", description: "Documentation for Lysand, a new federated protocol", + vite: { + plugins: [tailwindcss()], + }, + vue: { + template: { + compilerOptions: { + isCustomElement: (tag) => tag === "iconify-icon", + }, + }, + }, srcDir: "docs", themeConfig: { // https://vitepress.dev/reference/default-theme-config @@ -11,6 +22,8 @@ export default defineConfig({ { text: "Home", link: "/" }, { text: "Specification", link: "/spec" }, { text: "Objects", link: "/objects" }, + { text: "Security", link: "/security/api" }, + { text: "Extensions", link: "/extensions" }, ], sidebar: [ @@ -118,10 +131,19 @@ export default defineConfig({ { text: "Events", link: "/extensions/events" }, { text: "Reports", link: "/extensions/reports" }, { text: "Vanity", link: "/extensions/vanity" }, + { + text: "Interactivity", + link: "/extensions/interactivity", + }, ], }, ], + footer: { + message: "Released under the MIT License.", + copyright: "Copyright © 2023-present Gaspard Wierzbinski", + }, + socialLinks: [ { icon: "github", link: "https://github.com/lysand-org/" }, ], @@ -131,11 +153,12 @@ export default defineConfig({ editLink: { pattern: "https://github.com/lysand-org/docs/edit/main/docs/:path", }, + externalLinkIcon: true, logo: "https://cdn.lysand.org/logo.webp", }, lastUpdated: true, cleanUrls: true, - titleTemplate: ":title · Lysand 2.0 Docs", + titleTemplate: ":title · Lysand Docs", head: [["link", { rel: "icon", href: "/favicon.png", type: "image/png" }]], lang: "en-US", }); diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css new file mode 100644 index 0000000..bbb1605 --- /dev/null +++ b/.vitepress/theme/custom.css @@ -0,0 +1,61 @@ +@import "tailwindcss"; + +@theme { +} +:root { + /* --vp-home-hero-image-background-image: linear-gradient( + to top right, + rgb(249, 168, 212), + rgb(216, 180, 254), + rgb(129, 140, 248) + ); + --vp-home-hero-image-filter: brightness(0.8) saturate(1.2); */ + --vp-home-hero-name-color: rgb(249, 168, 212); + --vp-c-brand-1: rgb(249, 168, 212); + --lysand-gradient: linear-gradient( + to right, + rgb(249, 168, 212), + rgb(216, 180, 254), + rgb(129, 140, 248) + ); + --vp-color-primary: rgb(249, 168, 212); + --vp-color-secondary: rgb(216, 180, 254); + --vp-button-brand-bg: transparent; + --vp-c-bg-soft: rgb(250, 250, 250); +} + +.dark { + --vp-c-bg: rgb(24, 24, 24); + --vp-c-bg-soft: rgb(32, 32, 32); +} + +.VPFeature { + border-radius: 0.3rem !important; + transition: all 0.2s ease-in-out !important; +} + +.VPFeature:hover { + transform: scale(1.02); + border-color: var(--vp-color-primary); +} + +.VPButton.medium { + border-radius: 0.3rem !important; + transition: all 0.2s ease-in-out !important; +} + +.VPButton.medium:hover { + transform: scale(1.02); +} + +.VPButton.brand { + background: var(--lysand-gradient); + border: none !important; +} + +@media (min-width: 960px) { + .image-container { + width: 50% !important; + margin-right: 0.5rem !important; + } +} diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts new file mode 100644 index 0000000..c495bc1 --- /dev/null +++ b/.vitepress/theme/index.ts @@ -0,0 +1,4 @@ +import DefaultTheme from "vitepress/theme"; +import "./custom.css"; + +export default DefaultTheme; diff --git a/bun.lockb b/bun.lockb index e9a9c040931ce6de1da67bca355faa9c84b0aa52..76e1389514e3468069671ef0c02b8e9671667f78 100755 GIT binary patch delta 18575 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

r_~SFKtg030u;}^N*gw)jZ`zNZ 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 Sdn5eULewR{5oNxc_x}LXU@6}K delta 11287 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 M?;GVi!o<4&1>wkM#sB~S diff --git a/components/Features.vue b/components/Features.vue new file mode 100644 index 0000000..4f67e79 --- /dev/null +++ b/components/Features.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/components/Team.vue b/components/Team.vue new file mode 100644 index 0000000..da995aa --- /dev/null +++ b/components/Team.vue @@ -0,0 +1,92 @@ + + + \ No newline at end of file diff --git a/docs/extensions/interactivity.md b/docs/extensions/interactivity.md new file mode 100644 index 0000000..2a8cf1b --- /dev/null +++ b/docs/extensions/interactivity.md @@ -0,0 +1,10 @@ +# Interactivity + +> [!WARNING] +> This extension is a work in progress and is not to be used in any production system. The specification is subject to change. + +On platforms like Discord, users can interact with messages with custom fields like buttons or dropdowns. This extension allows you to define these fields in your messages. + +![Discord Buttons in action](/assets/discord-buttons.webp) + +... \ No newline at end of file diff --git a/docs/extensions/vanity.md b/docs/extensions/vanity.md index a195005..3b20094 100644 --- a/docs/extensions/vanity.md +++ b/docs/extensions/vanity.md @@ -48,7 +48,13 @@ Here is an example object: }, "birthday": "1998-04-12", "location": "+40.6894-074.0447/", - "activitypub": "@erikuden@mastodon.de" + "activitypub": [ + "@erikuden@mastodon.de" + ], + "aliases": [ + "https://burger.social/accounts/349ee237-c672-41c1-aadc-677e185f795a", + "https://social.lysand.org/users/f565ef02-035d-4974-ba5e-f62a8558331d" + ] } } } @@ -131,12 +137,20 @@ Clients might choose to display a map of the user's location. | Name | Type | Required | | :--------- | :----- | :------- | -| activitypub | String | No | +| activitypub | Array of String | No | -The user's ActivityPub profile. This should be a string in the format `@username@domain`. +The user's ActivityPub profile. This should be an array of strings in the format `@username@domain`. Servers are expected to use standard WebFinger resolution to fetch the user's ActivityPub profile if needed. +### Aliases + +| Name | Type | Required | +| :------ | :----- | :------- | +| aliases | Array of String | No | + +Aliases to the user's profile on other Lysand-compatible servers. This should be an array of URIs resolving to the user's Lysand object. + ## Types ```typescript @@ -150,7 +164,8 @@ interface VanityExtension { }; birthday?: string; location?: string; - activitypub?: string; + activitypub?: string[]; + aliases?: string[]; } ``` diff --git a/docs/groups.md b/docs/groups.md index f02c892..55c1c76 100644 --- a/docs/groups.md +++ b/docs/groups.md @@ -5,7 +5,7 @@ Groups are a way to organize the visibility of objects on the server. Groups can > [!NOTE] > Groups replace the old "visibility" system for Notes, which was designed for a microblogging context. Groups are more flexible and can be used for any application. > -> Notes can still use visibility in cases where groups are not needed with the `followers` and `public` group URIs. +> Notes can still use visibility in cases where groups are not needed with the `followers` and `public` values where you'd typically put a group URI (for example, in a [Publication](./objects/publications.md)'s `group` field'). # Group Entity diff --git a/docs/index.md b/docs/index.md index 8c96233..ef819a6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,32 +16,13 @@ hero: - theme: alt text: Lysand Server link: https://github.com/lysand-org/lysand - -features: - - title: JSON-based APIs - details: Simple JSON objects are used to represent all data - - title: Built-in namespaced extensions - details: Extensions for common use cases are built-in, such as custom emojis and reactions - - title: Easy to implement - details: The protocol is simple to implement, and can be used with any language - - title: Secure by default - details: All requests are signed with the latest cryptographic algorithms - - title: No vendor-specific implementations - details: Everything is heavily standardized to ensure compatibility - - title: TypeScript types - details: TypeScript types are provided for every object in the protocol --- ---- + -> [!INFO] -> The latest version of Lysand is **3.0**, released on **(beta site)** by [**CPlusPatch**](https://cpluspatch.com). -> -> Lysand 3.0 features **stricter security** and **more modularizarion**. + - \ No newline at end of file + \ No newline at end of file diff --git a/docs/objects/publications.md b/docs/objects/publications.md index 7e2242c..36b3f20 100644 --- a/docs/objects/publications.md +++ b/docs/objects/publications.md @@ -12,13 +12,28 @@ Here is an example publication: "created_at": "2021-01-01T00:00:00.000Z", "content": { "text/plain": { - "content": "Hello, world!" + "content": "Hello, world! I own this website: https://google.com" }, "text/html": { - "content": "Hello, world!" + "content": "Hello, world! I own this website! https://google.com" } }, - "visibility": "public", + "category": "microblog", + "device": { + "name": "Megalodon for Android", + "version": "1.3.89", + "url": "https://sk22.github.io/megalodon" + }, + "previews": [ + { + "link": "https://google.com", + "title": "Google", + "description": "The world's most popular search engine", + "image": "https://cdn.example.com/previews/6e0204a2-746c-4972-8602-c4f37fc63bbe.png", + "icon": "https://google.com/favicon.ico" + } + ], + "group": "public", "attachments": [ { "image/png": { @@ -85,9 +100,55 @@ An example value for the `content` field would be: > > Lysand also recommends that servers always include a `text/plain` version of each object, as it is the most basic content type that is supported by all clients, such as command line clients. +> [!WARNING] +> Servers should not trust the `text/html` content type, as it could contain malicious code. Servers should always sanitize the content before displaying it to the user. +> +> Additionally, frontends should warn users before clicking on links that do not match the link text, such as `https://google.com` + It is up to the client to choose which content format to display to the user. The client may choose to display the first content format that it supports, or it may choose to display the content format that it thinks is the most appropriate. -Lysand recommends that clients display the richest content format that they support, such as HTML or more exotic formats such as MFM. +Clients should display the richest content format that they support, such as HTML or more exotic formats such as MFM. + +### Category + +| Name | Type | Required | +| :------- | :----------- | :------- | +| category | CategoryType | No | + +Category of the publication. Used for clients to possibly display notes in different ways, for example a note with the `microblog` category could be displayed in a timeline, while a note with the `forum` category could be displayed Reddit-style. + +See [the Types section](#types) for more information on the `CategoryType` enum. + +### Device + +| Name | Type | Required | +| :----- | :----- | :------- | +| device | Device | No | + +Device that the publication was created on. If it is not provided, it is assumed that the publication was created on a generic device. + +Servers should avoid collecting any information that could be used to identify the user, such as IP addresses or user agents. A simple name is recommended. + +### Previews + +| Name | Type | Required | +| :------- | :------------------- | :------- | +| previews | Array of LinkPreview | No | + +Previews for links in the publication. Optional. This is to avoid the [stampeding mastodon problem](https://github.com/mastodon/mastodon/issues/23662) where a link preview is fetched by every server that sees the publication, creating an accidental DDOS attack. + +> [!WARNING] +> Servers should make sure not to trust the previews, as they could be faked by remote servers. This is not a very good attack vector, but it is still possible to redirect users to malicious links. + +### Group + +| Name | Type | Required | +| :---- | :----- | :------- | +| group | String | No | + +URI of a [Group](../groups.md), or `public` or `followers`. + +Refer to the [Groups](../groups.md) page for more information on groups, their implementation and what to do if this value is not provided. ### Attachments @@ -216,6 +277,10 @@ interface Publication extends Entity { type: "Note" | "Patch"; author: string; content?: ContentFormat; + category?: CategoryType; + device?: Device; + previews?: LinkPreview[]; + group?: string | "public" | "followers"; attachments?: ContentFormat[]; replies_to?: string; quotes?: string; @@ -246,4 +311,34 @@ enum Visibility { Followers = "followers", Direct = "direct" } +``` + +```typescript +interface LinkPreview { + link: string; + title: string; + description?: string; + image?: string; + icon?: string; +} +``` + +```typescript +interface Device { + name: string; + version?: string; + url?: string; +} +``` + +```typescript +/* + * microblog -> Twitter, Mastodon-style + * forum -> Reddit-style + * blog -> Wordpress, WriteFreely-style + * image -> Instagram-style + * video -> YouTube-style + * audio -> SoundCloud, Spotify-style + */ +type CategoryType = "microblog" | "forum" | "blog" | "image" | "video" | "audio" ``` \ No newline at end of file diff --git a/docs/public/assets/discord-buttons.webp b/docs/public/assets/discord-buttons.webp new file mode 100644 index 0000000000000000000000000000000000000000..593b25a212b0223005a147e5da0d474db7a07320 GIT binary patch literal 31498 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