diff --git a/api/src/channel/types.ts b/api/src/channel/types.ts index 0c654f19..18d8348d 100644 --- a/api/src/channel/types.ts +++ b/api/src/channel/types.ts @@ -1,19 +1,16 @@ /* - * Copyright © 2024 Hexastack. All rights reserved. + * Copyright © 2025 Hexastack. All rights reserved. * * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ -import { SettingCreateDto } from '@/setting/dto/setting.dto'; +import { ExtensionSetting } from '@/setting/schemas/types'; import { HyphenToUnderscore } from '@/utils/types/extension'; export type ChannelName = `${string}-channel`; -export type ChannelSetting = Omit< - SettingCreateDto, - 'group' | 'weight' -> & { +export type ChannelSetting = ExtensionSetting<{ group: HyphenToUnderscore; -}; +}>; diff --git a/api/src/helper/types.ts b/api/src/helper/types.ts index fd373f85..658c95c3 100644 --- a/api/src/helper/types.ts +++ b/api/src/helper/types.ts @@ -6,7 +6,7 @@ * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ -import { SettingCreateDto } from '@/setting/dto/setting.dto'; +import { ExtensionSetting } from '@/setting/schemas/types'; import { HyphenToUnderscore } from '@/utils/types/extension'; import BaseHelper from './lib/base-helper'; @@ -116,9 +116,7 @@ export type HelperRegistry = Map< Map >; -export type HelperSetting = Omit< - SettingCreateDto, - 'group' | 'weight' -> & { - group: HyphenToUnderscore; -}; +export type HelperSetting = + ExtensionSetting<{ + group: HyphenToUnderscore; + }>; diff --git a/api/src/plugins/types.ts b/api/src/plugins/types.ts index d296de6d..0f4be5ed 100644 --- a/api/src/plugins/types.ts +++ b/api/src/plugins/types.ts @@ -10,7 +10,7 @@ import { ChannelEvent } from '@/channel/lib/EventWrapper'; import { BlockCreateDto } from '@/chat/dto/block.dto'; import { Block } from '@/chat/schemas/block.schema'; import { Conversation } from '@/chat/schemas/conversation.schema'; -import { SettingCreateDto } from '@/setting/dto/setting.dto'; +import { ExtensionSetting } from '@/setting/schemas/types'; export type PluginName = `${string}-plugin`; @@ -23,7 +23,7 @@ export interface CustomBlocks {} type BlockAttrs = Partial & { name: string }; -export type PluginSetting = Omit; +export type PluginSetting = ExtensionSetting; export type PluginBlockTemplate = Omit< BlockAttrs, diff --git a/api/src/setting/schemas/types.ts b/api/src/setting/schemas/types.ts index 5d1b6bc2..a0aee11c 100644 --- a/api/src/setting/schemas/types.ts +++ b/api/src/setting/schemas/types.ts @@ -6,6 +6,8 @@ * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ +import { BaseSchema } from '@/utils/generics/base-schema'; + import { Setting } from './setting.schema'; export enum SettingType { @@ -128,3 +130,17 @@ export type AnySetting = | MultipleAttachmentSetting; export type SettingDict = { [group: string]: Setting[] }; + +export type ExtensionSetting< + E extends object = object, + U extends AnySetting = AnySetting, + K extends keyof BaseSchema = keyof BaseSchema, +> = U extends any + ? { + [P in keyof U as P extends K + ? never + : U[P] extends never + ? never + : P]: U[P]; + } & E + : never;