@blazes/captcha 1.0.20 → 1.0.21
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.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/type.d.ts +2 -4
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InRecord, Version } from "./type";
|
|
2
|
+
import { Language } from "./lang";
|
|
2
3
|
import { Captcha } from "./captcha";
|
|
3
4
|
declare global {
|
|
4
5
|
interface Window {
|
|
5
6
|
yh_captcha: {
|
|
6
7
|
Captcha: Captcha;
|
|
7
|
-
AppId: InRecord<typeof AppId>;
|
|
8
8
|
Version: InRecord<typeof Version>;
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
-
export { Captcha,
|
|
12
|
+
export { Captcha, Language, Version };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.yh_captcha=t():e.yh_captcha=t()}(this,(function(){return function(e){var t={};function s(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,s),a.l=!0,a.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)s.d(n,a,function(t){return e[t]}.bind(null,a));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=2)}([function(e,t,s){"use strict";var n,a,r;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.WEBVIEW="WebView",e.ACCOUNT="Account"}(n||(n={})),function(e){e.OPEN_URL="openUrl",e.CLOSE_WEBVIEW="closeWebView",e.GET_TOKEN="getToken"}(a||(a={})),function(e){e.SDK="sdk",e.UNITY="unity"}(r||(r={})),t.isAndriod=function(){return!!navigator.userAgent.match(/Android/i)},t.isInWebview=function(){return!!navigator.userAgent.match("YHSDK")},t.isIos=function(){return!!navigator.userAgent.match(/iPhone|iPad|iPod|Mac OS/i)&&"ontouchend"in document}},function(e,t,s){},function(e,t,s){"use strict";s.r(t),s.d(t,"Captcha",(function(){return g})),s.d(t,"AppId",(function(){return a})),s.d(t,"Version",(function(){return n}));const n={V1:"v1"},a={NINJA3:"ninja3"};var r=s(0);class i{constructor(e){this.config=e}request(e,t){return new Promise((s,n)=>{const{method:a,body:r}=t,i=new XMLHttpRequest;i.open(a.toLocaleUpperCase(),`${this.config.baseUrl}${e}`,!0),i.setRequestHeader("Content-type","application/json; charset=utf-8"),i.onreadystatechange=function(){if(4!==i.readyState)return;200!==i.status&&n("请求错误");const e=JSON.parse(i.responseText),{code:t,msg:a="",data:r}=e;0===t?s(r):n(a)},i.onerror=function(){n("网络错误")},i.ontimeout=function(){n("请求超时")},i.send(r?JSON.stringify(r):"")})}getCaptcha(e){return this.request(`/apis/v1/apps/${e.appId}/versions/${e.version}/captchas`,{method:"get"})}postValidate(e,t){return this.request(`/apis/v1/tokens/${e}/validate`,{method:"post",body:t})}}function o(e){return+getComputedStyle(e).left.match(/\d+/)[0]}s(1);const c="https://captcha.resource.pandadagames.com/images/",d=c+"refresh.png";let l,h;!function(e){e.HANT="hant",e.HANS="hans",e.JA="ja",e.EN="en",e.KO="ko"}(l||(l={})),function(e){e.DRAG="drag",e.LOADING="loading",e.SUCCESS="success",e.FAIL="fail",e.RETRY="retry"}(h||(h={}));const p={[l.HANS]:{[h.DRAG]:"拖动左侧滑块将图片还原",[h.LOADING]:"加载中... ",[h.SUCCESS]:"验证成功",[h.FAIL]:"加载失败,",[h.RETRY]:"请点击重试!"},[l.HANT]:{[h.DRAG]:"拖動左側滑塊將圖片還原",[h.LOADING]:"加載中... ",[h.SUCCESS]:"驗證成功",[h.FAIL]:"加載失敗,",[h.RETRY]:"請點擊重試!"},[l.JA]:{[h.DRAG]:"矢印を右にスライドしてください",[h.LOADING]:"ロード中... ",[h.SUCCESS]:"認証成功",[h.FAIL]:"ロードに失敗、",[h.RETRY]:"再度お試してください"},[l.KO]:{[h.DRAG]:"왼쪽 이미지를 끌어 그림을 복원해 주세요.",[h.LOADING]:"로드 중... ",[h.SUCCESS]:"인증 성공",[h.FAIL]:"로드 실패,",[h.RETRY]:"재시도해 주세요!"},[l.EN]:{[h.DRAG]:"Slide from left to right to complete the image",[h.LOADING]:"Uploading",[h.SUCCESS]:"Verification Successful",[h.FAIL]:"Failed to load,",[h.RETRY]:"please tap to retry!"}},u=e=>`\n <div class="dx-captcha-header">\n <img src=https://captcha.resource.pandadagames.com/images/close.png />\n </div>\n <div class="dx-captcha-body">\n <canvas></canvas>\n <img class="dx-captcha-body-slider" draggable="false" />\n <img class="dx-captcha-body-refresh" src=${d} width="16px" height="16px" />\n <img class="dx-captcha-body-logo" src=${(e=>`${c}${e}_logo.png`)(e)} width="50px" />\n <div class="dx-captcha-body-loading display-none">\n <div>\n <img class="dx-captcha-body-loading-img" src=https://captcha.resource.pandadagames.com/images/loading.gif />\n <div class="dx-captcha-body-loading-text">${p[e][h.LOADING]}</div>\n </div>\n </div>\n </div>\n <div class="dx-captcha-bar">\n <div class="dx-captcha-bar-slider"></div>\n <div class="dx-captcha-bar-progress"></div>\n <span class="dx-captcha-bar-text">\n ${p[e][h.DRAG]}\n </span>\n </div>\n`;class g{constructor(e){this.setConfig(e),this.apiInstance=new i({baseUrl:e.baseUrl}),this.initEventNames()}setConfig(e){if(!Object.values(l).includes(e.lang))throw new Error(`传入的lang ${e.lang} 不正确`);this.config=Object.assign({},e)}resetConfig(e){this.config=Object.assign(this.config,e)}initEventNames(){Object(r.isAndriod)()||Object(r.isIos)()?this.eventNames={down:"touchstart",up:"touchend",move:"touchmove"}:this.eventNames={down:"mousedown",up:"mouseup",move:"mousemove"}}initRoot(){const e=document.createElement("div");return e.classList.add("dx-captcha-root"),document.body.appendChild(e),e}show(){this.root||(this.root=this.initRoot());const e=new Promise(e=>this.resolve=e);return this.render(),e}render(){var e;this.root.innerHTML=(e=this.config.lang,`\n <div class="dx-captcha-mask"></div>\n <div class="dx-captcha-wrap">\n ${u(e)}\n </div>\n`),this.queryRef(),this.handleHeader(),this.handleBody().then(e=>{this.token=e,this.handleBar()})}queryRef(){const e=e=>this.root.querySelector(e),t=e(".dx-captcha-wrap"),s=e(".dx-captcha-header img"),n=e("canvas"),a=e(".dx-captcha-bar"),r=e(".dx-captcha-bar-slider"),i=e(".dx-captcha-body-slider"),o=e(".dx-captcha-body-refresh"),c=e(".dx-captcha-body-logo"),d=e(".dx-captcha-bar-progress"),l=e(".dx-captcha-bar-text"),h=e(".dx-captcha-body-loading");this.refs={wrapper:t,close:s,canvas:n,fragment:i,bar:a,slider:r,progress:d,infoText:l,refresh:o,logo:c,loading:h}}close(){const e=this.refs.wrapper;e.style.top="0",e.style.opacity="0",setTimeout(()=>{this.root.innerHTML=""},300)}retry(){var e;this.refs.wrapper.innerHTML=(e=this.config.lang,`\n <div class="dx-captcha-retry">\n <img class="dx-captcha-retry-img" src=https://captcha.resource.pandadagames.com/images/retry.jpeg />\n <div>${p[e][h.FAIL]}<a class="dx-captcha-retry-link">${p[e][h.RETRY]}</a></div>\n </div>\n`);this.refs.wrapper.querySelector(".dx-captcha-retry-link").addEventListener("click",()=>{this.render()})}handleHeader(){this.refs.close.addEventListener("click",()=>{this.close()})}handleBody(){return this.addRefresh(),this.drawBackground()}drawBackground(){const{refs:e,apiInstance:t,config:s}=this,{canvas:n,loading:a,fragment:r}=e;n.width=300*devicePixelRatio,n.height=150*devicePixelRatio;const i=n.getContext("2d");let o;const c=new Promise(e=>o=e);return a.classList.remove("display-none"),t.getCaptcha({appId:s.appId,version:s.version}).then(e=>{let{y:t,token:s,bgUrl:c,fgUrl:d}=e;!function(e,t){let s;const n=new Promise(e=>s=e),a=new Image;a.onload=()=>{null==t||t(a),s(a)},a.src=e}(c,e=>{a.classList.add("display-none"),i.drawImage(e,0,0,n.width,n.height),r.src=d,r.style.top=t+"px",o(s)})}).catch(()=>{this.retry()}),c}addRefresh(){const e=this.refs.refresh;e.src=d,e.addEventListener("click",()=>{this.reset()})}reset(){this.clearCanvas(),this.drawBackground().then(e=>{this.token=e});const{slider:e,progress:t}=this.refs;this.loopBar(e=>{e.style.transitionDuration="0s"}),e.style.backgroundImage="url(https://captcha.resource.pandadagames.com/images/waiting.png)",t.classList.remove("error"),t.classList.add("success")}clearCanvas(){const e=this.refs.canvas;e.getContext("2d").clearRect(0,0,e.width,e.height)}handleBar(){const{down:e,move:t,up:s}=this.eventNames,{bar:n,fragment:a,slider:r,progress:i}=this.refs,c=n.getBoundingClientRect().width-r.getBoundingClientRect().width;let d,l;const h={value:!1},p=e=>{e.preventDefault();const t=this.getClientX(e)-d+l;t>c||t<0||this.moveBar(t)},u=()=>{document.body.removeEventListener(t,p),document.body.removeEventListener(s,u);const e=o(a);this.apiInstance.postValidate(this.token,{x:e}).then(()=>{this.verifySuccess()}).catch(()=>{this.verifyFail(h)})};r.addEventListener(e,e=>{h.value||(d=this.getClientX(e),l=o(a),i.classList.add("success"),document.body.addEventListener(t,p),document.body.addEventListener(s,u))})}getClientX(e){return e.clientX||e.touches[0].clientX}verifyFail(e){e.value=!0;const{slider:t,progress:s}=this.refs;t.style.backgroundImage="url(https://captcha.resource.pandadagames.com/images/error.png)",s.classList.remove("success"),s.classList.add("error"),this.fallbackBar(),setTimeout(()=>{this.reset(),e.value=!1},500)}verifySuccess(){const{refs:e,token:t,config:s}=this,n=e.bar;var a;n.innerHTML=(a=this.config.lang,`\n <span class="dx-captcha-bar-text">\n ${p[a][h.SUCCESS]}\n </span>\n`),n.classList.add("success"),setTimeout(()=>{var e;this.close(),null===(e=s.success)||void 0===e||e.call(s,t),this.resolve(t)})}moveBar(e){this.loopBar(t=>{t.style[this.getChangeProperty(t)]=e+"px"})}fallbackBar(){this.loopBar(e=>{e.style.transitionDuration="0.5s",e.style[this.getChangeProperty(e)]="0"})}getChangeProperty(e){return e.classList.contains("dx-captcha-bar-progress")?"width":"left"}loopBar(e){const{fragment:t,slider:s,progress:n}=this.refs;[t,s,n].forEach(t=>e(t))}}}])}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.yh_captcha=t():e.yh_captcha=t()}(this,(function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t,n){"use strict";var a,r,i;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.WEBVIEW="WebView",e.ACCOUNT="Account"}(a||(a={})),function(e){e.OPEN_URL="openUrl",e.CLOSE_WEBVIEW="closeWebView",e.GET_TOKEN="getToken"}(r||(r={})),function(e){e.SDK="sdk",e.UNITY="unity"}(i||(i={})),t.isAndriod=function(){return!!navigator.userAgent.match(/Android/i)},t.isInWebview=function(){return!!navigator.userAgent.match("YHSDK")},t.isIos=function(){return!!navigator.userAgent.match(/iPhone|iPad|iPod|Mac OS/i)&&"ontouchend"in document}},function(e,t,n){},function(e,t,n){"use strict";n.r(t),n.d(t,"Captcha",(function(){return A})),n.d(t,"Language",(function(){return u})),n.d(t,"Version",(function(){return l}));var a,r,i,o,c,s,u,d,l={V1:"v1"};function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e){e.HANT="hant",e.HANS="hans",e.JA="ja",e.EN="en",e.KO="ko"}(u||(u={})),function(e){e.DRAG="drag",e.LOADING="loading",e.SUCCESS="success",e.FAIL="fail",e.RETRY="retry"}(d||(d={}));var h=(f(s={},u.HANS,(f(a={},d.DRAG,"拖动左侧滑块将图片还原"),f(a,d.LOADING,"加载中... "),f(a,d.SUCCESS,"验证成功"),f(a,d.FAIL,"加载失败,"),f(a,d.RETRY,"请点击重试!"),a)),f(s,u.HANT,(f(r={},d.DRAG,"拖動左側滑塊將圖片還原"),f(r,d.LOADING,"加載中... "),f(r,d.SUCCESS,"驗證成功"),f(r,d.FAIL,"加載失敗,"),f(r,d.RETRY,"請點擊重試!"),r)),f(s,u.JA,(f(i={},d.DRAG,"矢印を右にスライドしてください"),f(i,d.LOADING,"ロード中... "),f(i,d.SUCCESS,"認証成功"),f(i,d.FAIL,"ロードに失敗、"),f(i,d.RETRY,"再度お試してください"),i)),f(s,u.KO,(f(o={},d.DRAG,"왼쪽 이미지를 끌어 그림을 복원해 주세요."),f(o,d.LOADING,"로드 중... "),f(o,d.SUCCESS,"인증 성공"),f(o,d.FAIL,"로드 실패,"),f(o,d.RETRY,"재시도해 주세요!"),o)),f(s,u.EN,(f(c={},d.DRAG,"Slide from left to right to complete the image"),f(c,d.LOADING,"Uploading"),f(c,d.SUCCESS,"Verification Successful"),f(c,d.FAIL,"Failed to load,"),f(c,d.RETRY,"please tap to retry!"),c)),s),v=n(0);function p(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var g=function(){function e(t){var n,a,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=void 0,(a="config")in(n=this)?Object.defineProperty(n,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[a]=r,this.config=t}var t,n,a;return t=e,(n=[{key:"request",value:function(e,t){var n=this;return new Promise((function(a,r){var i=t.method,o=t.body,c=new XMLHttpRequest;c.open(i.toLocaleUpperCase(),"".concat(n.config.baseUrl).concat(e),!0),c.setRequestHeader("Content-type","application/json; charset=utf-8"),c.onreadystatechange=function(){if(4===c.readyState){200!==c.status&&r("请求错误");var e=JSON.parse(c.responseText),t=e.code,n=e.msg,i=void 0===n?"":n,o=e.data;0===t?a(o):r(i)}},c.onerror=function(){r("网络错误")},c.ontimeout=function(){r("请求超时")},c.send(o?JSON.stringify(o):"")}))}},{key:"getCaptcha",value:function(e){return this.request("/apis/v1/apps/".concat(e.appId,"/versions/").concat(e.version,"/captchas"),{method:"get"})}},{key:"postValidate",value:function(e,t){return this.request("/apis/v1/tokens/".concat(e,"/validate"),{method:"post",body:t})}}])&&p(t.prototype,n),a&&p(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}();function y(e){return+getComputedStyle(e).left.match(/\d+/)[0]}n(1);var b="https://captcha.resource.pandadagames.com/images/",m="".concat(b,"close.png"),x="".concat(b,"error.png"),k="".concat(b,"waiting.png"),w="".concat(b,"refresh.png"),S="".concat(b,"retry.jpeg"),C="".concat(b,"loading.gif"),L=function(e){return'\n <div class="dx-captcha-header">\n <img src='.concat(m,' />\n </div>\n <div class="dx-captcha-body">\n <canvas></canvas>\n <img class="dx-captcha-body-slider" draggable="false" />\n <img class="dx-captcha-body-refresh" src=').concat(w,' width="16px" height="16px" />\n <img class="dx-captcha-body-logo" src=').concat(function(e){return"".concat(b).concat(e,"_logo.png")}(e),' width="50px" />\n <div class="dx-captcha-body-loading display-none">\n <div>\n <img class="dx-captcha-body-loading-img" src=').concat(C,' />\n <div class="dx-captcha-body-loading-text">').concat(h[e][d.LOADING],'</div>\n </div>\n </div>\n </div>\n <div class="dx-captcha-bar">\n <div class="dx-captcha-bar-slider"></div>\n <div class="dx-captcha-bar-progress"></div>\n <span class="dx-captcha-bar-text">\n ').concat(h[e][d.DRAG],"\n </span>\n </div>\n")};function E(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var A=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),O(this,"root",void 0),O(this,"refs",void 0),O(this,"token",void 0),O(this,"eventNames",void 0),O(this,"config",void 0),O(this,"resolve",void 0),O(this,"apiInstance",void 0),this.setConfig(t),this.apiInstance=new g({baseUrl:t.baseUrl}),this.initEventNames()}var t,n,a;return t=e,(n=[{key:"setConfig",value:function(e){if(!Object.values(u).includes(e.lang))throw new Error("传入的lang ".concat(e.lang," 不正确"));this.config=Object.assign({},e)}},{key:"resetConfig",value:function(e){this.config=Object.assign(this.config,e)}},{key:"initEventNames",value:function(){Object(v.isAndriod)()||Object(v.isIos)()?this.eventNames={down:"touchstart",up:"touchend",move:"touchmove"}:this.eventNames={down:"mousedown",up:"mouseup",move:"mousemove"}}},{key:"initRoot",value:function(){var e=document.createElement("div");return e.classList.add("dx-captcha-root"),document.body.appendChild(e),e}},{key:"show",value:function(){var e=this;this.root||(this.root=this.initRoot());var t=new Promise((function(t){return e.resolve=t}));return this.render(),t}},{key:"render",value:function(){var e,t=this;this.root.innerHTML=(e=this.config.lang,'\n <div class="dx-captcha-mask"></div>\n <div class="dx-captcha-wrap">\n '.concat(L(e),"\n </div>\n")),this.queryRef(),this.handleHeader(),this.handleBody().then((function(e){t.token=e,t.handleBar()}))}},{key:"queryRef",value:function(){var e=this,t=function(t){return e.root.querySelector(t)},n=t(".dx-captcha-wrap"),a=t(".dx-captcha-header img"),r=t("canvas"),i=t(".dx-captcha-bar"),o=t(".dx-captcha-bar-slider"),c=t(".dx-captcha-body-slider"),s=t(".dx-captcha-body-refresh"),u=t(".dx-captcha-body-logo"),d=t(".dx-captcha-bar-progress"),l=t(".dx-captcha-bar-text"),f=t(".dx-captcha-body-loading");this.refs={wrapper:n,close:a,canvas:r,fragment:c,bar:i,slider:o,progress:d,infoText:l,refresh:s,logo:u,loading:f}}},{key:"close",value:function(){var e=this,t=this.refs.wrapper;t.style.top="0",t.style.opacity="0",setTimeout((function(){e.root.innerHTML=""}),300)}},{key:"retry",value:function(){var e,t=this;this.refs.wrapper.innerHTML=(e=this.config.lang,'\n <div class="dx-captcha-retry">\n <img class="dx-captcha-retry-img" src='.concat(S," />\n <div>").concat(h[e][d.FAIL],'<a class="dx-captcha-retry-link">').concat(h[e][d.RETRY],"</a></div>\n </div>\n")),this.refs.wrapper.querySelector(".dx-captcha-retry-link").addEventListener("click",(function(){t.render()}))}},{key:"handleHeader",value:function(){var e=this;this.refs.close.addEventListener("click",(function(){e.close()}))}},{key:"handleBody",value:function(){return this.addRefresh(),this.drawBackground()}},{key:"drawBackground",value:function(){var e=this,t=this.refs,n=this.apiInstance,a=this.config,r=t.canvas,i=t.loading,o=t.fragment;r.width=300*devicePixelRatio,r.height=150*devicePixelRatio;var c,s=r.getContext("2d"),u=new Promise((function(e){return c=e}));return i.classList.remove("display-none"),n.getCaptcha({appId:a.appId,version:a.version}).then((function(e){var t=e.y,n=e.token,a=e.bgUrl,u=e.fgUrl;!function(e,t){new Promise((function(e){return n=e}));var n,a=new Image;a.onload=function(){null==t||t(a),n(a)},a.src=e}(a,(function(e){i.classList.add("display-none"),s.drawImage(e,0,0,r.width,r.height),o.src=u,o.style.top="".concat(t,"px"),c(n)}))})).catch((function(){e.retry()})),u}},{key:"addRefresh",value:function(){var e=this,t=this.refs.refresh;t.src=w,t.addEventListener("click",(function(){e.reset()}))}},{key:"reset",value:function(){var e=this;this.clearCanvas(),this.drawBackground().then((function(t){e.token=t}));var t=this.refs,n=t.slider,a=t.progress;this.loopBar((function(e){e.style.transitionDuration="0s"})),n.style.backgroundImage="url(".concat(k,")"),a.classList.remove("error"),a.classList.add("success")}},{key:"clearCanvas",value:function(){var e=this.refs.canvas;e.getContext("2d").clearRect(0,0,e.width,e.height)}},{key:"handleBar",value:function(){var e,t,n=this,a=this.eventNames,r=a.down,i=a.move,o=a.up,c=this.refs,s=c.bar,u=c.fragment,d=c.slider,l=c.progress,f=s.getBoundingClientRect().width-d.getBoundingClientRect().width,h={value:!1},v=function(a){a.preventDefault();var r=n.getClientX(a)-e+t;r>f||r<0||n.moveBar(r)},p=function e(){document.body.removeEventListener(i,v),document.body.removeEventListener(o,e);var t=y(u);n.apiInstance.postValidate(n.token,{x:t}).then((function(){n.verifySuccess()})).catch((function(){n.verifyFail(h)}))};d.addEventListener(r,(function(a){h.value||(e=n.getClientX(a),t=y(u),l.classList.add("success"),document.body.addEventListener(i,v),document.body.addEventListener(o,p))}))}},{key:"getClientX",value:function(e){return e.clientX||e.touches[0].clientX}},{key:"verifyFail",value:function(e){var t=this;e.value=!0;var n=this.refs,a=n.slider,r=n.progress;a.style.backgroundImage="url(".concat(x,")"),r.classList.remove("success"),r.classList.add("error"),this.fallbackBar(),setTimeout((function(){t.reset(),e.value=!1}),500)}},{key:"verifySuccess",value:function(){var e,t=this,n=this.refs,a=this.token,r=this.config,i=n.bar;i.innerHTML=(e=this.config.lang,'\n <span class="dx-captcha-bar-text">\n '.concat(h[e][d.SUCCESS],"\n </span>\n")),i.classList.add("success"),setTimeout((function(){var e;t.close(),null===(e=r.success)||void 0===e||e.call(r,a),t.resolve(a)}))}},{key:"moveBar",value:function(e){var t=this;this.loopBar((function(n){n.style[t.getChangeProperty(n)]="".concat(e,"px")}))}},{key:"fallbackBar",value:function(){var e=this;this.loopBar((function(t){t.style.transitionDuration="".concat(.5,"s"),t.style[e.getChangeProperty(t)]="0"}))}},{key:"getChangeProperty",value:function(e){return e.classList.contains("dx-captcha-bar-progress")?"width":"left"}},{key:"loopBar",value:function(e){var t=this.refs;[t.fragment,t.slider,t.progress].forEach((function(t){return e(t)}))}}])&&E(t.prototype,n),a&&E(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}()}])}));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://yh_captcha/webpack/universalModuleDefinition","webpack://yh_captcha/webpack/bootstrap","webpack://yh_captcha/./node_modules/@blazes/webview-sdk/dist/env.js","webpack://yh_captcha/./src/type.ts","webpack://yh_captcha/./src/api.ts","webpack://yh_captcha/./src/utils.ts","webpack://yh_captcha/./src/image-url.ts","webpack://yh_captcha/./src/lang.ts","webpack://yh_captcha/./src/template.ts","webpack://yh_captcha/./src/captcha.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","WEBVIEW","ACCOUNT","OPEN_URL","CLOSE_WEBVIEW","GET_TOKEN","SDK","UNITY","isAndriod","navigator","userAgent","match","isInWebview","isIos","document","Version","V1","AppId","NINJA3","ApiInstance","constructor","config","request","url","Promise","resolve","reject","method","body","xhr","XMLHttpRequest","open","toLocaleUpperCase","baseUrl","setRequestHeader","onreadystatechange","readyState","status","data","JSON","parse","responseText","code","msg","respData","onerror","ontimeout","send","stringify","getCaptcha","params","appId","version","postValidate","token","getLeft","el","getComputedStyle","left","host","RefreshImage","Language","Translate","resources","HANS","DRAG","LOADING","SUCCESS","FAIL","RETRY","HANT","JA","KO","EN","wrapTemplate","lang","LogoImage","Captcha","setConfig","apiInstance","initEventNames","values","includes","Error","assign","resetConfig","eventNames","down","up","move","initRoot","createElement","classList","add","appendChild","show","render","innerHTML","queryRef","handleHeader","handleBody","then","handleBar","query","selector","querySelector","wrapper","close","canvas","bar","slider","fragment","refresh","logo","progress","infoText","loading","refs","style","top","opacity","setTimeout","retry","addEventListener","addRefresh","drawBackground","width","devicePixelRatio","height","ctx","getContext","resolved","remove","y","bgUrl","fgUrl","img","callback","promise","imgEl","Image","onload","src","loadImage","drawImage","catch","reset","clearCanvas","loopBar","transitionDuration","backgroundImage","clearRect","maxLeft","getBoundingClientRect","originX","curOffset","fallbacking","moveBar","event","preventDefault","offset","getClientX","upMouse","removeEventListener","x","verifySuccess","verifyFail","clientX","touches","fallbackBar","FALLBACK_DRUATION","success","getChangeProperty","contains","forEach"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"yh_captcha\"] = factory();\n\telse\n\t\troot[\"yh_captcha\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var e,n,t;!function(e){e.WEBVIEW=\"WebView\",e.ACCOUNT=\"Account\"}(e||(e={})),function(e){e.OPEN_URL=\"openUrl\",e.CLOSE_WEBVIEW=\"closeWebView\",e.GET_TOKEN=\"getToken\"}(n||(n={})),function(e){e.SDK=\"sdk\",e.UNITY=\"unity\"}(t||(t={})),exports.isAndriod=function(){return!!navigator.userAgent.match(/Android/i)},exports.isInWebview=function(){return!!navigator.userAgent.match(\"YHSDK\")},exports.isIos=function(){return!!navigator.userAgent.match(/iPhone|iPad|iPod|Mac OS/i)&&\"ontouchend\"in document};\n//# sourceMappingURL=env.js.map\n","import { Language } from \"./lang\";\n\nexport const Version = {\n V1: \"v1\",\n} as const;\nexport const AppId = {\n NINJA3: \"ninja3\",\n} as const;\nexport type InRecord<T> = Record<keyof T, T[keyof T]>;\ntype ValueOf<T> = T[keyof T];\n\nexport interface IPostValidate {\n x: number;\n}\n\nexport interface IGetCaptcha {\n appId: string;\n version: string;\n}\n\nexport interface ICaptcha {\n token: string;\n bgUrl: string;\n fgUrl: string;\n y: number;\n}\n\nexport interface ICaptchaConfig {\n appId: ValueOf<typeof AppId>;\n success?: (token: string) => void;\n baseUrl: string;\n version: ValueOf<typeof Version>;\n lang: Language;\n}\n\nexport interface IResponse<T> {\n code: number;\n msg: string;\n data: T;\n}\n","import {\n IGetCaptcha,\n ICaptcha,\n IPostValidate,\n IResponse,\n} from \"./type\";\n\ninterface IRequestConfig {\n method: \"get\" | \"post\";\n body?: Record<string, any>;\n}\n\ninterface ApiInstanceConfig {\n baseUrl: string;\n}\n\nexport class ApiInstance {\n private config: ApiInstanceConfig;\n constructor(config: ApiInstanceConfig) {\n this.config = config;\n }\n\n private request<T>(url: string, config: IRequestConfig) {\n return new Promise<T>((resolve, reject) => {\n const { method, body } = config;\n const xhr = new XMLHttpRequest();\n\n xhr.open(\n method.toLocaleUpperCase(),\n `${this.config.baseUrl}${url}`,\n true\n );\n xhr.setRequestHeader(\"Content-type\", \"application/json; charset=utf-8\");\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState !== 4) {\n return;\n }\n if (xhr.status !== 200) {\n reject(\"请求错误\");\n }\n const data = JSON.parse(xhr.responseText) as IResponse<T>;\n const { code, msg = \"\", data: respData } = data;\n if (code === 0) {\n resolve(respData);\n } else {\n reject(msg);\n }\n };\n xhr.onerror = function handleError() {\n reject(\"网络错误\");\n };\n xhr.ontimeout = function handleTimeout() {\n reject(\"请求超时\");\n };\n\n xhr.send(body ? JSON.stringify(body) : \"\");\n });\n }\n\n getCaptcha(params: IGetCaptcha): Promise<ICaptcha> {\n return this.request(\n `/apis/v1/apps/${params.appId}/versions/${params.version}/captchas`,\n {\n method: \"get\",\n }\n );\n }\n\n postValidate(token: string, params: IPostValidate): Promise<null> {\n return this.request(`/apis/v1/tokens/${token}/validate`, {\n method: \"post\",\n body: params,\n });\n }\n}\n","// export function random(total: number, test?: (result: number) => boolean) {\n// let latest: number;\n\n// const calRandom = () => {\n// const num = Math.ceil(Math.random() * total);\n// return num === total ? num - 1 : num;\n// };\n// return function () {\n// let result = calRandom();\n// while (result === latest || (test && test(result))) {\n// result = calRandom();\n// }\n// latest = result;\n\n// return result;\n// };\n// }\n\nexport const BACK_WIDTH = 300;\nexport const BACK_HEIGHT = 150;\n\n// export const leftRandom = random(BACK_WIDTH - 50, (result) => result < 60);\n// export const topRandom = random(BACK_HEIGHT - 50, (result) => result < 50);\n\nexport function getLeft(el: HTMLElement) {\n return +getComputedStyle(el).left.match(/\\d+/)![0];\n}\n\nexport function loadImage(\n img: any,\n callback?: (img: HTMLImageElement) => void\n) {\n let resolved: (img: HTMLImageElement) => void;\n const promise = new Promise<HTMLImageElement>((r) => (resolved = r));\n const imgEl = new Image();\n imgEl.onload = () => {\n callback?.(imgEl);\n resolved(imgEl);\n };\n imgEl.src = img;\n\n return promise;\n}\n\n// export async function addBorder(\n// canvas: HTMLCanvasElement,\n// x: number,\n// y: number,\n// options: {\n// shadowColor: string;\n// fillStyle: string;\n// reFillStyle?: string;\n// }\n// ) {\n// const ctx = canvas.getContext(\"2d\");\n// const { shadowColor, fillStyle, reFillStyle } = options;\n// triangleDraw(ctx, x, y);\n// ctx.globalCompositeOperation = \"destination-in\";\n// ctx.fill();\n\n// const borderCanvas = canvas.cloneNode() as HTMLCanvasElement;\n// const borderCtx = borderCanvas.getContext(\"2d\");\n// triangleDraw(borderCtx, x, y);\n// borderCtx.shadowBlur = 2;\n// borderCtx.shadowColor = shadowColor;\n// borderCtx.fillStyle = fillStyle;\n// borderCtx.strokeStyle = shadowColor;\n// borderCtx.fill();\n// // borderCtx.lineWidth = 0.5;\n// // borderCtx.stroke();\n\n// triangleDraw(borderCtx, x, y, \"small\");\n// borderCtx.shadowBlur = 0;\n// borderCtx.globalCompositeOperation = \"destination-out\";\n// borderCtx.fill();\n// if (reFillStyle) {\n// triangleDraw(borderCtx, x, y, \"small\");\n// borderCtx.globalCompositeOperation = \"source-over\";\n// borderCtx.fillStyle = reFillStyle;\n// borderCtx.fill();\n// }\n// const url = await loadImage(canvasToPng(borderCanvas));\n// ctx.globalCompositeOperation = \"source-over\";\n// ctx.drawImage(url, 0, 0);\n\n// return {\n// left: x,\n// top: y,\n// };\n// }\n\n// export function canvasToPng(canvas: HTMLCanvasElement) {\n// return canvas.toDataURL(\"image/png\");\n// }\n\n// export function coverCanvas(canvas: HTMLCanvasElement, x: number, y: number) {\n// const ctx = canvas.getContext(\"2d\");\n// const data = ctx.getImageData(x, y, IMG_SIZE, IMG_SIZE);\n// canvas.width = IMG_SIZE;\n// canvas.height = IMG_SIZE;\n// ctx.putImageData(data, 0, 0);\n\n// return canvas;\n// }\n","import { Language } from \"./lang\";\n\nconst host = \"https://captcha.resource.pandadagames.com/images/\";\n\nexport const CloseImage = `${host}close.png`;\nexport const ErrorImage = `${host}error.png`;\nexport const WaitingImage = `${host}waiting.png`;\nexport const LogoImage = (lang: Language) => `${host}${lang}_logo.png`;\nexport const RefreshImage = `${host}refresh.png`;\nexport const RetryImage = `${host}retry.jpeg`;\nexport const LoadingImage = `${host}loading.gif`;\n","export enum Language {\n HANT = \"hant\",\n HANS = \"hans\",\n JA = \"ja\",\n EN = \"en\",\n KO = \"ko\",\n}\n\nexport enum Translate {\n DRAG = \"drag\",\n LOADING = \"loading\",\n SUCCESS = \"success\",\n FAIL = \"fail\",\n RETRY = \"retry\",\n}\n\nexport const resources = {\n [Language.HANS]: {\n [Translate.DRAG]: \"拖动左侧滑块将图片还原\",\n [Translate.LOADING]: \"加载中... \",\n [Translate.SUCCESS]: \"验证成功\",\n [Translate.FAIL]: \"加载失败,\",\n [Translate.RETRY]: \"请点击重试!\",\n },\n [Language.HANT]: {\n [Translate.DRAG]: \"拖動左側滑塊將圖片還原\",\n [Translate.LOADING]: \"加載中... \",\n [Translate.SUCCESS]: \"驗證成功\",\n [Translate.FAIL]: \"加載失敗,\",\n [Translate.RETRY]: \"請點擊重試!\",\n },\n [Language.JA]: {\n [Translate.DRAG]:\n \"矢印を右にスライドしてください\",\n [Translate.LOADING]: \"ロード中... \",\n [Translate.SUCCESS]: \"認証成功\",\n [Translate.FAIL]: \"ロードに失敗、\",\n [Translate.RETRY]: \"再度お試してください\",\n },\n [Language.KO]: {\n [Translate.DRAG]: \"왼쪽 이미지를 끌어 그림을 복원해 주세요.\",\n [Translate.LOADING]: \"로드 중... \",\n [Translate.SUCCESS]: \"인증 성공\",\n [Translate.FAIL]: \"로드 실패,\",\n [Translate.RETRY]: \"재시도해 주세요!\",\n },\n [Language.EN]: {\n [Translate.DRAG]: \"Slide from left to right to complete the image\",\n [Translate.LOADING]: \"Uploading\",\n [Translate.SUCCESS]: \"Verification Successful\",\n [Translate.FAIL]: \"Failed to load,\",\n [Translate.RETRY]: \"please tap to retry!\",\n },\n};\n","import {\n CloseImage,\n RefreshImage,\n LogoImage,\n LoadingImage,\n RetryImage,\n} from \"./image-url\";\nimport { Language, resources, Translate } from \"./lang\";\n\nexport const wrapTemplate = (lang: Language) => `\n <div class=\"dx-captcha-header\">\n <img src=${CloseImage} />\n </div>\n <div class=\"dx-captcha-body\">\n <canvas></canvas>\n <img class=\"dx-captcha-body-slider\" draggable=\"false\" />\n <img class=\"dx-captcha-body-refresh\" src=${RefreshImage} width=\"16px\" height=\"16px\" />\n <img class=\"dx-captcha-body-logo\" src=${LogoImage(lang)} width=\"50px\" />\n <div class=\"dx-captcha-body-loading display-none\">\n <div>\n <img class=\"dx-captcha-body-loading-img\" src=${LoadingImage} />\n <div class=\"dx-captcha-body-loading-text\">${\n resources[lang][Translate.LOADING]\n }</div>\n </div>\n </div>\n </div>\n <div class=\"dx-captcha-bar\">\n <div class=\"dx-captcha-bar-slider\"></div>\n <div class=\"dx-captcha-bar-progress\"></div>\n <span class=\"dx-captcha-bar-text\">\n ${resources[lang][Translate.DRAG]}\n </span>\n </div>\n`;\n\nexport const defaultTemplate = (lang: Language) => `\n <div class=\"dx-captcha-mask\"></div>\n <div class=\"dx-captcha-wrap\">\n ${wrapTemplate(lang)}\n </div>\n`;\n\nexport const successBarTemplate = (lang: Language) => `\n <span class=\"dx-captcha-bar-text\">\n ${resources[lang][Translate.SUCCESS]}\n </span>\n`;\n\nexport const retryTemplate = (lang: Language) => `\n <div class=\"dx-captcha-retry\">\n <img class=\"dx-captcha-retry-img\" src=${RetryImage} />\n <div>${\n resources[lang][Translate.FAIL]\n }<a class=\"dx-captcha-retry-link\">${\n resources[lang][Translate.RETRY]\n}</a></div>\n </div>\n`;\n","import { isAndriod, isIos } from \"@blazes/webview-sdk/dist/env\";\nimport { ApiInstance } from \"./api\";\nimport { ICaptchaConfig } from \"./type\";\nimport { getLeft, loadImage, BACK_WIDTH, BACK_HEIGHT } from \"./utils\";\nimport \"./assets/style/index.less\";\nimport { defaultTemplate, retryTemplate, successBarTemplate } from \"./template\";\nimport { RefreshImage, WaitingImage, ErrorImage } from \"./image-url\";\nimport { Language } from \"./lang\";\n\nconst FALLBACK_DRUATION = 0.5;\n\nexport class Captcha {\n private root: HTMLDivElement;\n private refs: {\n wrapper: HTMLDivElement;\n close: HTMLImageElement;\n canvas: HTMLCanvasElement;\n fragment: HTMLImageElement;\n refresh: HTMLImageElement;\n logo: HTMLImageElement;\n bar: HTMLDivElement;\n slider: HTMLDivElement;\n progress: HTMLDivElement;\n infoText: HTMLSpanElement;\n loading: HTMLElement;\n };\n private token: string;\n private eventNames: {\n down: string;\n up: string;\n move: string;\n };\n private config: ICaptchaConfig;\n private resolve: (token: string) => void;\n private apiInstance: ApiInstance;\n\n constructor(config: ICaptchaConfig) {\n this.setConfig(config);\n this.apiInstance = new ApiInstance({ baseUrl: config.baseUrl });\n this.initEventNames();\n }\n\n private setConfig(config: ICaptchaConfig) {\n if (!Object.values(Language).includes(config.lang)) {\n throw new Error(`传入的lang ${config.lang} 不正确`);\n }\n this.config = Object.assign({}, config);\n }\n\n resetConfig(config: Partial<ICaptchaConfig>) {\n this.config = Object.assign(this.config, config);\n }\n\n private initEventNames() {\n if (isAndriod() || isIos()) {\n this.eventNames = {\n down: \"touchstart\",\n up: \"touchend\",\n move: \"touchmove\",\n };\n } else {\n this.eventNames = {\n down: \"mousedown\",\n up: \"mouseup\",\n move: \"mousemove\",\n };\n }\n }\n\n private initRoot() {\n const root = document.createElement(\"div\");\n root.classList.add(\"dx-captcha-root\");\n document.body.appendChild(root);\n\n return root;\n }\n\n show() {\n if (!this.root) {\n this.root = this.initRoot();\n }\n const p = new Promise<string>((r) => (this.resolve = r));\n this.render();\n return p;\n }\n\n private render() {\n this.root.innerHTML = defaultTemplate(this.config.lang);\n this.queryRef();\n this.handleHeader();\n this.handleBody().then((token) => {\n this.token = token;\n this.handleBar();\n });\n }\n\n private queryRef() {\n const query = <T>(selector: string): T =>\n this.root.querySelector(selector) as unknown as T;\n const wrapper = query<HTMLDivElement>(\".dx-captcha-wrap\");\n const close = query<HTMLImageElement>(\".dx-captcha-header img\");\n const canvas = query<HTMLCanvasElement>(\"canvas\");\n const bar = query<HTMLDivElement>(\".dx-captcha-bar\");\n const slider = query<HTMLDivElement>(\".dx-captcha-bar-slider\");\n const fragment = query<HTMLImageElement>(\".dx-captcha-body-slider\");\n const refresh = query<HTMLImageElement>(\".dx-captcha-body-refresh\");\n const logo = query<HTMLImageElement>(\".dx-captcha-body-logo\");\n const progress = query<HTMLDivElement>(\".dx-captcha-bar-progress\");\n const infoText = query<HTMLSpanElement>(\".dx-captcha-bar-text\");\n const loading = query<HTMLSpanElement>(\".dx-captcha-body-loading\");\n\n this.refs = {\n wrapper,\n close,\n canvas,\n fragment,\n bar,\n slider,\n progress,\n infoText,\n refresh,\n logo,\n loading,\n };\n }\n\n close() {\n const wrapper = this.refs.wrapper;\n wrapper.style.top = \"0\";\n wrapper.style.opacity = \"0\";\n setTimeout(() => {\n this.root.innerHTML = \"\";\n }, 300);\n }\n\n private retry() {\n this.refs.wrapper.innerHTML = retryTemplate(this.config.lang);\n const retryLink = this.refs.wrapper.querySelector(\n \".dx-captcha-retry-link\"\n ) as HTMLLinkElement;\n retryLink.addEventListener(\"click\", () => {\n this.render();\n });\n }\n\n private handleHeader() {\n const closeEl = this.refs.close;\n closeEl.addEventListener(\"click\", () => {\n this.close();\n });\n }\n\n private handleBody() {\n this.addRefresh();\n return this.drawBackground();\n }\n\n private drawBackground() {\n const { refs, apiInstance, config } = this;\n const { canvas, loading, fragment } = refs;\n canvas.width = BACK_WIDTH * devicePixelRatio;\n canvas.height = BACK_HEIGHT * devicePixelRatio;\n const ctx = canvas.getContext(\"2d\");\n let resolved: (token: string) => void;\n const p = new Promise<string>((r) => (resolved = r));\n\n loading.classList.remove(\"display-none\");\n apiInstance\n .getCaptcha({ appId: config.appId, version: config.version })\n .then(({ y, token, bgUrl, fgUrl }) => {\n loadImage(bgUrl, (url) => {\n loading.classList.add(\"display-none\");\n ctx.drawImage(url, 0, 0, canvas.width, canvas.height);\n fragment.src = fgUrl;\n fragment.style.top = `${y}px`;\n\n resolved(token);\n });\n })\n .catch(() => {\n this.retry();\n });\n\n return p;\n }\n\n private addRefresh() {\n const refresh = this.refs.refresh;\n refresh.src = RefreshImage;\n refresh.addEventListener(\"click\", () => {\n this.reset();\n });\n }\n\n reset() {\n this.clearCanvas();\n this.drawBackground().then((token) => {\n this.token = token;\n });\n const { slider, progress } = this.refs;\n this.loopBar((el) => {\n el.style.transitionDuration = \"0s\";\n });\n slider.style.backgroundImage = `url(${WaitingImage})`;\n progress.classList.remove(\"error\");\n progress.classList.add(\"success\");\n }\n\n private clearCanvas() {\n const canvas = this.refs.canvas;\n const ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n private handleBar() {\n const { down, move, up } = this.eventNames;\n const { bar, fragment, slider, progress } = this.refs;\n const maxLeft =\n bar.getBoundingClientRect().width - slider.getBoundingClientRect().width;\n\n let originX: number, curOffset: number;\n const fallbacking = { value: false };\n const moveBar = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const offset = this.getClientX(event) - originX + curOffset;\n if (offset > maxLeft || offset < 0) {\n return;\n }\n this.moveBar(offset);\n };\n const upMouse = () => {\n document.body.removeEventListener(move, moveBar);\n document.body.removeEventListener(up, upMouse);\n const left = getLeft(fragment);\n this.apiInstance\n .postValidate(this.token, {\n x: left,\n })\n .then(() => {\n this.verifySuccess();\n })\n .catch(() => {\n this.verifyFail(fallbacking);\n });\n };\n slider.addEventListener(down, (event: MouseEvent | TouchEvent) => {\n if (fallbacking.value) {\n return;\n }\n originX = this.getClientX(event);\n curOffset = getLeft(fragment);\n progress.classList.add(\"success\");\n document.body.addEventListener(move, moveBar);\n document.body.addEventListener(up, upMouse);\n });\n }\n\n private getClientX(event: MouseEvent | TouchEvent) {\n return (\n (event as MouseEvent).clientX || (event as TouchEvent).touches[0].clientX\n );\n }\n\n private verifyFail(fallbacking: { value: boolean }) {\n fallbacking.value = true;\n const { slider, progress } = this.refs;\n slider.style.backgroundImage = `url(${ErrorImage})`;\n progress.classList.remove(\"success\");\n progress.classList.add(\"error\");\n this.fallbackBar();\n setTimeout(() => {\n this.reset();\n fallbacking.value = false;\n }, FALLBACK_DRUATION * 1000);\n }\n\n private verifySuccess() {\n const { refs, token, config } = this;\n const bar = refs.bar;\n bar.innerHTML = successBarTemplate(this.config.lang);\n bar.classList.add(\"success\");\n setTimeout(() => {\n this.close();\n config.success?.(token);\n this.resolve(token);\n });\n }\n\n private moveBar(offset: number) {\n this.loopBar((el) => {\n el.style[this.getChangeProperty(el)] = `${offset}px`;\n });\n }\n\n private fallbackBar() {\n this.loopBar((el) => {\n el.style.transitionDuration = `${FALLBACK_DRUATION}s`;\n el.style[this.getChangeProperty(el)] = \"0\";\n });\n }\n\n private getChangeProperty(el: HTMLElement) {\n return el.classList.contains(\"dx-captcha-bar-progress\") ? \"width\" : \"left\";\n }\n\n private loopBar(callback: (el: HTMLElement) => void) {\n const { fragment, slider, progress } = this.refs;\n [fragment, slider, progress].forEach((el) => callback(el));\n }\n}\n\nexport interface Captcha {\n new (config: ICaptchaConfig): Captcha;\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://yh_captcha/webpack/universalModuleDefinition","webpack://yh_captcha/webpack/bootstrap","webpack://yh_captcha/./node_modules/@blazes/webview-sdk/dist/env.js","webpack://yh_captcha/./src/type.ts","webpack://yh_captcha/./src/lang.ts","webpack://yh_captcha/./src/api.ts","webpack://yh_captcha/./src/utils.ts","webpack://yh_captcha/./src/image-url.ts","webpack://yh_captcha/./src/template.ts","webpack://yh_captcha/./src/captcha.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","WEBVIEW","ACCOUNT","OPEN_URL","CLOSE_WEBVIEW","GET_TOKEN","SDK","UNITY","isAndriod","navigator","userAgent","match","isInWebview","isIos","document","Language","Translate","Version","V1","resources","HANS","DRAG","LOADING","SUCCESS","FAIL","RETRY","HANT","JA","KO","EN","ApiInstance","config","url","Promise","resolve","reject","method","body","xhr","XMLHttpRequest","open","toLocaleUpperCase","baseUrl","setRequestHeader","onreadystatechange","readyState","status","data","JSON","parse","responseText","code","msg","respData","onerror","ontimeout","send","stringify","params","request","appId","version","token","getLeft","el","getComputedStyle","left","host","CloseImage","ErrorImage","WaitingImage","RefreshImage","RetryImage","LoadingImage","wrapTemplate","lang","LogoImage","Captcha","setConfig","apiInstance","initEventNames","values","includes","Error","assign","eventNames","down","up","move","createElement","classList","add","appendChild","initRoot","render","innerHTML","queryRef","handleHeader","handleBody","then","handleBar","query","selector","querySelector","wrapper","close","canvas","bar","slider","fragment","refresh","logo","progress","infoText","loading","refs","style","top","opacity","setTimeout","addEventListener","addRefresh","drawBackground","width","devicePixelRatio","height","resolved","ctx","getContext","remove","getCaptcha","y","bgUrl","fgUrl","img","callback","imgEl","Image","onload","src","loadImage","drawImage","catch","retry","reset","clearCanvas","loopBar","transitionDuration","backgroundImage","clearRect","originX","curOffset","maxLeft","getBoundingClientRect","fallbacking","moveBar","event","preventDefault","offset","getClientX","upMouse","removeEventListener","postValidate","x","verifySuccess","verifyFail","clientX","touches","fallbackBar","FALLBACK_DRUATION","success","getChangeProperty","contains","forEach"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"yh_captcha\"] = factory();\n\telse\n\t\troot[\"yh_captcha\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var e,n,t;!function(e){e.WEBVIEW=\"WebView\",e.ACCOUNT=\"Account\"}(e||(e={})),function(e){e.OPEN_URL=\"openUrl\",e.CLOSE_WEBVIEW=\"closeWebView\",e.GET_TOKEN=\"getToken\"}(n||(n={})),function(e){e.SDK=\"sdk\",e.UNITY=\"unity\"}(t||(t={})),exports.isAndriod=function(){return!!navigator.userAgent.match(/Android/i)},exports.isInWebview=function(){return!!navigator.userAgent.match(\"YHSDK\")},exports.isIos=function(){return!!navigator.userAgent.match(/iPhone|iPad|iPod|Mac OS/i)&&\"ontouchend\"in document};\n//# sourceMappingURL=env.js.map\n","import { Language } from \"./lang\";\n\nexport const Version = {\n V1: \"v1\",\n} as const;\nexport const AppId = {\n NINJA3: \"ninja3\",\n} as const;\nexport type InRecord<T> = Record<keyof T, T[keyof T]>;\ntype ValueOf<T> = T[keyof T];\n\nexport interface IPostValidate {\n x: number;\n}\n\nexport interface IGetCaptcha {\n appId: string;\n version: string;\n}\n\nexport interface ICaptcha {\n token: string;\n bgUrl: string;\n fgUrl: string;\n y: number;\n}\n\nexport interface ICaptchaConfig {\n appId: string;\n success?: (token: string) => void;\n baseUrl: string;\n version: string;\n lang: Language;\n}\n\nexport interface IResponse<T> {\n code: number;\n msg: string;\n data: T;\n}\n","export enum Language {\n HANT = \"hant\",\n HANS = \"hans\",\n JA = \"ja\",\n EN = \"en\",\n KO = \"ko\",\n}\n\nexport enum Translate {\n DRAG = \"drag\",\n LOADING = \"loading\",\n SUCCESS = \"success\",\n FAIL = \"fail\",\n RETRY = \"retry\",\n}\n\nexport const resources = {\n [Language.HANS]: {\n [Translate.DRAG]: \"拖动左侧滑块将图片还原\",\n [Translate.LOADING]: \"加载中... \",\n [Translate.SUCCESS]: \"验证成功\",\n [Translate.FAIL]: \"加载失败,\",\n [Translate.RETRY]: \"请点击重试!\",\n },\n [Language.HANT]: {\n [Translate.DRAG]: \"拖動左側滑塊將圖片還原\",\n [Translate.LOADING]: \"加載中... \",\n [Translate.SUCCESS]: \"驗證成功\",\n [Translate.FAIL]: \"加載失敗,\",\n [Translate.RETRY]: \"請點擊重試!\",\n },\n [Language.JA]: {\n [Translate.DRAG]:\n \"矢印を右にスライドしてください\",\n [Translate.LOADING]: \"ロード中... \",\n [Translate.SUCCESS]: \"認証成功\",\n [Translate.FAIL]: \"ロードに失敗、\",\n [Translate.RETRY]: \"再度お試してください\",\n },\n [Language.KO]: {\n [Translate.DRAG]: \"왼쪽 이미지를 끌어 그림을 복원해 주세요.\",\n [Translate.LOADING]: \"로드 중... \",\n [Translate.SUCCESS]: \"인증 성공\",\n [Translate.FAIL]: \"로드 실패,\",\n [Translate.RETRY]: \"재시도해 주세요!\",\n },\n [Language.EN]: {\n [Translate.DRAG]: \"Slide from left to right to complete the image\",\n [Translate.LOADING]: \"Uploading\",\n [Translate.SUCCESS]: \"Verification Successful\",\n [Translate.FAIL]: \"Failed to load,\",\n [Translate.RETRY]: \"please tap to retry!\",\n },\n};\n","import {\n IGetCaptcha,\n ICaptcha,\n IPostValidate,\n IResponse,\n} from \"./type\";\n\ninterface IRequestConfig {\n method: \"get\" | \"post\";\n body?: Record<string, any>;\n}\n\ninterface ApiInstanceConfig {\n baseUrl: string;\n}\n\nexport class ApiInstance {\n private config: ApiInstanceConfig;\n constructor(config: ApiInstanceConfig) {\n this.config = config;\n }\n\n private request<T>(url: string, config: IRequestConfig) {\n return new Promise<T>((resolve, reject) => {\n const { method, body } = config;\n const xhr = new XMLHttpRequest();\n\n xhr.open(\n method.toLocaleUpperCase(),\n `${this.config.baseUrl}${url}`,\n true\n );\n xhr.setRequestHeader(\"Content-type\", \"application/json; charset=utf-8\");\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState !== 4) {\n return;\n }\n if (xhr.status !== 200) {\n reject(\"请求错误\");\n }\n const data = JSON.parse(xhr.responseText) as IResponse<T>;\n const { code, msg = \"\", data: respData } = data;\n if (code === 0) {\n resolve(respData);\n } else {\n reject(msg);\n }\n };\n xhr.onerror = function handleError() {\n reject(\"网络错误\");\n };\n xhr.ontimeout = function handleTimeout() {\n reject(\"请求超时\");\n };\n\n xhr.send(body ? JSON.stringify(body) : \"\");\n });\n }\n\n getCaptcha(params: IGetCaptcha): Promise<ICaptcha> {\n return this.request(\n `/apis/v1/apps/${params.appId}/versions/${params.version}/captchas`,\n {\n method: \"get\",\n }\n );\n }\n\n postValidate(token: string, params: IPostValidate): Promise<null> {\n return this.request(`/apis/v1/tokens/${token}/validate`, {\n method: \"post\",\n body: params,\n });\n }\n}\n","// export function random(total: number, test?: (result: number) => boolean) {\n// let latest: number;\n\n// const calRandom = () => {\n// const num = Math.ceil(Math.random() * total);\n// return num === total ? num - 1 : num;\n// };\n// return function () {\n// let result = calRandom();\n// while (result === latest || (test && test(result))) {\n// result = calRandom();\n// }\n// latest = result;\n\n// return result;\n// };\n// }\n\nexport const BACK_WIDTH = 300;\nexport const BACK_HEIGHT = 150;\n\n// export const leftRandom = random(BACK_WIDTH - 50, (result) => result < 60);\n// export const topRandom = random(BACK_HEIGHT - 50, (result) => result < 50);\n\nexport function getLeft(el: HTMLElement) {\n return +getComputedStyle(el).left.match(/\\d+/)![0];\n}\n\nexport function loadImage(\n img: any,\n callback?: (img: HTMLImageElement) => void\n) {\n let resolved: (img: HTMLImageElement) => void;\n const promise = new Promise<HTMLImageElement>((r) => (resolved = r));\n const imgEl = new Image();\n imgEl.onload = () => {\n callback?.(imgEl);\n resolved(imgEl);\n };\n imgEl.src = img;\n\n return promise;\n}\n\n// export async function addBorder(\n// canvas: HTMLCanvasElement,\n// x: number,\n// y: number,\n// options: {\n// shadowColor: string;\n// fillStyle: string;\n// reFillStyle?: string;\n// }\n// ) {\n// const ctx = canvas.getContext(\"2d\");\n// const { shadowColor, fillStyle, reFillStyle } = options;\n// triangleDraw(ctx, x, y);\n// ctx.globalCompositeOperation = \"destination-in\";\n// ctx.fill();\n\n// const borderCanvas = canvas.cloneNode() as HTMLCanvasElement;\n// const borderCtx = borderCanvas.getContext(\"2d\");\n// triangleDraw(borderCtx, x, y);\n// borderCtx.shadowBlur = 2;\n// borderCtx.shadowColor = shadowColor;\n// borderCtx.fillStyle = fillStyle;\n// borderCtx.strokeStyle = shadowColor;\n// borderCtx.fill();\n// // borderCtx.lineWidth = 0.5;\n// // borderCtx.stroke();\n\n// triangleDraw(borderCtx, x, y, \"small\");\n// borderCtx.shadowBlur = 0;\n// borderCtx.globalCompositeOperation = \"destination-out\";\n// borderCtx.fill();\n// if (reFillStyle) {\n// triangleDraw(borderCtx, x, y, \"small\");\n// borderCtx.globalCompositeOperation = \"source-over\";\n// borderCtx.fillStyle = reFillStyle;\n// borderCtx.fill();\n// }\n// const url = await loadImage(canvasToPng(borderCanvas));\n// ctx.globalCompositeOperation = \"source-over\";\n// ctx.drawImage(url, 0, 0);\n\n// return {\n// left: x,\n// top: y,\n// };\n// }\n\n// export function canvasToPng(canvas: HTMLCanvasElement) {\n// return canvas.toDataURL(\"image/png\");\n// }\n\n// export function coverCanvas(canvas: HTMLCanvasElement, x: number, y: number) {\n// const ctx = canvas.getContext(\"2d\");\n// const data = ctx.getImageData(x, y, IMG_SIZE, IMG_SIZE);\n// canvas.width = IMG_SIZE;\n// canvas.height = IMG_SIZE;\n// ctx.putImageData(data, 0, 0);\n\n// return canvas;\n// }\n","import { Language } from \"./lang\";\n\nconst host = \"https://captcha.resource.pandadagames.com/images/\";\n\nexport const CloseImage = `${host}close.png`;\nexport const ErrorImage = `${host}error.png`;\nexport const WaitingImage = `${host}waiting.png`;\nexport const LogoImage = (lang: Language) => `${host}${lang}_logo.png`;\nexport const RefreshImage = `${host}refresh.png`;\nexport const RetryImage = `${host}retry.jpeg`;\nexport const LoadingImage = `${host}loading.gif`;\n","import {\n CloseImage,\n RefreshImage,\n LogoImage,\n LoadingImage,\n RetryImage,\n} from \"./image-url\";\nimport { Language, resources, Translate } from \"./lang\";\n\nexport const wrapTemplate = (lang: Language) => `\n <div class=\"dx-captcha-header\">\n <img src=${CloseImage} />\n </div>\n <div class=\"dx-captcha-body\">\n <canvas></canvas>\n <img class=\"dx-captcha-body-slider\" draggable=\"false\" />\n <img class=\"dx-captcha-body-refresh\" src=${RefreshImage} width=\"16px\" height=\"16px\" />\n <img class=\"dx-captcha-body-logo\" src=${LogoImage(lang)} width=\"50px\" />\n <div class=\"dx-captcha-body-loading display-none\">\n <div>\n <img class=\"dx-captcha-body-loading-img\" src=${LoadingImage} />\n <div class=\"dx-captcha-body-loading-text\">${\n resources[lang][Translate.LOADING]\n }</div>\n </div>\n </div>\n </div>\n <div class=\"dx-captcha-bar\">\n <div class=\"dx-captcha-bar-slider\"></div>\n <div class=\"dx-captcha-bar-progress\"></div>\n <span class=\"dx-captcha-bar-text\">\n ${resources[lang][Translate.DRAG]}\n </span>\n </div>\n`;\n\nexport const defaultTemplate = (lang: Language) => `\n <div class=\"dx-captcha-mask\"></div>\n <div class=\"dx-captcha-wrap\">\n ${wrapTemplate(lang)}\n </div>\n`;\n\nexport const successBarTemplate = (lang: Language) => `\n <span class=\"dx-captcha-bar-text\">\n ${resources[lang][Translate.SUCCESS]}\n </span>\n`;\n\nexport const retryTemplate = (lang: Language) => `\n <div class=\"dx-captcha-retry\">\n <img class=\"dx-captcha-retry-img\" src=${RetryImage} />\n <div>${\n resources[lang][Translate.FAIL]\n }<a class=\"dx-captcha-retry-link\">${\n resources[lang][Translate.RETRY]\n}</a></div>\n </div>\n`;\n","import { isAndriod, isIos } from \"@blazes/webview-sdk/dist/env\";\nimport { ApiInstance } from \"./api\";\nimport { ICaptchaConfig } from \"./type\";\nimport { getLeft, loadImage, BACK_WIDTH, BACK_HEIGHT } from \"./utils\";\nimport \"./assets/style/index.less\";\nimport { defaultTemplate, retryTemplate, successBarTemplate } from \"./template\";\nimport { RefreshImage, WaitingImage, ErrorImage } from \"./image-url\";\nimport { Language } from \"./lang\";\n\nconst FALLBACK_DRUATION = 0.5;\n\nexport class Captcha {\n private root: HTMLDivElement;\n private refs: {\n wrapper: HTMLDivElement;\n close: HTMLImageElement;\n canvas: HTMLCanvasElement;\n fragment: HTMLImageElement;\n refresh: HTMLImageElement;\n logo: HTMLImageElement;\n bar: HTMLDivElement;\n slider: HTMLDivElement;\n progress: HTMLDivElement;\n infoText: HTMLSpanElement;\n loading: HTMLElement;\n };\n private token: string;\n private eventNames: {\n down: string;\n up: string;\n move: string;\n };\n private config: ICaptchaConfig;\n private resolve: (token: string) => void;\n private apiInstance: ApiInstance;\n\n constructor(config: ICaptchaConfig) {\n this.setConfig(config);\n this.apiInstance = new ApiInstance({ baseUrl: config.baseUrl });\n this.initEventNames();\n }\n\n private setConfig(config: ICaptchaConfig) {\n if (!Object.values(Language).includes(config.lang)) {\n throw new Error(`传入的lang ${config.lang} 不正确`);\n }\n this.config = Object.assign({}, config);\n }\n\n resetConfig(config: Partial<ICaptchaConfig>) {\n this.config = Object.assign(this.config, config);\n }\n\n private initEventNames() {\n if (isAndriod() || isIos()) {\n this.eventNames = {\n down: \"touchstart\",\n up: \"touchend\",\n move: \"touchmove\",\n };\n } else {\n this.eventNames = {\n down: \"mousedown\",\n up: \"mouseup\",\n move: \"mousemove\",\n };\n }\n }\n\n private initRoot() {\n const root = document.createElement(\"div\");\n root.classList.add(\"dx-captcha-root\");\n document.body.appendChild(root);\n\n return root;\n }\n\n show() {\n if (!this.root) {\n this.root = this.initRoot();\n }\n const p = new Promise<string>((r) => (this.resolve = r));\n this.render();\n return p;\n }\n\n private render() {\n this.root.innerHTML = defaultTemplate(this.config.lang);\n this.queryRef();\n this.handleHeader();\n this.handleBody().then((token) => {\n this.token = token;\n this.handleBar();\n });\n }\n\n private queryRef() {\n const query = <T>(selector: string): T =>\n this.root.querySelector(selector) as unknown as T;\n const wrapper = query<HTMLDivElement>(\".dx-captcha-wrap\");\n const close = query<HTMLImageElement>(\".dx-captcha-header img\");\n const canvas = query<HTMLCanvasElement>(\"canvas\");\n const bar = query<HTMLDivElement>(\".dx-captcha-bar\");\n const slider = query<HTMLDivElement>(\".dx-captcha-bar-slider\");\n const fragment = query<HTMLImageElement>(\".dx-captcha-body-slider\");\n const refresh = query<HTMLImageElement>(\".dx-captcha-body-refresh\");\n const logo = query<HTMLImageElement>(\".dx-captcha-body-logo\");\n const progress = query<HTMLDivElement>(\".dx-captcha-bar-progress\");\n const infoText = query<HTMLSpanElement>(\".dx-captcha-bar-text\");\n const loading = query<HTMLSpanElement>(\".dx-captcha-body-loading\");\n\n this.refs = {\n wrapper,\n close,\n canvas,\n fragment,\n bar,\n slider,\n progress,\n infoText,\n refresh,\n logo,\n loading,\n };\n }\n\n close() {\n const wrapper = this.refs.wrapper;\n wrapper.style.top = \"0\";\n wrapper.style.opacity = \"0\";\n setTimeout(() => {\n this.root.innerHTML = \"\";\n }, 300);\n }\n\n private retry() {\n this.refs.wrapper.innerHTML = retryTemplate(this.config.lang);\n const retryLink = this.refs.wrapper.querySelector(\n \".dx-captcha-retry-link\"\n ) as HTMLLinkElement;\n retryLink.addEventListener(\"click\", () => {\n this.render();\n });\n }\n\n private handleHeader() {\n const closeEl = this.refs.close;\n closeEl.addEventListener(\"click\", () => {\n this.close();\n });\n }\n\n private handleBody() {\n this.addRefresh();\n return this.drawBackground();\n }\n\n private drawBackground() {\n const { refs, apiInstance, config } = this;\n const { canvas, loading, fragment } = refs;\n canvas.width = BACK_WIDTH * devicePixelRatio;\n canvas.height = BACK_HEIGHT * devicePixelRatio;\n const ctx = canvas.getContext(\"2d\");\n let resolved: (token: string) => void;\n const p = new Promise<string>((r) => (resolved = r));\n\n loading.classList.remove(\"display-none\");\n apiInstance\n .getCaptcha({ appId: config.appId, version: config.version })\n .then(({ y, token, bgUrl, fgUrl }) => {\n loadImage(bgUrl, (url) => {\n loading.classList.add(\"display-none\");\n ctx.drawImage(url, 0, 0, canvas.width, canvas.height);\n fragment.src = fgUrl;\n fragment.style.top = `${y}px`;\n\n resolved(token);\n });\n })\n .catch(() => {\n this.retry();\n });\n\n return p;\n }\n\n private addRefresh() {\n const refresh = this.refs.refresh;\n refresh.src = RefreshImage;\n refresh.addEventListener(\"click\", () => {\n this.reset();\n });\n }\n\n reset() {\n this.clearCanvas();\n this.drawBackground().then((token) => {\n this.token = token;\n });\n const { slider, progress } = this.refs;\n this.loopBar((el) => {\n el.style.transitionDuration = \"0s\";\n });\n slider.style.backgroundImage = `url(${WaitingImage})`;\n progress.classList.remove(\"error\");\n progress.classList.add(\"success\");\n }\n\n private clearCanvas() {\n const canvas = this.refs.canvas;\n const ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n private handleBar() {\n const { down, move, up } = this.eventNames;\n const { bar, fragment, slider, progress } = this.refs;\n const maxLeft =\n bar.getBoundingClientRect().width - slider.getBoundingClientRect().width;\n\n let originX: number, curOffset: number;\n const fallbacking = { value: false };\n const moveBar = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const offset = this.getClientX(event) - originX + curOffset;\n if (offset > maxLeft || offset < 0) {\n return;\n }\n this.moveBar(offset);\n };\n const upMouse = () => {\n document.body.removeEventListener(move, moveBar);\n document.body.removeEventListener(up, upMouse);\n const left = getLeft(fragment);\n this.apiInstance\n .postValidate(this.token, {\n x: left,\n })\n .then(() => {\n this.verifySuccess();\n })\n .catch(() => {\n this.verifyFail(fallbacking);\n });\n };\n slider.addEventListener(down, (event: MouseEvent | TouchEvent) => {\n if (fallbacking.value) {\n return;\n }\n originX = this.getClientX(event);\n curOffset = getLeft(fragment);\n progress.classList.add(\"success\");\n document.body.addEventListener(move, moveBar);\n document.body.addEventListener(up, upMouse);\n });\n }\n\n private getClientX(event: MouseEvent | TouchEvent) {\n return (\n (event as MouseEvent).clientX || (event as TouchEvent).touches[0].clientX\n );\n }\n\n private verifyFail(fallbacking: { value: boolean }) {\n fallbacking.value = true;\n const { slider, progress } = this.refs;\n slider.style.backgroundImage = `url(${ErrorImage})`;\n progress.classList.remove(\"success\");\n progress.classList.add(\"error\");\n this.fallbackBar();\n setTimeout(() => {\n this.reset();\n fallbacking.value = false;\n }, FALLBACK_DRUATION * 1000);\n }\n\n private verifySuccess() {\n const { refs, token, config } = this;\n const bar = refs.bar;\n bar.innerHTML = successBarTemplate(this.config.lang);\n bar.classList.add(\"success\");\n setTimeout(() => {\n this.close();\n config.success?.(token);\n this.resolve(token);\n });\n }\n\n private moveBar(offset: number) {\n this.loopBar((el) => {\n el.style[this.getChangeProperty(el)] = `${offset}px`;\n });\n }\n\n private fallbackBar() {\n this.loopBar((el) => {\n el.style.transitionDuration = `${FALLBACK_DRUATION}s`;\n el.style[this.getChangeProperty(el)] = \"0\";\n });\n }\n\n private getChangeProperty(el: HTMLElement) {\n return el.classList.contains(\"dx-captcha-bar-progress\") ? \"width\" : \"left\";\n }\n\n private loopBar(callback: (el: HTMLElement) => void) {\n const { fragment, slider, progress } = this.refs;\n [fragment, slider, progress].forEach((el) => callback(el));\n }\n}\n\nexport interface Captcha {\n new (config: ICaptchaConfig): Captcha;\n}\n"],"sourceRoot":""}
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.dx-captcha-mask{background-color:#00000073;bottom:0;height:100%;left:0;position:fixed;right:0;top:0;z-index:1010}.dx-captcha-wrap{background:#fff;border-radius:4px;box-shadow:0 4px 12px #00000026;left:50%;padding:12px 20px;position:fixed;top:50%;transform:translate(-50%,-50%);transition:all .3s;z-index:1010}.dx-captcha-header{text-align:right}.dx-captcha-header img{cursor:pointer;height:14px;-
|
|
1
|
+
.dx-captcha-mask{background-color:#00000073;bottom:0;height:100%;left:0;position:fixed;right:0;top:0;z-index:1010}.dx-captcha-wrap{background:#fff;border-radius:4px;box-shadow:0 4px 12px #00000026;left:50%;padding:12px 20px;position:fixed;top:50%;transform:translate(-50%,-50%);transition:all .3s;z-index:1010}.dx-captcha-header{text-align:right}.dx-captcha-header img{cursor:pointer;height:14px;-ms-user-select:none;user-select:none;width:14px}.dx-captcha-body{margin-top:4px;position:relative}.dx-captcha-body-slider{height:60px;left:10px;top:50%;transition-property:left;width:60px}.dx-captcha-body-refresh,.dx-captcha-body-slider{position:absolute;-ms-user-select:none;user-select:none}.dx-captcha-body-refresh{cursor:pointer;left:275px;top:125px}.dx-captcha-body-logo{left:0;position:absolute;top:5px;-ms-user-select:none;user-select:none}.dx-captcha-body canvas{height:150px;width:300px}.dx-captcha-body-loading{align-items:center;background:#fff;border:1px solid #e9e9e9;border-radius:4px;box-sizing:content-box;display:flex;flex-wrap:wrap;font-size:12px;height:146px;justify-content:center;left:0;margin-top:8px;position:absolute;text-align:center;top:0;width:298px}.dx-captcha-body-loading-img{width:24px}.dx-captcha-body-loading-text{margin-top:8px}.dx-captcha-bar{background:#f7f7f7;border:1px solid #d2d2d2;border-radius:4px;color:#999;font-size:14px;height:38px;line-height:38px;margin-top:8px;position:relative;text-align:center;touch-action:none}.dx-captcha-bar-slider{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-size:contain;border-radius:4px;box-shadow:0 0 3px #bcbcbc;cursor:move;height:38px;left:0;opacity:.7;position:absolute;transition-property:left;width:60px}.dx-captcha-bar-text{margin-left:22px;-ms-user-select:none;user-select:none}.dx-captcha-bar-progress{bottom:0;left:0;position:absolute;top:0;transition-property:width}.dx-captcha-bar-progress.success{background:#d0fbee}.dx-captcha-bar-progress.error{background:#fa96a0}.dx-captcha-bar.success{background:#d4fff2;color:#01c7b5}.dx-captcha-bar.success .dx-captcha-bar-text{margin-left:0}.dx-captcha-retry{border:1px solid #e9e9e9;border-radius:4px;box-sizing:content-box;font-size:12px;height:186px;line-height:24px;margin-top:8px;overflow:hidden;text-align:center;width:100%}.dx-captcha-retry-img{margin:23px 60px 0;width:178px}.dx-captcha-retry a{color:#1f8efa;cursor:pointer}body{margin:0}.display-none{display:none}
|
package/dist/type.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export declare const AppId: {
|
|
|
6
6
|
readonly NINJA3: "ninja3";
|
|
7
7
|
};
|
|
8
8
|
export declare type InRecord<T> = Record<keyof T, T[keyof T]>;
|
|
9
|
-
declare type ValueOf<T> = T[keyof T];
|
|
10
9
|
export interface IPostValidate {
|
|
11
10
|
x: number;
|
|
12
11
|
}
|
|
@@ -21,10 +20,10 @@ export interface ICaptcha {
|
|
|
21
20
|
y: number;
|
|
22
21
|
}
|
|
23
22
|
export interface ICaptchaConfig {
|
|
24
|
-
appId:
|
|
23
|
+
appId: string;
|
|
25
24
|
success?: (token: string) => void;
|
|
26
25
|
baseUrl: string;
|
|
27
|
-
version:
|
|
26
|
+
version: string;
|
|
28
27
|
lang: Language;
|
|
29
28
|
}
|
|
30
29
|
export interface IResponse<T> {
|
|
@@ -32,4 +31,3 @@ export interface IResponse<T> {
|
|
|
32
31
|
msg: string;
|
|
33
32
|
data: T;
|
|
34
33
|
}
|
|
35
|
-
export {};
|