feat: Add Line plugin (#1630)
* feat: add LINE plugin (#1630) (thanks @plum-dawg) * feat: complete LINE plugin (#1630) (thanks @plum-dawg) * chore: drop line plugin node_modules (#1630) (thanks @plum-dawg) * test: mock /context report in commands test (#1630) (thanks @plum-dawg) * test: limit macOS CI workers to avoid OOM (#1630) (thanks @plum-dawg) * test: reduce macOS CI vitest workers (#1630) (thanks @plum-dawg) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
150
src/line/types.ts
Normal file
150
src/line/types.ts
Normal file
@@ -0,0 +1,150 @@
|
||||
import type {
|
||||
WebhookEvent,
|
||||
TextMessage,
|
||||
ImageMessage,
|
||||
VideoMessage,
|
||||
AudioMessage,
|
||||
StickerMessage,
|
||||
LocationMessage,
|
||||
} from "@line/bot-sdk";
|
||||
|
||||
export type LineTokenSource = "config" | "env" | "file" | "none";
|
||||
|
||||
export interface LineConfig {
|
||||
enabled?: boolean;
|
||||
channelAccessToken?: string;
|
||||
channelSecret?: string;
|
||||
tokenFile?: string;
|
||||
secretFile?: string;
|
||||
name?: string;
|
||||
allowFrom?: Array<string | number>;
|
||||
groupAllowFrom?: Array<string | number>;
|
||||
dmPolicy?: "open" | "allowlist" | "pairing" | "disabled";
|
||||
groupPolicy?: "open" | "allowlist" | "disabled";
|
||||
mediaMaxMb?: number;
|
||||
webhookPath?: string;
|
||||
accounts?: Record<string, LineAccountConfig>;
|
||||
groups?: Record<string, LineGroupConfig>;
|
||||
}
|
||||
|
||||
export interface LineAccountConfig {
|
||||
enabled?: boolean;
|
||||
channelAccessToken?: string;
|
||||
channelSecret?: string;
|
||||
tokenFile?: string;
|
||||
secretFile?: string;
|
||||
name?: string;
|
||||
allowFrom?: Array<string | number>;
|
||||
groupAllowFrom?: Array<string | number>;
|
||||
dmPolicy?: "open" | "allowlist" | "pairing" | "disabled";
|
||||
groupPolicy?: "open" | "allowlist" | "disabled";
|
||||
mediaMaxMb?: number;
|
||||
webhookPath?: string;
|
||||
groups?: Record<string, LineGroupConfig>;
|
||||
}
|
||||
|
||||
export interface LineGroupConfig {
|
||||
enabled?: boolean;
|
||||
allowFrom?: Array<string | number>;
|
||||
requireMention?: boolean;
|
||||
systemPrompt?: string;
|
||||
skills?: string[];
|
||||
}
|
||||
|
||||
export interface ResolvedLineAccount {
|
||||
accountId: string;
|
||||
name?: string;
|
||||
enabled: boolean;
|
||||
channelAccessToken: string;
|
||||
channelSecret: string;
|
||||
tokenSource: LineTokenSource;
|
||||
config: LineConfig & LineAccountConfig;
|
||||
}
|
||||
|
||||
export type LineMessageType =
|
||||
| TextMessage
|
||||
| ImageMessage
|
||||
| VideoMessage
|
||||
| AudioMessage
|
||||
| StickerMessage
|
||||
| LocationMessage;
|
||||
|
||||
export interface LineWebhookContext {
|
||||
event: WebhookEvent;
|
||||
replyToken?: string;
|
||||
userId?: string;
|
||||
groupId?: string;
|
||||
roomId?: string;
|
||||
}
|
||||
|
||||
export interface LineSendResult {
|
||||
messageId: string;
|
||||
chatId: string;
|
||||
}
|
||||
|
||||
export interface LineProbeResult {
|
||||
ok: boolean;
|
||||
bot?: {
|
||||
displayName?: string;
|
||||
userId?: string;
|
||||
basicId?: string;
|
||||
pictureUrl?: string;
|
||||
};
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export type LineFlexMessagePayload = {
|
||||
altText: string;
|
||||
contents: unknown;
|
||||
};
|
||||
|
||||
export type LineTemplateMessagePayload =
|
||||
| {
|
||||
type: "confirm";
|
||||
text: string;
|
||||
confirmLabel: string;
|
||||
confirmData: string;
|
||||
cancelLabel: string;
|
||||
cancelData: string;
|
||||
altText?: string;
|
||||
}
|
||||
| {
|
||||
type: "buttons";
|
||||
title: string;
|
||||
text: string;
|
||||
actions: Array<{
|
||||
type: "message" | "uri" | "postback";
|
||||
label: string;
|
||||
data?: string;
|
||||
uri?: string;
|
||||
}>;
|
||||
thumbnailImageUrl?: string;
|
||||
altText?: string;
|
||||
}
|
||||
| {
|
||||
type: "carousel";
|
||||
columns: Array<{
|
||||
title?: string;
|
||||
text: string;
|
||||
thumbnailImageUrl?: string;
|
||||
actions: Array<{
|
||||
type: "message" | "uri" | "postback";
|
||||
label: string;
|
||||
data?: string;
|
||||
uri?: string;
|
||||
}>;
|
||||
}>;
|
||||
altText?: string;
|
||||
};
|
||||
|
||||
export type LineChannelData = {
|
||||
quickReplies?: string[];
|
||||
location?: {
|
||||
title: string;
|
||||
address: string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
};
|
||||
flexMessage?: LineFlexMessagePayload;
|
||||
templateMessage?: LineTemplateMessagePayload;
|
||||
};
|
||||
Reference in New Issue
Block a user