docs: update readme

This commit is contained in:
DIYgod 2025-05-09 21:58:52 +08:00
parent 91c8d312ea
commit 445be124eb
No known key found for this signature in database
2 changed files with 332 additions and 27 deletions

View File

@ -18,8 +18,8 @@
<a href="https://discord.gg/followapp" target="_blank"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscord.com%2Fapi%2Finvites%2Ffollowapp%3Fwith_counts%3Dtrue&query=approximate_member_count&color=5865F2&label=Discord&labelColor=black&logo=discord&logoColor=white&style=flat-square"/></a>
<br />
<a href="https://github.com/RSSNext/Folo/releases"><img src="https://img.shields.io/github/package-json/v/RSSNext/Folo?filename=%2Fapps%2Fmobile%2Fpackage.json&style=flat-square&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iNTUiIGhlaWdodD0iNTUiIHZpZXdCb3g9IjAgMCA1NSA1NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQxLjc5NDQgMTBIMTguNjc4NkMxNS44ODMzIDEwIDEzLjYxNzIgMTIuMTk2NSAxMy42MTcyIDE0LjkwNTlDMTMuNjE3MiAxNy42MTU0IDE1Ljg4MzMgMTkuODExOSAxOC42Nzg2IDE5LjgxMTlINDEuNzk0NEM0NC41ODk5IDE5LjgxMTkgNDYuODU1OSAxNy42MTU0IDQ2Ljg1NTkgMTQuOTA1OUM0Ni44NTU5IDEyLjE5NjUgNDQuNTg5OSAxMCA0MS43OTQ0IDEwWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI5LjQ2ODMgMjIuNzU1OUgxNC4wNjE1QzExLjI2NjEgMjIuNzU1OSA5IDI0Ljk1MjMgOSAyNy42NjE4QzkgMzAuMzcxMyAxMS4yNjYxIDMyLjU2NzcgMTQuMDYxNSAzMi41Njc3SDI5LjQ2ODNDMzIuMjYzNyAzMi41Njc3IDM0LjUyOTggMzAuMzcxMyAzNC41Mjk4IDI3LjY2MThDMzQuNTI5OCAyNC45NTIzIDMyLjI2MzcgMjIuNzU1OSAyOS40NjgzIDIyLjc1NTlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzAuOTU4OSA0MC40MjcyQzMwLjk1ODkgMzcuNzE3OSAyOC42OTI4IDM1LjUyMTUgMjUuODk3NCAzNS41MjE1QzIzLjEwMjEgMzUuNTIxNSAyMC44MzU5IDM3LjcxNzkgMjAuODM1OSA0MC40MjcyQzIwLjgzNTkgNDMuMTM3MSAyMy4xMDIxIDQ1LjMzMzIgMjUuODk3NCA0NS4zMzMyQzI4LjY5MjggNDUuMzMzMiAzMC45NTg5IDQzLjEzNzEgMzAuOTU4OSA0MC40MjcyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc%2BCg%3D%3D&label=Mobile&labelColor=black&color=FF5E01" /></a>
<a href="https://github.com/RSSNext/Folo/releases"><img src="https://img.shields.io/github/package-json/v/RSSNext/Folo?filename=%2Fapps%2Fdesktop%2Fpackage.json&style=flat-square&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iNTUiIGhlaWdodD0iNTUiIHZpZXdCb3g9IjAgMCA1NSA1NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQxLjc5NDQgMTBIMTguNjc4NkMxNS44ODMzIDEwIDEzLjYxNzIgMTIuMTk2NSAxMy42MTcyIDE0LjkwNTlDMTMuNjE3MiAxNy42MTU0IDE1Ljg4MzMgMTkuODExOSAxOC42Nzg2IDE5LjgxMTlINDEuNzk0NEM0NC41ODk5IDE5LjgxMTkgNDYuODU1OSAxNy42MTU0IDQ2Ljg1NTkgMTQuOTA1OUM0Ni44NTU5IDEyLjE5NjUgNDQuNTg5OSAxMCA0MS43OTQ0IDEwWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI5LjQ2ODMgMjIuNzU1OUgxNC4wNjE1QzExLjI2NjEgMjIuNzU1OSA5IDI0Ljk1MjMgOSAyNy42NjE4QzkgMzAuMzcxMyAxMS4yNjYxIDMyLjU2NzcgMTQuMDYxNSAzMi41Njc3SDI5LjQ2ODNDMzIuMjYzNyAzMi41Njc3IDM0LjUyOTggMzAuMzcxMyAzNC41Mjk4IDI3LjY2MThDMzQuNTI5OCAyNC45NTIzIDMyLjI2MzcgMjIuNzU1OSAyOS40NjgzIDIyLjc1NTlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzAuOTU4OSA0MC40MjcyQzMwLjk1ODkgMzcuNzE3OSAyOC42OTI4IDM1LjUyMTUgMjUuODk3NCAzNS41MjE1QzIzLjEwMjEgMzUuNTIxNSAyMC44MzU5IDM3LjcxNzkgMjAuODM1OSA0MC40MjcyQzIwLjgzNTkgNDMuMTM3MSAyMy4xMDIxIDQ1LjMzMzIgMjUuODk3NCA0NS4zMzMyQzI4LjY5MjggNDUuMzMzMiAzMC45NTg5IDQzLjEzNzEgMzAuOTU4OSA0MC40MjcyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc%2BCg%3D%3D&label=Desktop&labelColor=black&color=FF5E01" /></a>
<a href="https://apps.apple.com/us/app/folo-follow-everything/id6739802604"><img src="https://img.shields.io/itunes/v/6739802604?style=flat-square&logo=apple&label=App%20Store&color=FF5C00&labelColor=black" /></a>
<a href="https://github.com/RSSNext/Folo/releases"><img src="https://img.shields.io/github/package-json/v/RSSNext/Folo?filename=%2Fapps%2Fdesktop%2Fpackage.json&style=flat-square&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iNTUiIGhlaWdodD0iNTUiIHZpZXdCb3g9IjAgMCA1NSA1NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQxLjc5NDQgMTBIMTguNjc4NkMxNS44ODMzIDEwIDEzLjYxNzIgMTIuMTk2NSAxMy42MTcyIDE0LjkwNTlDMTMuNjE3MiAxNy42MTU0IDE1Ljg4MzMgMTkuODExOSAxOC42Nzg2IDE5LjgxMTlINDEuNzk0NEM0NC41ODk5IDE5LjgxMTkgNDYuODU1OSAxNy42MTU0IDQ2Ljg1NTkgMTQuOTA1OUM0Ni44NTU5IDEyLjE5NjUgNDQuNTg5OSAxMCA0MS43OTQ0IDEwWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI5LjQ2ODMgMjIuNzU1OUgxNC4wNjE1QzExLjI2NjEgMjIuNzU1OSA5IDI0Ljk1MjMgOSAyNy42NjE4QzkgMzAuMzcxMyAxMS4yNjYxIDMyLjU2NzcgMTQuMDYxNSAzMi41Njc3SDI5LjQ2ODNDMzIuMjYzNyAzMi41Njc3IDM0LjUyOTggMzAuMzcxMyAzNC41Mjk4IDI3LjY2MThDMzQuNTI5OCAyNC45NTIzIDMyLjI2MzcgMjIuNzU1OSAyOS40NjgzIDIyLjc1NTlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzAuOTU4OSA0MC40MjcyQzMwLjk1ODkgMzcuNzE3OSAyOC42OTI4IDM1LjUyMTUgMjUuODk3NCAzNS41MjE1QzIzLjEwMjEgMzUuNTIxNSAyMC44MzU5IDM3LjcxNzkgMjAuODM1OSA0MC40MjcyQzIwLjgzNTkgNDMuMTM3MSAyMy4xMDIxIDQ1LjMzMzIgMjUuODk3NCA0NS4zMzMyQzI4LjY5MjggNDUuMzMzMiAzMC45NTg5IDQzLjEzNzEgMzAuOTU4OSA0MC40MjcyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc%2BCg%3D%3D&label=Desktop&labelColor=black&color=FF5E01" /></a>
<a href="https://apps.apple.com/us/app/folo-follow-everything/id6739802604"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Ffolo-mac-app-store-version.rss3.workers.dev%2F&query=version&prefix=v&style=flat-square&logo=apple&label=Mac%20App%20Store&labelColor=black&color=FF5E01&cacheSeconds=3600" /></a>
<a href="https://apps.microsoft.com/detail/9nvfzpv0v0ht?mode=direct"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Ffolo-microsoft-store-version.rss3.workers.dev%2F&query=version&style=flat-square&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyAzaDguNTN2OC41M0gzek0xMi40NjkgM2g4LjUzdjguNTNoLTguNTN6TTMgMTIuNDdoOC41M1YyMUgzek0xMi40NjkgMTIuNDdoOC41M1YyMWgtOC41M3oiLz48L3N2Zz4%3D&logoColor=white&label=Microsoft%20Store&labelColor=black&color=FF5E01&cacheSeconds=3600&prefix=v" /></a>
<br />

