feat(desktop): real user deletion

This commit is contained in:
DIYgod 2025-07-04 18:16:44 +08:00
parent 4ace95919a
commit b373232888
No known key found for this signature in database
5 changed files with 420 additions and 27 deletions

View File

@ -19,6 +19,7 @@ export const { authClient } = auth
export const {
changeEmail,
changePassword,
deleteUserCustom,
forgetPassword,
getAccountInfo,
getProviders,

View File

@ -6,12 +6,13 @@ import { useIsInMASReview } from "~/atoms/server-configs"
import { useModalStack } from "~/components/ui/modal/stacked/hooks"
import { AccountManagement } from "~/modules/profile/account-management"
import { EmailManagement } from "~/modules/profile/email-management"
import { useTOTPModalWrapper } from "~/modules/profile/hooks"
import { ProfileSettingForm } from "~/modules/profile/profile-setting-form"
import { TwoFactor } from "~/modules/profile/two-factor"
import { UpdatePasswordForm } from "~/modules/profile/update-password-form"
import { SettingsTitle } from "~/modules/settings/title"
import { defineSettingPageData } from "~/modules/settings/utils"
import { signOut } from "~/queries/auth"
import { deleteUser } from "~/queries/auth"
const iconName = "i-mgc-user-setting-cute-re"
const priority = (1000 << 3) + 10
@ -24,6 +25,7 @@ export const loader = defineSettingPageData({
export function Component() {
const { present } = useModalStack()
const isInMASReview = useIsInMASReview()
const preset = useTOTPModalWrapper(deleteUser, { force: true })
return (
<>
<SettingsTitle />
@ -37,7 +39,6 @@ export function Component() {
<AccountManagement />
<UpdatePasswordForm />
<TwoFactor />
{/* TODO: Temporary fake account deletion feature */}
{isInMASReview && (
<div className="flex items-center justify-between">
<Label>Delete Account</Label>
@ -52,7 +53,12 @@ export function Component() {
Are you sure you want to delete your account? This action is irreversible
and may take up to two days to take effect.
</p>
<Button variant="outline" onClick={signOut}>
<Button
variant="outline"
onClick={() => {
preset({})
}}
>
Delete
</Button>
</div>

View File

@ -7,7 +7,7 @@ import type { FetchError } from "ofetch"
import { QUERY_PERSIST_KEY } from "~/constants"
import { useAuthQuery } from "~/hooks/common"
import { getAccountInfo, signOut as signOutFn } from "~/lib/auth"
import { deleteUserCustom as deleteUserFn, getAccountInfo, signOut as signOutFn } from "~/lib/auth"
import { ipcServices } from "~/lib/client"
import { defineQuery } from "~/lib/defineQuery"
import { clearLocalPersistStoreData } from "~/store/utils/clear"
@ -94,3 +94,13 @@ export const signOut = async () => {
await signOutFn()
window.location.reload()
}
export const deleteUser = async ({ TOTPCode }: { TOTPCode?: string }) => {
if (!TOTPCode) {
return
}
await deleteUserFn({
TOTPCode,
})
await signOut()
}

View File

@ -14,6 +14,10 @@ export const baseAuthPlugins = [
id: "getAccountInfo",
$InferServerPlugin: {} as Extract<AuthPlugin, { id: "getAccountInfo" }>,
},
{
id: "deleteUserCustom",
$InferServerPlugin: {} as Extract<AuthPlugin, { id: "deleteUserCustom" }>,
},
{
id: "oneTimeToken",
$InferServerPlugin: {} as Extract<AuthPlugin, { id: "oneTimeToken" }>,

View File

@ -2,8 +2,11 @@ import * as hono_hono_base from 'hono/hono-base';
import * as hono_types from 'hono/types';
import * as hono_utils_http_status from 'hono/utils/http-status';
import { HttpBindings } from '@hono/node-server';
import * as ai from 'ai';
import * as zod from 'zod';
import { z } from 'zod';
import * as zod_v4_core from 'zod/v4/core';
import * as zod_v4 from 'zod/v4';
import * as better_call from 'better-call';
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
import { AnyPgColumn } from 'drizzle-orm/pg-core';
@ -17,6 +20,58 @@ type Env = {
Bindings: HttpBindings;
};
declare const tools: {
displayFeeds: ai.Tool<{
feedIds: string[];
}, {
feedList: {
feed: {
id: string;
url: string;
title: string | null;
description: string | null;
siteUrl: string | null;
image: string | null;
checkedAt: Date;
lastModifiedHeader: string | null;
etagHeader: string | null;
ttl: number | null;
errorMessage: string | null;
errorAt: Date | null;
ownerUserId: string | null;
language: string | null;
migrateTo: string | null;
rsshubRoute: string | null;
rsshubNamespace: string | null;
nsfw: boolean | null;
};
analytics: {
feedId: string;
updatesPerWeek: number | null;
subscriptionCount: number | null;
latestEntryPublishedAt: Date | null;
view: number | null;
} | null;
}[];
}>;
getFeeds: ai.Tool<{
select: ("id" | "image" | "description" | "title" | "url" | "siteUrl" | "checkedAt" | "lastModifiedHeader" | "etagHeader" | "ttl" | "errorMessage" | "errorAt" | "ownerUserId" | "language" | "migrateTo" | "rsshubRoute" | "rsshubNamespace" | "nsfw")[];
ids: string[];
}, {
feeds: Record<string, any>[];
}>;
getFeedEntries: ai.Tool<{
select: ("id" | "description" | "title" | "content" | "author" | "url" | "language" | "feedId" | "guid" | "media" | "categories" | "attachments" | "extra" | "authorUrl" | "authorAvatar" | "insertedAt" | "publishedAt")[];
feedId: string;
}, {
entries: Record<string, any>[];
}>;
getEntry: ai.Tool<{
id: string;
select: ("id" | "description" | "title" | "content" | "author" | "url" | "language" | "feedId" | "guid" | "media" | "categories" | "attachments" | "extra" | "authorUrl" | "authorAvatar" | "insertedAt" | "publishedAt")[];
}, Record<string, any> | null>;
};
declare const authPlugins: ({
id: "customGetProviders";
endpoints: {
@ -133,6 +188,47 @@ declare const authPlugins: ({
path: "/get-account-info";
};
};
} | {
id: "deleteUserCustom";
endpoints: {
deleteUserCustom: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
TOTPCode: string;
};
} & {
method?: "POST" | 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;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: void;
} : void>;
options: {
method: "POST";
body: zod_v4.ZodObject<{
TOTPCode: zod_v4.ZodString;
}, zod_v4_core.$strip>;
} & {
use: any[];
};
path: "/delete-user-custom";
};
};
} | {
id: "oneTimeToken";
endpoints: {
@ -5093,23 +5189,6 @@ declare const readabilities: drizzle_orm_pg_core.PgTableWithColumns<{
name: "readabilities";
schema: undefined;
columns: {
id: drizzle_orm_pg_core.PgColumn<{
name: "id";
tableName: "readabilities";
dataType: "string";
columnType: "PgText";
data: string;
driverParam: string;
notNull: true;
hasDefault: true;
isPrimaryKey: true;
isAutoincrement: false;
hasRuntimeDefault: true;
enumValues: [string, ...string[]];
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
entryId: drizzle_orm_pg_core.PgColumn<{
name: "entry_id";
tableName: "readabilities";
@ -5119,7 +5198,7 @@ declare const readabilities: drizzle_orm_pg_core.PgTableWithColumns<{
driverParam: string;
notNull: true;
hasDefault: false;
isPrimaryKey: false;
isPrimaryKey: true;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: [string, ...string[]];
@ -5144,6 +5223,23 @@ declare const readabilities: drizzle_orm_pg_core.PgTableWithColumns<{
identity: undefined;
generated: undefined;
}, {}, {}>;
updatedAt: drizzle_orm_pg_core.PgColumn<{
name: "updated_at";
tableName: "readabilities";
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";
}>;
@ -6387,6 +6483,23 @@ declare const user: drizzle_orm_pg_core.PgTableWithColumns<{
identity: undefined;
generated: undefined;
}, {}, {}>;
deleted: drizzle_orm_pg_core.PgColumn<{
name: "deleted";
tableName: "user";
dataType: "boolean";
columnType: "PgBoolean";
data: boolean;
driverParam: boolean;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
bio: drizzle_orm_pg_core.PgColumn<{
name: "bio";
tableName: "user";
@ -6658,6 +6771,23 @@ declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
identity: undefined;
generated: undefined;
}, {}, {}>;
deleted: drizzle_orm_pg_core.PgColumn<{
name: "deleted";
tableName: "user";
dataType: "boolean";
columnType: "PgBoolean";
data: boolean;
driverParam: boolean;
notNull: false;
hasDefault: false;
isPrimaryKey: false;
isAutoincrement: false;
hasRuntimeDefault: false;
enumValues: undefined;
baseColumn: never;
identity: undefined;
generated: undefined;
}, {}, {}>;
bio: drizzle_orm_pg_core.PgColumn<{
name: "bio";
tableName: "user";
@ -6743,6 +6873,7 @@ declare const usersOpenApiSchema: zod.ZodObject<Omit<{
twoFactorEnabled: zod.ZodNullable<zod.ZodBoolean>;
isAnonymous: zod.ZodNullable<zod.ZodBoolean>;
suspended: zod.ZodNullable<zod.ZodBoolean>;
deleted: zod.ZodNullable<zod.ZodBoolean>;
bio: zod.ZodNullable<zod.ZodString>;
website: zod.ZodNullable<zod.ZodString>;
socialLinks: zod.ZodNullable<zod.ZodType<{
@ -6769,6 +6900,7 @@ declare const usersOpenApiSchema: zod.ZodObject<Omit<{
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -6789,6 +6921,7 @@ declare const usersOpenApiSchema: zod.ZodObject<Omit<{
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -8535,6 +8668,7 @@ declare const auth: {
updatedAt: Date;
image?: string | null | undefined | undefined;
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
@ -8548,6 +8682,7 @@ declare const auth: {
image?: string | null | undefined | undefined;
twoFactorEnabled: boolean | null | undefined;
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
@ -8573,6 +8708,7 @@ declare const auth: {
updatedAt: Date;
image?: string | null | undefined | undefined;
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
@ -8586,6 +8722,7 @@ declare const auth: {
image?: string | null | undefined | undefined;
twoFactorEnabled: boolean | null | undefined;
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
@ -8708,11 +8845,13 @@ declare const auth: {
callbackURL?: string;
} & {} & {})) & {
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
} & {
handle?: string | null | undefined;
deleted?: boolean | null | undefined;
bio?: string | null | undefined;
website?: string | null | undefined;
socialLinks?: string | null | undefined;
@ -8800,11 +8939,13 @@ declare const auth: {
callbackURL?: string;
} & {} & {})) & {
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
} & {
handle?: string | null | undefined;
deleted?: boolean | null | undefined;
bio?: string | null | undefined;
website?: string | null | undefined;
socialLinks?: string | null | undefined;
@ -9830,6 +9971,9 @@ declare const auth: {
website: {
type: "string";
};
deleted: {
type: "boolean";
};
};
changeEmail: {
enabled: true;
@ -11110,6 +11254,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -11146,6 +11291,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -11323,6 +11469,47 @@ declare const auth: {
path: "/get-account-info";
};
};
} | {
id: "deleteUserCustom";
endpoints: {
deleteUserCustom: {
<AsResponse_1 extends boolean = false, ReturnHeaders_14 extends boolean = false>(inputCtx_0: {
body: {
TOTPCode: string;
};
} & {
method?: "POST" | 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_1 | undefined;
returnHeaders?: ReturnHeaders_14 | undefined;
}): Promise<[AsResponse_1] extends [true] ? Response : [ReturnHeaders_14] extends [true] ? {
headers: Headers;
response: void;
} : void>;
options: {
method: "POST";
body: zod_v4.ZodObject<{
TOTPCode: zod_v4.ZodString;
}, zod_v4_core.$strip>;
} & {
use: any[];
};
path: "/delete-user-custom";
};
};
} | {
id: "oneTimeToken";
endpoints: {
@ -11542,6 +11729,9 @@ declare const auth: {
website: {
type: "string";
};
deleted: {
type: "boolean";
};
};
changeEmail: {
enabled: true;
@ -12822,6 +13012,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -12858,6 +13049,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -13035,6 +13227,47 @@ declare const auth: {
path: "/get-account-info";
};
};
} | {
id: "deleteUserCustom";
endpoints: {
deleteUserCustom: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
TOTPCode: string;
};
} & {
method?: "POST" | 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;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: void;
} : void>;
options: {
method: "POST";
body: zod_v4.ZodObject<{
TOTPCode: zod_v4.ZodString;
}, zod_v4_core.$strip>;
} & {
use: any[];
};
path: "/delete-user-custom";
};
};
} | {
id: "oneTimeToken";
endpoints: {
@ -14592,6 +14825,44 @@ declare const auth: {
};
path: "/get-account-info";
};
} & {
deleteUserCustom: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
TOTPCode: string;
};
} & {
method?: "POST" | 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;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: void;
} : void>;
options: {
method: "POST";
body: zod_v4.ZodObject<{
TOTPCode: zod_v4.ZodString;
}, zod_v4_core.$strip>;
} & {
use: any[];
};
path: "/delete-user-custom";
};
} & {
generateOneTimeToken: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
@ -15721,6 +15992,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -15757,6 +16029,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -15854,6 +16127,9 @@ declare const auth: {
website: {
type: "string";
};
deleted: {
type: "boolean";
};
};
changeEmail: {
enabled: true;
@ -17134,6 +17410,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -17170,6 +17447,7 @@ declare const auth: {
socialLinks: Record<string, string> | null;
bio: string | null;
website: string | null;
deleted: boolean | null;
};
session: {
id: string;
@ -17347,6 +17625,47 @@ declare const auth: {
path: "/get-account-info";
};
};
} | {
id: "deleteUserCustom";
endpoints: {
deleteUserCustom: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
TOTPCode: string;
};
} & {
method?: "POST" | 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;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: void;
} : void>;
options: {
method: "POST";
body: zod_v4.ZodObject<{
TOTPCode: zod_v4.ZodString;
}, zod_v4_core.$strip>;
} & {
use: any[];
};
path: "/delete-user-custom";
};
};
} | {
id: "oneTimeToken";
endpoints: {
@ -17495,6 +17814,7 @@ declare const auth: {
updatedAt: Date;
image?: string | null | undefined | undefined;
handle: string;
deleted: boolean;
bio: string;
website: string;
socialLinks: string;
@ -17803,10 +18123,13 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
$post: {
input: {
json: {
messages: {
content: string;
role: "user" | "assistant";
}[];
messages: any[];
context?: {
mainEntryId?: string | undefined;
referEntryIds?: string[] | undefined;
referFeedIds?: string[] | undefined;
selectedText?: string | undefined;
} | undefined;
};
};
output: Response;
@ -17979,6 +18302,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -17989,6 +18313,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
} | undefined;
list?: {
@ -18022,6 +18347,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18032,6 +18358,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[] | undefined;
ownerUserId?: string | null | undefined;
@ -18044,6 +18371,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
} | undefined;
docs?: string | undefined;
@ -18153,6 +18481,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18163,6 +18492,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[];
};
@ -18243,6 +18573,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
read: boolean | null;
@ -18339,6 +18670,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
} | undefined;
@ -18500,6 +18832,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18510,6 +18843,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
read: boolean | null;
@ -18608,6 +18942,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18618,6 +18953,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
} | undefined;
@ -18774,6 +19110,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18784,6 +19121,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
tipAmount: number;
@ -18861,6 +19199,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -18871,6 +19210,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
readCount: number;
@ -19039,6 +19379,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19076,6 +19417,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19259,6 +19601,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -19269,6 +19612,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
feedId: string;
@ -19285,6 +19629,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19334,6 +19679,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -19344,6 +19690,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[] | undefined;
ownerUserId?: string | null | undefined;
@ -19356,6 +19703,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
listId: string;
@ -19385,6 +19733,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
inboxId: string;
@ -19707,6 +20056,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19728,6 +20078,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19758,6 +20109,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -19768,6 +20120,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
} | null | undefined;
}[];
@ -19888,6 +20241,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -19964,6 +20318,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -19974,6 +20329,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
language: string | null;
@ -20039,6 +20395,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -20049,6 +20406,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[] | undefined;
ownerUserId?: string | null | undefined;
@ -20061,6 +20419,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
readCount: number;
@ -20128,6 +20487,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -20138,6 +20498,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[] | undefined;
ownerUserId?: string | null | undefined;
@ -20150,6 +20511,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
};
@ -20233,6 +20595,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -20243,6 +20606,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[] | undefined;
ownerUserId?: string | null | undefined;
@ -20256,6 +20620,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
purchaseAmount?: number | undefined;
}[];
@ -20298,6 +20663,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -20308,6 +20674,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
}[];
};
@ -20434,6 +20801,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
};
};
@ -20569,6 +20937,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
}[];
};
@ -20720,6 +21089,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
twoFactorEnabled: boolean | null;
isAnonymous: boolean | null;
suspended: boolean | null;
deleted: boolean | null;
bio: string | null;
website: string | null;
socialLinks: {
@ -21012,6 +21382,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
} | null | undefined;
tipUsers?: {
id: string;
@ -21022,6 +21393,7 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
createdAt: string;
updatedAt: string;
suspended: boolean | null;
deleted: boolean | null;
}[] | null | undefined;
};
analytics: {
@ -21051,4 +21423,4 @@ declare const _routes: hono_hono_base.HonoBase<Env, ({
}, "/data">, "/">;
type AppType = typeof _routes;
export { type ActionItem, type ActionsModel, type AirdropActivity, type AppType, type AttachmentsModel, type AuthSession, type AuthUser, CommonEntryFields, type ConditionItem, type DetailModel, type EntriesModel, type ExtraModel, type FeedModel, type ListModel, type MediaModel, type MessagingData, MessagingType, type SettingsModel, type UrlReadsModel, account, achievements, achievementsOpenAPISchema, actions, actionsItemOpenAPISchema, actionsOpenAPISchema, actionsRelations, activities, activitiesOpenAPISchema, activityEnum, airdrops, airdropsOpenAPISchema, attachmentsZodSchema, authPlugins, boosts, captcha, collections, collectionsOpenAPISchema, collectionsRelations, detailModelSchema, entries, entriesOpenAPISchema, entriesRelations, extraZodSchema, feedAnalytics, feedAnalyticsOpenAPISchema, feedAnalyticsRelations, feedPowerTokens, feedPowerTokensOpenAPISchema, feedPowerTokensRelations, feeds, feedsOpenAPISchema, feedsRelations, inboxHandleSchema, inboxes, inboxesEntries, inboxesEntriesInsertOpenAPISchema, type inboxesEntriesModel, inboxesEntriesOpenAPISchema, inboxesEntriesRelations, inboxesOpenAPISchema, inboxesRelations, invitations, invitationsOpenAPISchema, invitationsRelations, languageSchema, levels, levelsOpenAPISchema, levelsRelations, listAnalytics, listAnalyticsOpenAPISchema, listAnalyticsRelations, lists, listsOpenAPISchema, listsRelations, listsSubscriptions, listsSubscriptionsOpenAPISchema, listsSubscriptionsRelations, lower, mediaZodSchema, messaging, messagingOpenAPISchema, messagingRelations, readabilities, rsshub, rsshubAnalytics, rsshubAnalyticsOpenAPISchema, rsshubOpenAPISchema, rsshubPurchase, rsshubUsage, rsshubUsageOpenAPISchema, rsshubUsageRelations, session, settings, subscriptions, subscriptionsOpenAPISchema, subscriptionsRelations, timeline, timelineOpenAPISchema, timelineRelations, transactionType, transactions, transactionsOpenAPISchema, transactionsRelations, trendingFeeds, trendingFeedsOpenAPISchema, trendingFeedsRelations, twoFactor, uploads, urlReads, urlReadsOpenAPISchema, user, users, usersOpenApiSchema, usersRelations, verification, wallets, walletsOpenAPISchema, walletsRelations };
export { type ActionItem, type ActionsModel, type AirdropActivity, type AppType, type AttachmentsModel, type AuthSession, type AuthUser, CommonEntryFields, type ConditionItem, type DetailModel, type EntriesModel, type ExtraModel, type FeedModel, type ListModel, type MediaModel, type MessagingData, MessagingType, type SettingsModel, type UrlReadsModel, account, achievements, achievementsOpenAPISchema, actions, actionsItemOpenAPISchema, actionsOpenAPISchema, actionsRelations, activities, activitiesOpenAPISchema, activityEnum, airdrops, airdropsOpenAPISchema, attachmentsZodSchema, authPlugins, boosts, captcha, collections, collectionsOpenAPISchema, collectionsRelations, detailModelSchema, entries, entriesOpenAPISchema, entriesRelations, extraZodSchema, feedAnalytics, feedAnalyticsOpenAPISchema, feedAnalyticsRelations, feedPowerTokens, feedPowerTokensOpenAPISchema, feedPowerTokensRelations, feeds, feedsOpenAPISchema, feedsRelations, inboxHandleSchema, inboxes, inboxesEntries, inboxesEntriesInsertOpenAPISchema, type inboxesEntriesModel, inboxesEntriesOpenAPISchema, inboxesEntriesRelations, inboxesOpenAPISchema, inboxesRelations, invitations, invitationsOpenAPISchema, invitationsRelations, languageSchema, levels, levelsOpenAPISchema, levelsRelations, listAnalytics, listAnalyticsOpenAPISchema, listAnalyticsRelations, lists, listsOpenAPISchema, listsRelations, listsSubscriptions, listsSubscriptionsOpenAPISchema, listsSubscriptionsRelations, lower, mediaZodSchema, messaging, messagingOpenAPISchema, messagingRelations, readabilities, rsshub, rsshubAnalytics, rsshubAnalyticsOpenAPISchema, rsshubOpenAPISchema, rsshubPurchase, rsshubUsage, rsshubUsageOpenAPISchema, rsshubUsageRelations, session, settings, subscriptions, subscriptionsOpenAPISchema, subscriptionsRelations, timeline, timelineOpenAPISchema, timelineRelations, tools, transactionType, transactions, transactionsOpenAPISchema, transactionsRelations, trendingFeeds, trendingFeedsOpenAPISchema, trendingFeedsRelations, twoFactor, uploads, urlReads, urlReadsOpenAPISchema, user, users, usersOpenApiSchema, usersRelations, verification, wallets, walletsOpenAPISchema, walletsRelations };