altcha 1.4.2 → 2.0.0-beta.1

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.
Files changed (112) hide show
  1. package/README.md +144 -156
  2. package/dist/altcha.d.ts +4 -0
  3. package/dist/altcha.js +1634 -1337
  4. package/dist/altcha.umd.cjs +10 -7
  5. package/dist_external/altcha.css +127 -13
  6. package/dist_external/altcha.d.ts +4 -0
  7. package/dist_external/altcha.js +1660 -1364
  8. package/dist_external/altcha.umd.cjs +9 -6
  9. package/dist_i18n/all.js +855 -0
  10. package/dist_i18n/all.umd.cjs +1 -0
  11. package/dist_i18n/americas.js +57 -0
  12. package/dist_i18n/americas.umd.cjs +1 -0
  13. package/dist_i18n/ar.js +22 -0
  14. package/dist_i18n/ar.umd.cjs +1 -0
  15. package/dist_i18n/asia.js +304 -0
  16. package/dist_i18n/asia.umd.cjs +1 -0
  17. package/dist_i18n/bg.js +22 -0
  18. package/dist_i18n/bg.umd.cjs +1 -0
  19. package/dist_i18n/bn.js +22 -0
  20. package/dist_i18n/bn.umd.cjs +1 -0
  21. package/dist_i18n/cs.js +22 -0
  22. package/dist_i18n/cs.umd.cjs +1 -0
  23. package/dist_i18n/da.js +22 -0
  24. package/dist_i18n/da.umd.cjs +1 -0
  25. package/dist_i18n/de.js +22 -0
  26. package/dist_i18n/de.umd.cjs +1 -0
  27. package/dist_i18n/el.js +22 -0
  28. package/dist_i18n/el.umd.cjs +1 -0
  29. package/dist_i18n/en.js +22 -0
  30. package/dist_i18n/en.umd.cjs +1 -0
  31. package/dist_i18n/es-419.js +22 -0
  32. package/dist_i18n/es-419.umd.cjs +1 -0
  33. package/dist_i18n/es-es.js +22 -0
  34. package/dist_i18n/es-es.umd.cjs +1 -0
  35. package/dist_i18n/et.js +22 -0
  36. package/dist_i18n/et.umd.cjs +1 -0
  37. package/dist_i18n/eu.js +22 -0
  38. package/dist_i18n/eu.umd.cjs +1 -0
  39. package/dist_i18n/europe.js +494 -0
  40. package/dist_i18n/europe.umd.cjs +1 -0
  41. package/dist_i18n/fi.js +22 -0
  42. package/dist_i18n/fi.umd.cjs +1 -0
  43. package/dist_i18n/fr-ca.js +22 -0
  44. package/dist_i18n/fr-ca.umd.cjs +1 -0
  45. package/dist_i18n/fr-fr.js +22 -0
  46. package/dist_i18n/fr-fr.umd.cjs +1 -0
  47. package/dist_i18n/ga.js +22 -0
  48. package/dist_i18n/ga.umd.cjs +1 -0
  49. package/dist_i18n/he.js +22 -0
  50. package/dist_i18n/he.umd.cjs +1 -0
  51. package/dist_i18n/hi.js +22 -0
  52. package/dist_i18n/hi.umd.cjs +1 -0
  53. package/dist_i18n/hr.js +22 -0
  54. package/dist_i18n/hr.umd.cjs +1 -0
  55. package/dist_i18n/hu.js +22 -0
  56. package/dist_i18n/hu.umd.cjs +1 -0
  57. package/dist_i18n/id.js +22 -0
  58. package/dist_i18n/id.umd.cjs +1 -0
  59. package/dist_i18n/it.js +22 -0
  60. package/dist_i18n/it.umd.cjs +1 -0
  61. package/dist_i18n/ja.js +22 -0
  62. package/dist_i18n/ja.umd.cjs +1 -0
  63. package/dist_i18n/ko.js +22 -0
  64. package/dist_i18n/ko.umd.cjs +1 -0
  65. package/dist_i18n/lt.js +22 -0
  66. package/dist_i18n/lt.umd.cjs +1 -0
  67. package/dist_i18n/lv.js +22 -0
  68. package/dist_i18n/lv.umd.cjs +1 -0
  69. package/dist_i18n/mr.js +22 -0
  70. package/dist_i18n/mr.umd.cjs +1 -0
  71. package/dist_i18n/mt.js +22 -0
  72. package/dist_i18n/mt.umd.cjs +1 -0
  73. package/dist_i18n/nl.js +22 -0
  74. package/dist_i18n/nl.umd.cjs +1 -0
  75. package/dist_i18n/pl.js +22 -0
  76. package/dist_i18n/pl.umd.cjs +1 -0
  77. package/dist_i18n/pt-br.js +22 -0
  78. package/dist_i18n/pt-br.umd.cjs +1 -0
  79. package/dist_i18n/pt-pt.js +22 -0
  80. package/dist_i18n/pt-pt.umd.cjs +1 -0
  81. package/dist_i18n/ro.js +22 -0
  82. package/dist_i18n/ro.umd.cjs +1 -0
  83. package/dist_i18n/ru.js +22 -0
  84. package/dist_i18n/ru.umd.cjs +1 -0
  85. package/dist_i18n/sk.js +22 -0
  86. package/dist_i18n/sk.umd.cjs +1 -0
  87. package/dist_i18n/sl.js +22 -0
  88. package/dist_i18n/sl.umd.cjs +1 -0
  89. package/dist_i18n/sv.js +22 -0
  90. package/dist_i18n/sv.umd.cjs +1 -0
  91. package/dist_i18n/ta.js +22 -0
  92. package/dist_i18n/ta.umd.cjs +1 -0
  93. package/dist_i18n/te.js +22 -0
  94. package/dist_i18n/te.umd.cjs +1 -0
  95. package/dist_i18n/th.js +22 -0
  96. package/dist_i18n/th.umd.cjs +1 -0
  97. package/dist_i18n/tr.js +22 -0
  98. package/dist_i18n/tr.umd.cjs +1 -0
  99. package/dist_i18n/uk.js +22 -0
  100. package/dist_i18n/uk.umd.cjs +1 -0
  101. package/dist_i18n/ur.js +22 -0
  102. package/dist_i18n/ur.umd.cjs +1 -0
  103. package/dist_i18n/vi.js +22 -0
  104. package/dist_i18n/vi.umd.cjs +1 -0
  105. package/dist_i18n/zh-cn.js +22 -0
  106. package/dist_i18n/zh-cn.umd.cjs +1 -0
  107. package/dist_i18n/zh-tw.js +22 -0
  108. package/dist_i18n/zh-tw.umd.cjs +1 -0
  109. package/dist_plugins/obfuscation.js +10 -10
  110. package/dist_plugins/obfuscation.umd.cjs +1 -1
  111. package/package.json +12 -8
  112. package/postinstall.js +0 -10
