@
secretys 大概 copy 下:
// 手机端 Termux 服务
@
Controller('termux')
export class TermuxController {
constructor(private readonly termuxService: TermuxService) {}
// ...
@
Public()
@
Get('sms')
sms() {
return this.termuxService.sms()
}
// ...
}
@
Injectable()
export class TermuxService {
constructor() {}
// ...
async sms() {
const sms = await new Promise((resolve, reject) => {
try {
exec('termux-sms-list', (err, out) => {
if (err) return
const list = JSON.parse(out) || []
const sms = list
.filter((sms: { body: string }) => {
return ['验证码', '动态密码'].some((s) => sms.body.includes(s))
})
.at(0)
resolve(sms)
})
} catch (error) {
reject(null)
}
})
return JSON.stringify({ sms })
}
// ...
}
// 浏览器插件代码注入,具体注入时机和方式自己斟酌
document.addEventListener('dblclick', async () => {
const verifyCode = await fetch('https://your-server/api/termux/sms')
.then(res => res.json())
.then(data => data.body.match(/[0-9]{4,8}/)[0])
verifyCode && Array.from(document.querySelectorAll('input'))
.filter(input => Array.from(input.attributes).some(attr => attr.value.includes('验证码')))
.forEach(input => input.value = verifyCode)
})