From 2147c4ffee796104ea628da9e74dc0e942e102da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sun, 13 Apr 2025 20:05:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E7=B1=BB=E5=9E=8B=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=88=B0zod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 11 +- src/common/config-base.ts | 37 +- src/common/ffmpeg-worker.ts | 26 +- src/common/file.ts | 40 +- src/common/worker.ts | 2 +- src/core/apis/file.ts | 18 +- src/core/helper/config.ts | 25 +- src/core/types/webapi.ts | 2 +- src/onebot/action/OneBotAction.ts | 35 +- .../extends/ClickInlineKeyboardButton.ts | 19 +- src/onebot/action/extends/CreateCollection.ts | 10 +- src/onebot/action/extends/FetchCustomFace.ts | 8 +- src/onebot/action/extends/FetchEmojiLike.ts | 16 +- src/onebot/action/extends/GetAiCharacters.ts | 10 +- .../action/extends/GetCollectionList.ts | 10 +- src/onebot/action/extends/GetGroupInfoEx.ts | 10 +- src/onebot/action/extends/GetMiniAppArk.ts | 56 +- src/onebot/action/extends/GetProfileLike.ts | 12 +- .../extends/GetUnidirectionalFriendList.ts | 2 +- src/onebot/action/extends/GetUserStatus.ts | 10 +- src/onebot/action/extends/MoveGroupFile.ts | 14 +- src/onebot/action/extends/OCRImage.ts | 8 +- src/onebot/action/extends/RenameGroupFile.ts | 14 +- src/onebot/action/extends/SendPacket.ts | 15 +- .../action/extends/SetDiyOnlineStatus.ts | 12 +- src/onebot/action/extends/SetGroupRemark.ts | 10 +- src/onebot/action/extends/SetGroupSign.ts | 8 +- src/onebot/action/extends/SetInputStatus.ts | 10 +- src/onebot/action/extends/SetLongNick.ts | 8 +- src/onebot/action/extends/SetOnlineStatus.ts | 12 +- src/onebot/action/extends/SetQQAvatar.ts | 8 +- src/onebot/action/extends/SetSpecialTitle.ts | 12 +- src/onebot/action/extends/ShareContact.ts | 18 +- src/onebot/action/extends/TransGroupFile.ts | 10 +- .../action/extends/TranslateEnWordToZn.ts | 8 +- src/onebot/action/file/GetFile.ts | 10 +- src/onebot/action/file/GetGroupFileUrl.ts | 10 +- src/onebot/action/file/GetPrivateFileUrl.ts | 8 +- .../action/go-cqhttp/CreateGroupFileFolder.ts | 10 +- .../action/go-cqhttp/DeleteGroupFile.ts | 10 +- .../action/go-cqhttp/DeleteGroupFileFolder.ts | 12 +- src/onebot/action/go-cqhttp/DownloadFile.ts | 14 +- src/onebot/action/go-cqhttp/GetForwardMsg.ts | 11 +- .../action/go-cqhttp/GetFriendMsgHistory.ts | 15 +- .../action/go-cqhttp/GetGroupAtAllRemain.ts | 8 +- .../go-cqhttp/GetGroupFileSystemInfo.ts | 8 +- .../action/go-cqhttp/GetGroupFilesByFolder.ts | 14 +- .../action/go-cqhttp/GetGroupHonorInfo.ts | 14 +- .../action/go-cqhttp/GetGroupMsgHistory.ts | 14 +- .../action/go-cqhttp/GetGroupRootFiles.ts | 10 +- .../action/go-cqhttp/GetStrangerInfo.ts | 10 +- .../go-cqhttp/GoCQHTTPCheckUrlSafely.ts | 8 +- .../action/go-cqhttp/GoCQHTTPDeleteFriend.ts | 14 +- .../action/go-cqhttp/GoCQHTTPGetModelShow.ts | 8 +- .../action/go-cqhttp/SendGroupNotice.ts | 22 +- .../action/go-cqhttp/SetGroupPortrait.ts | 10 +- src/onebot/action/go-cqhttp/SetQQProfile.ts | 12 +- .../action/go-cqhttp/UploadGroupFile.ts | 16 +- .../action/go-cqhttp/UploadPrivateFile.ts | 12 +- src/onebot/action/group/DelEssenceMsg.ts | 8 +- src/onebot/action/group/DelGroupNotice.ts | 10 +- src/onebot/action/group/GetAiRecord.ts | 12 +- src/onebot/action/group/GetGroupEssence.ts | 8 +- src/onebot/action/group/GetGroupInfo.ts | 8 +- src/onebot/action/group/GetGroupList.ts | 8 +- src/onebot/action/group/GetGroupMemberInfo.ts | 12 +- src/onebot/action/group/GetGroupMemberList.ts | 10 +- src/onebot/action/group/GetGroupNotice.ts | 8 +- src/onebot/action/group/GetGroupShutList.ts | 8 +- src/onebot/action/group/GroupPoke.ts | 10 +- src/onebot/action/group/SendGroupAiRecord.ts | 12 +- src/onebot/action/group/SetEssenceMsg.ts | 8 +- src/onebot/action/group/SetGroupAddRequest.ts | 12 +- src/onebot/action/group/SetGroupAdmin.ts | 12 +- src/onebot/action/group/SetGroupBan.ts | 12 +- src/onebot/action/group/SetGroupCard.ts | 12 +- src/onebot/action/group/SetGroupKick.ts | 12 +- src/onebot/action/group/SetGroupLeave.ts | 10 +- src/onebot/action/group/SetGroupName.ts | 10 +- src/onebot/action/group/SetGroupWholeBan.ts | 10 +- src/onebot/action/msg/DeleteMsg.ts | 8 +- src/onebot/action/msg/ForwardSingleMsg.ts | 12 +- src/onebot/action/msg/GetMsg.ts | 8 +- src/onebot/action/msg/MarkMsgAsRead.ts | 12 +- src/onebot/action/msg/SetMsgEmojiLike.ts | 12 +- src/onebot/action/packet/GetRkeyEx.ts | 2 +- src/onebot/action/packet/GetRkeyServer.ts | 2 +- src/onebot/action/packet/SendPoke.ts | 10 +- src/onebot/action/system/GetCredentials.ts | 8 +- src/onebot/action/user/FriendPoke.ts | 8 +- src/onebot/action/user/GetCookies.ts | 8 +- src/onebot/action/user/GetFriendList.ts | 8 +- src/onebot/action/user/GetRecentContact.ts | 8 +- src/onebot/action/user/SendLike.ts | 10 +- src/onebot/action/user/SetFriendAddRequest.ts | 12 +- src/onebot/api/msg.ts | 36 +- src/onebot/config/config.ts | 167 +++--- src/onebot/config/index.ts | 5 +- src/shell/base.ts | 4 +- src/webui/src/helper/config.ts | 24 +- src/webui/src/types/theme.ts | 514 +++++++++--------- 101 files changed, 951 insertions(+), 945 deletions(-) diff --git a/package.json b/package.json index 27a5b2aa..5533687d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "@napneko/nap-proto-core": "^0.0.4", "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-typescript": "^12.1.2", - "@sinclair/typebox": "^0.34.9", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/multer": "^1.4.12", @@ -39,9 +38,9 @@ "@types/ws": "^8.5.12", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", - "ajv": "^8.13.0", "async-mutex": "^0.5.0", "commander": "^13.0.0", + "compressing": "^1.10.1", "cors": "^2.8.5", "esbuild": "0.25.0", "eslint": "^9.14.0", @@ -54,19 +53,19 @@ "image-size": "^1.1.1", "json5": "^2.2.3", "multer": "^1.4.5-lts.1", + "napcat.protobuf": "^1.1.4", "typescript": "^5.3.3", "typescript-eslint": "^8.13.0", "vite": "^6.0.1", "vite-plugin-cp": "^6.0.0", "vite-tsconfig-paths": "^5.1.0", - "napcat.protobuf": "^1.1.4", - "winston": "^3.17.0", - "compressing": "^1.10.1" + "winston": "^3.17.0" }, "dependencies": { "@ffmpeg.wasm/core-mt": "^0.13.2", "express": "^5.0.0", "silk-wasm": "^3.6.1", - "ws": "^8.18.0" + "ws": "^8.18.0", + "zod": "^3.24.2" } } diff --git a/src/common/config-base.ts b/src/common/config-base.ts index 8f39a4b0..ed5e5540 100644 --- a/src/common/config-base.ts +++ b/src/common/config-base.ts @@ -2,22 +2,20 @@ import path from 'node:path'; import fs from 'node:fs'; import type { NapCatCore } from '@/core'; import json5 from 'json5'; -import Ajv, { AnySchema, ValidateFunction } from 'ajv'; +import { z } from 'zod'; export abstract class ConfigBase { name: string; core: NapCatCore; configPath: string; configData: T = {} as T; - ajv: Ajv; - validate: ValidateFunction; + schema: z.ZodType; - protected constructor(name: string, core: NapCatCore, configPath: string, ConfigSchema: AnySchema) { + protected constructor(name: string, core: NapCatCore, configPath: string, schema: z.ZodType) { this.name = name; this.core = core; this.configPath = configPath; - this.ajv = new Ajv({ useDefaults: true, coerceTypes: true }); - this.validate = this.ajv.compile(ConfigSchema); + this.schema = schema; fs.mkdirSync(this.configPath, { recursive: true }); this.read(); } @@ -42,11 +40,16 @@ export abstract class ConfigBase { private loadConfig(configPath: string): T { try { - let newConfigData = json5.parse(fs.readFileSync(configPath, 'utf-8')); - this.validate(newConfigData); - this.configData = newConfigData; - this.core.context.logger.logDebug(`[Core] [Config] 配置文件${configPath}加载`, this.configData); - return this.configData; + let configData = json5.parse(fs.readFileSync(configPath, 'utf-8')); + const result = this.schema.safeParse(configData); + + if (result.success) { + this.configData = result.data; + this.core.context.logger.logDebug(`[Core] [Config] 配置文件${configPath}加载`, this.configData); + return this.configData; + } else { + throw new Error(`配置文件验证失败: ${result.error.message}`); + } } catch (e: unknown) { this.handleError(e, '读取配置文件时发生错误'); return {} as T; @@ -55,10 +58,14 @@ export abstract class ConfigBase { save(newConfigData: T = this.configData): void { const configPath = this.getConfigPath(this.core.selfInfo.uin); - this.validate(newConfigData); - this.configData = newConfigData; try { - fs.writeFileSync(configPath, JSON.stringify(this.configData, null, 2)); + const result = this.schema.safeParse(newConfigData); + if (result.success) { + this.configData = result.data; + fs.writeFileSync(configPath, JSON.stringify(this.configData, null, 2)); + } else { + throw new Error(`配置文件验证失败: ${result.error.message}`); + } } catch (e: unknown) { this.handleError(e, `保存配置文件 ${configPath} 时发生错误:`); } @@ -67,6 +74,8 @@ export abstract class ConfigBase { private handleError(e: unknown, message: string): void { if (e instanceof SyntaxError) { this.core.context.logger.logError('[Core] [Config] 操作配置文件格式错误,请检查配置文件:', e.message); + } else if (e instanceof z.ZodError) { + this.core.context.logger.logError('[Core] [Config] 配置文件验证错误:', e.message); } else { this.core.context.logger.logError(`[Core] [Config] ${message}:`, (e as Error).message); } diff --git a/src/common/ffmpeg-worker.ts b/src/common/ffmpeg-worker.ts index d56abdba..095776d1 100644 --- a/src/common/ffmpeg-worker.ts +++ b/src/common/ffmpeg-worker.ts @@ -128,7 +128,7 @@ class FFmpegService { const [fileInfo, durationInfo] = await Promise.all([ // 任务1: 获取文件信息和提取缩略图 (async () => { - sendLog(`开始任务1: 获取文件信息和提取缩略图`); + sendLog('开始任务1: 获取文件信息和提取缩略图'); // 获取文件信息 (并行) const fileInfoStartTime = Date.now(); @@ -147,7 +147,7 @@ class FFmpegService { // 直接实现缩略图提取 (不调用extractThumbnail方法) const thumbStartTime = Date.now(); - sendLog(`开始提取缩略图`); + sendLog('开始提取缩略图'); const ffmpegInstance = await withTimeout( FFmpeg.create({ core: '@ffmpeg.wasm/core-mt' }), @@ -215,7 +215,7 @@ class FFmpegService { // 任务2: 获取视频时长 (async () => { const task2StartTime = Date.now(); - sendLog(`开始任务2: 获取视频时长`); + sendLog('开始任务2: 获取视频时长'); // 创建FFmpeg实例 const ffmpegCreateStartTime = Date.now(); @@ -291,16 +291,16 @@ interface FFmpegTask { } export default async function handleFFmpegTask({ method, args }: FFmpegTask): Promise { switch (method) { - case 'extractThumbnail': - return await FFmpegService.extractThumbnail(...args as [string, string]); - case 'convertFile': - return await FFmpegService.convertFile(...args as [string, string, string]); - case 'convert': - return await FFmpegService.convert(...args as [string, string]); - case 'getVideoInfo': - return await FFmpegService.getVideoInfo(...args as [string, string]); - default: - throw new Error(`Unknown method: ${method}`); + case 'extractThumbnail': + return await FFmpegService.extractThumbnail(...args as [string, string]); + case 'convertFile': + return await FFmpegService.convertFile(...args as [string, string, string]); + case 'convert': + return await FFmpegService.convert(...args as [string, string]); + case 'getVideoInfo': + return await FFmpegService.getVideoInfo(...args as [string, string]); + default: + throw new Error(`Unknown method: ${method}`); } } recvTask(async ({ method, args }: FFmpegTask) => { diff --git a/src/common/file.ts b/src/common/file.ts index c75bcce4..d323dac9 100644 --- a/src/common/file.ts +++ b/src/common/file.ts @@ -182,28 +182,28 @@ export async function uriToLocalFile(dir: string, uri: string, filename: string const filePath = path.join(dir, filename); switch (UriType) { - case FileUriType.Local: { - const fileExt = path.extname(HandledUri); - const localFileName = path.basename(HandledUri, fileExt) + fileExt; - const tempFilePath = path.join(dir, filename + fileExt); - fs.copyFileSync(HandledUri, tempFilePath); - return { success: true, errMsg: '', fileName: localFileName, path: tempFilePath }; - } + case FileUriType.Local: { + const fileExt = path.extname(HandledUri); + const localFileName = path.basename(HandledUri, fileExt) + fileExt; + const tempFilePath = path.join(dir, filename + fileExt); + fs.copyFileSync(HandledUri, tempFilePath); + return { success: true, errMsg: '', fileName: localFileName, path: tempFilePath }; + } - case FileUriType.Remote: { - const buffer = await httpDownload({ url: HandledUri, headers: headers ?? {} }); - fs.writeFileSync(filePath, buffer); - return { success: true, errMsg: '', fileName: filename, path: filePath }; - } + case FileUriType.Remote: { + const buffer = await httpDownload({ url: HandledUri, headers: headers ?? {} }); + fs.writeFileSync(filePath, buffer); + return { success: true, errMsg: '', fileName: filename, path: filePath }; + } - case FileUriType.Base64: { - const base64 = HandledUri.replace(/^base64:\/\//, ''); - const base64Buffer = Buffer.from(base64, 'base64'); - fs.writeFileSync(filePath, base64Buffer); - return { success: true, errMsg: '', fileName: filename, path: filePath }; - } + case FileUriType.Base64: { + const base64 = HandledUri.replace(/^base64:\/\//, ''); + const base64Buffer = Buffer.from(base64, 'base64'); + fs.writeFileSync(filePath, base64Buffer); + return { success: true, errMsg: '', fileName: filename, path: filePath }; + } - default: - return { success: false, errMsg: `识别URL失败, uri= ${uri}`, fileName: '', path: '' }; + default: + return { success: false, errMsg: `识别URL失败, uri= ${uri}`, fileName: '', path: '' }; } } diff --git a/src/common/worker.ts b/src/common/worker.ts index da5c1321..1e2bc0b7 100644 --- a/src/common/worker.ts +++ b/src/common/worker.ts @@ -9,7 +9,7 @@ export async function runTask(workerScript: string, taskData: T): Promise< console.error('Worker Log--->:', (result as { log: string }).log); } if ((result as any)?.error) { - reject(new Error("Worker error: " + (result as { error: string }).error)); + reject(new Error('Worker error: ' + (result as { error: string }).error)); } resolve(result); }); diff --git a/src/core/apis/file.ts b/src/core/apis/file.ts index 616ccb71..2f66490a 100644 --- a/src/core/apis/file.ts +++ b/src/core/apis/file.ts @@ -44,7 +44,7 @@ export class NTQQFileApi { 'https://secret-service.bietiaop.com/rkeys', 'http://ss.xingzhige.com/music_card/rkey', ], - this.context.logger + this.context.logger ); } @@ -308,18 +308,18 @@ export class NTQQFileApi { element.elementType === ElementType.FILE ) { switch (element.elementType) { - case ElementType.PIC: + case ElementType.PIC: element.picElement!.sourcePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.VIDEO: + break; + case ElementType.VIDEO: element.videoElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.PTT: + break; + case ElementType.PTT: element.pttElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.FILE: + break; + case ElementType.FILE: element.fileElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; + break; } elementIndex++; } diff --git a/src/core/helper/config.ts b/src/core/helper/config.ts index 0c2540c1..6c230056 100644 --- a/src/core/helper/config.ts +++ b/src/core/helper/config.ts @@ -1,22 +1,21 @@ import { ConfigBase } from '@/common/config-base'; import { NapCatCore } from '@/core'; -import { Type, Static } from '@sinclair/typebox'; -import { AnySchema } from 'ajv'; +import { z } from 'zod'; -export const NapcatConfigSchema = Type.Object({ - fileLog: Type.Boolean({ default: false }), - consoleLog: Type.Boolean({ default: true }), - fileLogLevel: Type.String({ default: 'debug' }), - consoleLogLevel: Type.String({ default: 'info' }), - packetBackend: Type.String({ default: 'auto' }), - packetServer: Type.String({ default: '' }), - o3HookMode: Type.Number({ default: 0 }), +export const NapcatConfigSchema = z.object({ + fileLog: z.boolean().default(false), + consoleLog: z.boolean().default(true), + fileLogLevel: z.string().default('debug'), + consoleLogLevel: z.string().default('info'), + packetBackend: z.string().default('auto'), + packetServer: z.string().default(''), + o3HookMode: z.number().default(0), }); -export type NapcatConfig = Static; +export type NapcatConfig = z.infer; export class NapCatConfigLoader extends ConfigBase { - constructor(core: NapCatCore, configPath: string, schema: AnySchema) { + constructor(core: NapCatCore, configPath: string, schema: z.ZodType) { super('napcat', core, configPath, schema); } -} +} \ No newline at end of file diff --git a/src/core/types/webapi.ts b/src/core/types/webapi.ts index c689d860..c9771cba 100644 --- a/src/core/types/webapi.ts +++ b/src/core/types/webapi.ts @@ -115,7 +115,7 @@ export interface GroupEssenceMsg { add_digest_uin: string; add_digest_nick: string; add_digest_time: number; - msg_content: unknown[]; + msg_content: { msg_type: number, text?: string, image_url?: string }[]; can_be_removed: true; } diff --git a/src/onebot/action/OneBotAction.ts b/src/onebot/action/OneBotAction.ts index 818169e2..240ea5e8 100644 --- a/src/onebot/action/OneBotAction.ts +++ b/src/onebot/action/OneBotAction.ts @@ -1,9 +1,8 @@ import { ActionName, BaseCheckResult } from './router'; -import Ajv, { ErrorObject, ValidateFunction } from 'ajv'; import { NapCatCore } from '@/core'; import { NapCatOneBot11Adapter, OB11Return } from '@/onebot'; import { NetworkAdapterConfig } from '../config/config'; -import { TSchema } from '@sinclair/typebox'; +import { z } from 'zod'; export class OB11Response { private static createResponse(data: T, status: string, retcode: number, message: string = '', echo: unknown = null): OB11Return { @@ -33,8 +32,7 @@ export class OB11Response { export abstract class OneBotAction { actionName: typeof ActionName[keyof typeof ActionName] = ActionName.Unknown; core: NapCatCore; - private validate?: ValidateFunction = undefined; - payloadSchema?: TSchema = undefined; + payloadSchema?: z.ZodType = undefined; obContext: NapCatOneBot11Adapter; constructor(obContext: NapCatOneBot11Adapter, core: NapCatCore) { @@ -42,19 +40,30 @@ export abstract class OneBotAction { this.core = core; } - protected async check(payload: PayloadType): Promise { - if (this.payloadSchema) { - this.validate = new Ajv({ allowUnionTypes: true, useDefaults: true, coerceTypes: true }).compile(this.payloadSchema); + protected async check(payload: unknown): Promise { + if (!this.payloadSchema) { + return { valid: true }; } - if (this.validate && !this.validate(payload)) { - const errors = this.validate.errors as ErrorObject[]; - const errorMessages = errors.map(e => `Key: ${e.instancePath.split('/').slice(1).join('.')}, Message: ${e.message}`); + + try { + // 使用 zod 验证并转换数据 + this.payloadSchema.parse(payload); + return { valid: true }; + } catch (error) { + if (error instanceof z.ZodError) { + const errorMessages = error.errors.map(e => + `Key: ${e.path.join('.')}, Message: ${e.message}` + ); + return { + valid: false, + message: errorMessages.join('\n') || '未知错误', + }; + } return { valid: false, - message: errorMessages.join('\n') ?? '未知错误', + message: '验证过程中发生未知错误' }; } - return { valid: true }; } public async handle(payload: PayloadType, adaptername: string, config: NetworkAdapterConfig): Promise> { @@ -86,4 +95,4 @@ export abstract class OneBotAction { } abstract _handle(payload: PayloadType, adaptername: string, config: NetworkAdapterConfig): Promise; -} +} \ No newline at end of file diff --git a/src/onebot/action/extends/ClickInlineKeyboardButton.ts b/src/onebot/action/extends/ClickInlineKeyboardButton.ts index f27acfb2..4e7983f3 100644 --- a/src/onebot/action/extends/ClickInlineKeyboardButton.ts +++ b/src/onebot/action/extends/ClickInlineKeyboardButton.ts @@ -1,16 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '../OneBotAction'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - bot_appid: Type.String(), - button_id: Type.String({ default: '' }), - callback_data: Type.String({ default: '' }), - msg_seq: Type.String({ default: '10086' }), +const SchemaData = z.object({ + group_id: z.string(), + bot_appid: z.string(), + button_id: z.string().default(''), + callback_data: z.string().default(''), + msg_seq: z.string().default('10086'), }); - -type Payload = Static; +type Payload = z.infer; export class ClickInlineKeyboardButton extends OneBotAction { override actionName = ActionName.ClickInlineKeyboardButton; @@ -25,6 +24,6 @@ export class ClickInlineKeyboardButton extends OneBotAction { callback_data: payload.callback_data, dmFlag: 0, chatType: 2 - }) + }); } } diff --git a/src/onebot/action/extends/CreateCollection.ts b/src/onebot/action/extends/CreateCollection.ts index 3f9c841f..ee682241 100644 --- a/src/onebot/action/extends/CreateCollection.ts +++ b/src/onebot/action/extends/CreateCollection.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Type, Static } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - rawData: Type.String(), - brief: Type.String(), +const SchemaData = z.object({ + rawData: z.string(), + brief: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class CreateCollection extends OneBotAction { override actionName = ActionName.CreateCollection; diff --git a/src/onebot/action/extends/FetchCustomFace.ts b/src/onebot/action/extends/FetchCustomFace.ts index f2850097..78b1800d 100644 --- a/src/onebot/action/extends/FetchCustomFace.ts +++ b/src/onebot/action/extends/FetchCustomFace.ts @@ -1,12 +1,12 @@ -import { Type, Static } from '@sinclair/typebox'; +import { z } from 'zod'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -const SchemaData = Type.Object({ - count: Type.Union([Type.Number(), Type.String()], { default: 48 }), +const SchemaData = z.object({ + count: z.number().default(48), }); -type Payload = Static; +type Payload = z.infer; export class FetchCustomFace extends OneBotAction { override actionName = ActionName.FetchCustomFace; diff --git a/src/onebot/action/extends/FetchEmojiLike.ts b/src/onebot/action/extends/FetchEmojiLike.ts index 39bab1a7..83749d0e 100644 --- a/src/onebot/action/extends/FetchEmojiLike.ts +++ b/src/onebot/action/extends/FetchEmojiLike.ts @@ -1,17 +1,17 @@ -import { Type, Static } from '@sinclair/typebox'; +import { z } from 'zod'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; import { type NTQQMsgApi } from '@/core/apis'; -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), - emojiId: Type.Union([Type.Number(), Type.String()]), - emojiType: Type.Union([Type.Number(), Type.String()]), - count: Type.Union([Type.Number(), Type.String()], { default: 20 }), +const SchemaData = z.object({ + message_id: z.string(), + emojiId: z.string(), + emojiType: z.string(), + count: z.number().default(20), }); -type Payload = Static; +type Payload = z.infer; export class FetchEmojiLike extends OneBotAction>> { override actionName = ActionName.FetchEmojiLike; @@ -23,7 +23,7 @@ export class FetchEmojiLike extends OneBotAction; +type Payload = z.infer; interface GetAiCharactersResponse { type: string; diff --git a/src/onebot/action/extends/GetCollectionList.ts b/src/onebot/action/extends/GetCollectionList.ts index 2de4305f..47fb9c4e 100644 --- a/src/onebot/action/extends/GetCollectionList.ts +++ b/src/onebot/action/extends/GetCollectionList.ts @@ -1,14 +1,14 @@ import { type NTQQCollectionApi } from '@/core/apis/collection'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Type, Static } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - category: Type.Union([Type.Number(), Type.String()]), - count: Type.Union([Type.Union([Type.Number(), Type.String()])], { default: 1 }), +const SchemaData = z.object({ + category: z.number(), + count: z.number().default(1), }); -type Payload = Static; +type Payload = z.infer; export class GetCollectionList extends OneBotAction>> { override actionName = ActionName.GetCollectionList; diff --git a/src/onebot/action/extends/GetGroupInfoEx.ts b/src/onebot/action/extends/GetGroupInfoEx.ts index c566a105..b38f92f8 100644 --- a/src/onebot/action/extends/GetGroupInfoEx.ts +++ b/src/onebot/action/extends/GetGroupInfoEx.ts @@ -1,17 +1,17 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Type, Static } from '@sinclair/typebox'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +import { z } from 'zod'; +const SchemaData = z.object({ + group_id: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class GetGroupInfoEx extends OneBotAction { override actionName = ActionName.GetGroupInfoEx; override payloadSchema = SchemaData; async _handle(payload: Payload) { - return (await this.core.apis.GroupApi.getGroupExtFE0Info([payload.group_id.toString()])).result.groupExtInfos.get(payload.group_id.toString()); + return (await this.core.apis.GroupApi.getGroupExtFE0Info([payload.group_id])).result.groupExtInfos.get(payload.group_id); } } diff --git a/src/onebot/action/extends/GetMiniAppArk.ts b/src/onebot/action/extends/GetMiniAppArk.ts index 6ab90445..e4d3c1c5 100644 --- a/src/onebot/action/extends/GetMiniAppArk.ts +++ b/src/onebot/action/extends/GetMiniAppArk.ts @@ -2,38 +2,38 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { MiniAppInfo, MiniAppInfoHelper } from '@/core/packet/utils/helper/miniAppHelper'; import { MiniAppData, MiniAppRawData, MiniAppReqCustomParams, MiniAppReqParams } from '@/core/packet/entities/miniApp'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Union([ - Type.Object({ - type: Type.Union([Type.Literal('bili'), Type.Literal('weibo')]), - title: Type.String(), - desc: Type.String(), - picUrl: Type.String(), - jumpUrl: Type.String(), - webUrl: Type.Optional(Type.String()), - rawArkData: Type.Optional(Type.Union([Type.String()])) +const SchemaData = z.union([ + z.object({ + type: z.union([z.literal('bili'), z.literal('weibo')]), + title: z.string(), + desc: z.string(), + picUrl: z.string(), + jumpUrl: z.string(), + webUrl: z.string().optional(), + rawArkData: z.string().optional() }), - Type.Object({ - title: Type.String(), - desc: Type.String(), - picUrl: Type.String(), - jumpUrl: Type.String(), - iconUrl: Type.String(), - webUrl: Type.Optional(Type.String()), - appId: Type.String(), - scene: Type.Union([Type.Number(), Type.String()]), - templateType: Type.Union([Type.Number(), Type.String()]), - businessType: Type.Union([Type.Number(), Type.String()]), - verType: Type.Union([Type.Number(), Type.String()]), - shareType: Type.Union([Type.Number(), Type.String()]), - versionId: Type.String(), - sdkId: Type.String(), - withShareTicket: Type.Union([Type.Number(), Type.String()]), - rawArkData: Type.Optional(Type.Union([Type.String()])) + z.object({ + title: z.string(), + desc: z.string(), + picUrl: z.string(), + jumpUrl: z.string(), + iconUrl: z.string(), + webUrl: z.string().optional(), + appId: z.string(), + scene: z.union([z.number(), z.string()]), + templateType: z.union([z.number(), z.string()]), + businessType: z.union([z.number(), z.string()]), + verType: z.union([z.number(), z.string()]), + shareType: z.union([z.number(), z.string()]), + versionId: z.string(), + sdkId: z.string(), + withShareTicket: z.union([z.number(), z.string()]), + rawArkData: z.string().optional() }) ]); -type Payload = Static; +type Payload = z.infer; export class GetMiniAppArk extends GetPacketStatusDepends; +type Payload = z.infer; export class GetProfileLike extends OneBotAction { uint64_uin: self_id, uint64_top: 0, uint32_req_num: 99, - bytes_cookies: "" + bytes_cookies: '' }; const packed_data = await this.pack_data(JSON.stringify(req_json)); const data = Buffer.from(packed_data).toString('hex'); diff --git a/src/onebot/action/extends/GetUserStatus.ts b/src/onebot/action/extends/GetUserStatus.ts index 3987c81a..c090cc3a 100644 --- a/src/onebot/action/extends/GetUserStatus.ts +++ b/src/onebot/action/extends/GetUserStatus.ts @@ -1,18 +1,18 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + user_id: z.number(), }); -type Payload = Static; +type Payload = z.infer; export class GetUserStatus extends GetPacketStatusDepends { override actionName = ActionName.GetUserStatus; override payloadSchema = SchemaData; async _handle(payload: Payload) { - return await this.core.apis.PacketApi.pkt.operation.GetStrangerStatus(+payload.user_id); + return await this.core.apis.PacketApi.pkt.operation.GetStrangerStatus(payload.user_id); } } diff --git a/src/onebot/action/extends/MoveGroupFile.ts b/src/onebot/action/extends/MoveGroupFile.ts index 110551bc..31856e09 100644 --- a/src/onebot/action/extends/MoveGroupFile.ts +++ b/src/onebot/action/extends/MoveGroupFile.ts @@ -1,16 +1,16 @@ import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_id: Type.String(), - current_parent_directory: Type.String(), - target_parent_directory: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_id: z.string(), + current_parent_directory: z.string(), + target_parent_directory: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface MoveGroupFileResponse { ok: boolean; diff --git a/src/onebot/action/extends/OCRImage.ts b/src/onebot/action/extends/OCRImage.ts index 3b45c64e..73776de8 100644 --- a/src/onebot/action/extends/OCRImage.ts +++ b/src/onebot/action/extends/OCRImage.ts @@ -2,14 +2,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { checkFileExist, uriToLocalFile } from '@/common/file'; import fs from 'fs'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { GeneralCallResultStatus } from '@/core'; -const SchemaData = Type.Object({ - image: Type.String(), +const SchemaData = z.object({ + image: z.string(), }); -type Payload = Static; +type Payload = z.infer; class OCRImageBase extends OneBotAction { override payloadSchema = SchemaData; diff --git a/src/onebot/action/extends/RenameGroupFile.ts b/src/onebot/action/extends/RenameGroupFile.ts index a567ea55..69b4e9f6 100644 --- a/src/onebot/action/extends/RenameGroupFile.ts +++ b/src/onebot/action/extends/RenameGroupFile.ts @@ -1,16 +1,16 @@ import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_id: Type.String(), - current_parent_directory: Type.String(), - new_name: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_id: z.string(), + current_parent_directory: z.string(), + new_name: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface RenameGroupFileResponse { ok: boolean; diff --git a/src/onebot/action/extends/SendPacket.ts b/src/onebot/action/extends/SendPacket.ts index 479b10f7..a43b894e 100644 --- a/src/onebot/action/extends/SendPacket.ts +++ b/src/onebot/action/extends/SendPacket.ts @@ -1,22 +1,21 @@ import { PacketHexStr } from '@/core/packet/transformer/base'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - cmd: Type.String(), - data: Type.String(), - rsp: Type.Union([Type.String(), Type.Boolean()], { default: true }), +const SchemaData = z.object({ + cmd: z.string(), + data: z.string(), + rsp: z.boolean().default(true), }); -type Payload = Static; +type Payload = z.infer; export class SendPacket extends GetPacketStatusDepends { override payloadSchema = SchemaData; override actionName = ActionName.SendPacket; async _handle(payload: Payload) { - const rsp = typeof payload.rsp === 'boolean' ? payload.rsp : payload.rsp === 'true'; - const data = await this.core.apis.PacketApi.pkt.operation.sendPacket({ cmd: payload.cmd, data: payload.data as PacketHexStr }, rsp); + const data = await this.core.apis.PacketApi.pkt.operation.sendPacket({ cmd: payload.cmd, data: payload.data as PacketHexStr }, payload.rsp); return typeof data === 'object' ? data.toString('hex') : undefined; } } diff --git a/src/onebot/action/extends/SetDiyOnlineStatus.ts b/src/onebot/action/extends/SetDiyOnlineStatus.ts index 82e903ca..2c1110ac 100644 --- a/src/onebot/action/extends/SetDiyOnlineStatus.ts +++ b/src/onebot/action/extends/SetDiyOnlineStatus.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - face_id: Type.Union([Type.Number(), Type.String()]),// 参考 face_config.json 的 QSid - face_type: Type.Union([Type.Number(), Type.String()], { default: '1' }), - wording: Type.String({ default: ' ' }), +const SchemaData = z.object({ + face_id: z.union([z.number(), z.string()]),// 参考 face_config.json 的 QSid + face_type: z.union([z.number(), z.string()]).default('1'), + wording: z.string().default(' '), }); -type Payload = Static; +type Payload = z.infer; export class SetDiyOnlineStatus extends OneBotAction { override actionName = ActionName.SetDiyOnlineStatus; diff --git a/src/onebot/action/extends/SetGroupRemark.ts b/src/onebot/action/extends/SetGroupRemark.ts index a8dbf5a9..cd26beb3 100644 --- a/src/onebot/action/extends/SetGroupRemark.ts +++ b/src/onebot/action/extends/SetGroupRemark.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.String(), - remark: Type.String(), +const SchemaData = z.object({ + group_id: z.string(), + remark: z.string(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupRemark extends OneBotAction { override actionName = ActionName.SetGroupRemark; diff --git a/src/onebot/action/extends/SetGroupSign.ts b/src/onebot/action/extends/SetGroupSign.ts index 716aca22..9bc0775a 100644 --- a/src/onebot/action/extends/SetGroupSign.ts +++ b/src/onebot/action/extends/SetGroupSign.ts @@ -1,12 +1,12 @@ import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; class SetGroupSignBase extends GetPacketStatusDepends { override payloadSchema = SchemaData; diff --git a/src/onebot/action/extends/SetInputStatus.ts b/src/onebot/action/extends/SetInputStatus.ts index 448c00ff..df8cfef5 100644 --- a/src/onebot/action/extends/SetInputStatus.ts +++ b/src/onebot/action/extends/SetInputStatus.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { ChatType } from '@/core'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Union([Type.Number(), Type.String()]), - event_type: Type.Number(), +const SchemaData = z.object({ + user_id: z.union([z.number(), z.string()]), + event_type: z.number(), }); -type Payload = Static; +type Payload = z.infer; export class SetInputStatus extends OneBotAction { override actionName = ActionName.SetInputStatus; diff --git a/src/onebot/action/extends/SetLongNick.ts b/src/onebot/action/extends/SetLongNick.ts index 5169bada..4403d607 100644 --- a/src/onebot/action/extends/SetLongNick.ts +++ b/src/onebot/action/extends/SetLongNick.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - longNick: Type.String(), +const SchemaData = z.object({ + longNick: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class SetLongNick extends OneBotAction { override actionName = ActionName.SetLongNick; diff --git a/src/onebot/action/extends/SetOnlineStatus.ts b/src/onebot/action/extends/SetOnlineStatus.ts index 6e1782e9..999ee261 100644 --- a/src/onebot/action/extends/SetOnlineStatus.ts +++ b/src/onebot/action/extends/SetOnlineStatus.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - status: Type.Union([Type.Number(), Type.String()]), - ext_status: Type.Union([Type.Number(), Type.String()]), - battery_status: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + status: z.union([z.number(), z.string()]), + ext_status: z.union([z.number(), z.string()]), + battery_status: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; export class SetOnlineStatus extends OneBotAction { override actionName = ActionName.SetOnlineStatus; diff --git a/src/onebot/action/extends/SetQQAvatar.ts b/src/onebot/action/extends/SetQQAvatar.ts index c4e019aa..5fb8b50f 100644 --- a/src/onebot/action/extends/SetQQAvatar.ts +++ b/src/onebot/action/extends/SetQQAvatar.ts @@ -2,13 +2,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import fs from 'node:fs/promises'; import { checkFileExist, uriToLocalFile } from '@/common/file'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - file: Type.String(), +const SchemaData = z.object({ + file: z.string(), }); -type Payload = Static; +type Payload = z.infer; export default class SetAvatar extends OneBotAction { override actionName = ActionName.SetQQAvatar; diff --git a/src/onebot/action/extends/SetSpecialTitle.ts b/src/onebot/action/extends/SetSpecialTitle.ts index 7d68ff36..2efe2727 100644 --- a/src/onebot/action/extends/SetSpecialTitle.ts +++ b/src/onebot/action/extends/SetSpecialTitle.ts @@ -1,14 +1,14 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - special_title: Type.String({ default: '' }), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + special_title: z.string({ default: '' }), }); -type Payload = Static; +type Payload = z.infer; export class SetSpecialTitle extends GetPacketStatusDepends { override actionName = ActionName.SetSpecialTitle; diff --git a/src/onebot/action/extends/ShareContact.ts b/src/onebot/action/extends/ShareContact.ts index 22c8654b..edf18ecb 100644 --- a/src/onebot/action/extends/ShareContact.ts +++ b/src/onebot/action/extends/ShareContact.ts @@ -1,15 +1,15 @@ import { GeneralCallResult } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), - group_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), - phoneNumber: Type.String({ default: '' }), +const SchemaData = z.object({ + user_id: z.union([z.number(), z.string()]).optional(), + group_id: z.union([z.number(), z.string()]).optional(), + phoneNumber: z.string().default(''), }); -type Payload = Static; +type Payload = z.infer; export class SharePeer extends OneBotAction; +type PayloadGroupEx = z.infer; export class ShareGroupEx extends OneBotAction { override actionName = ActionName.ShareGroupEx; diff --git a/src/onebot/action/extends/TransGroupFile.ts b/src/onebot/action/extends/TransGroupFile.ts index 35b3275a..746c190d 100644 --- a/src/onebot/action/extends/TransGroupFile.ts +++ b/src/onebot/action/extends/TransGroupFile.ts @@ -1,14 +1,14 @@ import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_id: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_id: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface TransGroupFileResponse { ok: boolean; diff --git a/src/onebot/action/extends/TranslateEnWordToZn.ts b/src/onebot/action/extends/TranslateEnWordToZn.ts index 2edb8b83..46a59408 100644 --- a/src/onebot/action/extends/TranslateEnWordToZn.ts +++ b/src/onebot/action/extends/TranslateEnWordToZn.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - words: Type.Array(Type.String()), +const SchemaData = z.object({ + words: Type.Array(z.string()), }); -type Payload = Static; +type Payload = z.infer; export class TranslateEnWordToZn extends OneBotAction | null> { override actionName = ActionName.TranslateEnWordToZn; diff --git a/src/onebot/action/file/GetFile.ts b/src/onebot/action/file/GetFile.ts index 853261cd..d2d87fa1 100644 --- a/src/onebot/action/file/GetFile.ts +++ b/src/onebot/action/file/GetFile.ts @@ -3,7 +3,7 @@ import fs from 'fs/promises'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { ActionName } from '@/onebot/action/router'; import { OB11MessageImage, OB11MessageVideo } from '@/onebot/types'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; export interface GetFileResponse { file?: string; // path @@ -13,13 +13,13 @@ export interface GetFileResponse { base64?: string; } -const GetFileBase_PayloadSchema = Type.Object({ - file: Type.Optional(Type.String()), - file_id: Type.Optional(Type.String()) +const GetFileBase_PayloadSchema = z.object({ + file: z.string().optional(), + file_id: z.string().optional(), }); -export type GetFilePayload = Static; +export type GetFilePayload = z.infer; export class GetFileBase extends OneBotAction { override payloadSchema = GetFileBase_PayloadSchema; diff --git a/src/onebot/action/file/GetGroupFileUrl.ts b/src/onebot/action/file/GetGroupFileUrl.ts index 0ae7d314..ebf28021 100644 --- a/src/onebot/action/file/GetGroupFileUrl.ts +++ b/src/onebot/action/file/GetGroupFileUrl.ts @@ -1,14 +1,14 @@ import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_id: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_id: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface GetGroupFileUrlResponse { url?: string; diff --git a/src/onebot/action/file/GetPrivateFileUrl.ts b/src/onebot/action/file/GetPrivateFileUrl.ts index f592cc08..4504cc20 100644 --- a/src/onebot/action/file/GetPrivateFileUrl.ts +++ b/src/onebot/action/file/GetPrivateFileUrl.ts @@ -1,13 +1,13 @@ import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - file_id: Type.String(), +const SchemaData = z.object({ + file_id: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface GetPrivateFileUrlResponse { url?: string; diff --git a/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts b/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts index 760929ea..4a0dea63 100644 --- a/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts +++ b/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - folder_name: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + folder_name: z.string(), }); -type Payload = Static; +type Payload = z.infer; interface ResponseType{ result:unknown; groupItem:unknown; diff --git a/src/onebot/action/go-cqhttp/DeleteGroupFile.ts b/src/onebot/action/go-cqhttp/DeleteGroupFile.ts index 7db532a3..84343f54 100644 --- a/src/onebot/action/go-cqhttp/DeleteGroupFile.ts +++ b/src/onebot/action/go-cqhttp/DeleteGroupFile.ts @@ -2,15 +2,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/file-uuid'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { NTQQGroupApi } from '@/core/apis'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_id: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_id: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class DeleteGroupFile extends OneBotAction>> { override actionName = ActionName.GOCQHTTP_DeleteGroupFile; diff --git a/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts b/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts index 818c10a0..6e12986b 100644 --- a/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts +++ b/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts @@ -1,15 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { NTQQGroupApi } from '@/core/apis'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - folder_id: Type.Optional(Type.String()), - folder: Type.Optional(Type.String()), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + folder_id: z.string().optional(), + folder: z.string().optional(), }); -type Payload = Static; +type Payload = z.infer; export class DeleteGroupFileFolder extends OneBotAction>['groupFileCommonResult']> { override actionName = ActionName.GoCQHTTP_DeleteGroupFileFolder; diff --git a/src/onebot/action/go-cqhttp/DownloadFile.ts b/src/onebot/action/go-cqhttp/DownloadFile.ts index 32fabfb5..30e9685f 100644 --- a/src/onebot/action/go-cqhttp/DownloadFile.ts +++ b/src/onebot/action/go-cqhttp/DownloadFile.ts @@ -4,20 +4,20 @@ import fs from 'fs'; import { join as joinPath } from 'node:path'; import { calculateFileMD5, uriToLocalFile } from '@/common/file'; import { randomUUID } from 'crypto'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; interface FileResponse { file: string; } -const SchemaData = Type.Object({ - url: Type.Optional(Type.String()), - base64: Type.Optional(Type.String()), - name: Type.Optional(Type.String()), - headers: Type.Optional(Type.Union([Type.String(), Type.Array(Type.String())])), +const SchemaData = z.object({ + url: z.string().optional(), + base64: z.string().optional(), + name: z.string().optional(), + headers: z.union([z.string(), z.array(z.string())]).optional(), }); -type Payload = Static; +type Payload = z.infer; export default class GoCQHTTPDownloadFile extends OneBotAction { override actionName = ActionName.GoCQHTTP_DownloadFile; diff --git a/src/onebot/action/go-cqhttp/GetForwardMsg.ts b/src/onebot/action/go-cqhttp/GetForwardMsg.ts index 5552229b..89e9cb60 100644 --- a/src/onebot/action/go-cqhttp/GetForwardMsg.ts +++ b/src/onebot/action/go-cqhttp/GetForwardMsg.ts @@ -2,15 +2,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OB11Message, OB11MessageData, OB11MessageDataType, OB11MessageForward, OB11MessageNodePlain as OB11MessageNode } from '@/onebot'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; import { ChatType, ElementType, MsgSourceType, NTMsgType, RawMessage } from '@/core'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - message_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), - id: Type.Optional(Type.Union([Type.Number(), Type.String()])), +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]).optional(), + id: z.union([z.number(), z.string()]).optional(), }); - -type Payload = Static; +type Payload = z.infer; export class GoCQHTTPGetForwardMsgAction extends OneBotAction; +type Payload = z.infer; export default class GetFriendMsgHistory extends OneBotAction { override actionName = ActionName.GetFriendMsgHistory; diff --git a/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts b/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts index 5d4939d2..28d63901 100644 --- a/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts +++ b/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]) }); -type Payload = Static; +type Payload = z.infer; interface ResponseType { can_at_all: boolean; remain_at_all_count_for_group: number; diff --git a/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts b/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts index 9f740732..8d966d35 100644 --- a/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts +++ b/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]) }); -type Payload = Static; +type Payload = z.infer; export class GetGroupFileSystemInfo extends OneBotAction; +type Payload = z.infer; export class GetGroupFilesByFolder extends OneBotAction[], diff --git a/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts b/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts index 9ead4af2..1194b67f 100644 --- a/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts +++ b/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts @@ -1,16 +1,16 @@ +import { WebHonorType } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { WebHonorType } from '@/core/types'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - type: Type.Optional(Type.Enum(WebHonorType)) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + type: z.nativeEnum(WebHonorType).optional() }); -type Payload = Static; +type Payload = z.infer; -export class GetGroupHonorInfo extends OneBotAction> { +export class GetGroupHonorInfo extends OneBotAction { override actionName = ActionName.GetGroupHonorInfo; override payloadSchema = SchemaData; diff --git a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts index e2fdf4e8..f2eb4044 100644 --- a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts @@ -3,22 +3,22 @@ import { OB11Message } from '@/onebot'; import { ActionName } from '@/onebot/action/router'; import { ChatType, Peer } from '@/core/types'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { NetworkAdapterConfig } from '@/onebot/config/config'; interface Response { messages: OB11Message[]; } -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - message_seq: Type.Optional(Type.Union([Type.Number(), Type.String()])), - count: Type.Union([Type.Number(), Type.String()], { default: 20 }), - reverseOrder: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + message_seq: z.union([z.number(), z.string()]).optional(), + count: z.union([z.number(), z.string()]).default(20), + reverseOrder: z.union([z.boolean(), z.string()]).optional() }); -type Payload = Static; +type Payload = z.infer; export default class GoCQHTTPGetGroupMsgHistory extends OneBotAction { diff --git a/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts b/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts index a4c1c916..b990aec8 100644 --- a/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts +++ b/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts @@ -3,14 +3,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { OB11GroupFile, OB11GroupFileFolder } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file_count: Type.Union([Type.Number(), Type.String()], { default: 50 }), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file_count: z.union([z.number(), z.string()]).default(50), }); -type Payload = Static; +type Payload = z.infer; export class GetGroupRootFiles extends OneBotAction; +type Payload = z.infer; export default class GoCQHTTPGetStrangerInfo extends OneBotAction { override actionName = ActionName.GoCQHTTP_GetStrangerInfo; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts b/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts index 29a9b502..dfded410 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - url: Type.String(), +const SchemaData = z.object({ + url: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class GoCQHTTPCheckUrlSafely extends OneBotAction { override actionName = ActionName.GoCQHTTP_CheckUrlSafely; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts b/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts index adc02cf9..e7ce50c4 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts @@ -1,15 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - friend_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), - user_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), - temp_block: Type.Optional(Type.Boolean()), - temp_both_del: Type.Optional(Type.Boolean()), +const SchemaData = z.object({ + friend_id: z.union([z.string(), z.number()]).optional(), + user_id: z.union([z.string(), z.number()]).optional(), + temp_block: z.boolean().optional(), + temp_both_del: z.boolean().optional(), }); -type Payload = Static; +type Payload = z.infer; export class GoCQHTTPDeleteFriend extends OneBotAction { override actionName = ActionName.GoCQHTTP_DeleteFriend; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts b/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts index 453db746..1e839fe3 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts @@ -1,12 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - model: Type.String(), +const SchemaData = z.object({ + model: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class GoCQHTTPGetModelShow extends OneBotAction; +type Payload = z.infer; export class SendGroupNotice extends OneBotAction { override actionName = ActionName.GoCQHTTP_SendGroupNotice; diff --git a/src/onebot/action/go-cqhttp/SetGroupPortrait.ts b/src/onebot/action/go-cqhttp/SetGroupPortrait.ts index bfe0997f..765c9897 100644 --- a/src/onebot/action/go-cqhttp/SetGroupPortrait.ts +++ b/src/onebot/action/go-cqhttp/SetGroupPortrait.ts @@ -1,15 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { checkFileExistV2, uriToLocalFile } from '@/common/file'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import fs from 'node:fs/promises'; import { GeneralCallResult } from '@/core'; -const SchemaData = Type.Object({ - file: Type.String(), - group_id: Type.Union([Type.Number(), Type.String()]) +const SchemaData = z.object({ + file: z.string(), + group_id: z.union([z.number(), z.string()]) }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupPortrait extends OneBotAction { override actionName = ActionName.SetGroupPortrait; diff --git a/src/onebot/action/go-cqhttp/SetQQProfile.ts b/src/onebot/action/go-cqhttp/SetQQProfile.ts index 976d87b5..c85e4aa4 100644 --- a/src/onebot/action/go-cqhttp/SetQQProfile.ts +++ b/src/onebot/action/go-cqhttp/SetQQProfile.ts @@ -1,15 +1,15 @@ import { NTQQUserApi } from '@/core/apis'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - nickname: Type.String(), - personal_note: Type.Optional(Type.String()), - sex: Type.Optional(Type.Union([Type.Number(), Type.String()])), // 传Sex值?建议传0 +const SchemaData = z.object({ + nickname: z.string(), + personal_note: z.string().optional(), + sex: z.union([z.number(), z.string()]).optional(), // 传Sex值?建议传0 }); -type Payload = Static; +type Payload = z.infer; export class SetQQProfile extends OneBotAction> | null> { override actionName = ActionName.SetQQProfile; override payloadSchema = SchemaData; diff --git a/src/onebot/action/go-cqhttp/UploadGroupFile.ts b/src/onebot/action/go-cqhttp/UploadGroupFile.ts index 906d7e91..39327cde 100644 --- a/src/onebot/action/go-cqhttp/UploadGroupFile.ts +++ b/src/onebot/action/go-cqhttp/UploadGroupFile.ts @@ -4,17 +4,17 @@ import { ChatType, Peer } from '@/core/types'; import fs from 'fs'; import { uriToLocalFile } from '@/common/file'; import { SendMessageContext } from '@/onebot/api'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - file: Type.String(), - name: Type.String(), - folder: Type.Optional(Type.String()), - folder_id: Type.Optional(Type.String()),//临时扩展 +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + file: z.string(), + name: z.string(), + folder: z.string().optional(), + folder_id: z.string().optional(),//临时扩展 }); -type Payload = Static; +type Payload = z.infer; export default class GoCQHTTPUploadGroupFile extends OneBotAction { override actionName = ActionName.GoCQHTTP_UploadGroupFile; diff --git a/src/onebot/action/go-cqhttp/UploadPrivateFile.ts b/src/onebot/action/go-cqhttp/UploadPrivateFile.ts index f17e3edf..8cee2010 100644 --- a/src/onebot/action/go-cqhttp/UploadPrivateFile.ts +++ b/src/onebot/action/go-cqhttp/UploadPrivateFile.ts @@ -5,15 +5,15 @@ import fs from 'fs'; import { uriToLocalFile } from '@/common/file'; import { SendMessageContext } from '@/onebot/api'; import { ContextMode, createContext } from '@/onebot/action/msg/SendMsg'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Union([Type.Number(), Type.String()]), - file: Type.String(), - name: Type.String(), +const SchemaData = z.object({ + user_id: z.union([z.number(), z.string()]), + file: z.string(), + name: z.string(), }); -type Payload = Static; +type Payload = z.infer; export default class GoCQHTTPUploadPrivateFile extends OneBotAction { override actionName = ActionName.GOCQHTTP_UploadPrivateFile; diff --git a/src/onebot/action/group/DelEssenceMsg.ts b/src/onebot/action/group/DelEssenceMsg.ts index ccb20a58..b799b651 100644 --- a/src/onebot/action/group/DelEssenceMsg.ts +++ b/src/onebot/action/group/DelEssenceMsg.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; export default class DelEssenceMsg extends OneBotAction { override actionName = ActionName.DelEssenceMsg; override payloadSchema = SchemaData; diff --git a/src/onebot/action/group/DelGroupNotice.ts b/src/onebot/action/group/DelGroupNotice.ts index 04f9cbea..bd2dae0a 100644 --- a/src/onebot/action/group/DelGroupNotice.ts +++ b/src/onebot/action/group/DelGroupNotice.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - notice_id: Type.String() +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + notice_id: z.string() }); -type Payload = Static; +type Payload = z.infer; export class DelGroupNotice extends OneBotAction { override actionName = ActionName.DelGroupNotice; diff --git a/src/onebot/action/group/GetAiRecord.ts b/src/onebot/action/group/GetAiRecord.ts index 0eeac7ab..ba30f9d9 100644 --- a/src/onebot/action/group/GetAiRecord.ts +++ b/src/onebot/action/group/GetAiRecord.ts @@ -1,15 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { AIVoiceChatType } from '@/core/packet/entities/aiChat'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - character: Type.String(), - group_id: Type.Union([Type.Number(), Type.String()]), - text: Type.String(), +const SchemaData = z.object({ + character: z.string(), + group_id: z.union([z.number(), z.string()]), + text: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class GetAiRecord extends GetPacketStatusDepends { override actionName = ActionName.GetAiRecord; diff --git a/src/onebot/action/group/GetGroupEssence.ts b/src/onebot/action/group/GetGroupEssence.ts index 91deb65c..9ce8c310 100644 --- a/src/onebot/action/group/GetGroupEssence.ts +++ b/src/onebot/action/group/GetGroupEssence.ts @@ -3,14 +3,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; import crypto from 'crypto'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { NetworkAdapterConfig } from '@/onebot/config/config'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; export class GetGroupEssence extends OneBotAction { override actionName = ActionName.GoCQHTTP_GetEssenceMsg; diff --git a/src/onebot/action/group/GetGroupInfo.ts b/src/onebot/action/group/GetGroupInfo.ts index dd0a40bc..2bb5ff72 100644 --- a/src/onebot/action/group/GetGroupInfo.ts +++ b/src/onebot/action/group/GetGroupInfo.ts @@ -2,13 +2,13 @@ import { OB11Group } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; class GetGroupInfo extends OneBotAction { override actionName = ActionName.GetGroupInfo; diff --git a/src/onebot/action/group/GetGroupList.ts b/src/onebot/action/group/GetGroupList.ts index 251b79aa..5ed487b9 100644 --- a/src/onebot/action/group/GetGroupList.ts +++ b/src/onebot/action/group/GetGroupList.ts @@ -2,13 +2,13 @@ import { OB11Group } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + no_cache: z.boolean().default(false), }); -type Payload = Static; +type Payload = z.infer; class GetGroupList extends OneBotAction { override actionName = ActionName.GetGroupList; diff --git a/src/onebot/action/group/GetGroupMemberInfo.ts b/src/onebot/action/group/GetGroupMemberInfo.ts index 03938f27..75834049 100644 --- a/src/onebot/action/group/GetGroupMemberInfo.ts +++ b/src/onebot/action/group/GetGroupMemberInfo.ts @@ -2,15 +2,15 @@ import { OB11GroupMember } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + no_cache: z.boolean().default(false), }); -type Payload = Static; +type Payload = z.infer; class GetGroupMemberInfo extends OneBotAction { override actionName = ActionName.GetGroupMemberInfo; diff --git a/src/onebot/action/group/GetGroupMemberList.ts b/src/onebot/action/group/GetGroupMemberList.ts index 41e028bf..efd5073c 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -2,15 +2,15 @@ import { OB11GroupMember } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { GroupMember } from '@/core'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + no_cache: z.boolean().default(false) }); -type Payload = Static; +type Payload = z.infer; export class GetGroupMemberList extends OneBotAction { override actionName = ActionName.GetGroupMemberList; diff --git a/src/onebot/action/group/GetGroupNotice.ts b/src/onebot/action/group/GetGroupNotice.ts index fe952557..317d712c 100644 --- a/src/onebot/action/group/GetGroupNotice.ts +++ b/src/onebot/action/group/GetGroupNotice.ts @@ -1,7 +1,7 @@ import { WebApiGroupNoticeFeed } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; interface GroupNotice { sender_id: number; publish_time: number; @@ -16,11 +16,11 @@ interface GroupNotice { }; } -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; type ApiGroupNotice = GroupNotice & WebApiGroupNoticeFeed; diff --git a/src/onebot/action/group/GetGroupShutList.ts b/src/onebot/action/group/GetGroupShutList.ts index 05ab27de..3e82f5e3 100644 --- a/src/onebot/action/group/GetGroupShutList.ts +++ b/src/onebot/action/group/GetGroupShutList.ts @@ -1,13 +1,13 @@ import { ShutUpGroupMember } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; export class GetGroupShutList extends OneBotAction { override actionName = ActionName.GetGroupShutList; diff --git a/src/onebot/action/group/GroupPoke.ts b/src/onebot/action/group/GroupPoke.ts index 8dcc8815..c318211c 100644 --- a/src/onebot/action/group/GroupPoke.ts +++ b/src/onebot/action/group/GroupPoke.ts @@ -1,13 +1,13 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; export class GroupPoke extends GetPacketStatusDepends { override actionName = ActionName.GroupPoke; diff --git a/src/onebot/action/group/SendGroupAiRecord.ts b/src/onebot/action/group/SendGroupAiRecord.ts index 7cfd5f85..1e0c3a03 100644 --- a/src/onebot/action/group/SendGroupAiRecord.ts +++ b/src/onebot/action/group/SendGroupAiRecord.ts @@ -1,15 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { AIVoiceChatType } from '@/core/packet/entities/aiChat'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - character: Type.String(), - group_id: Type.Union([Type.Number(), Type.String()]), - text: Type.String(), +const SchemaData = z.object({ + character: z.string(), + group_id: z.union([z.number(), z.string()]), + text: z.string(), }); -type Payload = Static; +type Payload = z.infer; export class SendGroupAiRecord extends GetPacketStatusDepends; +type Payload = z.infer; export default class SetEssenceMsg extends OneBotAction { override actionName = ActionName.SetEssenceMsg; diff --git a/src/onebot/action/group/SetGroupAddRequest.ts b/src/onebot/action/group/SetGroupAddRequest.ts index 8cd69bcd..8a5834e0 100644 --- a/src/onebot/action/group/SetGroupAddRequest.ts +++ b/src/onebot/action/group/SetGroupAddRequest.ts @@ -1,15 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { NTGroupRequestOperateTypes } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - flag: Type.Union([Type.String(), Type.Number()]), - approve: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), - reason: Type.Optional(Type.Union([Type.String({ default: ' ' }), Type.Null()])), +const SchemaData = z.object({ + flag: z.union([z.string(), z.number()]), + approve: z.boolean().default(true), + reason: z.union([z.string(), z.null()]).default(' '), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupAddRequest extends OneBotAction { override actionName = ActionName.SetGroupAddRequest; diff --git a/src/onebot/action/group/SetGroupAdmin.ts b/src/onebot/action/group/SetGroupAdmin.ts index ee70edfb..6ad18f06 100644 --- a/src/onebot/action/group/SetGroupAdmin.ts +++ b/src/onebot/action/group/SetGroupAdmin.ts @@ -1,15 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { NTGroupMemberRole } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - enable: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + enable: z.boolean().default(false), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupAdmin extends OneBotAction { override actionName = ActionName.SetGroupAdmin; diff --git a/src/onebot/action/group/SetGroupBan.ts b/src/onebot/action/group/SetGroupBan.ts index 3f30aa1f..4312e628 100644 --- a/src/onebot/action/group/SetGroupBan.ts +++ b/src/onebot/action/group/SetGroupBan.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - duration: Type.Union([Type.Number(), Type.String()], { default: 0 }), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + duration: z.union([z.number(), z.string()]).default(0), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupBan extends OneBotAction { override actionName = ActionName.SetGroupBan; diff --git a/src/onebot/action/group/SetGroupCard.ts b/src/onebot/action/group/SetGroupCard.ts index 2e825c68..bd45f957 100644 --- a/src/onebot/action/group/SetGroupCard.ts +++ b/src/onebot/action/group/SetGroupCard.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - card: Type.Optional(Type.String()) +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + card: z.string().optional(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupCard extends OneBotAction { override actionName = ActionName.SetGroupCard; diff --git a/src/onebot/action/group/SetGroupKick.ts b/src/onebot/action/group/SetGroupKick.ts index 7b57d48c..3967ad96 100644 --- a/src/onebot/action/group/SetGroupKick.ts +++ b/src/onebot/action/group/SetGroupKick.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - user_id: Type.Union([Type.Number(), Type.String()]), - reject_add_request: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + user_id: z.union([z.number(), z.string()]), + reject_add_request: z.union([z.boolean(), z.string()]).optional(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupKick extends OneBotAction { override actionName = ActionName.SetGroupKick; diff --git a/src/onebot/action/group/SetGroupLeave.ts b/src/onebot/action/group/SetGroupLeave.ts index 4d9a4083..6930af12 100644 --- a/src/onebot/action/group/SetGroupLeave.ts +++ b/src/onebot/action/group/SetGroupLeave.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - is_dismiss: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + is_dismiss: z.boolean().optional(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupLeave extends OneBotAction { override actionName = ActionName.SetGroupLeave; diff --git a/src/onebot/action/group/SetGroupName.ts b/src/onebot/action/group/SetGroupName.ts index cde09908..d19e9782 100644 --- a/src/onebot/action/group/SetGroupName.ts +++ b/src/onebot/action/group/SetGroupName.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - group_name: Type.String(), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + group_name: z.string(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupName extends OneBotAction { override actionName = ActionName.SetGroupName; diff --git a/src/onebot/action/group/SetGroupWholeBan.ts b/src/onebot/action/group/SetGroupWholeBan.ts index a4c84c44..dc1ee1a3 100644 --- a/src/onebot/action/group/SetGroupWholeBan.ts +++ b/src/onebot/action/group/SetGroupWholeBan.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - group_id: Type.Union([Type.Number(), Type.String()]), - enable: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + group_id: z.union([z.number(), z.string()]), + enable: z.union([z.boolean(), z.string()]).optional(), }); -type Payload = Static; +type Payload = z.infer; export default class SetGroupWholeBan extends OneBotAction { override actionName = ActionName.SetGroupWholeBan; diff --git a/src/onebot/action/msg/DeleteMsg.ts b/src/onebot/action/msg/DeleteMsg.ts index a4b27aa2..9aa67a30 100644 --- a/src/onebot/action/msg/DeleteMsg.ts +++ b/src/onebot/action/msg/DeleteMsg.ts @@ -1,13 +1,13 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; class DeleteMsg extends OneBotAction { override actionName = ActionName.DeleteMsg; diff --git a/src/onebot/action/msg/ForwardSingleMsg.ts b/src/onebot/action/msg/ForwardSingleMsg.ts index 7156159c..bc2f5546 100644 --- a/src/onebot/action/msg/ForwardSingleMsg.ts +++ b/src/onebot/action/msg/ForwardSingleMsg.ts @@ -2,15 +2,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ChatType, Peer } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), - group_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), - user_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]), + group_id: z.string().optional(), + user_id: z.string().optional(), }); -type Payload = Static; +type Payload = z.infer; class ForwardSingleMsg extends OneBotAction { protected async getTargetPeer(payload: Payload): Promise { diff --git a/src/onebot/action/msg/GetMsg.ts b/src/onebot/action/msg/GetMsg.ts index 08b2e955..28cc629a 100644 --- a/src/onebot/action/msg/GetMsg.ts +++ b/src/onebot/action/msg/GetMsg.ts @@ -3,16 +3,16 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; import { RawMessage } from '@/core'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; import { NetworkAdapterConfig } from '@/onebot/config/config'; export type ReturnDataType = OB11Message -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]), }); -type Payload = Static; +type Payload = z.infer; class GetMsg extends OneBotAction { override actionName = ActionName.GetMsg; diff --git a/src/onebot/action/msg/MarkMsgAsRead.ts b/src/onebot/action/msg/MarkMsgAsRead.ts index f36a653a..98f5a9cf 100644 --- a/src/onebot/action/msg/MarkMsgAsRead.ts +++ b/src/onebot/action/msg/MarkMsgAsRead.ts @@ -2,15 +2,15 @@ import { ChatType, Peer } from '@/core/types'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), - group_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), - message_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), +const SchemaData = z.object({ + user_id: z.union([z.string(), z.number()]).optional(), + group_id: z.union([z.string(), z.number()]).optional(), + message_id: z.union([z.string(), z.number()]).optional(), }); -type PlayloadType = Static; +type PlayloadType = z.infer; class MarkMsgAsRead extends OneBotAction { async getPeer(payload: PlayloadType): Promise { diff --git a/src/onebot/action/msg/SetMsgEmojiLike.ts b/src/onebot/action/msg/SetMsgEmojiLike.ts index 02ce4e01..b7ddf580 100644 --- a/src/onebot/action/msg/SetMsgEmojiLike.ts +++ b/src/onebot/action/msg/SetMsgEmojiLike.ts @@ -1,15 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { MessageUnique } from '@/common/message-unique'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - message_id: Type.Union([Type.Number(), Type.String()]), - emoji_id: Type.Union([Type.Number(), Type.String()]), - set: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +const SchemaData = z.object({ + message_id: z.union([z.number(), z.string()]), + emoji_id: z.union([z.number(), z.string()]), + set: z.boolean().optional(), }); -type Payload = Static; +type Payload = z.infer; export class SetMsgEmojiLike extends OneBotAction { override actionName = ActionName.SetMsgEmojiLike; diff --git a/src/onebot/action/packet/GetRkeyEx.ts b/src/onebot/action/packet/GetRkeyEx.ts index d330b8ee..ca95dfbd 100644 --- a/src/onebot/action/packet/GetRkeyEx.ts +++ b/src/onebot/action/packet/GetRkeyEx.ts @@ -8,7 +8,7 @@ export class GetRkeyEx extends GetPacketStatusDepends { let rkeys = await this.core.apis.PacketApi.pkt.operation.FetchRkey(); return rkeys.map(rkey => { return { - type: rkey.type === 10 ? "private" : "group", + type: rkey.type === 10 ? 'private' : 'group', rkey: rkey.rkey, created_at: rkey.time, ttl: rkey.ttl, diff --git a/src/onebot/action/packet/GetRkeyServer.ts b/src/onebot/action/packet/GetRkeyServer.ts index ebfa7049..17e04c35 100644 --- a/src/onebot/action/packet/GetRkeyServer.ts +++ b/src/onebot/action/packet/GetRkeyServer.ts @@ -30,7 +30,7 @@ export class GetRkeyServer extends GetPacketStatusDepends; +type Payload = z.infer; export class SendPoke extends GetPacketStatusDepends { override actionName = ActionName.SendPoke; diff --git a/src/onebot/action/system/GetCredentials.ts b/src/onebot/action/system/GetCredentials.ts index 90ef79ca..a8d50e16 100644 --- a/src/onebot/action/system/GetCredentials.ts +++ b/src/onebot/action/system/GetCredentials.ts @@ -1,17 +1,17 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; interface Response { cookies: string, token: number } -const SchemaData = Type.Object({ - domain: Type.String() +const SchemaData = z.object({ + domain: z.string() }); -type Payload = Static; +type Payload = z.infer; export class GetCredentials extends OneBotAction { diff --git a/src/onebot/action/user/FriendPoke.ts b/src/onebot/action/user/FriendPoke.ts index e447a987..644763eb 100644 --- a/src/onebot/action/user/FriendPoke.ts +++ b/src/onebot/action/user/FriendPoke.ts @@ -1,12 +1,12 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - user_id: Type.Union([Type.Number(), Type.String()]) +const SchemaData = z.object({ + user_id: z.union([z.number(), z.string()]) }); -type Payload = Static; +type Payload = z.infer; export class FriendPoke extends GetPacketStatusDepends { override actionName = ActionName.FriendPoke; diff --git a/src/onebot/action/user/GetCookies.ts b/src/onebot/action/user/GetCookies.ts index 00773fe3..bc3e34e0 100644 --- a/src/onebot/action/user/GetCookies.ts +++ b/src/onebot/action/user/GetCookies.ts @@ -1,16 +1,16 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; interface Response { cookies: string, bkn: string } -const SchemaData = Type.Object({ - domain: Type.String() +const SchemaData = z.object({ + domain: z.string() }); -type Payload = Static; +type Payload = z.infer; export class GetCookies extends OneBotAction { override actionName = ActionName.GetCookies; diff --git a/src/onebot/action/user/GetFriendList.ts b/src/onebot/action/user/GetFriendList.ts index 6850f0f6..227ca12f 100644 --- a/src/onebot/action/user/GetFriendList.ts +++ b/src/onebot/action/user/GetFriendList.ts @@ -2,13 +2,13 @@ import { OB11User } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +const SchemaData = z.object({ + no_cache: z.boolean().optional(), }); -type Payload = Static; +type Payload = z.infer; export default class GetFriendList extends OneBotAction { override actionName = ActionName.GetFriendList; diff --git a/src/onebot/action/user/GetRecentContact.ts b/src/onebot/action/user/GetRecentContact.ts index 91f25484..01b3fc0f 100644 --- a/src/onebot/action/user/GetRecentContact.ts +++ b/src/onebot/action/user/GetRecentContact.ts @@ -2,13 +2,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { NetworkAdapterConfig } from '@/onebot/config/config'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - count: Type.Union([Type.Number(), Type.String()], { default: 10 }), +const SchemaData = z.object({ + count: z.number().default(10), }); -type Payload = Static; +type Payload = z.infer; export default class GetRecentContact extends OneBotAction { override actionName = ActionName.GetRecentContact; diff --git a/src/onebot/action/user/SendLike.ts b/src/onebot/action/user/SendLike.ts index 828b46a5..04b719c0 100644 --- a/src/onebot/action/user/SendLike.ts +++ b/src/onebot/action/user/SendLike.ts @@ -1,13 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - times: Type.Union([Type.Number(), Type.String()], { default: 1 }), - user_id: Type.Union([Type.Number(), Type.String()]) +const SchemaData = z.object({ + times: z.union([z.number(), z.string()]).default(1), + user_id: z.union([z.number(), z.string()]) }); -type Payload = Static; +type Payload = z.infer; export default class SendLike extends OneBotAction { override actionName = ActionName.SendLike; diff --git a/src/onebot/action/user/SetFriendAddRequest.ts b/src/onebot/action/user/SetFriendAddRequest.ts index bda5964a..72551a9e 100644 --- a/src/onebot/action/user/SetFriendAddRequest.ts +++ b/src/onebot/action/user/SetFriendAddRequest.ts @@ -1,14 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { Static, Type } from '@sinclair/typebox'; +import { z } from 'zod'; -const SchemaData = Type.Object({ - flag: Type.Union([Type.String(), Type.Number()]), - approve: Type.Optional(Type.Union([Type.String(), Type.Boolean()])), - remark: Type.Optional(Type.String()) +const SchemaData = z.object({ + flag: z.union([z.string(), z.number()]), + approve: z.union([z.string(), z.boolean()]).default(true), + remark: z.union([z.string(), z.null()]).nullable().optional() }); -type Payload = Static; +type Payload = z.infer; export default class SetFriendAddRequest extends OneBotAction { override actionName = ActionName.SetFriendAddRequest; diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index 86e943eb..107a66cc 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -1000,16 +1000,16 @@ export class OneBotMsgApi { const calculateTotalSize = async (elements: SendMessageElement[]): Promise => { const sizePromises = elements.map(async element => { switch (element.elementType) { - case ElementType.PTT: - return (await fsPromise.stat(element.pttElement.filePath)).size; - case ElementType.FILE: - return (await fsPromise.stat(element.fileElement.filePath)).size; - case ElementType.VIDEO: - return (await fsPromise.stat(element.videoElement.filePath)).size; - case ElementType.PIC: - return (await fsPromise.stat(element.picElement.sourcePath)).size; - default: - return 0; + case ElementType.PTT: + return (await fsPromise.stat(element.pttElement.filePath)).size; + case ElementType.FILE: + return (await fsPromise.stat(element.fileElement.filePath)).size; + case ElementType.VIDEO: + return (await fsPromise.stat(element.videoElement.filePath)).size; + case ElementType.PIC: + return (await fsPromise.stat(element.picElement.sourcePath)).size; + default: + return 0; } }); const sizes = await Promise.all(sizePromises); @@ -1099,14 +1099,14 @@ export class OneBotMsgApi { groupChangDecreseType2String(type: number): GroupDecreaseSubType { switch (type) { - case 130: - return 'leave'; - case 131: - return 'kick'; - case 3: - return 'kick_me'; - default: - return 'kick'; + case 130: + return 'leave'; + case 131: + return 'kick'; + case 3: + return 'kick_me'; + default: + return 'kick'; } } diff --git a/src/onebot/config/config.ts b/src/onebot/config/config.ts index cfa9c4a1..ffc29339 100644 --- a/src/onebot/config/config.ts +++ b/src/onebot/config/config.ts @@ -1,108 +1,107 @@ -import { Type, Static } from '@sinclair/typebox'; -import Ajv from 'ajv'; +import { z } from 'zod'; -const HttpServerConfigSchema = Type.Object({ - name: Type.String({ default: 'http-server' }), - enable: Type.Boolean({ default: false }), - port: Type.Number({ default: 3000 }), - host: Type.String({ default: '0.0.0.0' }), - enableCors: Type.Boolean({ default: true }), - enableWebsocket: Type.Boolean({ default: true }), - messagePostFormat: Type.String({ default: 'array' }), - token: Type.String({ default: '' }), - debug: Type.Boolean({ default: false }) +const HttpServerConfigSchema = z.object({ + name: z.string().default('http-server'), + enable: z.boolean().default(false), + port: z.number().default(3000), + host: z.string().default('0.0.0.0'), + enableCors: z.boolean().default(true), + enableWebsocket: z.boolean().default(true), + messagePostFormat: z.string().default('array'), + token: z.string().default(''), + debug: z.boolean().default(false) }); -const HttpSseServerConfigSchema = Type.Object({ - name: Type.String({ default: 'http-sse-server' }), - enable: Type.Boolean({ default: false }), - port: Type.Number({ default: 3000 }), - host: Type.String({ default: '0.0.0.0' }), - enableCors: Type.Boolean({ default: true }), - enableWebsocket: Type.Boolean({ default: true }), - messagePostFormat: Type.String({ default: 'array' }), - token: Type.String({ default: '' }), - debug: Type.Boolean({ default: false }), - reportSelfMessage: Type.Boolean({ default: false }) +const HttpSseServerConfigSchema = z.object({ + name: z.string().default('http-sse-server'), + enable: z.boolean().default(false), + port: z.number().default(3000), + host: z.string().default('0.0.0.0'), + enableCors: z.boolean().default(true), + enableWebsocket: z.boolean().default(true), + messagePostFormat: z.string().default('array'), + token: z.string().default(''), + debug: z.boolean().default(false), + reportSelfMessage: z.boolean().default(false) }); -const HttpClientConfigSchema = Type.Object({ - name: Type.String({ default: 'http-client' }), - enable: Type.Boolean({ default: false }), - url: Type.String({ default: 'http://localhost:8080' }), - messagePostFormat: Type.String({ default: 'array' }), - reportSelfMessage: Type.Boolean({ default: false }), - token: Type.String({ default: '' }), - debug: Type.Boolean({ default: false }) +const HttpClientConfigSchema = z.object({ + name: z.string().default('http-client'), + enable: z.boolean().default(false), + url: z.string().default('http://localhost:8080'), + messagePostFormat: z.string().default('array'), + reportSelfMessage: z.boolean().default(false), + token: z.string().default(''), + debug: z.boolean().default(false) }); -const WebsocketServerConfigSchema = Type.Object({ - name: Type.String({ default: 'websocket-server' }), - enable: Type.Boolean({ default: false }), - host: Type.String({ default: '0.0.0.0' }), - port: Type.Number({ default: 3001 }), - messagePostFormat: Type.String({ default: 'array' }), - reportSelfMessage: Type.Boolean({ default: false }), - token: Type.String({ default: '' }), - enableForcePushEvent: Type.Boolean({ default: true }), - debug: Type.Boolean({ default: false }), - heartInterval: Type.Number({ default: 30000 }) +const WebsocketServerConfigSchema = z.object({ + name: z.string().default('websocket-server'), + enable: z.boolean().default(false), + host: z.string().default('0.0.0.0'), + port: z.number().default(3001), + messagePostFormat: z.string().default('array'), + reportSelfMessage: z.boolean().default(false), + token: z.string().default(''), + enableForcePushEvent: z.boolean().default(true), + debug: z.boolean().default(false), + heartInterval: z.number().default(30000) }); -const WebsocketClientConfigSchema = Type.Object({ - name: Type.String({ default: 'websocket-client' }), - enable: Type.Boolean({ default: false }), - url: Type.String({ default: 'ws://localhost:8082' }), - messagePostFormat: Type.String({ default: 'array' }), - reportSelfMessage: Type.Boolean({ default: false }), - reconnectInterval: Type.Number({ default: 5000 }), - token: Type.String({ default: '' }), - debug: Type.Boolean({ default: false }), - heartInterval: Type.Number({ default: 30000 }) +const WebsocketClientConfigSchema = z.object({ + name: z.string().default('websocket-client'), + enable: z.boolean().default(false), + url: z.string().default('ws://localhost:8082'), + messagePostFormat: z.string().default('array'), + reportSelfMessage: z.boolean().default(false), + reconnectInterval: z.number().default(5000), + token: z.string().default(''), + debug: z.boolean().default(false), + heartInterval: z.number().default(30000) }); -const PluginConfigSchema = Type.Object({ - name: Type.String({ default: 'plugin' }), - enable: Type.Boolean({ default: false }), - messagePostFormat: Type.String({ default: 'array' }), - reportSelfMessage: Type.Boolean({ default: false }), - debug: Type.Boolean({ default: false }), +const PluginConfigSchema = z.object({ + name: z.string().default('plugin'), + enable: z.boolean().default(false), + messagePostFormat: z.string().default('array'), + reportSelfMessage: z.boolean().default(false), + debug: z.boolean().default(false), }); -const NetworkConfigSchema = Type.Object({ - httpServers: Type.Array(HttpServerConfigSchema, { default: [] }), - httpSseServers: Type.Array(HttpSseServerConfigSchema, { default: [] }), - httpClients: Type.Array(HttpClientConfigSchema, { default: [] }), - websocketServers: Type.Array(WebsocketServerConfigSchema, { default: [] }), - websocketClients: Type.Array(WebsocketClientConfigSchema, { default: [] }), - plugins: Type.Array(PluginConfigSchema, { default: [] }) -}, { default: {} }); +const NetworkConfigSchema = z.object({ + httpServers: z.array(HttpServerConfigSchema).default([]), + httpSseServers: z.array(HttpSseServerConfigSchema).default([]), + httpClients: z.array(HttpClientConfigSchema).default([]), + websocketServers: z.array(WebsocketServerConfigSchema).default([]), + websocketClients: z.array(WebsocketClientConfigSchema).default([]), + plugins: z.array(PluginConfigSchema).default([]) +}).default({}); -export const OneBotConfigSchema = Type.Object({ +export const OneBotConfigSchema = z.object({ network: NetworkConfigSchema, - musicSignUrl: Type.String({ default: '' }), - enableLocalFile2Url: Type.Boolean({ default: false }), - parseMultMsg: Type.Boolean({ default: false }) + musicSignUrl: z.string().default(''), + enableLocalFile2Url: z.boolean().default(false), + parseMultMsg: z.boolean().default(false) }); -export type OneBotConfig = Static; -export type HttpServerConfig = Static; -export type HttpSseServerConfig = Static; -export type HttpClientConfig = Static; -export type WebsocketServerConfig = Static; -export type WebsocketClientConfig = Static; -export type PluginConfig = Static; +export type OneBotConfig = z.infer; +export type HttpServerConfig = z.infer; +export type HttpSseServerConfig = z.infer; +export type HttpClientConfig = z.infer; +export type WebsocketServerConfig = z.infer; +export type WebsocketClientConfig = z.infer; +export type PluginConfig = z.infer; export type NetworkAdapterConfig = HttpServerConfig | HttpSseServerConfig | HttpClientConfig | WebsocketServerConfig | WebsocketClientConfig | PluginConfig; export type NetworkConfigKey = keyof OneBotConfig['network']; - export function loadConfig(config: Partial): OneBotConfig { - const ajv = new Ajv({ useDefaults: true, coerceTypes: true }); - const validate = ajv.compile(OneBotConfigSchema); - const valid = validate(config); - if (!valid) { - throw new Error(ajv.errorsText(validate.errors)); + try { + return OneBotConfigSchema.parse(config); + } catch (error) { + if (error instanceof z.ZodError) { + throw new Error(error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')); + } + throw error; } - return config as OneBotConfig; } \ No newline at end of file diff --git a/src/onebot/config/index.ts b/src/onebot/config/index.ts index 2c1f8221..7e40d5d0 100644 --- a/src/onebot/config/index.ts +++ b/src/onebot/config/index.ts @@ -1,10 +1,11 @@ import { ConfigBase } from '@/common/config-base'; import type { NapCatCore } from '@/core'; import { OneBotConfig } from './config'; -import { AnySchema } from 'ajv'; +import { z } from 'zod'; + export class OB11ConfigLoader extends ConfigBase { - constructor(core: NapCatCore, configPath: string, schema: AnySchema) { + constructor(core: NapCatCore, configPath: string, schema: z.ZodType) { super('onebot11', core, configPath, schema); } } diff --git a/src/shell/base.ts b/src/shell/base.ts index aee90f66..0ca81a7b 100644 --- a/src/shell/base.ts +++ b/src/shell/base.ts @@ -141,7 +141,7 @@ async function handleLogin( handleLoginInner(context, logger, loginService, quickLoginUin, historyLoginList).then().catch(e => logger.logError(e)); loginListener.onLoginConnected = () => { }; }); - } + }; loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => { WebUiDataRuntime.setQQLoginQrcodeURL(qrcodeUrl); @@ -220,7 +220,7 @@ async function handleLoginInner(context: { isLogined: boolean }, logger: LogWrap logger.log(`可用于快速登录的 QQ:\n${historyLoginList .map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`) .join('\n') - }`); + }`); } loginService.getQRCodePicture(); try { diff --git a/src/webui/src/helper/config.ts b/src/webui/src/helper/config.ts index a21b3639..d6455c68 100644 --- a/src/webui/src/helper/config.ts +++ b/src/webui/src/helper/config.ts @@ -1,33 +1,27 @@ import { webUiPathWrapper } from '@/webui'; -import { Type, Static } from '@sinclair/typebox'; -import Ajv from 'ajv'; import fs, { constants } from 'node:fs/promises'; - import { resolve } from 'node:path'; - import { deepMerge } from '../utils/object'; import { themeType } from '../types/theme'; - -// 限制尝试端口的次数,避免死循环 - +import { z } from 'zod'; // 定义配置的类型 -const WebUiConfigSchema = Type.Object({ - host: Type.String({ default: '0.0.0.0' }), - port: Type.Number({ default: 6099 }), - token: Type.String({ default: 'napcat' }), - loginRate: Type.Number({ default: 10 }), - autoLoginAccount: Type.String({ default: '' }), +const WebUiConfigSchema = z.object({ + host: z.string().default('0.0.0.0'), + port: z.number().default(6099), + token: z.string().default('napcat'), + loginRate: z.number().default(10), + autoLoginAccount: z.string().default(''), theme: themeType, }); -export type WebUiConfigType = Static; +export type WebUiConfigType = z.infer; // 读取当前目录下名为 webui.json 的配置文件,如果不存在则创建初始化配置文件 export class WebUiConfigWrapper { WebUiConfigData: WebUiConfigType | undefined = undefined; private validateAndApplyDefaults(config: Partial): WebUiConfigType { - new Ajv({ coerceTypes: true, useDefaults: true }).compile(WebUiConfigSchema)(config); + config = WebUiConfigSchema.parse(config); return config as WebUiConfigType; } diff --git a/src/webui/src/types/theme.ts b/src/webui/src/types/theme.ts index 593eb96c..f265a0bc 100644 --- a/src/webui/src/types/theme.ts +++ b/src/webui/src/types/theme.ts @@ -1,260 +1,260 @@ -import { Type } from '@sinclair/typebox'; +import { z } from 'zod'; -export const themeType = Type.Object( +export const themeType = z.object( { - dark: Type.Record(Type.String(), Type.String()), - light: Type.Record(Type.String(), Type.String()), - }, - { - default: { - dark: { - '--heroui-background': '0 0% 0%', - '--heroui-foreground-50': '240 5.88% 10%', - '--heroui-foreground-100': '240 3.7% 15.88%', - '--heroui-foreground-200': '240 5.26% 26.08%', - '--heroui-foreground-300': '240 5.2% 33.92%', - '--heroui-foreground-400': '240 3.83% 46.08%', - '--heroui-foreground-500': '240 5.03% 64.9%', - '--heroui-foreground-600': '240 4.88% 83.92%', - '--heroui-foreground-700': '240 5.88% 90%', - '--heroui-foreground-800': '240 4.76% 95.88%', - '--heroui-foreground-900': '0 0% 98.04%', - '--heroui-foreground': '210 5.56% 92.94%', - '--heroui-focus': '212.01999999999998 100% 46.67%', - '--heroui-overlay': '0 0% 0%', - '--heroui-divider': '0 0% 100%', - '--heroui-divider-opacity': '0.15', - '--heroui-content1': '240 5.88% 10%', - '--heroui-content1-foreground': '0 0% 98.04%', - '--heroui-content2': '240 3.7% 15.88%', - '--heroui-content2-foreground': '240 4.76% 95.88%', - '--heroui-content3': '240 5.26% 26.08%', - '--heroui-content3-foreground': '240 5.88% 90%', - '--heroui-content4': '240 5.2% 33.92%', - '--heroui-content4-foreground': '240 4.88% 83.92%', - '--heroui-default-50': '240 5.88% 10%', - '--heroui-default-100': '240 3.7% 15.88%', - '--heroui-default-200': '240 5.26% 26.08%', - '--heroui-default-300': '240 5.2% 33.92%', - '--heroui-default-400': '240 3.83% 46.08%', - '--heroui-default-500': '240 5.03% 64.9%', - '--heroui-default-600': '240 4.88% 83.92%', - '--heroui-default-700': '240 5.88% 90%', - '--heroui-default-800': '240 4.76% 95.88%', - '--heroui-default-900': '0 0% 98.04%', - '--heroui-default-foreground': '0 0% 100%', - '--heroui-default': '240 5.26% 26.08%', - '--heroui-danger-50': '301.89 82.61% 22.55%', - '--heroui-danger-100': '308.18 76.39% 28.24%', - '--heroui-danger-200': '313.85 70.65% 36.08%', - '--heroui-danger-300': '319.73 65.64% 44.51%', - '--heroui-danger-400': '325.82 69.62% 53.53%', - '--heroui-danger-500': '331.82 75% 65.49%', - '--heroui-danger-600': '337.84 83.46% 73.92%', - '--heroui-danger-700': '343.42 90.48% 83.53%', - '--heroui-danger-800': '350.53 90.48% 91.76%', - '--heroui-danger-900': '324 90.91% 95.69%', - '--heroui-danger-foreground': '0 0% 100%', - '--heroui-danger': '325.82 69.62% 53.53%', - '--heroui-primary-50': '340 84.91% 10.39%', - '--heroui-primary-100': '339.33 86.54% 20.39%', - '--heroui-primary-200': '339.11 85.99% 30.78%', - '--heroui-primary-300': '339 86.54% 40.78%', - '--heroui-primary-400': '339.2 90.36% 51.18%', - '--heroui-primary-500': '339 90% 60.78%', - '--heroui-primary-600': '339.11 90.6% 70.78%', - '--heroui-primary-700': '339.33 90% 80.39%', - '--heroui-primary-800': '340 91.84% 90.39%', - '--heroui-primary-900': '339.13 92% 95.1%', - '--heroui-primary-foreground': '0 0% 100%', - '--heroui-primary': '339.2 90.36% 51.18%', - '--heroui-secondary-50': '270 66.67% 9.41%', - '--heroui-secondary-100': '270 66.67% 18.82%', - '--heroui-secondary-200': '270 66.67% 28.24%', - '--heroui-secondary-300': '270 66.67% 37.65%', - '--heroui-secondary-400': '270 66.67% 47.06%', - '--heroui-secondary-500': '270 59.26% 57.65%', - '--heroui-secondary-600': '270 59.26% 68.24%', - '--heroui-secondary-700': '270 59.26% 78.82%', - '--heroui-secondary-800': '270 59.26% 89.41%', - '--heroui-secondary-900': '270 61.54% 94.9%', - '--heroui-secondary-foreground': '0 0% 100%', - '--heroui-secondary': '270 59.26% 57.65%', - '--heroui-success-50': '145.71 77.78% 8.82%', - '--heroui-success-100': '146.2 79.78% 17.45%', - '--heroui-success-200': '145.79 79.26% 26.47%', - '--heroui-success-300': '146.01 79.89% 35.1%', - '--heroui-success-400': '145.96 79.46% 43.92%', - '--heroui-success-500': '146.01 62.45% 55.1%', - '--heroui-success-600': '145.79 62.57% 66.47%', - '--heroui-success-700': '146.2 61.74% 77.45%', - '--heroui-success-800': '145.71 61.4% 88.82%', - '--heroui-success-900': '146.67 64.29% 94.51%', - '--heroui-success-foreground': '0 0% 0%', - '--heroui-success': '145.96 79.46% 43.92%', - '--heroui-warning-50': '37.14 75% 10.98%', - '--heroui-warning-100': '37.14 75% 21.96%', - '--heroui-warning-200': '36.96 73.96% 33.14%', - '--heroui-warning-300': '37.01 74.22% 44.12%', - '--heroui-warning-400': '37.03 91.27% 55.1%', - '--heroui-warning-500': '37.01 91.26% 64.12%', - '--heroui-warning-600': '36.96 91.24% 73.14%', - '--heroui-warning-700': '37.14 91.3% 81.96%', - '--heroui-warning-800': '37.14 91.3% 90.98%', - '--heroui-warning-900': '54.55 91.67% 95.29%', - '--heroui-warning-foreground': '0 0% 0%', - '--heroui-warning': '37.03 91.27% 55.1%', - '--heroui-code-background': '240 5.56% 7.06%', - '--heroui-strong': '190.14 94.67% 44.12%', - '--heroui-code-mdx': '190.14 94.67% 44.12%', - '--heroui-divider-weight': '1px', - '--heroui-disabled-opacity': '.5', - '--heroui-font-size-tiny': '0.75rem', - '--heroui-font-size-small': '0.875rem', - '--heroui-font-size-medium': '1rem', - '--heroui-font-size-large': '1.125rem', - '--heroui-line-height-tiny': '1rem', - '--heroui-line-height-small': '1.25rem', - '--heroui-line-height-medium': '1.5rem', - '--heroui-line-height-large': '1.75rem', - '--heroui-radius-small': '8px', - '--heroui-radius-medium': '12px', - '--heroui-radius-large': '14px', - '--heroui-border-width-small': '1px', - '--heroui-border-width-medium': '2px', - '--heroui-border-width-large': '3px', - '--heroui-box-shadow-small': - '0px 0px 5px 0px rgba(0, 0, 0, .05), 0px 2px 10px 0px rgba(0, 0, 0, .2), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', - '--heroui-box-shadow-medium': - '0px 0px 15px 0px rgba(0, 0, 0, .06), 0px 2px 30px 0px rgba(0, 0, 0, .22), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', - '--heroui-box-shadow-large': - '0px 0px 30px 0px rgba(0, 0, 0, .07), 0px 30px 60px 0px rgba(0, 0, 0, .26), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', - '--heroui-hover-opacity': '.9', - }, - light: { - '--heroui-background': '0 0% 100%', - '--heroui-foreground-50': '240 5.88% 95%', - '--heroui-foreground-100': '240 3.7% 90%', - '--heroui-foreground-200': '240 5.26% 80%', - '--heroui-foreground-300': '240 5.2% 70%', - '--heroui-foreground-400': '240 3.83% 60%', - '--heroui-foreground-500': '240 5.03% 50%', - '--heroui-foreground-600': '240 4.88% 40%', - '--heroui-foreground-700': '240 5.88% 30%', - '--heroui-foreground-800': '240 4.76% 20%', - '--heroui-foreground-900': '0 0% 10%', - '--heroui-foreground': '210 5.56% 7.06%', - '--heroui-focus': '212.01999999999998 100% 53.33%', - '--heroui-overlay': '0 0% 100%', - '--heroui-divider': '0 0% 0%', - '--heroui-divider-opacity': '0.85', - '--heroui-content1': '240 5.88% 95%', - '--heroui-content1-foreground': '0 0% 10%', - '--heroui-content2': '240 3.7% 90%', - '--heroui-content2-foreground': '240 4.76% 20%', - '--heroui-content3': '240 5.26% 80%', - '--heroui-content3-foreground': '240 5.88% 30%', - '--heroui-content4': '240 5.2% 70%', - '--heroui-content4-foreground': '240 4.88% 40%', - '--heroui-default-50': '240 5.88% 95%', - '--heroui-default-100': '240 3.7% 90%', - '--heroui-default-200': '240 5.26% 80%', - '--heroui-default-300': '240 5.2% 70%', - '--heroui-default-400': '240 3.83% 60%', - '--heroui-default-500': '240 5.03% 50%', - '--heroui-default-600': '240 4.88% 40%', - '--heroui-default-700': '240 5.88% 30%', - '--heroui-default-800': '240 4.76% 20%', - '--heroui-default-900': '0 0% 10%', - '--heroui-default-foreground': '0 0% 0%', - '--heroui-default': '240 5.26% 80%', - '--heroui-danger-50': '324 90.91% 95.69%', - '--heroui-danger-100': '350.53 90.48% 91.76%', - '--heroui-danger-200': '343.42 90.48% 83.53%', - '--heroui-danger-300': '337.84 83.46% 73.92%', - '--heroui-danger-400': '331.82 75% 65.49%', - '--heroui-danger-500': '325.82 69.62% 53.53%', - '--heroui-danger-600': '319.73 65.64% 44.51%', - '--heroui-danger-700': '313.85 70.65% 36.08%', - '--heroui-danger-800': '308.18 76.39% 28.24%', - '--heroui-danger-900': '301.89 82.61% 22.55%', - '--heroui-danger-foreground': '0 0% 100%', - '--heroui-danger': '325.82 69.62% 53.53%', - '--heroui-primary-50': '339.13 92% 95.1%', - '--heroui-primary-100': '340 91.84% 90.39%', - '--heroui-primary-200': '339.33 90% 80.39%', - '--heroui-primary-300': '339.11 90.6% 70.78%', - '--heroui-primary-400': '339 90% 60.78%', - '--heroui-primary-500': '339.2 90.36% 51.18%', - '--heroui-primary-600': '339 86.54% 40.78%', - '--heroui-primary-700': '339.11 85.99% 30.78%', - '--heroui-primary-800': '339.33 86.54% 20.39%', - '--heroui-primary-900': '340 84.91% 10.39%', - '--heroui-primary-foreground': '0 0% 100%', - '--heroui-primary': '339.2 90.36% 51.18%', - '--heroui-secondary-50': '270 61.54% 94.9%', - '--heroui-secondary-100': '270 59.26% 89.41%', - '--heroui-secondary-200': '270 59.26% 78.82%', - '--heroui-secondary-300': '270 59.26% 68.24%', - '--heroui-secondary-400': '270 59.26% 57.65%', - '--heroui-secondary-500': '270 66.67% 47.06%', - '--heroui-secondary-600': '270 66.67% 37.65%', - '--heroui-secondary-700': '270 66.67% 28.24%', - '--heroui-secondary-800': '270 66.67% 18.82%', - '--heroui-secondary-900': '270 66.67% 9.41%', - '--heroui-secondary-foreground': '0 0% 100%', - '--heroui-secondary': '270 66.67% 47.06%', - '--heroui-success-50': '146.67 64.29% 94.51%', - '--heroui-success-100': '145.71 61.4% 88.82%', - '--heroui-success-200': '146.2 61.74% 77.45%', - '--heroui-success-300': '145.79 62.57% 66.47%', - '--heroui-success-400': '146.01 62.45% 55.1%', - '--heroui-success-500': '145.96 79.46% 43.92%', - '--heroui-success-600': '146.01 79.89% 35.1%', - '--heroui-success-700': '145.79 79.26% 26.47%', - '--heroui-success-800': '146.2 79.78% 17.45%', - '--heroui-success-900': '145.71 77.78% 8.82%', - '--heroui-success-foreground': '0 0% 0%', - '--heroui-success': '145.96 79.46% 43.92%', - '--heroui-warning-50': '54.55 91.67% 95.29%', - '--heroui-warning-100': '37.14 91.3% 90.98%', - '--heroui-warning-200': '37.14 91.3% 81.96%', - '--heroui-warning-300': '36.96 91.24% 73.14%', - '--heroui-warning-400': '37.01 91.26% 64.12%', - '--heroui-warning-500': '37.03 91.27% 55.1%', - '--heroui-warning-600': '37.01 74.22% 44.12%', - '--heroui-warning-700': '36.96 73.96% 33.14%', - '--heroui-warning-800': '37.14 75% 21.96%', - '--heroui-warning-900': '37.14 75% 10.98%', - '--heroui-warning-foreground': '0 0% 0%', - '--heroui-warning': '37.03 91.27% 55.1%', - '--heroui-code-background': '221.25 17.39% 18.04%', - '--heroui-strong': '316.95 100% 65.29%', - '--heroui-code-mdx': '316.95 100% 65.29%', - '--heroui-divider-weight': '1px', - '--heroui-disabled-opacity': '.5', - '--heroui-font-size-tiny': '0.75rem', - '--heroui-font-size-small': '0.875rem', - '--heroui-font-size-medium': '1rem', - '--heroui-font-size-large': '1.125rem', - '--heroui-line-height-tiny': '1rem', - '--heroui-line-height-small': '1.25rem', - '--heroui-line-height-medium': '1.5rem', - '--heroui-line-height-large': '1.75rem', - '--heroui-radius-small': '8px', - '--heroui-radius-medium': '12px', - '--heroui-radius-large': '14px', - '--heroui-border-width-small': '1px', - '--heroui-border-width-medium': '2px', - '--heroui-border-width-large': '3px', - '--heroui-box-shadow-small': - '0px 0px 5px 0px rgba(0, 0, 0, .02), 0px 2px 10px 0px rgba(0, 0, 0, .06), 0px 0px 1px 0px rgba(0, 0, 0, .3)', - '--heroui-box-shadow-medium': - '0px 0px 15px 0px rgba(0, 0, 0, .03), 0px 2px 30px 0px rgba(0, 0, 0, .08), 0px 0px 1px 0px rgba(0, 0, 0, .3)', - '--heroui-box-shadow-large': - '0px 0px 30px 0px rgba(0, 0, 0, .04), 0px 30px 60px 0px rgba(0, 0, 0, .12), 0px 0px 1px 0px rgba(0, 0, 0, .3)', - '--heroui-hover-opacity': '.8', - }, - }, + // dark: Type.Record(Type.String(), Type.String()), + // light: Type.Record(Type.String(), Type.String()), + dark: z.record(z.string(), z.string()), + light: z.record(z.string(), z.string()), } -); +).default({ + dark: { + '--heroui-background': '0 0% 0%', + '--heroui-foreground-50': '240 5.88% 10%', + '--heroui-foreground-100': '240 3.7% 15.88%', + '--heroui-foreground-200': '240 5.26% 26.08%', + '--heroui-foreground-300': '240 5.2% 33.92%', + '--heroui-foreground-400': '240 3.83% 46.08%', + '--heroui-foreground-500': '240 5.03% 64.9%', + '--heroui-foreground-600': '240 4.88% 83.92%', + '--heroui-foreground-700': '240 5.88% 90%', + '--heroui-foreground-800': '240 4.76% 95.88%', + '--heroui-foreground-900': '0 0% 98.04%', + '--heroui-foreground': '210 5.56% 92.94%', + '--heroui-focus': '212.01999999999998 100% 46.67%', + '--heroui-overlay': '0 0% 0%', + '--heroui-divider': '0 0% 100%', + '--heroui-divider-opacity': '0.15', + '--heroui-content1': '240 5.88% 10%', + '--heroui-content1-foreground': '0 0% 98.04%', + '--heroui-content2': '240 3.7% 15.88%', + '--heroui-content2-foreground': '240 4.76% 95.88%', + '--heroui-content3': '240 5.26% 26.08%', + '--heroui-content3-foreground': '240 5.88% 90%', + '--heroui-content4': '240 5.2% 33.92%', + '--heroui-content4-foreground': '240 4.88% 83.92%', + '--heroui-default-50': '240 5.88% 10%', + '--heroui-default-100': '240 3.7% 15.88%', + '--heroui-default-200': '240 5.26% 26.08%', + '--heroui-default-300': '240 5.2% 33.92%', + '--heroui-default-400': '240 3.83% 46.08%', + '--heroui-default-500': '240 5.03% 64.9%', + '--heroui-default-600': '240 4.88% 83.92%', + '--heroui-default-700': '240 5.88% 90%', + '--heroui-default-800': '240 4.76% 95.88%', + '--heroui-default-900': '0 0% 98.04%', + '--heroui-default-foreground': '0 0% 100%', + '--heroui-default': '240 5.26% 26.08%', + '--heroui-danger-50': '301.89 82.61% 22.55%', + '--heroui-danger-100': '308.18 76.39% 28.24%', + '--heroui-danger-200': '313.85 70.65% 36.08%', + '--heroui-danger-300': '319.73 65.64% 44.51%', + '--heroui-danger-400': '325.82 69.62% 53.53%', + '--heroui-danger-500': '331.82 75% 65.49%', + '--heroui-danger-600': '337.84 83.46% 73.92%', + '--heroui-danger-700': '343.42 90.48% 83.53%', + '--heroui-danger-800': '350.53 90.48% 91.76%', + '--heroui-danger-900': '324 90.91% 95.69%', + '--heroui-danger-foreground': '0 0% 100%', + '--heroui-danger': '325.82 69.62% 53.53%', + '--heroui-primary-50': '340 84.91% 10.39%', + '--heroui-primary-100': '339.33 86.54% 20.39%', + '--heroui-primary-200': '339.11 85.99% 30.78%', + '--heroui-primary-300': '339 86.54% 40.78%', + '--heroui-primary-400': '339.2 90.36% 51.18%', + '--heroui-primary-500': '339 90% 60.78%', + '--heroui-primary-600': '339.11 90.6% 70.78%', + '--heroui-primary-700': '339.33 90% 80.39%', + '--heroui-primary-800': '340 91.84% 90.39%', + '--heroui-primary-900': '339.13 92% 95.1%', + '--heroui-primary-foreground': '0 0% 100%', + '--heroui-primary': '339.2 90.36% 51.18%', + '--heroui-secondary-50': '270 66.67% 9.41%', + '--heroui-secondary-100': '270 66.67% 18.82%', + '--heroui-secondary-200': '270 66.67% 28.24%', + '--heroui-secondary-300': '270 66.67% 37.65%', + '--heroui-secondary-400': '270 66.67% 47.06%', + '--heroui-secondary-500': '270 59.26% 57.65%', + '--heroui-secondary-600': '270 59.26% 68.24%', + '--heroui-secondary-700': '270 59.26% 78.82%', + '--heroui-secondary-800': '270 59.26% 89.41%', + '--heroui-secondary-900': '270 61.54% 94.9%', + '--heroui-secondary-foreground': '0 0% 100%', + '--heroui-secondary': '270 59.26% 57.65%', + '--heroui-success-50': '145.71 77.78% 8.82%', + '--heroui-success-100': '146.2 79.78% 17.45%', + '--heroui-success-200': '145.79 79.26% 26.47%', + '--heroui-success-300': '146.01 79.89% 35.1%', + '--heroui-success-400': '145.96 79.46% 43.92%', + '--heroui-success-500': '146.01 62.45% 55.1%', + '--heroui-success-600': '145.79 62.57% 66.47%', + '--heroui-success-700': '146.2 61.74% 77.45%', + '--heroui-success-800': '145.71 61.4% 88.82%', + '--heroui-success-900': '146.67 64.29% 94.51%', + '--heroui-success-foreground': '0 0% 0%', + '--heroui-success': '145.96 79.46% 43.92%', + '--heroui-warning-50': '37.14 75% 10.98%', + '--heroui-warning-100': '37.14 75% 21.96%', + '--heroui-warning-200': '36.96 73.96% 33.14%', + '--heroui-warning-300': '37.01 74.22% 44.12%', + '--heroui-warning-400': '37.03 91.27% 55.1%', + '--heroui-warning-500': '37.01 91.26% 64.12%', + '--heroui-warning-600': '36.96 91.24% 73.14%', + '--heroui-warning-700': '37.14 91.3% 81.96%', + '--heroui-warning-800': '37.14 91.3% 90.98%', + '--heroui-warning-900': '54.55 91.67% 95.29%', + '--heroui-warning-foreground': '0 0% 0%', + '--heroui-warning': '37.03 91.27% 55.1%', + '--heroui-code-background': '240 5.56% 7.06%', + '--heroui-strong': '190.14 94.67% 44.12%', + '--heroui-code-mdx': '190.14 94.67% 44.12%', + '--heroui-divider-weight': '1px', + '--heroui-disabled-opacity': '.5', + '--heroui-font-size-tiny': '0.75rem', + '--heroui-font-size-small': '0.875rem', + '--heroui-font-size-medium': '1rem', + '--heroui-font-size-large': '1.125rem', + '--heroui-line-height-tiny': '1rem', + '--heroui-line-height-small': '1.25rem', + '--heroui-line-height-medium': '1.5rem', + '--heroui-line-height-large': '1.75rem', + '--heroui-radius-small': '8px', + '--heroui-radius-medium': '12px', + '--heroui-radius-large': '14px', + '--heroui-border-width-small': '1px', + '--heroui-border-width-medium': '2px', + '--heroui-border-width-large': '3px', + '--heroui-box-shadow-small': + '0px 0px 5px 0px rgba(0, 0, 0, .05), 0px 2px 10px 0px rgba(0, 0, 0, .2), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', + '--heroui-box-shadow-medium': + '0px 0px 15px 0px rgba(0, 0, 0, .06), 0px 2px 30px 0px rgba(0, 0, 0, .22), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', + '--heroui-box-shadow-large': + '0px 0px 30px 0px rgba(0, 0, 0, .07), 0px 30px 60px 0px rgba(0, 0, 0, .26), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)', + '--heroui-hover-opacity': '.9', + }, + light: { + '--heroui-background': '0 0% 100%', + '--heroui-foreground-50': '240 5.88% 95%', + '--heroui-foreground-100': '240 3.7% 90%', + '--heroui-foreground-200': '240 5.26% 80%', + '--heroui-foreground-300': '240 5.2% 70%', + '--heroui-foreground-400': '240 3.83% 60%', + '--heroui-foreground-500': '240 5.03% 50%', + '--heroui-foreground-600': '240 4.88% 40%', + '--heroui-foreground-700': '240 5.88% 30%', + '--heroui-foreground-800': '240 4.76% 20%', + '--heroui-foreground-900': '0 0% 10%', + '--heroui-foreground': '210 5.56% 7.06%', + '--heroui-focus': '212.01999999999998 100% 53.33%', + '--heroui-overlay': '0 0% 100%', + '--heroui-divider': '0 0% 0%', + '--heroui-divider-opacity': '0.85', + '--heroui-content1': '240 5.88% 95%', + '--heroui-content1-foreground': '0 0% 10%', + '--heroui-content2': '240 3.7% 90%', + '--heroui-content2-foreground': '240 4.76% 20%', + '--heroui-content3': '240 5.26% 80%', + '--heroui-content3-foreground': '240 5.88% 30%', + '--heroui-content4': '240 5.2% 70%', + '--heroui-content4-foreground': '240 4.88% 40%', + '--heroui-default-50': '240 5.88% 95%', + '--heroui-default-100': '240 3.7% 90%', + '--heroui-default-200': '240 5.26% 80%', + '--heroui-default-300': '240 5.2% 70%', + '--heroui-default-400': '240 3.83% 60%', + '--heroui-default-500': '240 5.03% 50%', + '--heroui-default-600': '240 4.88% 40%', + '--heroui-default-700': '240 5.88% 30%', + '--heroui-default-800': '240 4.76% 20%', + '--heroui-default-900': '0 0% 10%', + '--heroui-default-foreground': '0 0% 0%', + '--heroui-default': '240 5.26% 80%', + '--heroui-danger-50': '324 90.91% 95.69%', + '--heroui-danger-100': '350.53 90.48% 91.76%', + '--heroui-danger-200': '343.42 90.48% 83.53%', + '--heroui-danger-300': '337.84 83.46% 73.92%', + '--heroui-danger-400': '331.82 75% 65.49%', + '--heroui-danger-500': '325.82 69.62% 53.53%', + '--heroui-danger-600': '319.73 65.64% 44.51%', + '--heroui-danger-700': '313.85 70.65% 36.08%', + '--heroui-danger-800': '308.18 76.39% 28.24%', + '--heroui-danger-900': '301.89 82.61% 22.55%', + '--heroui-danger-foreground': '0 0% 100%', + '--heroui-danger': '325.82 69.62% 53.53%', + '--heroui-primary-50': '339.13 92% 95.1%', + '--heroui-primary-100': '340 91.84% 90.39%', + '--heroui-primary-200': '339.33 90% 80.39%', + '--heroui-primary-300': '339.11 90.6% 70.78%', + '--heroui-primary-400': '339 90% 60.78%', + '--heroui-primary-500': '339.2 90.36% 51.18%', + '--heroui-primary-600': '339 86.54% 40.78%', + '--heroui-primary-700': '339.11 85.99% 30.78%', + '--heroui-primary-800': '339.33 86.54% 20.39%', + '--heroui-primary-900': '340 84.91% 10.39%', + '--heroui-primary-foreground': '0 0% 100%', + '--heroui-primary': '339.2 90.36% 51.18%', + '--heroui-secondary-50': '270 61.54% 94.9%', + '--heroui-secondary-100': '270 59.26% 89.41%', + '--heroui-secondary-200': '270 59.26% 78.82%', + '--heroui-secondary-300': '270 59.26% 68.24%', + '--heroui-secondary-400': '270 59.26% 57.65%', + '--heroui-secondary-500': '270 66.67% 47.06%', + '--heroui-secondary-600': '270 66.67% 37.65%', + '--heroui-secondary-700': '270 66.67% 28.24%', + '--heroui-secondary-800': '270 66.67% 18.82%', + '--heroui-secondary-900': '270 66.67% 9.41%', + '--heroui-secondary-foreground': '0 0% 100%', + '--heroui-secondary': '270 66.67% 47.06%', + '--heroui-success-50': '146.67 64.29% 94.51%', + '--heroui-success-100': '145.71 61.4% 88.82%', + '--heroui-success-200': '146.2 61.74% 77.45%', + '--heroui-success-300': '145.79 62.57% 66.47%', + '--heroui-success-400': '146.01 62.45% 55.1%', + '--heroui-success-500': '145.96 79.46% 43.92%', + '--heroui-success-600': '146.01 79.89% 35.1%', + '--heroui-success-700': '145.79 79.26% 26.47%', + '--heroui-success-800': '146.2 79.78% 17.45%', + '--heroui-success-900': '145.71 77.78% 8.82%', + '--heroui-success-foreground': '0 0% 0%', + '--heroui-success': '145.96 79.46% 43.92%', + '--heroui-warning-50': '54.55 91.67% 95.29%', + '--heroui-warning-100': '37.14 91.3% 90.98%', + '--heroui-warning-200': '37.14 91.3% 81.96%', + '--heroui-warning-300': '36.96 91.24% 73.14%', + '--heroui-warning-400': '37.01 91.26% 64.12%', + '--heroui-warning-500': '37.03 91.27% 55.1%', + '--heroui-warning-600': '37.01 74.22% 44.12%', + '--heroui-warning-700': '36.96 73.96% 33.14%', + '--heroui-warning-800': '37.14 75% 21.96%', + '--heroui-warning-900': '37.14 75% 10.98%', + '--heroui-warning-foreground': '0 0% 0%', + '--heroui-warning': '37.03 91.27% 55.1%', + '--heroui-code-background': '221.25 17.39% 18.04%', + '--heroui-strong': '316.95 100% 65.29%', + '--heroui-code-mdx': '316.95 100% 65.29%', + '--heroui-divider-weight': '1px', + '--heroui-disabled-opacity': '.5', + '--heroui-font-size-tiny': '0.75rem', + '--heroui-font-size-small': '0.875rem', + '--heroui-font-size-medium': '1rem', + '--heroui-font-size-large': '1.125rem', + '--heroui-line-height-tiny': '1rem', + '--heroui-line-height-small': '1.25rem', + '--heroui-line-height-medium': '1.5rem', + '--heroui-line-height-large': '1.75rem', + '--heroui-radius-small': '8px', + '--heroui-radius-medium': '12px', + '--heroui-radius-large': '14px', + '--heroui-border-width-small': '1px', + '--heroui-border-width-medium': '2px', + '--heroui-border-width-large': '3px', + '--heroui-box-shadow-small': + '0px 0px 5px 0px rgba(0, 0, 0, .02), 0px 2px 10px 0px rgba(0, 0, 0, .06), 0px 0px 1px 0px rgba(0, 0, 0, .3)', + '--heroui-box-shadow-medium': + '0px 0px 15px 0px rgba(0, 0, 0, .03), 0px 2px 30px 0px rgba(0, 0, 0, .08), 0px 0px 1px 0px rgba(0, 0, 0, .3)', + '--heroui-box-shadow-large': + '0px 0px 30px 0px rgba(0, 0, 0, .04), 0px 30px 60px 0px rgba(0, 0, 0, .12), 0px 0px 1px 0px rgba(0, 0, 0, .3)', + '--heroui-hover-opacity': '.8', + }, + +})