yqf-feifei-openclaw-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +713 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.esm.js +690 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/src/ApiClient.d.ts +240 -0
- package/dist/src/api.d.ts +14 -0
- package/dist/src/channel.d.ts +3 -0
- package/dist/src/const.d.ts +4 -0
- package/dist/src/interface.d.ts +64 -0
- package/dist/src/monitor.d.ts +10 -0
- package/dist/src/runtime.d.ts +3 -0
- package/openclaw.plugin.json +30 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/const.ts","../../src/runtime.ts","../../src/monitor.ts","../../src/ApiClient.ts","../../src/api.ts","../../src/channel.ts","../../index.ts"],"sourcesContent":["export const CHANNEL_ID = \"feifei\";\nexport const DEFAULT_ACCOUNT_ID = \"default\";\nexport const DEFAULT_HUB_URL = \"https://kefu.airtpb.cn/signalr/hubs/robot\";\nexport const DEFAULT_API_URL = \"http://localhost:61201\";\n","import type { PluginRuntime } from \"openclaw/plugin-sdk/core\";\n\nlet _runtime: any = null;\n\nexport function setFeiFeiRuntime(runtime: PluginRuntime): void {\n _runtime = runtime;\n}\n\nexport function getFeiFeiRuntime(): PluginRuntime {\n if (!_runtime) throw new Error(\"FeiFei runtime not initialized\");\n return _runtime;\n}\n","/**\n * FeiFei SignalR 连接模块\n *\n * 作为客户端连接到 FeiFei Server 的 RobotHub,\n * 监听 OnReceiveMessageAsync 事件并 dispatch 到 OpenClaw。\n */\n\nimport * as signalR from \"@microsoft/signalr\";\nimport { createHmac } from \"node:crypto\";\nimport type {\n MessagePayloadBase,\n MessageTextPayload,\n MessageImagePayload,\n MessageFilePayload,\n MessageMarkdownPayload,\n} from \"yqf-feifei-js-message-payload-types\";\nimport { CHANNEL_ID } from \"./const.js\";\nimport { getFeiFeiRuntime } from \"./runtime.js\";\nimport type { FeiFeiMonitorOptions, RobotReceiveMessageRequest, SessionType } from \"./interface.js\";\nimport type { FeiFeiApi as FeiFeiApiType } from \"./api.js\";\n\n// sessionId → sessionType,供 outbound.sendText 查找\nconst sessionRegistry = new Map<string, SessionType>();\n\nexport function getSessionType(sessionId: string): SessionType | undefined {\n return sessionRegistry.get(sessionId);\n}\n\n// ============================================================================\n// Token 生成(HMAC-SHA256 签名,含 timestamp 防重放)\n// ============================================================================\n\nfunction buildToken(robotId: string, secret: string): string {\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const signature = createHmac(\"sha256\", secret)\n .update(`${robotId}:${timestamp}`)\n .digest(\"hex\");\n return Buffer.from(`${robotId}:${timestamp}:${signature}`).toString(\"base64\");\n}\n\n// ============================================================================\n// Payload 文本提取\n// ============================================================================\n\nfunction extractBodyText(payload: MessagePayloadBase): string {\n switch (payload.type) {\n case \"Text\":\n return (payload as MessageTextPayload).text ?? \"\";\n case \"Markdown\":\n return (payload as MessageMarkdownPayload).markdown ?? \"\";\n case \"Image\": {\n const img = payload as MessageImagePayload;\n return img.url ? `[图片] ${img.url}` : \"[图片]\";\n }\n case \"File\": {\n const file = payload as MessageFilePayload;\n return file.url\n ? `[文件: ${file.fileName ?? \"unknown\"}] ${file.url}`\n : `[文件: ${file.fileName ?? \"unknown\"}]`;\n }\n default:\n return `[${payload.type}]`;\n }\n}\n\n// ============================================================================\n// 单条消息处理\n// ============================================================================\n\nasync function handleReceiveMessage(\n request: RobotReceiveMessageRequest,\n options: FeiFeiMonitorOptions,\n api: FeiFeiApiType,\n): Promise<void> {\n const { accountId, cfg, runtime } = options;\n const core = getFeiFeiRuntime();\n\n const sessionId = String(request.sessionId);\n const userId = request.fromUserId ?? sessionId;\n const body = extractBodyText(request.payload);\n\n if (!body) {\n runtime.log?.(`[feifei] skip empty message, sessionId=${sessionId}`);\n return;\n }\n\n sessionRegistry.set(sessionId, request.sessionType);\n\n runtime.log?.(\n `[feifei] ← OnReceiveMessage sessionId=${sessionId} user=${userId} text=${body.slice(0, 60)}`,\n );\n\n // 解析 OpenClaw 路由,用 sessionId 作为 peer id(一个 FeiFei 会话对应一个 OpenClaw 会话)\n const route = core.channel.routing.resolveAgentRoute({\n cfg,\n channel: CHANNEL_ID,\n accountId,\n peer: { kind: \"direct\", id: sessionId },\n });\n\n const ctx = core.channel.reply.finalizeInboundContext({\n Body: body,\n RawBody: body,\n CommandBody: body,\n MessageSid: String(request.messageId),\n From: `${CHANNEL_ID}:${userId}`,\n To: `${CHANNEL_ID}:${sessionId}`,\n SenderId: userId,\n SessionKey: route.sessionKey,\n AccountId: accountId,\n ChatType: \"direct\",\n ConversationLabel: `feifei:${request.sessionType.toLocaleLowerCase()}:${sessionId}`,\n Timestamp: Date.now(),\n Provider: CHANNEL_ID,\n Surface: CHANNEL_ID,\n OriginatingChannel: CHANNEL_ID,\n OriginatingTo: `${CHANNEL_ID}:${sessionId}`,\n CommandAuthorized: true,\n });\n\n await core.channel.reply\n .dispatchReplyWithBufferedBlockDispatcher({\n ctx,\n cfg,\n dispatcherOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n deliver: async (payload, info) => {\n runtime.log?.(\n `[feifei] → deliver kind=${info.kind} sessionType=${request.sessionType} sessionId=${request.sessionId} text=${(payload.text ?? \"\").slice(0, 60)}`,\n );\n const result = await api.sendMessage(request.sessionType, request.sessionId, payload);\n runtime.log?.(`[feifei] → deliver ok messageId=${result.messageId}`);\n },\n onError: (err, info) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const apiErr = err as any;\n const detail = apiErr?.status != null\n ? ` status=${apiErr.status} body=${apiErr.response}`\n : \"\";\n runtime.error?.(`[feifei] deliver error kind=${info.kind}: ${String(err)}${detail}`);\n },\n },\n })\n .catch((err: unknown) => {\n runtime.error?.(`[feifei] dispatch failed: ${String(err)}`);\n });\n}\n\n// ============================================================================\n// 主连接函数\n// ============================================================================\n\nexport async function monitorFeiFei(options: FeiFeiMonitorOptions, api: FeiFeiApiType): Promise<void> {\n const { hubUrl, botId, secret, runtime, abortSignal } = options;\n\n return new Promise<void>((resolve, reject) => {\n // accessTokenFactory 每次连接/重连时重新生成 token,避免长连接后 token 过期\n // 服务端同时支持 query string(WebSocket)和 Authorization header(negotiate HTTP)\n const connection = new signalR.HubConnectionBuilder()\n .withUrl(hubUrl, {\n accessTokenFactory: () => buildToken(botId, secret),\n })\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: (ctx) => {\n if (ctx.previousRetryCount < 5) return 2000;\n if (ctx.previousRetryCount < 20) return 10000;\n return 30000;\n },\n })\n .configureLogging(signalR.LogLevel.Warning)\n .build();\n\n // 监听用户消息\n connection.on(\"OnReceiveMessage\", (request: RobotReceiveMessageRequest) => {\n handleReceiveMessage(request, options, api).catch((err) => {\n runtime.error?.(`[feifei] handleReceiveMessage error: ${String(err)}`);\n });\n });\n\n // 监听会话开始\n connection.on(\"OnSessionStart\", (request: unknown) => {\n runtime.log?.(`[feifei] ← OnSessionStart: ${JSON.stringify(request)}`);\n });\n\n // 监听会话结束\n connection.on(\"OnSessionEnd\", (request: unknown) => {\n runtime.log?.(`[feifei] ← OnSessionEnd: ${JSON.stringify(request)}`);\n });\n\n // 监听消息指令\n connection.on(\"OnMessageCommand\", (request: unknown) => {\n runtime.log?.(`[feifei] ← OnMessageCommand: ${JSON.stringify(request)}`);\n });\n\n connection.onclose((err) => {\n runtime.log?.(`[feifei] SignalR closed: ${err?.message ?? \"clean\"}`);\n });\n\n connection.onreconnecting((err) => {\n runtime.log?.(`[feifei] SignalR reconnecting: ${err?.message ?? \"\"}` );\n });\n\n connection.onreconnected((connId) => {\n runtime.log?.(`[feifei] SignalR reconnected connId=${connId}`);\n });\n\n // 收到 abort 信号时断开\n abortSignal?.addEventListener(\"abort\", async () => {\n try { await connection.stop(); } catch { /* ignore */ }\n resolve();\n });\n\n // 启动连接\n connection\n .start()\n .then(() => {\n runtime.log?.(`[feifei] SignalR connected → ${hubUrl} botId=${botId}`);\n })\n .catch((err) => {\n runtime.error?.(`[feifei] SignalR start failed: ${String(err)}`);\n reject(err);\n });\n });\n}\n","import type {\n ImageFormatEnums,\n MessageBeginMarkdownPayload,\n MessageBeginTextPayload,\n MessageCompositePayload,\n MessageCustomPayload,\n MessageEndMarkdownPayload,\n MessageEndTextPayload,\n MessageFilePayload,\n MessageGuidePayload,\n MessageHtmlPayload,\n MessageImagePayload,\n MessageMarkdownPayload,\n MessageNewsPayload,\n MessageNewsPayloadArticle,\n MessageNewsSubTypeEnums,\n MessageOrderPayload,\n MessagePayloadBase,\n MessageProductPayload,\n MessageProductPayloadAirTicketsBody,\n MessageProductPayloadAirTicketsItem,\n MessageProductPayloadAirTicketsRequirement,\n MessageProductPayloadBodyBase,\n MessageProductPayloadBodyBaseOfMessageProductPayloadAirTicketsRequirementAndMessageProductPayloadAirTicketsItem,\n MessageProductPayloadBodyBaseOfMessageProductPayloadHotelRequirementAndMessageProductPayloadHotelItem,\n MessageProductPayloadBodyBaseOfMessageProductPayloadVisaRequirementAndMessageProductPayloadVisaItem,\n MessageProductPayloadHotelBody,\n MessageProductPayloadHotelItem,\n MessageProductPayloadHotelRequirement,\n MessageProductPayloadItemBase,\n MessageProductPayloadRequirementBase,\n MessageProductPayloadVisaBody,\n MessageProductPayloadVisaItem,\n MessageProductPayloadVisaRequirement,\n MessageProductTypeEnums,\n MessageTextPayload,\n MessageTypeEnums\n} from 'yqf-feifei-js-message-payload-types';\n//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v14.7.0.0 (NJsonSchema v11.6.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\nexport class ApiClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {\n this.http = http ? http : { fetch: globalThis.fetch };\n this.baseUrl = baseUrl ?? \"/api\";\n }\n\n /**\n * 生成上传签名\n */\n assetGenerateUploadSign(input: GenerateUploadSignInput): Promise<GenerateUploadSignResult> {\n let url_ = this.baseUrl + \"/asset/generateUploadSign\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processAssetGenerateUploadSign(_response);\n });\n }\n\n protected processAssetGenerateUploadSign(response: Response): Promise<GenerateUploadSignResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GenerateUploadSignResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<GenerateUploadSignResult>(null as any);\n }\n\n /**\n * 发送消息\n */\n aiSessionSendMessage(input: AISessionRobotSendMessageInput): Promise<AISessionRobotSendMessageResult> {\n let url_ = this.baseUrl + \"/robots/aiSession/sendMessage\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processAiSessionSendMessage(_response);\n });\n }\n\n protected processAiSessionSendMessage(response: Response): Promise<AISessionRobotSendMessageResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as AISessionRobotSendMessageResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<AISessionRobotSendMessageResult>(null as any);\n }\n\n /**\n * 发送消息\n */\n botSessionSendMessage(input: BotSendMessageInput): Promise<BotSendMessageResult> {\n let url_ = this.baseUrl + \"/robots/botSession/sendMessage\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processBotSessionSendMessage(_response);\n });\n }\n\n protected processBotSessionSendMessage(response: Response): Promise<BotSendMessageResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as BotSendMessageResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<BotSendMessageResult>(null as any);\n }\n\n /**\n * 查询机器人\n */\n robotFind(input: FindRobotsInput): Promise<FindRobotsResult> {\n let url_ = this.baseUrl + \"/robots/robot/find\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processRobotFind(_response);\n });\n }\n\n protected processRobotFind(response: Response): Promise<FindRobotsResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as FindRobotsResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<FindRobotsResult>(null as any);\n }\n\n /**\n * 发送消息\n */\n sessionSendMessage(input: RobotSendMessageInput): Promise<RobotSendMessageResult> {\n let url_ = this.baseUrl + \"/robots/session/sendMessage\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processSessionSendMessage(_response);\n });\n }\n\n protected processSessionSendMessage(response: Response): Promise<RobotSendMessageResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as RobotSendMessageResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<RobotSendMessageResult>(null as any);\n }\n\n /**\n * 获取用户\n */\n userGet(input: GetUserInput): Promise<GetUserResult> {\n let url_ = this.baseUrl + \"/robots/user/get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_: RequestInit = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.http.fetch(url_, options_).then((_response: Response) => {\n return this.processUserGet(_response);\n });\n }\n\n protected processUserGet(response: Response): Promise<GetUserResult> {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as GetUserResult;\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve<GetUserResult>(null as any);\n }\n}\n\nexport interface GenerateUploadSignResult {\n authorization: string;\n}\n\nexport interface GenerateUploadSignInput {\n /** 云存储服务的名称 */\n bucket: string;\n /** 请求日期时间,GMT 格式字符串 (RFC 1123),如 Wed, 29 Oct 2014 02:26:58 GMT */\n date: string;\n /** 上传参数的 Base64 编码 */\n policy: string;\n}\n\nexport interface AISessionRobotSendMessageResult {\n messageId: number;\n}\n\nexport interface AISessionRobotSendMessageInput {\n /** 会话ID */\n sessionId: number;\n /** 消息的内容 */\n payload: MessagePayloadBase;\n}\n\n/** 消息基类 */\n\n/** 消息类型枚举 */\n\n/** 文本消息 */\n\n/** 图片消息 */\n\n/** 图片类型枚举 */\n\n/** 文件消息 */\n\n/** 订单消息 */\n\n/** 意图引导 */\n\n/** HTML消息 */\n\n/** 产品消息 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/** 图文消息 */\n\n\n\n\n/** 组合消息 */\n\n\n\n\n\n\nexport interface BotSendMessageResult {\n messageId: number;\n}\n\nexport interface BotSendMessageInput {\n /** 会话ID */\n sessionId: number;\n /** 消息的内容 */\n payload: MessagePayloadBase;\n}\n\nexport interface FindRobotsResult {\n robots: Robot[];\n totalResults: number;\n}\n\n/** 机器人 */\nexport interface Robot {\n robotId: string;\n /** 机器人名称 */\n robotName: string;\n /** 封面图片地址(打错单词了,就这样吧 -_-!) */\n converUrl?: string | undefined;\n /** 连接模式 */\n connectionType: RobotConnectionTypeEnums;\n /** 回调配置 */\n callbackConfig?: RobotCallbackConfig | undefined;\n /** 长连接配置 */\n persistentConfig?: RobotPersistentConfig | undefined;\n /** 机器人各项配置参数 */\n parameters?: RobotParameters | undefined;\n /** 备注 */\n remark?: string | undefined;\n /** 机器人参数 */\n arguments?: string | undefined;\n /** 创建时间 */\n createTime: Date;\n /** 是否推荐 */\n isRecommended: boolean;\n /** 是否默认 */\n isDefault: boolean;\n /** 状态 */\n status: RobotStatusEnums;\n /** 欢迎语 */\n greeting?: string | undefined;\n /** 超时时间 */\n timeout: number;\n /** 是否启用默认提示词 */\n enableCommonPrompt: boolean;\n /** 标签列表 */\n tags?: string[] | undefined;\n}\n\nexport type RobotConnectionTypeEnums = \"Callback\" | \"Persistent\";\n\nexport interface RobotCallbackConfig {\n /** 必须以http://或https://开头 */\n url: string;\n /** 消息加密密钥由43位字符构成,可随机修改,字符范围为 A-Z, a-z, 0-9 */\n encodingAESKey: string;\n /** 必须为字母或数字,长度在3-32字符 */\n token: string;\n}\n\nexport interface RobotPersistentConfig {\n /** 密钥 */\n secret: string;\n}\n\nexport interface RobotParameters {\n /** 文件上传配置 */\n fileUpload?: RobotParametersFileUpload | undefined;\n}\n\nexport interface RobotParametersFileUpload {\n /** 图片设置 当前仅支持图片类型:png, jpg, jpeg, webp, gif */\n image?: RobotParametersFileUploadImage | undefined;\n}\n\nexport interface RobotParametersFileUploadImage {\n /** 是否开启 */\n enabled: boolean;\n /** 图片数量限制,默认 3 */\n numberLimits?: number | undefined;\n /** 传递方式列表,目前仅支持 local_file */\n transferMethods?: FileUploadImageTransferMethodEnums[] | undefined;\n}\n\nexport type FileUploadImageTransferMethodEnums = \"LocalFile\";\n\n/** 机器人状态枚举 */\nexport type RobotStatusEnums = \"Activate\" | \"Deactivated\";\n\nexport interface FindRobotsInput {\n /** 筛选器 */\n filter?: FindRobotsFilter | undefined;\n /** 返回第一页的数据(默认 0) */\n pageNo?: number | undefined;\n /** 每页返回多少条数据(默认 20,最大不超过 50) */\n pageSize?: number | undefined;\n}\n\nexport interface FindRobotsFilter {\n /** 机器人名称 */\n robotName?: string | undefined;\n /** 是否推荐 */\n isRecommended?: boolean | undefined;\n /** 状态 */\n status?: RobotStatusEnums | undefined;\n}\n\nexport interface RobotSendMessageResult {\n messageId: number;\n}\n\nexport interface RobotSendMessageInput {\n /** 会话Id */\n sessionId: number;\n /** 消息的内容 */\n payload: MessagePayloadBase;\n}\n\nexport interface GetUserResult {\n user?: User | undefined;\n}\n\nexport interface User {\n /** 用户ID */\n userId: string;\n /** 昵称 */\n nickName: string;\n /** 站点ID */\n siteId: string;\n /** 查询时有值 */\n siteName?: string | undefined;\n /** 外部ID */\n foreignId: string;\n /** 头像地址 */\n faceUrl?: string | undefined;\n /** 性别 */\n gender: GenderEnums;\n /** 手机号码 */\n mobile?: string | undefined;\n /** 邮箱 */\n email?: string | undefined;\n /** 备注 */\n remark?: string | undefined;\n /** 创建时间 */\n createTime: Date;\n /** 更新时间 */\n updateTime?: Date | undefined;\n /** 首次会话时间 */\n firstSessionTime?: Date | undefined;\n /** 最后一次会话时间 */\n lastSessionTime?: Date | undefined;\n /** 会话次数 */\n sessionCount: number;\n /** 状态 */\n status: UserStatusEnums;\n}\n\n/** 性别枚举 */\nexport type GenderEnums = \"Unset\" | \"Male\" | \"Female\";\n\n/** 用户状态枚举 */\nexport type UserStatusEnums = \"Activate\" | \"Deactivated\";\n\nexport interface GetUserInput {\n /** 用户ID(与 SiteId + ForeignId 必填其一) */\n userId?: string | undefined;\n /** 站点ID(如果不填 UserId,则必填 SiteId+ForeignId) */\n siteId?: string | undefined;\n /** 外部ID(如果不填 UserId,则必填 SiteId+ForeignId) */\n foreignId?: string | undefined;\n}\n\nexport class ApiException extends Error {\n override message: string;\n status: number;\n response: string;\n headers: { [key: string]: any; };\n result: any;\n\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\n super();\n\n this.message = message;\n this.status = status;\n this.response = response;\n this.headers = headers;\n this.result = result;\n }\n\n protected isApiException = true;\n\n static isApiException(obj: any): obj is ApiException {\n return obj.isApiException === true;\n }\n}\n\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\n if (result !== null && result !== undefined)\n throw result;\n else\n throw new ApiException(message, status, response, headers, null);\n}","import { createHmac } from \"node:crypto\";\nimport { ApiClient } from \"./ApiClient.js\";\nimport type { MessageMarkdownPayload, MessagePayloadBase } from \"yqf-feifei-js-message-payload-types\";\nimport type { SessionType } from \"./interface.js\";\n\n// ReplyPayload 是 OpenClaw 内部类型,用 inline 描述避免深层依赖\ninterface ReplyPayload {\n text?: string;\n mediaUrl?: string;\n mediaUrls?: string[];\n}\n\n// ============================================================================\n// 认证 Token(与 SignalR 保持一致)\n// ============================================================================\n\nfunction buildToken(botId: string, secret: string): string {\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const signature = createHmac(\"sha256\", secret)\n .update(`${botId}:${timestamp}`)\n .digest(\"hex\");\n return Buffer.from(`${botId}:${timestamp}:${signature}`).toString(\"base64\");\n}\n\n// ============================================================================\n// ReplyPayload → MessagePayloadBase 转换\n// ============================================================================\n\nfunction toFeiFeiPayload(payload: ReplyPayload): MessagePayloadBase {\n // 优先图片\n const imageUrl = payload.mediaUrl ?? payload.mediaUrls?.[0];\n if (imageUrl) {\n return { type: \"Image\", url: imageUrl } as MessagePayloadBase;\n }\n // 文本(含 markdown,统一当文本发送)\n const textPayload: MessageMarkdownPayload = {\n type: \"Markdown\",\n markdown: payload.text ?? \"\",\n };\n return textPayload;\n}\n\n// ============================================================================\n// 工厂函数:创建带认证的 API 实例\n// ============================================================================\n\nexport interface SendMessageResult {\n messageId: number;\n}\n\nexport interface FeiFeiApi {\n sendMessage(sessionType: SessionType, sessionId: number, payload: ReplyPayload): Promise<SendMessageResult>;\n}\n\nexport function createFeiFeiApi(apiUrl: string, botId: string, secret: string): FeiFeiApi {\n const client = new ApiClient(apiUrl, {\n fetch: (url, init) => {\n const urlWithRobotId = new URL(url as string);\n urlWithRobotId.searchParams.set(\"robot_id\", botId);\n const headers = new Headers(init?.headers as HeadersInit | undefined);\n headers.set(\"Authorization\", `Bearer ${buildToken(botId, secret)}`);\n return globalThis.fetch(urlWithRobotId.toString(), { ...init, headers });\n },\n });\n\n return {\n async sendMessage(sessionType, sessionId, payload) {\n const feifeiPayload = toFeiFeiPayload(payload);\n switch (sessionType) {\n case \"Session\":\n return client.sessionSendMessage({ sessionId, payload: feifeiPayload });\n case \"AISession\":\n return client.aiSessionSendMessage({ sessionId, payload: feifeiPayload });\n case \"BotSession\":\n return client.botSessionSendMessage({ sessionId, payload: feifeiPayload });\n default:\n throw new Error(`Unsupported session type: ${sessionType}`);\n }\n },\n };\n}\n","import type { ChannelPlugin, OpenClawConfig } from \"openclaw/plugin-sdk/core\";\nimport { CHANNEL_ID, DEFAULT_ACCOUNT_ID, DEFAULT_HUB_URL, DEFAULT_API_URL } from \"./const.js\";\nimport { monitorFeiFei, getSessionType } from \"./monitor.js\";\nimport type { FeiFeiChannelConfig, ResolvedFeiFeiAccount } from \"./interface.js\";\nimport { getFeiFeiRuntime } from \"./runtime.js\";\nimport { createFeiFeiApi, type FeiFeiApi } from \"./api.js\";\n\nlet _api: FeiFeiApi | null = null;\n\nfunction resolveAccount(cfg: OpenClawConfig): ResolvedFeiFeiAccount {\n const ch = (cfg.channels?.[CHANNEL_ID] ?? {}) as FeiFeiChannelConfig;\n return {\n accountId: DEFAULT_ACCOUNT_ID,\n hubUrl: ch.hubUrl ?? DEFAULT_HUB_URL,\n apiUrl: ch.apiUrl ?? DEFAULT_API_URL,\n botId: ch.botId ?? \"\",\n secret: ch.secret ?? \"\",\n enabled: ch.enabled !== false,\n };\n}\n\nexport const feifeiPlugin: ChannelPlugin<ResolvedFeiFeiAccount> = {\n id: CHANNEL_ID,\n meta: {\n id: CHANNEL_ID,\n label: \"飞飞 IM\",\n selectionLabel: \"飞飞 IM (FeiFei)\",\n detailLabel: \"飞飞 IM 插件\",\n docsPath: `/channels/${CHANNEL_ID}`,\n docsLabel: CHANNEL_ID,\n blurb: \"飞飞 IM OpenClaw 插件\",\n quickstartAllowFrom: true,\n },\n pairing: {\n idLabel: \"userId\",\n normalizeAllowEntry: (e) => e.replace(new RegExp(`^${CHANNEL_ID}:`), \"\").trim(),\n notifyApproval: async () => {},\n },\n capabilities: {\n chatTypes: [\"direct\"],\n reactions: false,\n threads: false,\n media: false,\n nativeCommands: false,\n blockStreaming: false,\n },\n reload: { configPrefixes: [`channels.${CHANNEL_ID}`] },\n config: {\n listAccountIds: () => [DEFAULT_ACCOUNT_ID],\n resolveAccount: (cfg) => resolveAccount(cfg),\n defaultAccountId: () => DEFAULT_ACCOUNT_ID,\n setAccountEnabled: ({ cfg, enabled }) => {\n const ch = (cfg.channels?.[CHANNEL_ID] ?? {}) as FeiFeiChannelConfig;\n return { ...cfg, channels: { ...cfg.channels, [CHANNEL_ID]: { ...ch, enabled } } };\n },\n deleteAccount: ({ cfg }) => {\n const next = { ...(cfg.channels ?? {}) };\n delete (next as Record<string, unknown>)[CHANNEL_ID];\n return { ...cfg, channels: next };\n },\n isConfigured: (a) => Boolean(a.botId?.trim() && a.secret?.trim()),\n describeAccount: (a) => ({\n accountId: a.accountId,\n enabled: a.enabled,\n configured: Boolean(a.botId?.trim() && a.secret?.trim()),\n hubUrl: a.hubUrl,\n botId: a.botId,\n }),\n resolveAllowFrom: () => [],\n formatAllowFrom: ({ allowFrom }) => allowFrom.map(String).filter(Boolean),\n },\n security: {\n resolveDmPolicy: () => ({\n policy: \"open\" as const,\n allowFrom: [\"*\"],\n allowFromPath: `channels.${CHANNEL_ID}.`,\n approveHint: `openclaw pairing approve ${CHANNEL_ID} <code>`,\n }),\n collectWarnings: () => [],\n },\n messaging: {\n normalizeTarget: (t) => t.trim() || undefined,\n targetResolver: { looksLikeId: (id) => Boolean(id?.trim()), hint: \"<userId>\" },\n },\n directory: {\n self: async () => null,\n listPeers: async () => [],\n listGroups: async () => [],\n },\n outbound: {\n deliveryMode: \"gateway\",\n sendText: async ({ to, text }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtime = getFeiFeiRuntime() as any;\n const sessionId = to.replace(new RegExp(`^${CHANNEL_ID}:`), \"\");\n const sessionType = getSessionType(sessionId);\n\n runtime.log?.(\n `[feifei] → proactive sessionId=${sessionId} text=${(text ?? \"\").slice(0, 60)}`,\n );\n\n let messageId = `p-${Date.now()}`;\n if (_api && sessionType) {\n const result = await _api.sendMessage(sessionType, Number(sessionId), { text });\n messageId = String(result.messageId);\n } else {\n runtime.error?.(`[feifei] proactive: sessionId=${sessionId} not found in registry`);\n }\n\n return { channel: CHANNEL_ID, messageId, chatId: sessionId };\n },\n sendFormattedMedia: async ({ to, text, mediaUrl }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const runtime = getFeiFeiRuntime() as any;\n const sessionId = to.replace(new RegExp(`^${CHANNEL_ID}:`), \"\");\n const sessionType = getSessionType(sessionId);\n\n runtime.log?.(\n `[feifei] → proactive media sessionId=${sessionId} url=${mediaUrl ?? \"\"}`,\n );\n\n let messageId = `p-${Date.now()}`;\n if (_api && sessionType) {\n const result = await _api.sendMessage(sessionType, Number(sessionId), { text, mediaUrl });\n messageId = String(result.messageId);\n } else {\n runtime.error?.(`[feifei] proactive media: sessionId=${sessionId} not found in registry`);\n }\n\n return { channel: CHANNEL_ID, messageId, chatId: sessionId };\n },\n },\n status: {\n defaultRuntime: { accountId: DEFAULT_ACCOUNT_ID, running: false, lastStartAt: null, lastStopAt: null, lastError: null },\n collectStatusIssues: () => [],\n buildChannelSummary: ({ snapshot }) => ({\n configured: true,\n running: snapshot.running ?? false,\n lastStartAt: snapshot.lastStartAt ?? null,\n lastStopAt: snapshot.lastStopAt ?? null,\n lastError: snapshot.lastError ?? null,\n }),\n probeAccount: async () => ({ ok: true, status: 200 }),\n buildAccountSnapshot: ({ account, runtime }) => ({\n accountId: account.accountId,\n enabled: account.enabled,\n configured: Boolean(account.botId?.trim() && account.secret?.trim()),\n running: runtime?.running ?? false,\n lastStartAt: runtime?.lastStartAt ?? null,\n lastStopAt: runtime?.lastStopAt ?? null,\n lastError: runtime?.lastError ?? null,\n }),\n },\n gateway: {\n startAccount: async (ctx) => {\n const { account, cfg, abortSignal, runtime } = ctx;\n _api = createFeiFeiApi(account.apiUrl, account.botId, account.secret);\n await monitorFeiFei({\n hubUrl: account.hubUrl,\n botId: account.botId,\n secret: account.secret,\n accountId: account.accountId,\n cfg,\n abortSignal,\n runtime,\n }, _api);\n },\n logoutAccount: async () => ({ cleared: false, envToken: false, loggedOut: true }),\n },\n};\n","import { feifeiPlugin } from \"./src/channel.js\";\nimport { setFeiFeiRuntime } from \"./src/runtime.js\";\n\nconst plugin = {\n id: \"feifei-openclaw-plugin\",\n name: \"飞飞 IM\",\n description: \"飞飞 IM OpenClaw 插件\",\n configSchema: {\n type: \"object\" as const,\n additionalProperties: false,\n properties: {},\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(api: any) {\n setFeiFeiRuntime(api.runtime);\n api.registerChannel({ plugin: feifeiPlugin });\n },\n};\n\nexport default plugin;\n"],"names":["buildToken","createHmac","signalR"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED