Files
clawd/lib/channel/weixin.js
2026-05-14 21:47:27 +08:00

51 lines
1.6 KiB
JavaScript

'use strict';
/**
* channel.weixin — WeChat login via box-side WeChat SDK.
*
* method: login
* params : { callId, timeout, emit }
* returns: abort function (called on cancel)
*
* emit(msg) sends a sys-call reply back to VPS:
* action:'event', event:'qrcode', data:{ url, expire, index }
* action:'progress', event:'scanned', data:{ status:'waiting_confirm' }
* action:'finish', event:'success', data:{ wxid }
* action:'finish', event:'failed', code, message
*
* TODO: integrate with a concrete WeChat SDK (wechaty / itchat / custom binary).
*/
const log = require('../logger');
function login({ callId, timeout = 180, emit }) {
log.info('weixin', `login requested callId=${callId} timeout=${timeout}`);
// TODO: start WeChat SDK, get QR code, watch for scan / confirm / expire
// Example skeleton:
//
// const bot = startWechatyBot();
//
// bot.on('scan', (url, status) => {
// emit({ action: 'event', event: 'qrcode', data: { url, expire: 30, index: ++qrIndex } });
// });
// bot.on('login', (user) => {
// emit({ action: 'finish', event: 'success', data: { wxid: user.id } });
// });
// bot.on('error', (err) => {
// emit({ action: 'finish', event: 'failed', code: 1001, message: err.message });
// });
// bot.start();
//
// return () => bot.stop(); // ← abort function
// Temporary stub: immediately report not implemented
emit({ action: 'finish', event: 'failed', code: 501, message: 'weixin SDK not implemented' });
return () => {
log.info('weixin', `login cancelled callId=${callId}`);
};
}
module.exports = { login };