{"_id":"@alicloud/xconsole-rc-risk","_rev":"3-862886ddafe25975ca36a5d1cb8db342","name":"@alicloud/xconsole-rc-risk","dist-tags":{"latest":"1.0.0-beta.1"},"versions":{"1.0.0-beta.1":{"name":"@alicloud/xconsole-rc-risk","version":"1.0.0-beta.1","description":"控制台风控组件","main":"lib/index.js","license":"MIT","homepage":"https://github.com/aliyun/alibabacloud-console-design","repository":{"type":"git","url":"http://gitlab.alibaba-inc.com/xconsole/xconsole.git"},"bugs":{"url":"https://github.com/aliyun/alibabacloud-console-design/issues"},"author":"","publishConfig":{"registry":"http://registry.npm.alibaba-inc.com"},"engines":{"node":">=7.6.0"},"scripts":{"prepublish":"npm run clean && npm run build && npm run babel && npm run babel:esm","babel":"breezr build --engine babel","babel:esm":"breezr build --engine babel --es-module","build":"breezr build --engine webpack","storybook":"breezr start-storybook","clean":"rm -rf es build lib yarn.lock","lint":"eslint src/"},"dependencies":{"@alicloud/xconsole-action-creator":"^1.0.0-beta.1","@alicloud/console-components-intl":"^1.0.5","@alicloud/xconsole-rc-base-link":"^1.0.0-beta.1","@alicloud/xconsole-base-service":"^1.0.0-beta.1","babel-runtime":"^6.26.0","lodash":"^4.17.11","rc-form":"^2.2.1","reselect":"^3.0.1","warning":"^4.0.2"},"peerDependencies":{"@alicloud/console-components":"^1.0.20","prop-types":"^15.x","react":"^16.x","react-dom":"^16.x"},"devDependencies":{"@alicloud/console-toolkit-cli":"^1.0.0","@alicloud/console-toolkit-preset-wind-component":"^1.0.0","@alicloud/console-components":"^1.0.20","babel-eslint":"^8.2.3","dva":"^2.4.0","dva-loading":"^2.0.5","dva-no-router":"^1.2.0","eslint":"^4.19.1","eslint-config-ali":"^3.1.0","eslint-plugin-import":"^2.11.0","eslint-plugin-jsx-a11y":"^6.0.3","eslint-plugin-react":"^7.7.0","history":"^4.7.2","prop-types":"^15.6.1","react":"^16.3.0","react-dom":"^16.3.0"},"_id":"@alicloud/xconsole-rc-risk@1.0.0-beta.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-XoO5gxITI1rd8D3c904/tag7ZsYZMKMkbZtzv6yP0EOOQfCq1QOGYj6td3NHvTZ6ePenX3a71ecKdXblvIPk+w==","shasum":"6bbaebee3955c09821421dbc35c0f0d4a8f22a48","tarball":"https://registry.npmjs.org/@alicloud/xconsole-rc-risk/-/xconsole-rc-risk-1.0.0-beta.1.tgz","fileCount":4,"unpackedSize":14217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec2bcCRA9TVsSAnZWagAABwwP/3UMwYLQQFPkzlMnv4K2\nFEH736qmt5xMCp3e2Iecxf41DPYtACt4eZJWDDksBLgmrPp380QEN/HFoK91\n9pWgXqT/T5SA+iNmAP3r8Ew/JxIRPzTgqHusOx0UBqQlotwyTWHsVeFr7TCN\n+fPihKqsu1n8qJv25/UMPB3MMMKrO6YrCuFO9WbT2h5VW7jizitPS5QnU0Xl\n83CoZO3c1xjD8ycS6VyfGQoTAj0qAc//J6p+XYY7M7kbjUG8XfH0lKQvrZdq\n6c67Dr/WpMzddovH/MckIGjbdLdwrE5qhiwdDJLL5pfQZN0rauHjdVjayOmx\nS8dK6K0F7pPo6272s/ucciJuB6uqrVHVNmWhmnchO8cMimhhIUoVr/bs+602\ncxYv924/1NLRHn5D3wWIaRjt0GDhvXOOSFB7Mww7iWcqoNEGbXu1cwEoZuMm\nNRXtj6IIyGxjireZbplqLVXexveD5HhgARHBFJ69cEdkZO/45GLApiRjO0sc\nk9kQbGT36K6e6Dd9JJJ2GiUga+Zwtfejre9CG+uRR1gtqU2gfKV/ai9/NMur\nJyNYktwNDjlbZjeSsRNHi4m5ilHULt0IG9XlegFuswfCEEkLxpK+WpnPY+t0\nzu5O3ULCUsVSlxTlrr67k/mi3tNA6O7jdSwYNTtEBfiY8U+LwW1fWVPO7a0P\nsA1D\r\n=MP24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCubSBmNrYTHfw6JhR9Cf1hry9mBU4IVB7woiEPAuVbnAIgX90b8Y3Rsuq3iHPfuoWLIMNTho+TbcI4y1ef0Lrsekc="}]},"maintainers":[{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"},{"name":"libeileia_ly","email":"yanli_wx_test@126.com"},{"name":"umengplus","email":"gongzhen.gz@alibaba-inc.com"},{"name":"zack-lin","email":"linzegia@gmail.com"},{"name":"cici503","email":"191984292@qq.com"},{"name":"tanhe123","email":"xiayule148@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"vangie","email":"duwan@live.com"},{"name":"aleelock","email":"aleelock@126.com"},{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"humanhuang","email":"halfthink@gmail.com"},{"name":"ls_nodejs","email":"ls_huster@163.com"}],"_npmUser":{"name":"console-fe","email":"console-fe@alibabacloud.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/xconsole-rc-risk_1.0.0-beta.1_1584621276452_0.8547662773422398"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-19T12:34:36.231Z","1.0.0-beta.1":"2020-03-19T12:34:36.545Z","modified":"2022-04-04T12:58:59.708Z"},"maintainers":[{"email":"console-fe@alibabacloud.com","name":"console-fe"},{"email":"sdk-team@alibabacloud.com","name":"aliyunsdkteam"},{"email":"cpj1106@gmail.com","name":"pagecao"},{"email":"fengmk2@gmail.com","name":"fengmk2"},{"email":"shyvo1987@gmail.com","name":"jacksontian"}],"description":"控制台风控组件","homepage":"https://github.com/aliyun/alibabacloud-console-design","repository":{"type":"git","url":"http://gitlab.alibaba-inc.com/xconsole/xconsole.git"},"bugs":{"url":"https://github.com/aliyun/alibabacloud-console-design/issues"},"license":"MIT","readme":"# @ali/wind-rc-risk\n\n控制台风控组件\n\n## Installation\n\n```\ntnpm i -S @ali/wind-rc-risk\n```\n\n## Peer Dependencies\n\n使用风控组件必须依赖以下的 package ，在使用之前请更新你的依赖库\n\n- react `^16.4.2`\n\n  从 react@15.x 升级到 react@16.x 并不会有实质性的 BREAK CHANGE ，请放心升级\n\n- dva `^2.x` | dva-react-router-3 `latest`\n\n  dva/dva-wind 由于使用了较老版本的 react-router ，导致 PropTypes 报错，请更新到最新版本的 dva 或者 dva-react-router-3\n\n- dva-loading `latest`\n\n  由于风控组件中使用了 dva-loading 来管理请求状态，请安装 dva-loading 以获得最佳的用户体验\n\n## Quick Start\n\n### 注册风控组件的 model\n\n**src/app.js**\n\n```\nimport { model as riskModel } from '@ali/wind-rc-risk'\n...\napp.model(riskModel)\n```\n\n### 部署风控组件\n\n**src/routes/App/index.js**\n\n> 或其他应用根节点组件，只要确定在应用生命周期内该节点不会被 unmount 即可，**只需要部署一次**\n>\n\n```\nimport Risk from '@ali/wind-rc-risk'\n...\n\nconst App = () => (\n  <div>\n    <Risk />\n    ...\n  </div>\n)\n```\n\n### 封装需要进行风控的接口\n\n当使用 `@ali/wind-service` 类库时，使用 `createService` 创建的接口在请求时，如果触发风控，都会抛出一个特殊的 Error\n\n`@ali/wind-rc-risk` 中的 `capture` 函数用于封装一个请求函数，并在其抛出对应 Error 的时候捕获并触发风控流程\n\n```\nimport { capture } from '@ali/wind-rc-risk'\n...\n\nconst deleteInstanceWithRisk = capture(deleteInstance)\n```\n\n### 自定义错误捕获\n\n如果你没有使用 `@ali/wind-service` 创建请求接口，请自行封装自己的请求函数，在触发风控的时候抛出一个可以被识别的 Error\n\n```\nconst yourService = async (options) => {\n  await resp = axios(options)\n  if (resp.data.code === 'FoundRiskAndDoubleConfirm') {\n    const err = new Error('FoundRiskAndDoubleConfirm')\n    err.isRiskError = true\n    throw err\n  }\n\n  return resp\n}\n```\n\n`capture` 函数的第二个参数可以对错误进行自定义捕获\n\n```\nconst withRiskService = capture(yourService, {\n  isRiskError(err) {\n    return err.isRiskError\n  },\n})\n```\n\n在以短信和邮件方式二次验证时，需要向对应的客户端发送验证码，发送验证码时可能会发生错误，`capture` 会捕获对应错误并渲染错误信息。与 `isRiskError` 类似，你可以对该错误进行特征识别\n\n```\nconst withRiskService = capture(yourService, {\n  isVerifyCodeError(err) {\n    return err.isVerifyCodeError\n  },\n})\n```\n\n在自定义的请求返回风控数据后，你还需要将风控数据映射到风控组件上\n\n```\nconst withRiskService = capture(yourService, {\n  mapRiskErrorToActionPayload(err) {\n    const {\n      response: {\n        codeType,\n        mteeCode,\n        verifyDetail,\n        verifyType,\n      } = {},\n    } = err\n\n    return {\n      type: verifyType,\n      detail: verifyDetail,\n      codeType,\n      mteeCode,\n    }\n  },\n})\n```\n\n在 effects 里调用已经被 capture 处理过的异步调用函数\n\n```\nexport default {\n  effects: {\n    doSomething: function* ({ payload }, { call }) {\n      const result = yield call(withRiskService, payload)\n    },\n  },\n}\n```\n\n\n### 高级应用\n\n由于 capture 是一个函数，请尽开脑洞创建属于你自己的封装\n\n## APIs\n\nYou don't need this\n\n\n\n","readmeFilename":"README.md"}