# ldesign-captcha **Repository Path**: ldesign-v1/ldesign-captcha ## Basic Information - **Project Name**: ldesign-captcha - **Description**: ????,????/??/???? - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # @ldesign/captcha 行为式验证码组件库。当前仓库包含两个可发布包和一个演示站: - `packages/core` -> `@ldesign/captcha` - `packages/vue` -> `@ldesign/captcha-vue` - `playground` -> 基于 Vite 的示例与文档站 本轮整理后,仓库已经形成完整的“核心运行时 + Vue 适配层 + 文档/示例站”结构,支持本地 Mock 和后端 API 双模式联调。 ## 当前能力 - 13 种题型已经纳入统一示例矩阵:`slider`、`jigsaw`、`click-word`、`icon-select`、`rotate`、`smart`、`inference-puzzle`、`word-order`、`space-inference`、`idiom-click`、`icon-click`、`math-captcha`、`color-select` - `@ldesign/builder` 负责 `core` 与 `vue` 包构建 - `playground` 直接使用 Vite 构建,避免依赖异常的 launcher 工具链阻塞演示站发布 - `core` 支持轨迹采样、国际化、音效反馈、Mock 数据、主题变量与插件式题型扩展 - `vue` 提供 `LCaptcha` / `Captcha` 组件和组合式 `useCaptcha` ## 本轮已完成的修复与优化 - 修复 `@ldesign/captcha-vue` 构建外部化错误,避免把 `@ldesign/captcha` 错误打包进 Vue 包 - 修复 `vue` 包发布元数据与真实产物不一致的问题,去掉不存在的 `dist` / `cjs` 导出并收敛为真实可用入口 - 补齐 `math-captcha` 与 `color-select` 在 `core`、`vue` 和 `playground` 的贯通支持 - 将音效反馈真正接入 `CaptchaValidator` - 用强类型 `EventEmitter` 收紧事件系统,减少 `any` 扩散 - 对轨迹采样增加最小时间间隔与位移过滤,降低无效点采集和内存抖动 - 补齐 `packages/vue` 与 `playground` 的 TypeScript 路径映射,保证源码态 `noEmit` 校验可通过 - 重做 `playground`,把题型说明、接入代码、后端协议和后续规划集中到统一的实验室式界面 ## 题型分层 ### 基础交互 - `slider`: 低摩擦、适合登录注册和移动端高频入口 - `jigsaw`: 视觉参与感强,适合较高风险链路 - `rotate`: 单手交互友好,适合品牌化素材 ### 语义题型 - `click-word`: 中文语义识别,适合内容与社区场景 - `icon-select`: 国际化友好,适合后台和工具型产品 - `word-order`: 词序排序,适合教育与内容产品 - `idiom-click`: 成语拼接,适合本地化中文场景 - `icon-click`: 多图标顺序点击,适合跨语言产品 - `math-captcha`: 无图依赖的轻量输入题型 - `color-select`: 轻量视觉题型,适合简洁品牌页 ### 策略题型 - `smart`: 行为采样后按风险直通或降级挑战 - `inference-puzzle`: 更强调观察与关系推理的高风险题型 - `space-inference`: 同时考验路径规划与轨迹自然度 ## 快速开始 ### 原生 JavaScript ```ts import { CaptchaValidator, SliderPlugin } from '@ldesign/captcha' const captcha = new CaptchaValidator({ container: '#captcha', type: 'slider', plugins: [SliderPlugin], endpoints: { init: '/api/captcha/ldesign/init', verify: '/api/captcha/ldesign/verify', }, slider: { style: 'embed', text: '向右滑动完成验证', }, onSuccess(token) { console.log('验证通过:', token) }, onFailure(error) { console.error('验证失败:', error.message) }, }) ``` ### Vue 3 ```vue ``` ## 核心接入约定 ### 前端职责 - 渲染题型 UI - 收集点击、拖拽、停顿、时长等交互数据 - 统一调用 `init` / `verify` 接口 - 维护重试、超时、成功、失败和状态切换 ### 后端职责 - 根据题型返回对应素材与元数据 - 校验交互结果与行为轨迹 - 控制题目有效期、重试策略和风控评分 - 返回最终业务 token 或失败信息 ### 推荐接口 ```http GET /api/captcha/ldesign/init POST /api/captcha/ldesign/verify ``` 示例 `verify` 请求体: ```json { "captchaId": "captcha_xxx", "token": "once_token_xxx", "type": "slider", "data": { "x": 184, "duration": 920, "trail": [{ "x": 0, "y": 0, "t": 0 }, { "x": 184, "y": 1, "t": 920 }] }, "timestamp": 1710000000000, "sign": "sha256(...)" } ``` ## 包说明 ### `@ldesign/captcha` - 提供 `CaptchaValidator` - 提供全部内置题型插件 - 提供 `Mock`、`track`、`sound`、`feedback`、`i18n`、`design-tokens` - 适合原生 JavaScript、Vue、后续 React/Web Components 适配层复用 ### `@ldesign/captcha-vue` - 提供 `LCaptcha` 与 `Captcha` - 提供 `useCaptcha` - 透传 `core` 主要配置项和事件 - 当前以 ESM 入口为准,避免导出不存在的 `dist` / `cjs` 产物 ### `playground` - 首页展示架构、优化结果和后续路线 - 文档页展示核心 API、后端契约与构建命令 - 实验页统一承载 13 种题型的说明、代码和交互示例 - 同时支持 Mock 演示和 API 联调 ## 本地开发与验证 ### 校验 `packages/core` ```bash cd packages/core pnpm exec tsc --noEmit -p tsconfig.json pnpm test -- --run pnpm build ``` ### 校验 `packages/vue` ```bash cd packages/vue pnpm exec tsc --noEmit -p tsconfig.json pnpm test -- --run pnpm build ``` ### 校验 `playground` ```bash cd playground pnpm exec tsc --noEmit -p tsconfig.json pnpm build ``` 说明: - `packages/core` 与 `packages/vue` 的 `build` 脚本通过 `@ldesign/builder` 执行 - `playground` 当前直接调用 Vite 构建脚本 - `playground/package.json` 中仍保留 `*:launcher` 备用脚本,便于后续排查工作区工具链 ## 推荐继续完善的方向 - 无障碍能力:增加音频验证码、键盘交互、色弱友好提示与更完整的 ARIA 描述 - 风险评分协议:让 `smart` 模式输出标准化风险分与降级决策,而不是仅返回单一题型 - 题型编排器:允许服务端根据风险等级动态下发题型队列 - 题库管理:为语义题型增加多语种词库、难度分层和运营配置 - 更多适配层:在 Vue 稳定后扩展 React 与 Web Components ## 项目结构 ```text captcha/ ├── packages/ │ ├── core/ │ │ └── src/ │ └── vue/ │ └── src/ ├── playground/ │ └── src/ └── README.md ``` ## License MIT