View File

@ -4691,23 +4691,6 @@ declare const lists: drizzle_orm_pg_core.PgTableWithColumns<{
identity: undefined;
generated: undefined;
}, {}, {}>;
timelineUpdatedAt: drizzle_orm_pg_core.PgColumn<{
name: "timeline_updated_at";
tableName: "lists";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
language: drizzle_orm_pg_core.PgColumn<{
name: "language";
tableName: "lists";
@ -4742,6 +4725,40 @@ declare const lists: drizzle_orm_pg_core.PgTableWithColumns<{
identity: undefined;
generated: undefined;
}, {}, {}>;
createdAt: drizzle_orm_pg_core.PgColumn<{
name: "created_at";
tableName: "lists";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
updatedAt: drizzle_orm_pg_core.PgColumn<{
name: "updated_at";
tableName: "lists";
dataType: "date";
columnType: "PgTimestamp";
data: Date;
driverParam: string;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
};
dialect: "pg";
}>;
@ -4753,12 +4770,15 @@ declare const listsOpenAPISchema: zod.ZodObject<{
image: zod.ZodNullable<zod.ZodString>;
view: zod.ZodNumber;
fee: zod.ZodNumber;
timelineUpdatedAt: zod.ZodString;
language: zod.ZodNullable<zod.ZodString>;
ownerUserId: zod.ZodString;
createdAt: zod.ZodNullable<zod.ZodString>;
updatedAt: zod.ZodNullable<zod.ZodString>;
}, zod.UnknownKeysParam, zod.ZodTypeAny, {
id: string;
image: string | null;
createdAt: string | null;
updatedAt: string | null;
description: string | null;
title: string;
view: number;
@ -4766,10 +4786,11 @@ declare const listsOpenAPISchema: zod.ZodObject<{
language: string | null;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
}, {
id: string;
image: string | null;
createdAt: string | null;
updatedAt: string | null;
description: string | null;
title: string;
view: number;
@ -4777,7 +4798,6 @@ declare const listsOpenAPISchema: zod.ZodObject<{
language: string | null;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
}>;
declare const listsRelations: drizzle_orm.Relations<"lists", {
owner: drizzle_orm.One<"user", true>;
@ -10460,6 +10480,144 @@ declare const auth: {
};
path: "/refresh-token";
};
} & {
generateOpenAPISchema: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
body?: undefined;
} & {
method?: "GET" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
openapi: string;
info: {
title: string;
description: string;
version: string;
};
components: {
securitySchemes: {
apiKeyCookie: {
type: string;
in: string;
name: string;
description: string;
};
bearerAuth: {
type: string;
scheme: string;
description: string;
};
};
schemas: {};
};
security: {
apiKeyCookie: never[];
bearerAuth: never[];
}[];
servers: {
url: string;
}[];
tags: {
name: string;
description: string;
}[];
paths: Record<string, better_auth_plugins.Path>;
};
} : {
openapi: string;
info: {
title: string;
description: string;
version: string;
};
components: {
securitySchemes: {
apiKeyCookie: {
type: string;
in: string;
name: string;
description: string;
};
bearerAuth: {
type: string;
scheme: string;
description: string;
};
};
schemas: {};
};
security: {
apiKeyCookie: never[];
bearerAuth: never[];
}[];
servers: {
url: string;
}[];
tags: {
name: string;
description: string;
}[];
paths: Record<string, better_auth_plugins.Path>;
}>;
options: {
method: "GET";
} & {
use: any[];
};
path: "/open-api/generate-schema";
};
openAPIReference: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
body?: undefined;
} & {
method?: "GET" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: Response;
} : Response>;
options: {
method: "GET";
metadata: {
isAction: boolean;
};
} & {
use: any[];
};
path: "/reference";
};
} & {
customGetProviders: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
@ -11934,6 +12092,147 @@ declare const auth: {
}): Promise<void>;
};
plugins: ({
id: "open-api";
endpoints: {
generateOpenAPISchema: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
body?: undefined;
} & {
method?: "GET" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
openapi: string;
info: {
title: string;
description: string;
version: string;
};
components: {
securitySchemes: {
apiKeyCookie: {
type: string;
in: string;
name: string;
description: string;
};
bearerAuth: {
type: string;
scheme: string;
description: string;
};
};
schemas: {};
};
security: {
apiKeyCookie: never[];
bearerAuth: never[];
}[];
servers: {
url: string;
}[];
tags: {
name: string;
description: string;
}[];
paths: Record<string, better_auth_plugins.Path>;
};
} : {
openapi: string;
info: {
title: string;
description: string;
version: string;
};
components: {
securitySchemes: {
apiKeyCookie: {
type: string;
in: string;
name: string;
description: string;
};
bearerAuth: {
type: string;
scheme: string;
description: string;
};
};
schemas: {};
};
security: {
apiKeyCookie: never[];
bearerAuth: never[];
}[];
servers: {
url: string;
}[];
tags: {
name: string;
description: string;
}[];
paths: Record<string, better_auth_plugins.Path>;
}>;
options: {
method: "GET";
} & {
use: any[];
};
path: "/open-api/generate-schema";
};
openAPIReference: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
body?: undefined;
} & {
method?: "GET" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: Response;
} : Response>;
options: {
method: "GET";
metadata: {
isAction: boolean;
};
} & {
use: any[];
};
path: "/reference";
};
};
} | {
id: "two-factor";
endpoints: {
enableTwoFactor: {
@ -13934,11 +14233,12 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
} | undefined;
list?: {
id: string;
createdAt: string | null;
updatedAt: string | null;
type: "list";
view: number;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
image?: string | null | undefined;
description?: string | null | undefined;
title?: string | null | undefined;
@ -15133,11 +15433,12 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
isPrivate: boolean;
lists: {
id: string;
createdAt: string | null;
updatedAt: string | null;
type: "list";
view: number;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
image?: string | null | undefined;
description?: string | null | undefined;
title?: string | null | undefined;
@ -15257,6 +15558,8 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
list: {
id: string;
image: string | null;
createdAt: string | null;
updatedAt: string | null;
description: string | null;
title: string;
view: number;
@ -15264,7 +15567,6 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
language: string | null;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
} | null;
};
outputFormat: "json";
@ -15765,11 +16067,12 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
subscriptionCount: number;
list: {
id: string;
createdAt: string | null;
updatedAt: string | null;
type: "list";
view: number;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
image?: string | null | undefined;
description?: string | null | undefined;
title?: string | null | undefined;
@ -15849,11 +16152,12 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
code: 0;
data: {
id: string;
createdAt: string | null;
updatedAt: string | null;
type: "list";
view: number;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
image?: string | null | undefined;
description?: string | null | undefined;
title?: string | null | undefined;
@ -15949,11 +16253,12 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
code: 0;
data: {
id: string;
createdAt: string | null;
updatedAt: string | null;
type: "list";
view: number;
feedIds: string[];
fee: number;
timelineUpdatedAt: string;
image?: string | null | undefined;
description?: string | null | undefined;
title?: string | null | undefined;