@@ -0,0 +1,22 @@
1
+ const e = {
2
+ ariaLinkLabel: "Besök Altcha.org",
3
+ enterCode: "Ange kod",
4
+ enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
5
+ error: "Verifiering misslyckades. Försök igen senare.",
6
+ expired: "Verifieringen har gått ut. Försök igen.",
7
+ verificationRequired: "Verifiering krävs!",
8
+ footer: 'Skyddad av <a href="https://altcha.org/" target="_blank" aria-label="Besök Altcha.org">ALTCHA</a>',
9
+ getAudioChallenge: "Få ljudutmaning",
10
+ label: "Jag är inte en robot",
11
+ loading: "Laddar...",
12
+ reload: "Ladda om",
13
+ verify: "Verifiera",
14
+ verified: "Verifierad",
15
+ verifying: "Verifierar...",
16
+ waitAlert: "Verifierar... vänligen vänta."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.sv = e;
20
+ export {
21
+ e as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Besök Altcha.org",enterCode:"Ange kod",enterCodeAria:"Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",error:"Verifiering misslyckades. Försök igen senare.",expired:"Verifieringen har gått ut. Försök igen.",verificationRequired:"Verifiering krävs!",footer:'Skyddad av <a href="https://altcha.org/" target="_blank" aria-label="Besök Altcha.org">ALTCHA</a>',getAudioChallenge:"Få ljudutmaning",label:"Jag är inte en robot",loading:"Laddar...",reload:"Ladda om",verify:"Verifiera",verified:"Verifierad",verifying:"Verifierar...",waitAlert:"Verifierar... vänligen vänta."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.sv=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "Altcha.org ஐ பார்வையிடவும்",
3
+ enterCode: "குறியீட்டை உள்ளிடவும்",
4
+ enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
5
+ error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
6
+ expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
7
+ verificationRequired: "சரிபார்ப்பு தேவை!",
8
+ footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org ஐ பார்வையிடவும்">ALTCHA</a>',
9
+ getAudioChallenge: "ஒலி சவாலை பெறவும்",
10
+ label: "நான் ரோபோடான அல்ல",
11
+ loading: "செயலாக்கம்...",
12
+ reload: "மீண்டும் புதுப்பிக்கவும்",
13
+ verify: "சரிபார்க்கவும்",
14
+ verified: "சரிபார்க்கப்பட்டது",
15
+ verifying: "சரிபார்க்கப்படுகிறது...",
16
+ waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.ta = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Altcha.org ஐ பார்வையிடவும்",enterCode:"குறியீட்டை உள்ளிடவும்",enterCodeAria:"நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",error:"சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",expired:"சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",verificationRequired:"சரிபார்ப்பு தேவை!",footer:'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org ஐ பார்வையிடவும்">ALTCHA</a>',getAudioChallenge:"ஒலி சவாலை பெறவும்",label:"நான் ரோபோடான அல்ல",loading:"செயலாக்கம்...",reload:"மீண்டும் புதுப்பிக்கவும்",verify:"சரிபார்க்கவும்",verified:"சரிபார்க்கப்பட்டது",verifying:"சரிபார்க்கப்படுகிறது...",waitAlert:"சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.ta=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const e = {
2
+ ariaLinkLabel: "Altcha.org సందర్శించండి",
3
+ enterCode: "కోడ్‌ని నమోదు చేయండి",
4
+ enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
5
+ error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
6
+ expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
7
+ verificationRequired: "ధృవీకరణ అవసరం!",
8
+ footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org సందర్శించండి">ALTCHA</a>',
9
+ getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
10
+ label: "నేను రోబోట్ కాదు",
11
+ loading: "లోడ్ అవుతోంది...",
12
+ reload: "మళ్ళీ లోడ్ చేయండి",
13
+ verify: "ధ్రువీకరించు",
14
+ verified: "ధ్రువీకరించబడింది",
15
+ verifying: "ధ్రువీకరణ జరుగుతుంది...",
16
+ waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.te = e;
20
+ export {
21
+ e as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Altcha.org సందర్శించండి",enterCode:"కోడ్‌ని నమోదు చేయండి",enterCodeAria:"మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",error:"చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",expired:"చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",verificationRequired:"ధృవీకరణ అవసరం!",footer:'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org సందర్శించండి">ALTCHA</a>',getAudioChallenge:"ఆడియో ఛాలెంజ్ పొందండి",label:"నేను రోబోట్ కాదు",loading:"లోడ్ అవుతోంది...",reload:"మళ్ళీ లోడ్ చేయండి",verify:"ధ్రువీకరించు",verified:"ధ్రువీకరించబడింది",verifying:"ధ్రువీకరణ జరుగుతుంది...",waitAlert:"ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.te=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "เยี่ยมชม Altcha.org",
3
+ enterCode: "ป้อนรหัส",
4
+ enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
5
+ error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
6
+ expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
7
+ verificationRequired: "จำเป็นต้องตรวจสอบ!",
8
+ footer: 'ป้องกันโดย <a href="https://altcha.org/" target="_blank" aria-label="เยี่ยมชม Altcha.org">ALTCHA</a>',
9
+ getAudioChallenge: "รับการท้าทายเสียง",
10
+ label: "ฉันไม่ใช่บอท",
11
+ loading: "กำลังโหลด...",
12
+ reload: "โหลดใหม่",
13
+ verify: "ตรวจสอบ",
14
+ verified: "ตรวจสอบแล้ว",
15
+ verifying: "กำลังตรวจสอบ...",
16
+ waitAlert: "กำลังตรวจสอบ... กรุณารอ"
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.th = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"เยี่ยมชม Altcha.org",enterCode:"ป้อนรหัส",enterCodeAria:"ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",error:"การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",expired:"การตรวจสอบหมดอายุ กรุณาลองใหม่",verificationRequired:"จำเป็นต้องตรวจสอบ!",footer:'ป้องกันโดย <a href="https://altcha.org/" target="_blank" aria-label="เยี่ยมชม Altcha.org">ALTCHA</a>',getAudioChallenge:"รับการท้าทายเสียง",label:"ฉันไม่ใช่บอท",loading:"กำลังโหลด...",reload:"โหลดใหม่",verify:"ตรวจสอบ",verified:"ตรวจสอบแล้ว",verifying:"กำลังตรวจสอบ...",waitAlert:"กำลังตรวจสอบ... กรุณารอ"};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.th=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "Altcha.org'yu ziyaret edin",
3
+ enterCode: "Kodu girin",
4
+ enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
5
+ error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
6
+ expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
7
+ verificationRequired: "Doğrulama gerekli!",
8
+ footer: `ALTCHA tarafından korunuyor <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org'yu ziyaret edin">ALTCHA</a>`,
9
+ getAudioChallenge: "Sesli doğrulama al",
10
+ label: "Ben robot değilim",
11
+ loading: "Yükleniyor...",
12
+ reload: "Yeniden yükle",
13
+ verify: "Doğrula",
14
+ verified: "Doğrulandı",
15
+ verifying: "Doğrulama yapılıyor...",
16
+ waitAlert: "Doğrulama yapılıyor... lütfen bekleyin."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.tr = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,a){typeof exports=="object"&&typeof module<"u"?a(exports):typeof define=="function"&&define.amd?define(["exports"],a):(e=typeof globalThis<"u"?globalThis:e||self,a(e["[name]"]={}))})(this,function(e){"use strict";const a={ariaLinkLabel:"Altcha.org'yu ziyaret edin",enterCode:"Kodu girin",enterCodeAria:"Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",error:"Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",expired:"Doğrulama süresi doldu. Lütfen tekrar deneyin.",verificationRequired:"Doğrulama gerekli!",footer:`ALTCHA tarafından korunuyor <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org'yu ziyaret edin">ALTCHA</a>`,getAudioChallenge:"Sesli doğrulama al",label:"Ben robot değilim",loading:"Yükleniyor...",reload:"Yeniden yükle",verify:"Doğrula",verified:"Doğrulandı",verifying:"Doğrulama yapılıyor...",waitAlert:"Doğrulama yapılıyor... lütfen bekleyin."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.tr=a,e.i18n=a,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "Відвідати Altcha.org",
3
+ enterCode: "Введіть код",
4
+ enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
5
+ error: "Перевірка не вдалася. Спробуйте пізніше.",
6
+ expired: "Перевірка прострочена. Спробуйте знову.",
7
+ verificationRequired: "Потрібна перевірка!",
8
+ footer: 'Захищено <a href="https://altcha.org/" target="_blank" aria-label="Відвідати Altcha.org">ALTCHA</a>',
9
+ getAudioChallenge: "Отримати аудіо-челлендж",
10
+ label: "Я не робот",
11
+ loading: "Завантаження...",
12
+ reload: "Перезавантажити",
13
+ verify: "Перевірити",
14
+ verified: "Перевірено",
15
+ verifying: "Перевіряється...",
16
+ waitAlert: "Перевірка... будь ласка, зачекайте."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.uk = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Відвідати Altcha.org",enterCode:"Введіть код",enterCodeAria:"Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",error:"Перевірка не вдалася. Спробуйте пізніше.",expired:"Перевірка прострочена. Спробуйте знову.",verificationRequired:"Потрібна перевірка!",footer:'Захищено <a href="https://altcha.org/" target="_blank" aria-label="Відвідати Altcha.org">ALTCHA</a>',getAudioChallenge:"Отримати аудіо-челлендж",label:"Я не робот",loading:"Завантаження...",reload:"Перезавантажити",verify:"Перевірити",verified:"Перевірено",verifying:"Перевіряється...",waitAlert:"Перевірка... будь ласка, зачекайте."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.uk=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "Altcha.org پر جائیں",
3
+ enterCode: "کوڈ درج کریں",
4
+ enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
5
+ error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
6
+ expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
7
+ verificationRequired: "تصدیق ضروری ہے!",
8
+ footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org پر جائیں">ALTCHA</a>',
9
+ getAudioChallenge: "آڈیو چیلنج حاصل کریں",
10
+ label: "میں روبوٹ نہیں ہوں",
11
+ loading: "لوڈ ہو رہا ہے...",
12
+ reload: "دوبارہ لوڈ کریں",
13
+ verify: "توثیق کریں",
14
+ verified: "توثیق شدہ",
15
+ verifying: "توثیق ہو رہی ہے...",
16
+ waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔"
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.ur = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Altcha.org پر جائیں",enterCode:"کوڈ درج کریں",enterCodeAria:"جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",error:"توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",expired:"توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",verificationRequired:"تصدیق ضروری ہے!",footer:'کے ذریعے محفوظ <a href="https://altcha.org/" target="_blank" aria-label="Altcha.org پر جائیں">ALTCHA</a>',getAudioChallenge:"آڈیو چیلنج حاصل کریں",label:"میں روبوٹ نہیں ہوں",loading:"لوڈ ہو رہا ہے...",reload:"دوبارہ لوڈ کریں",verify:"توثیق کریں",verified:"توثیق شدہ",verifying:"توثیق ہو رہی ہے...",waitAlert:"توثیق ہو رہی ہے... براہ کرم انتظار کریں۔"};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.ur=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const h = {
2
+ ariaLinkLabel: "Truy cập Altcha.org",
3
+ enterCode: "Nhập mã",
4
+ enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
5
+ error: "Xác minh thất bại. Vui lòng thử lại sau.",
6
+ expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
7
+ verificationRequired: "Yêu cầu xác minh!",
8
+ footer: 'Được bảo vệ bởi <a href="https://altcha.org/" target="_blank" aria-label="Truy cập Altcha.org">ALTCHA</a>',
9
+ getAudioChallenge: "Nhận thử thách âm thanh",
10
+ label: "Tôi không phải là robot",
11
+ loading: "Đang tải...",
12
+ reload: "Tải lại",
13
+ verify: "Xác minh",
14
+ verified: "Đã xác minh",
15
+ verifying: "Đang xác minh...",
16
+ waitAlert: "Đang xác minh... vui lòng chờ."
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n.vi = h;
20
+ export {
21
+ h as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"Truy cập Altcha.org",enterCode:"Nhập mã",enterCodeAria:"Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",error:"Xác minh thất bại. Vui lòng thử lại sau.",expired:"Xác minh đã hết hạn. Vui lòng thử lại.",verificationRequired:"Yêu cầu xác minh!",footer:'Được bảo vệ bởi <a href="https://altcha.org/" target="_blank" aria-label="Truy cập Altcha.org">ALTCHA</a>',getAudioChallenge:"Nhận thử thách âm thanh",label:"Tôi không phải là robot",loading:"Đang tải...",reload:"Tải lại",verify:"Xác minh",verified:"Đã xác minh",verifying:"Đang xác minh...",waitAlert:"Đang xác minh... vui lòng chờ."};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n.vi=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "访问 Altcha.org",
3
+ enterCode: "输入代码",
4
+ enterCodeAria: "输入您听到的代码。按空格键播放音频。",
5
+ error: "验证失败。稍后再试。",
6
+ expired: "验证已过期。请重试。",
7
+ verificationRequired: "需要验证!",
8
+ footer: '由 <a href="https://altcha.org/" target="_blank" aria-label="访问 Altcha.org">ALTCHA</a> 保护',
9
+ getAudioChallenge: "获取音频挑战",
10
+ label: "我不是机器人",
11
+ loading: "加载中...",
12
+ reload: "重新加载",
13
+ verify: "验证",
14
+ verified: "已验证",
15
+ verifying: "正在验证...",
16
+ waitAlert: "正在验证... 请稍等。"
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n["zh-cn"] = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"访问 Altcha.org",enterCode:"输入代码",enterCodeAria:"输入您听到的代码。按空格键播放音频。",error:"验证失败。稍后再试。",expired:"验证已过期。请重试。",verificationRequired:"需要验证!",footer:'由 <a href="https://altcha.org/" target="_blank" aria-label="访问 Altcha.org">ALTCHA</a> 保护',getAudioChallenge:"获取音频挑战",label:"我不是机器人",loading:"加载中...",reload:"重新加载",verify:"验证",verified:"已验证",verifying:"正在验证...",waitAlert:"正在验证... 请稍等。"};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n["zh-cn"]=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,22 @@
1
+ const a = {
2
+ ariaLinkLabel: "訪問 Altcha.org",
3
+ enterCode: "輸入代碼",
4
+ enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
5
+ error: "驗證失敗。稍後再試。",
6
+ expired: "驗證已過期。請重試。",
7
+ verificationRequired: "需要驗證!",
8
+ footer: '由 <a href="https://altcha.org/" target="_blank" aria-label="訪問 Altcha.org">ALTCHA</a> 保護',
9
+ getAudioChallenge: "獲取音頻挑戰",
10
+ label: "我不是機器人",
11
+ loading: "載入中...",
12
+ reload: "重新載入",
13
+ verify: "驗證",
14
+ verified: "已驗證",
15
+ verifying: "正在驗證...",
16
+ waitAlert: "正在驗證... 請稍等。"
17
+ };
18
+ typeof globalThis.altchaI18n != "object" && (globalThis.altchaI18n = {});
19
+ globalThis.altchaI18n["zh-tw"] = a;
20
+ export {
21
+ a as i18n
22
+ };
@@ -0,0 +1 @@
1
+ (function(e,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(e=typeof globalThis<"u"?globalThis:e||self,i(e["[name]"]={}))})(this,function(e){"use strict";const i={ariaLinkLabel:"訪問 Altcha.org",enterCode:"輸入代碼",enterCodeAria:"輸入您聽到的代碼。按空格鍵播放音頻。",error:"驗證失敗。稍後再試。",expired:"驗證已過期。請重試。",verificationRequired:"需要驗證!",footer:'由 <a href="https://altcha.org/" target="_blank" aria-label="訪問 Altcha.org">ALTCHA</a> 保護',getAudioChallenge:"獲取音頻挑戰",label:"我不是機器人",loading:"載入中...",reload:"重新載入",verify:"驗證",verified:"已驗證",verifying:"正在驗證...",waitAlert:"正在驗證... 請稍等。"};typeof globalThis.altchaI18n!="object"&&(globalThis.altchaI18n={}),globalThis.altchaI18n["zh-tw"]=i,e.i18n=i,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
@@ -1,9 +1,9 @@
1
- var D = Object.defineProperty;
1
+ var N = Object.defineProperty;
2
2
  var B = (t) => {
3
3
  throw TypeError(t);
4
4
  };
5
- var V = (t, e, i) => e in t ? D(t, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : t[e] = i;
6
- var f = (t, e, i) => V(t, typeof e != "symbol" ? e + "" : e, i), b = (t, e, i) => e.has(t) || B("Cannot " + i);
5
+ var O = (t, e, i) => e in t ? N(t, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : t[e] = i;
6
+ var f = (t, e, i) => O(t, typeof e != "symbol" ? e + "" : e, i), b = (t, e, i) => e.has(t) || B("Cannot " + i);
7
7
  var p = (t, e, i) => (b(t, e, "read from private field"), i ? i.call(t) : e.get(t)), g = (t, e, i) => e.has(t) ? B("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, i);
8
8
  var E = (t, e, i) => (b(t, e, "access private method"), i);
9
9
  class y {
@@ -51,7 +51,7 @@ class y {
51
51
  * A distinct name of the plugin. Every plugin must have it's own name.
52
52
  */
53
53
  f(y, "pluginName");
54
- var l = /* @__PURE__ */ ((t) => (t.ERROR = "error", t.VERIFIED = "verified", t.VERIFYING = "verifying", t.UNVERIFIED = "unverified", t.EXPIRED = "expired", t))(l || {}), r, a, I, x;
54
+ var l = /* @__PURE__ */ ((t) => (t.CODE = "code", t.ERROR = "error", t.VERIFIED = "verified", t.VERIFYING = "verifying", t.UNVERIFIED = "unverified", t.EXPIRED = "expired", t))(l || {}), r, a, I, x;
55
55
  class v extends y {
56
56
  /**
57
57
  * Creates an instance of PluginObfuscation.
@@ -85,21 +85,21 @@ class v extends y {
85
85
  getFloatingAnchor: n,
86
86
  setFloatingAnchor: o,
87
87
  reset: d,
88
- solve: P,
88
+ solve: C,
89
89
  setState: m
90
- } = this.context, { delay: C, floating: F, maxnumber: T, obfuscated: R } = s();
90
+ } = this.context, { delay: P, floating: F, maxnumber: T, obfuscated: R } = s();
91
91
  if (this.elButton && !n() && o(this.elButton), !R) {
92
92
  m(l.ERROR);
93
93
  return;
94
94
  }
95
- d(l.VERIFYING), await new Promise((h) => setTimeout(h, C || 0));
96
- const [k, N] = R.split("?");
97
- let c = new URLSearchParams(N || "").get("key") || void 0;
95
+ d(l.VERIFYING), await new Promise((h) => setTimeout(h, P || 0));
96
+ const [k, D] = R.split("?");
97
+ let c = new URLSearchParams(D || "").get("key") || void 0;
98
98
  if (c) {
99
99
  const h = c.match(/^\(prompt:?(.*)\)$/);
100
100
  h && (c = prompt(h[1] || "Enter Key:") || void 0);
101
101
  }
102
- const { solution: u } = await P({
102
+ const { solution: u } = await C({
103
103
  obfuscated: k,
104
104
  key: c,
105
105
  maxnumber: T
@@ -1 +1 @@
1
- (function(e,t){typeof exports=="object"&&typeof module<"u"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e["[name]"]={}))})(this,function(e){"use strict";var D=Object.defineProperty;var v=e=>{throw TypeError(e)};var V=(e,t,i)=>t in e?D(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var p=(e,t,i)=>V(e,typeof t!="symbol"?t+"":t,i),x=(e,t,i)=>t.has(e)||v("Cannot "+i);var E=(e,t,i)=>(x(e,t,"read from private field"),i?i.call(e):t.get(e)),b=(e,t,i)=>t.has(e)?v("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i);var R=(e,t,i)=>(x(e,t,"access private method"),i);var u,c,I,P;class t{constructor(l){this.context=l}static register(l){typeof globalThis.altchaPlugins!="object"&&(globalThis.altchaPlugins=[]),globalThis.altchaPlugins.includes(l)||globalThis.altchaPlugins.push(l)}destroy(){}onErrorChange(l){}onStateChange(l){}}p(t,"pluginName");var i=(s=>(s.ERROR="error",s.VERIFIED="verified",s.VERIFYING="verifying",s.UNVERIFIED="unverified",s.EXPIRED="expired",s))(i||{});class m extends t{constructor(n){var o,r;super(n);b(this,c);p(this,"elButton");b(this,u,R(this,c,I).bind(this));const a=n.el;this.elButton=((o=a.parentElement)==null?void 0:o.querySelector("[data-clarify-button]"))||((r=a.parentElement)==null?void 0:r.querySelector("button, a")),this.elButton&&this.elButton.addEventListener("click",E(this,u))}destroy(){this.elButton&&this.elButton.removeEventListener("click",E(this,u))}async clarify(){const{el:n,getConfiguration:a,getFloatingAnchor:o,setFloatingAnchor:r,reset:g,solve:T,setState:y}=this.context,{delay:C,floating:F,maxnumber:k,obfuscated:B}=a();if(this.elButton&&!o()&&r(this.elButton),!B){y(i.ERROR);return}g(i.VERIFYING),await new Promise(d=>setTimeout(d,C||0));const[N,O]=B.split("?");let h=new URLSearchParams(O||"").get("key")||void 0;if(h){const d=h.match(/^\(prompt:?(.*)\)$/);d&&(h=prompt(d[1]||"Enter Key:")||void 0)}const{solution:f}=await T({obfuscated:N,key:h,maxnumber:k});f&&"clearText"in f?(R(this,c,P).call(this,f.clearText),y(i.VERIFIED),this.context.dispatch("cleartext",f.clearText),F&&n&&(n.style.display="none")):y(i.ERROR,"Unable to decrypt data.")}}u=new WeakMap,c=new WeakSet,I=function(n){n.preventDefault();const{auto:a}=this.context.getConfiguration();a==="off"||this.clarify()},P=function(n){var r;const a=n.match(/^(mailto|tel|sms|https?):/);let o;if(a){const[g]=n.slice(n.indexOf(":")+1).replace(/^\/\//,"").split("?");o=document.createElement("a"),o.href=n,o.innerHTML=g}else o=document.createTextNode(n);this.elButton&&o&&(this.elButton.after(o),(r=this.elButton.parentElement)==null||r.removeChild(this.elButton))},p(m,"pluginName","obfuscation"),t.register(m),e.PluginObfuscation=m,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
1
+ (function(e,t){typeof exports=="object"&&typeof module<"u"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e["[name]"]={}))})(this,function(e){"use strict";var N=Object.defineProperty;var v=e=>{throw TypeError(e)};var V=(e,t,i)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var p=(e,t,i)=>V(e,typeof t!="symbol"?t+"":t,i),x=(e,t,i)=>t.has(e)||v("Cannot "+i);var y=(e,t,i)=>(x(e,t,"read from private field"),i?i.call(e):t.get(e)),b=(e,t,i)=>t.has(e)?v("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i);var R=(e,t,i)=>(x(e,t,"access private method"),i);var u,c,I,P;class t{constructor(l){this.context=l}static register(l){typeof globalThis.altchaPlugins!="object"&&(globalThis.altchaPlugins=[]),globalThis.altchaPlugins.includes(l)||globalThis.altchaPlugins.push(l)}destroy(){}onErrorChange(l){}onStateChange(l){}}p(t,"pluginName");var i=(s=>(s.CODE="code",s.ERROR="error",s.VERIFIED="verified",s.VERIFYING="verifying",s.UNVERIFIED="unverified",s.EXPIRED="expired",s))(i||{});class m extends t{constructor(n){var o,r;super(n);b(this,c);p(this,"elButton");b(this,u,R(this,c,I).bind(this));const a=n.el;this.elButton=((o=a.parentElement)==null?void 0:o.querySelector("[data-clarify-button]"))||((r=a.parentElement)==null?void 0:r.querySelector("button, a")),this.elButton&&this.elButton.addEventListener("click",y(this,u))}destroy(){this.elButton&&this.elButton.removeEventListener("click",y(this,u))}async clarify(){const{el:n,getConfiguration:a,getFloatingAnchor:o,setFloatingAnchor:r,reset:g,solve:T,setState:E}=this.context,{delay:C,floating:F,maxnumber:O,obfuscated:B}=a();if(this.elButton&&!o()&&r(this.elButton),!B){E(i.ERROR);return}g(i.VERIFYING),await new Promise(d=>setTimeout(d,C||0));const[k,D]=B.split("?");let h=new URLSearchParams(D||"").get("key")||void 0;if(h){const d=h.match(/^\(prompt:?(.*)\)$/);d&&(h=prompt(d[1]||"Enter Key:")||void 0)}const{solution:f}=await T({obfuscated:k,key:h,maxnumber:O});f&&"clearText"in f?(R(this,c,P).call(this,f.clearText),E(i.VERIFIED),this.context.dispatch("cleartext",f.clearText),F&&n&&(n.style.display="none")):E(i.ERROR,"Unable to decrypt data.")}}u=new WeakMap,c=new WeakSet,I=function(n){n.preventDefault();const{auto:a}=this.context.getConfiguration();a==="off"||this.clarify()},P=function(n){var r;const a=n.match(/^(mailto|tel|sms|https?):/);let o;if(a){const[g]=n.slice(n.indexOf(":")+1).replace(/^\/\//,"").split("?");o=document.createElement("a"),o.href=n,o.innerHTML=g}else o=document.createTextNode(n);this.elButton&&o&&(this.elButton.after(o),(r=this.elButton.parentElement)==null||r.removeChild(this.elButton))},p(m,"pluginName","obfuscation"),t.register(m),e.PluginObfuscation=m,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "altcha",
3
3
  "description": "GDPR compliant, self-hosted CAPTCHA alternative.",
4
- "version": "1.4.2",
4
+ "version": "2.0.0-beta.1",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Daniel Regeci",
@@ -10,7 +10,7 @@
10
10
  "homepage": "https://altcha.org",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/altcha-org/altcha"
13
+ "url": "git+https://github.com/altcha-org/altcha.git"
14
14
  },
15
15
  "type": "module",
16
16
  "keywords": [
@@ -30,7 +30,7 @@
30
30
  "dist",
31
31
  "dist_external",
32
32
  "dist_plugins",
33
- "postinstall.js"
33
+ "dist_i18n"
34
34
  ],
35
35
  "main": "./dist/altcha.umd.cjs",
36
36
  "module": "./dist/altcha.js",
@@ -63,24 +63,27 @@
63
63
  "./worker": {
64
64
  "import": "./dist_external/worker.js",
65
65
  "require": "./dist_external/worker.js"
66
+ },
67
+ "./i18n/*": {
68
+ "import": "./dist_i18n/*.js",
69
+ "require": "./dist_i18n/*.umd.js"
66
70
  }
67
71
  },
68
72
  "scripts": {
69
73
  "dev": "vite",
70
- "build": "npm run build:bundle && npm run build:external && npm run build:plugins",
74
+ "build": "npm run build:bundle && npm run build:external && npm run build:plugins && npm run build:i18n",
71
75
  "build:bundle": "rimraf dist && vite build && cp src/declarations.d.ts dist/altcha.d.ts",
72
76
  "build:external": "rimraf dist_external && vite build -c vite.external.config.ts && cp src/declarations.d.ts dist_external/altcha.d.ts",
73
77
  "build:plugins": "rimraf dist_plugins && find src/plugins -type f -name '*.ts' | xargs -I {} vite build -c vite.plugins.config.ts -- {}",
78
+ "build:i18n": "rimraf dist_i18n && find src/i18n -type f -name '*.ts' | xargs -I {} vite build -c vite.i18n.config.ts -- {}",
74
79
  "preview": "vite preview",
75
80
  "check": "svelte-check --tsconfig ./tsconfig.json",
76
81
  "format": "prettier --write ./src/**/*",
77
82
  "test": "vitest run tests/helpers.test.ts",
78
- "test:e2e": "playwright test",
79
- "prepare": "husky",
80
- "postinstall": "node postinstall.js"
83
+ "test:e2e": "testcafe chrome,firefox e2e/altcha.fixture.ts --hostname localhost",
84
+ "prepare": "husky"
81
85
  },
82
86
  "devDependencies": {
83
- "@playwright/test": "^1.49.1",
84
87
  "@sveltejs/vite-plugin-svelte": "^5.0.3",
85
88
  "@tsconfig/svelte": "^5.0.4",
86
89
  "@types/node": "^20.16.3",
@@ -93,6 +96,7 @@
93
96
  "sass": "^1.77.8",
94
97
  "svelte": "^5.22.6",
95
98
  "svelte-check": "^4.0.0",
99
+ "testcafe": "^3.7.2",
96
100
  "tslib": "^2.7.0",
97
101
  "typescript": "^5.5.4",
98
102
  "vite": "^6.2.1",
package/postinstall.js DELETED
@@ -1,10 +0,0 @@
1
- import fs from 'node:fs';
2
- import { execSync } from 'node:child_process';
3
-
4
- const srcDir = 'node_modules/@ovx/svelte';
5
- const destDir = 'node_modules/svelte';
6
-
7
- if (fs.existsSync(srcDir)) {
8
- execSync(`rm -rf ${destDir}`);
9
- execSync(`cp -R ${srcDir} ${destDir}`);
10
- }