@swetrix/captcha 1.0.3

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/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 16.19.1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Swetrix
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ <img src="/src/assets/logo_blue.png" alt="" height="80" />
2
+
3
+ ## Description
4
+
5
+ Swetrix CAPTCHA is a privacy-oriented, simple and opensource CAPTCHA service.
6
+
7
+ See the full documentation at https://docs.swetrix.com/captcha/introduction
8
+
9
+ ## Development
10
+
11
+ To build the captcha run:
12
+ ```bash
13
+ npm run build
14
+ ```
15
+
16
+ After you build it, a new folder `dist` will appear. You can run `test.html` file via an extension like `Live server` to test it (don't forget to set up a valid project ID or one of our [dummy project IDs](https://docs.swetrix.com/captcha/testing)).
17
+
18
+ ## License
19
+
20
+ Swetrix CAPTCHA client is released under the MIT licence, see [LICENSE](LICENSE).
21
+
22
+ ## Bugs and security
23
+
24
+ Swetrix is open to pull-requests. Feel free to propose new features or submit bug requests via pull reuqests.\
25
+ For severe security issues, please contact us at security@swetrix.com
26
+
27
+ ## Contact
28
+
29
+ You can contact us via email at contact@swetrix.com
30
+
31
+ ## Donate
32
+ You can support the project by donating us at https://ko-fi.com/andriir \
33
+ We can only run our services by once again asking for your financial support!
Binary file
Binary file
@@ -0,0 +1 @@
1
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";function r(e,t){var n=Object.keys(t).map(function(e){return"".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(t[e]))}).join("&");return"".concat(e,"?").concat(n)}function c(e){var t=e.data;if(t){var e=t.type,n=t.cid,r=t.event;if(e===l&&n&&v.includes(n)){var a,i=document.getElementById(n),o=null!==i;switch(r){case"success":var c=t.token;if(!o)return void w(d.error,"[PM -> success] Input element does not exist.");i.value=c;break;case"failure":case"tokenExpired":if(!o)return void w(d.error,"[PM -> failure] Input element does not exist.");i.value="";break;case"manualStarted":if(!(a=document.getElementById(f(n))))return void w(d.error,"[PM -> manualStarted] Frame does not exist.");a.style.height=h.manual;break;case"manualFinished":(a=document.getElementById(f(n)))?a.style.height=h.default:w(d.error,"[PM -> manualFinished] Frame does not exist.")}}}}function e(e){!(e=void 0===e?!1:e)&&"swecaptcha"in window&&w(d.warn,"Captcha is already loaded."),window.swecaptcha=!0,window.addEventListener("message",c);for(var t,n,r=0,a=Array.from(document.querySelectorAll(".swecaptcha"));r<a.length;r++){var i=a[r],o={pid:(o=i).getAttribute("data-project-id"),respName:o.getAttribute("data-response-input-name")||s,theme:o.getAttribute("data-theme")};if(n=void 0,n=(t=o).theme,t=t.pid,!(n&&!p.includes(n)?(w(d.error,"Invalid data-theme parameter: ".concat(n)),!1):!(!t||!m(t))||(w(d.error,"Invalid data-project-id parameter: ".concat(t)),!1)))return void w(d.error,"Aborting captcha rendering due to invalid parameters.");n=i,t=o,i=void 0,i=g(),t=u(u({},t),{cid:i}),i=y(t),t=x(t),n.appendChild(i),n.appendChild(t)}}var d,u=function(){return(u=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},t=window.__SWETRIX_CAPTCHA_DEV||!1,a=t?"./light.html":"https://cap.swetrix.com/pages/light",i=t?"./dark.html":"https://cap.swetrix.com/pages/dark",s="swetrix-captcha-response",l="swetrix-captcha",p=["light","dark"],n=/^(?!.*--)[a-zA-Z0-9-]{12}$/,o=((t=d=d||{}).log="log",t.error="error",t.warn="warn",t.info="info",["AP00000000000","MP00000000000","FAIL000000000"]),m=function(e){return o.includes(e)||n.test(e)},h={default:"66px",manual:"200px"},f=function(e){return"".concat(e,"-frame")},v=[],w=function(e,t){console[e]("[Swetrix Captcha] ".concat(t))},g=function(){var e="swetrix-captcha-"+Math.random().toString(36).substr(2,6);return v.includes(e)?g():(v.push(e),e)},y=function(e){var t=e.theme,n=document.createElement("iframe");return n.id=f(e.cid),n.src=r("dark"===t?i:a,e),n.style.height=h.default,n.title="Swetrix Captcha",n.style.border="none",n.style.width="302px",n.style.overflow="visible",n},x=function(e){var t=e.cid,n=document.createElement("input");return n.type="hidden",n.name=e.respName,n.value="",n.id=t,n};window.swetrixCaptchaForceLoad=function(){return e(!0)},document.addEventListener("DOMContentLoaded",function(){return e()})});
@@ -0,0 +1 @@
1
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";function i(e,t){void 0===t&&(t={}),window.parent.postMessage(n({event:e,type:r,cid:window.__SWETRIX_CAPTCHA_ID},t),"*")}function u(e){w=e;var t,n=document.querySelector("#status-default"),r=document.querySelector("#status-failure"),c={checkbox:document.querySelector("#checkbox"),failure:document.querySelector("#failure"),completed:document.querySelector("#completed"),loading:document.querySelector("#loading")};null!=(t=c.checkbox)&&t.classList.add("hidden"),null!=(t=c.failure)&&t.classList.add("hidden"),null!=(t=c.completed)&&t.classList.add("hidden"),null!=(t=c.loading)&&t.classList.add("hidden"),"failure"===e?(null!=n&&n.classList.add("hidden"),null!=r&&r.classList.remove("hidden")):(null!=n&&n.classList.remove("hidden"),null!=r&&r.classList.add("hidden")),null!=(t=c[e])&&t.classList.remove("hidden")}function l(){setTimeout(function(){i(d.TOKEN_EXPIRED),u(f.checkbox)},3e5)}function s(){var e=document.querySelector("#manual-challenge"),t=document.querySelector("#svg-captcha");t&&(i(d.MANUAL_FINISHED),t.innerHTML="",null!=e)&&e.classList.add("hidden")}var d,f,e,n=function(){return(n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var c in t=arguments[n])Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c]);return e}).apply(this,arguments)},h=function(e,a,i,u){return new(i=i||Promise)(function(n,t){function r(e){try{o(u.next(e))}catch(e){t(e)}}function c(e){try{o(u.throw(e))}catch(e){t(e)}}function o(e){var t;e.done?n(e.value):((t=e.value)instanceof i?t:new i(function(e){e(t)})).then(r,c)}o((u=u.apply(e,a||[])).next())})},p=function(r,c){var o,a,i,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},l={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function e(n){return function(e){var t=[n,e];if(o)throw new TypeError("Generator is already executing.");for(;u=l&&t[l=0]?0:u;)try{if(o=1,a&&(i=2&t[0]?a.return:t[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,t[1])).done)return i;switch(a=0,(t=i?[2&t[0],i.value]:t)[0]){case 0:case 1:i=t;break;case 4:return u.label++,{value:t[1],done:!1};case 5:u.label++,a=t[1],t=[0];continue;case 7:t=u.ops.pop(),u.trys.pop();continue;default:if(!(i=0<(i=u.trys).length&&i[i.length-1])&&(6===t[0]||2===t[0])){u=0;continue}if(3===t[0]&&(!i||t[1]>i[0]&&t[1]<i[3]))u.label=t[1];else if(6===t[0]&&u.label<i[1])u.label=i[1],i=t;else{if(!(i&&u.label<i[2])){i[2]&&u.ops.pop(),u.trys.pop();continue}u.label=i[2],u.ops.push(t)}}t=c.call(r,u)}catch(e){t=[6,e],a=0}finally{o=i=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},v=window.__SWETRIX_CAPTCHA_DEV||!1?"http://localhost:5005/v1/captcha":"https://api.swetrix.com/v1/captcha",r="swetrix-captcha",y="",m="/verify",S="/generate",E="/verify-manual",w=((e=d=d||{}).SUCCESS="success",e.FAILURE="failure",e.TOKEN_EXPIRED="tokenExpired",e.MANUAL_STARTED="manualStarted",e.MANUAL_FINISHED="manualFinished",(e=f=f||{}).checkbox="checkbox",e.failure="failure",e.completed="completed",e.loading="loading",f.checkbox);document.addEventListener("DOMContentLoaded",function(){var e=document.querySelector("#swetrix-captcha"),t=document.querySelector("#branding"),a=document.querySelector("#svg-captcha-input"),n=document.querySelector("#manual-submit-btn");null!=t&&t.addEventListener("click",function(e){e.stopPropagation()}),null!=n&&n.addEventListener("click",function(o){return h(void 0,void 0,void 0,function(){var t,n,r,c;return p(this,function(e){switch(e.label){case 0:if(o.stopPropagation(),!a)return[2];if(!(t=a.value))return[2];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,fetch("".concat(v).concat(E),{method:"POST",body:JSON.stringify({hash:y,code:t,pid:window.__SWETRIX_PROJECT_ID}),headers:{"Content-Type":"application/json"}})];case 2:return n=e.sent(),[3,4];case 3:return e.sent(),s(),i(d.FAILURE),u(f.failure),a.value="",[2];case 4:return n.ok?[4,n.json()]:(s(),i(d.FAILURE),u(f.failure),a.value="",[2]);case 5:return c=e.sent(),r=c.success,c=c.token,r?(a.value="",i(d.SUCCESS,{token:c}),l(),u(f.completed),s()):(s(),i(d.FAILURE),u(f.failure),a.value=""),[2]}})})}),null!=e&&e.addEventListener("click",function(){return h(void 0,void 0,void 0,function(){var c,o,a;return p(this,function(e){switch(e.label){case 0:if(w===f.loading||w===f.completed)return[2];if(w===f.failure)return u(f.checkbox),[2];u(f.loading),e.label=1;case 1:return e.trys.push([1,3,,5]),[4,h(void 0,void 0,void 0,function(){var t;return p(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,fetch("".concat(v).concat(m),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pid:window.__SWETRIX_PROJECT_ID})})];case 1:return(t=e.sent()).ok?[4,t.json()]:[2,{}];case 2:return[2,e.sent()];case 3:return e.sent(),i(d.FAILURE),u(f.failure),[2,{}];case 4:return[2]}})})];case 2:if(c=e.sent().token)return i(d.SUCCESS,{token:c}),l(),u(f.completed),[2];throw"";case 3:return e.sent(),[4,h(void 0,void 0,void 0,function(){var t;return p(this,function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,fetch("".concat(v).concat(S),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:window.__SWETRIX_CAPTCHA_THEME||"light",pid:window.__SWETRIX_PROJECT_ID})})];case 1:if((t=e.sent()).ok)return[4,t.json()];throw"";case 2:return[2,e.sent()];case 3:return e.sent(),i(d.FAILURE),u(f.failure),[2,{}];case 4:return[2]}})})];case 4:return c=e.sent(),o=c.data,a=c.hash,y=a,t=o,n=document.querySelector("#manual-challenge"),(r=document.querySelector("#svg-captcha"))&&(t?r.innerHTML=t:((t=document.createElement("p")).innerText="Error loading captcha",t.style.color="#d6292a",null!=r&&r.appendChild(t)),i(d.MANUAL_STARTED),null!=n)&&n.classList.remove("hidden"),[2];case 5:return[2]}var t,n,r})})})})});
@@ -0,0 +1,33 @@
1
+ declare const isDevelopment: any;
2
+ declare const CAPTCHA_SELECTOR = ".swecaptcha";
3
+ declare const LIGHT_CAPTCHA_IFRAME_URL: string;
4
+ declare const DARK_CAPTCHA_IFRAME_URL: string;
5
+ declare const DEFAULT_RESPONSE_INPUT_NAME = "swetrix-captcha-response";
6
+ declare const MESSAGE_IDENTIFIER = "swetrix-captcha";
7
+ declare const ID_PREFIX = "swetrix-captcha-";
8
+ declare const THEMES: string[];
9
+ declare const PID_REGEX: RegExp;
10
+ declare enum LOG_ACTIONS {
11
+ log = "log",
12
+ error = "error",
13
+ warn = "warn",
14
+ info = "info"
15
+ }
16
+ declare const DUMMY_PIDS: string[];
17
+ declare const isValidPID: (pid: string) => boolean;
18
+ declare const FRAME_HEIGHT_MAPPING: {
19
+ default: string;
20
+ manual: string;
21
+ };
22
+ declare const getFrameID: (cid: string) => string;
23
+ declare const ids: string[];
24
+ declare const log: (status: LOG_ACTIONS, text: string) => void;
25
+ declare const appendParamsToURL: (url: string, params: any) => string;
26
+ declare const renderCaptcha: (container: Element, params: any) => void;
27
+ declare const generateRandomID: () => string;
28
+ declare const postMessageCallback: (pmEvent: MessageEvent) => void;
29
+ declare const generateCaptchaFrame: (params: any) => HTMLIFrameElement;
30
+ declare const generateHiddenInput: (params: any) => HTMLInputElement;
31
+ declare const validateParams: (params: any) => boolean;
32
+ declare const parseParams: (container: Element) => object;
33
+ declare const main: (forced?: boolean) => void;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ // @ts-ignore
3
+ const isDevelopment = window.__SWETRIX_CAPTCHA_DEV || false;
4
+ const CAPTCHA_SELECTOR = '.swecaptcha';
5
+ const LIGHT_CAPTCHA_IFRAME_URL = isDevelopment ? './light.html' : 'https://cap.swetrix.com/pages/light';
6
+ const DARK_CAPTCHA_IFRAME_URL = isDevelopment ? './dark.html' : 'https://cap.swetrix.com/pages/dark';
7
+ const DEFAULT_RESPONSE_INPUT_NAME = 'swetrix-captcha-response';
8
+ const MESSAGE_IDENTIFIER = 'swetrix-captcha';
9
+ const ID_PREFIX = 'swetrix-captcha-';
10
+ const THEMES = ['light', 'dark'];
11
+ const PID_REGEX = /^(?!.*--)[a-zA-Z0-9-]{12}$/;
12
+ var LOG_ACTIONS;
13
+ (function (LOG_ACTIONS) {
14
+ LOG_ACTIONS["log"] = "log";
15
+ LOG_ACTIONS["error"] = "error";
16
+ LOG_ACTIONS["warn"] = "warn";
17
+ LOG_ACTIONS["info"] = "info";
18
+ })(LOG_ACTIONS || (LOG_ACTIONS = {}));
19
+ const DUMMY_PIDS = [
20
+ 'AP00000000000', 'MP00000000000', 'FAIL000000000',
21
+ ];
22
+ const isValidPID = (pid) => DUMMY_PIDS.includes(pid) || PID_REGEX.test(pid);
23
+ const FRAME_HEIGHT_MAPPING = {
24
+ default: '66px',
25
+ manual: '200px',
26
+ };
27
+ const getFrameID = (cid) => `${cid}-frame`;
28
+ const ids = [];
29
+ const log = (status, text) => {
30
+ console[status](`[Swetrix Captcha] ${text}`);
31
+ };
32
+ const appendParamsToURL = (url, params) => {
33
+ const queryString = Object.keys(params).map((key) => {
34
+ return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;
35
+ }).join('&');
36
+ return `${url}?${queryString}`;
37
+ };
38
+ const renderCaptcha = (container, params) => {
39
+ const cid = generateRandomID();
40
+ const cParams = {
41
+ ...params,
42
+ cid, // CAPTCHA ID
43
+ };
44
+ const frame = generateCaptchaFrame(cParams);
45
+ const input = generateHiddenInput(cParams);
46
+ container.appendChild(frame);
47
+ container.appendChild(input);
48
+ };
49
+ const generateRandomID = () => {
50
+ const randomID = ID_PREFIX + Math.random().toString(36).substr(2, 6);
51
+ if (ids.includes(randomID)) {
52
+ return generateRandomID();
53
+ }
54
+ ids.push(randomID);
55
+ return randomID;
56
+ };
57
+ const postMessageCallback = (pmEvent) => {
58
+ // TODO: Validate origin
59
+ const { data } = pmEvent;
60
+ if (!data) {
61
+ return;
62
+ }
63
+ const { type, cid, event, } = data;
64
+ if (type !== MESSAGE_IDENTIFIER) {
65
+ return;
66
+ }
67
+ if (!cid || !ids.includes(cid)) {
68
+ return;
69
+ }
70
+ const input = document.getElementById(cid);
71
+ const inputExists = input !== null;
72
+ switch (event) {
73
+ case 'success': {
74
+ const { token } = data;
75
+ if (!inputExists) {
76
+ log(LOG_ACTIONS.error, '[PM -> success] Input element does not exist.');
77
+ return;
78
+ }
79
+ // @ts-ignore
80
+ input.value = token;
81
+ break;
82
+ }
83
+ case 'failure': {
84
+ if (!inputExists) {
85
+ log(LOG_ACTIONS.error, '[PM -> failure] Input element does not exist.');
86
+ return;
87
+ }
88
+ // @ts-ignore
89
+ input.value = '';
90
+ break;
91
+ }
92
+ case 'tokenExpired': {
93
+ if (!inputExists) {
94
+ log(LOG_ACTIONS.error, '[PM -> failure] Input element does not exist.');
95
+ return;
96
+ }
97
+ // @ts-ignore
98
+ input.value = '';
99
+ break;
100
+ }
101
+ case 'manualStarted': {
102
+ const frame = document.getElementById(getFrameID(cid));
103
+ if (!frame) {
104
+ log(LOG_ACTIONS.error, '[PM -> manualStarted] Frame does not exist.');
105
+ return;
106
+ }
107
+ frame.style.height = FRAME_HEIGHT_MAPPING.manual;
108
+ break;
109
+ }
110
+ case 'manualFinished': {
111
+ const frame = document.getElementById(getFrameID(cid));
112
+ if (!frame) {
113
+ log(LOG_ACTIONS.error, '[PM -> manualFinished] Frame does not exist.');
114
+ return;
115
+ }
116
+ frame.style.height = FRAME_HEIGHT_MAPPING.default;
117
+ break;
118
+ }
119
+ }
120
+ };
121
+ const generateCaptchaFrame = (params) => {
122
+ const { theme } = params;
123
+ const captchaFrame = document.createElement('iframe');
124
+ captchaFrame.id = getFrameID(params.cid);
125
+ captchaFrame.src = theme === 'dark'
126
+ ? appendParamsToURL(DARK_CAPTCHA_IFRAME_URL, params)
127
+ : appendParamsToURL(LIGHT_CAPTCHA_IFRAME_URL, params);
128
+ captchaFrame.style.height = FRAME_HEIGHT_MAPPING.default;
129
+ captchaFrame.title = 'Swetrix Captcha';
130
+ captchaFrame.style.border = 'none';
131
+ captchaFrame.style.width = '302px';
132
+ captchaFrame.style.overflow = 'visible';
133
+ return captchaFrame;
134
+ };
135
+ const generateHiddenInput = (params) => {
136
+ const { cid } = params;
137
+ const input = document.createElement('input');
138
+ input.type = 'hidden';
139
+ input.name = params.respName;
140
+ input.value = '';
141
+ input.id = cid;
142
+ return input;
143
+ };
144
+ const validateParams = (params) => {
145
+ const { theme, pid } = params;
146
+ if (theme && !THEMES.includes(theme)) {
147
+ log(LOG_ACTIONS.error, `Invalid data-theme parameter: ${theme}`);
148
+ return false;
149
+ }
150
+ if (!pid || !isValidPID(pid)) {
151
+ log(LOG_ACTIONS.error, `Invalid data-project-id parameter: ${pid}`);
152
+ return false;
153
+ }
154
+ return true;
155
+ };
156
+ const parseParams = (container) => ({
157
+ pid: container.getAttribute('data-project-id'),
158
+ respName: container.getAttribute('data-response-input-name') || DEFAULT_RESPONSE_INPUT_NAME,
159
+ theme: container.getAttribute('data-theme'),
160
+ });
161
+ const main = (forced = false) => {
162
+ if (!forced && 'swecaptcha' in window) {
163
+ log(LOG_ACTIONS.warn, 'Captcha is already loaded.');
164
+ }
165
+ // TODO: Add some callbacks here
166
+ // @ts-ignore
167
+ window.swecaptcha = true;
168
+ window.addEventListener('message', postMessageCallback);
169
+ const containers = Array.from(document.querySelectorAll(CAPTCHA_SELECTOR));
170
+ for (const container of containers) {
171
+ const params = parseParams(container);
172
+ if (!validateParams(params)) {
173
+ log(LOG_ACTIONS.error, 'Aborting captcha rendering due to invalid parameters.');
174
+ return;
175
+ }
176
+ renderCaptcha(container, params);
177
+ }
178
+ };
179
+ // @ts-ignore
180
+ window.swetrixCaptchaForceLoad = () => main(true);
181
+ document.addEventListener('DOMContentLoaded', () => main());
182
+ //# sourceMappingURL=captcha-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha-loader.js","sourceRoot":"","sources":["../../src/captcha-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ declare const isDevelopment: any;
2
+ declare const API_URL: string;
3
+ declare const MSG_IDENTIFIER = "swetrix-captcha";
4
+ declare const DEFAULT_THEME = "light";
5
+ declare const CAPTCHA_TOKEN_LIFETIME = 300;
6
+ declare let TOKEN: string;
7
+ declare let HASH: string;
8
+ declare const ENDPOINTS: {
9
+ VERIFY: string;
10
+ GENERATE: string;
11
+ VERIFY_MANUAL: string;
12
+ };
13
+ declare enum IFRAME_MESSAGE_TYPES {
14
+ SUCCESS = "success",
15
+ FAILURE = "failure",
16
+ TOKEN_EXPIRED = "tokenExpired",
17
+ MANUAL_STARTED = "manualStarted",
18
+ MANUAL_FINISHED = "manualFinished"
19
+ }
20
+ declare enum ACTION {
21
+ checkbox = "checkbox",
22
+ failure = "failure",
23
+ completed = "completed",
24
+ loading = "loading"
25
+ }
26
+ declare let activeAction: ACTION;
27
+ declare const sendMessageToLoader: (event: IFRAME_MESSAGE_TYPES, data?: {}) => void;
28
+ /**
29
+ * Sets the provided action visible and the rest hidden
30
+ * @param {*} action checkbox | failure | completed | loading
31
+ */
32
+ declare const activateAction: (action: ACTION) => void;
33
+ declare const setLifetimeTimeout: () => void;
34
+ declare const enableManualChallenge: (svg: string) => void;
35
+ declare const disableManualChallenge: () => void;
36
+ declare const generateCaptcha: () => Promise<any>;
37
+ declare const verify: () => Promise<any>;
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ // @ts-ignore
3
+ const isDevelopment = window.__SWETRIX_CAPTCHA_DEV || false;
4
+ const API_URL = isDevelopment ? 'http://localhost:5005/v1/captcha' : 'https://api.swetrix.com/v1/captcha';
5
+ const MSG_IDENTIFIER = 'swetrix-captcha';
6
+ const DEFAULT_THEME = 'light';
7
+ const CAPTCHA_TOKEN_LIFETIME = 300; // seconds (5 minutes).
8
+ let TOKEN = '';
9
+ let HASH = '';
10
+ const ENDPOINTS = {
11
+ VERIFY: '/verify',
12
+ GENERATE: '/generate',
13
+ VERIFY_MANUAL: '/verify-manual',
14
+ };
15
+ var IFRAME_MESSAGE_TYPES;
16
+ (function (IFRAME_MESSAGE_TYPES) {
17
+ IFRAME_MESSAGE_TYPES["SUCCESS"] = "success";
18
+ IFRAME_MESSAGE_TYPES["FAILURE"] = "failure";
19
+ IFRAME_MESSAGE_TYPES["TOKEN_EXPIRED"] = "tokenExpired";
20
+ IFRAME_MESSAGE_TYPES["MANUAL_STARTED"] = "manualStarted";
21
+ IFRAME_MESSAGE_TYPES["MANUAL_FINISHED"] = "manualFinished";
22
+ })(IFRAME_MESSAGE_TYPES || (IFRAME_MESSAGE_TYPES = {}));
23
+ var ACTION;
24
+ (function (ACTION) {
25
+ ACTION["checkbox"] = "checkbox";
26
+ ACTION["failure"] = "failure";
27
+ ACTION["completed"] = "completed";
28
+ ACTION["loading"] = "loading";
29
+ })(ACTION || (ACTION = {}));
30
+ let activeAction = ACTION.checkbox;
31
+ const sendMessageToLoader = (event, data = {}) => {
32
+ window.parent.postMessage({
33
+ event,
34
+ type: MSG_IDENTIFIER,
35
+ // @ts-ignore
36
+ cid: window.__SWETRIX_CAPTCHA_ID,
37
+ ...data,
38
+ }, '*');
39
+ };
40
+ /**
41
+ * Sets the provided action visible and the rest hidden
42
+ * @param {*} action checkbox | failure | completed | loading
43
+ */
44
+ const activateAction = (action) => {
45
+ activeAction = action;
46
+ const statusDefault = document.querySelector('#status-default');
47
+ const statusFailure = document.querySelector('#status-failure');
48
+ const actions = {
49
+ checkbox: document.querySelector('#checkbox'),
50
+ failure: document.querySelector('#failure'),
51
+ completed: document.querySelector('#completed'),
52
+ loading: document.querySelector('#loading'),
53
+ };
54
+ // Apply hidden class to all actions
55
+ actions.checkbox?.classList.add('hidden');
56
+ actions.failure?.classList.add('hidden');
57
+ actions.completed?.classList.add('hidden');
58
+ actions.loading?.classList.add('hidden');
59
+ // Change the status text
60
+ if (action === 'failure') {
61
+ statusDefault?.classList.add('hidden');
62
+ statusFailure?.classList.remove('hidden');
63
+ }
64
+ else {
65
+ statusDefault?.classList.remove('hidden');
66
+ statusFailure?.classList.add('hidden');
67
+ }
68
+ // Remove hidden class from the provided action
69
+ actions[action]?.classList.remove('hidden');
70
+ };
71
+ const setLifetimeTimeout = () => {
72
+ setTimeout(() => {
73
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.TOKEN_EXPIRED);
74
+ activateAction(ACTION.checkbox);
75
+ }, CAPTCHA_TOKEN_LIFETIME * 1000);
76
+ };
77
+ const enableManualChallenge = (svg) => {
78
+ const manualChallenge = document.querySelector('#manual-challenge');
79
+ const svgCaptcha = document.querySelector('#svg-captcha');
80
+ if (!svgCaptcha) {
81
+ return;
82
+ }
83
+ if (!svg) {
84
+ const error = document.createElement('p');
85
+ error.innerText = 'Error loading captcha';
86
+ error.style.color = '#d6292a';
87
+ svgCaptcha?.appendChild(error);
88
+ }
89
+ else {
90
+ svgCaptcha.innerHTML = svg;
91
+ }
92
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.MANUAL_STARTED);
93
+ manualChallenge?.classList.remove('hidden');
94
+ };
95
+ const disableManualChallenge = () => {
96
+ const manualChallenge = document.querySelector('#manual-challenge');
97
+ const svgCaptcha = document.querySelector('#svg-captcha');
98
+ if (!svgCaptcha) {
99
+ return;
100
+ }
101
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.MANUAL_FINISHED);
102
+ svgCaptcha.innerHTML = '';
103
+ manualChallenge?.classList.add('hidden');
104
+ };
105
+ const generateCaptcha = async () => {
106
+ try {
107
+ const response = await fetch(`${API_URL}${ENDPOINTS.GENERATE}`, {
108
+ method: 'POST',
109
+ headers: {
110
+ 'Content-Type': 'application/json',
111
+ },
112
+ body: JSON.stringify({
113
+ // @ts-ignore
114
+ theme: window.__SWETRIX_CAPTCHA_THEME || DEFAULT_THEME,
115
+ // @ts-ignore
116
+ pid: window.__SWETRIX_PROJECT_ID,
117
+ }),
118
+ });
119
+ if (!response.ok) {
120
+ throw '';
121
+ }
122
+ const data = await response.json();
123
+ return data;
124
+ }
125
+ catch (e) {
126
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.FAILURE);
127
+ activateAction(ACTION.failure);
128
+ return {};
129
+ }
130
+ };
131
+ const verify = async () => {
132
+ try {
133
+ const response = await fetch(`${API_URL}${ENDPOINTS.VERIFY}`, {
134
+ method: 'POST',
135
+ headers: {
136
+ 'Content-Type': 'application/json',
137
+ },
138
+ body: JSON.stringify({
139
+ // @ts-ignore
140
+ pid: window.__SWETRIX_PROJECT_ID,
141
+ }),
142
+ });
143
+ if (!response.ok) {
144
+ return {};
145
+ }
146
+ const data = await response.json();
147
+ return data;
148
+ }
149
+ catch (e) {
150
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.FAILURE);
151
+ activateAction(ACTION.failure);
152
+ return {};
153
+ }
154
+ };
155
+ document.addEventListener('DOMContentLoaded', () => {
156
+ const captchaComponent = document.querySelector('#swetrix-captcha');
157
+ const branding = document.querySelector('#branding');
158
+ const svgCaptchaInput = document.querySelector('#svg-captcha-input');
159
+ const manualSubmitBtn = document.querySelector('#manual-submit-btn');
160
+ branding?.addEventListener('click', (e) => {
161
+ e.stopPropagation();
162
+ });
163
+ manualSubmitBtn?.addEventListener('click', async (e) => {
164
+ e.stopPropagation();
165
+ if (!svgCaptchaInput) {
166
+ return;
167
+ }
168
+ // @ts-ignore
169
+ const code = svgCaptchaInput.value;
170
+ if (!code) {
171
+ return;
172
+ }
173
+ let response;
174
+ try {
175
+ response = await fetch(`${API_URL}${ENDPOINTS.VERIFY_MANUAL}`, {
176
+ method: 'POST',
177
+ body: JSON.stringify({
178
+ hash: HASH,
179
+ code,
180
+ // @ts-ignore
181
+ pid: window.__SWETRIX_PROJECT_ID,
182
+ }),
183
+ headers: {
184
+ 'Content-Type': 'application/json',
185
+ },
186
+ });
187
+ }
188
+ catch (e) {
189
+ disableManualChallenge();
190
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.FAILURE);
191
+ activateAction(ACTION.failure);
192
+ // @ts-ignore
193
+ svgCaptchaInput.value = '';
194
+ return;
195
+ }
196
+ if (!response.ok) {
197
+ disableManualChallenge();
198
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.FAILURE);
199
+ activateAction(ACTION.failure);
200
+ // @ts-ignore
201
+ svgCaptchaInput.value = '';
202
+ return;
203
+ }
204
+ const { success, token } = await response.json();
205
+ if (!success) {
206
+ disableManualChallenge();
207
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.FAILURE);
208
+ activateAction(ACTION.failure);
209
+ // @ts-ignore
210
+ svgCaptchaInput.value = '';
211
+ return;
212
+ }
213
+ // @ts-ignore
214
+ svgCaptchaInput.value = '';
215
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.SUCCESS, { token });
216
+ setLifetimeTimeout();
217
+ activateAction(ACTION.completed);
218
+ disableManualChallenge();
219
+ });
220
+ captchaComponent?.addEventListener('click', async () => {
221
+ if (activeAction === ACTION.loading || activeAction === ACTION.completed) {
222
+ return;
223
+ }
224
+ if (activeAction === ACTION.failure) {
225
+ activateAction(ACTION.checkbox);
226
+ return;
227
+ }
228
+ activateAction(ACTION.loading);
229
+ try {
230
+ const { token } = await verify();
231
+ if (!token) {
232
+ throw '';
233
+ }
234
+ TOKEN = token;
235
+ sendMessageToLoader(IFRAME_MESSAGE_TYPES.SUCCESS, { token });
236
+ setLifetimeTimeout();
237
+ activateAction(ACTION.completed);
238
+ return;
239
+ }
240
+ catch (e) {
241
+ const { data, hash } = await generateCaptcha();
242
+ HASH = hash;
243
+ enableManualChallenge(data);
244
+ return;
245
+ }
246
+ });
247
+ });
248
+ //# sourceMappingURL=captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/captcha.ts"],"names":[],"mappings":"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"}