@verbb/formie-browser 1.0.0

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 (490) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE.md +40 -0
  3. package/README.md +34 -0
  4. package/dist/chunks/address-finder-DfMCiW89.js +47 -0
  5. package/dist/chunks/api-CbqEMQT5.js +181 -0
  6. package/dist/chunks/api-DE7LfK-R.js +960 -0
  7. package/dist/chunks/api-DOfDzYC_.js +538 -0
  8. package/dist/chunks/async-B3DUf1GZ.js +26 -0
  9. package/dist/chunks/bpoint-Ciy3yY9Q.js +34 -0
  10. package/dist/chunks/calculations-CkYAqO_-.js +197 -0
  11. package/dist/chunks/captcha-eu-DnOWhMwr.js +43 -0
  12. package/dist/chunks/checkbox-radio-0x7Tc0br.js +197 -0
  13. package/dist/chunks/chunk-K6L4z4UQ.js +24 -0
  14. package/dist/chunks/conditions-4fXKhEJS.js +609 -0
  15. package/dist/chunks/date-picker-B6iZkjHS.js +6204 -0
  16. package/dist/chunks/debug-KnZeKYBI.js +39 -0
  17. package/dist/chunks/dist-D09GnXMW.js +2663 -0
  18. package/dist/chunks/event-names-DamGPtXR.js +51 -0
  19. package/dist/chunks/eway-DEAYcwT0.js +86 -0
  20. package/dist/chunks/field-references.keys-BpBZ_quS.js +24 -0
  21. package/dist/chunks/field-references.resolver-Ba6xhiJC.js +183 -0
  22. package/dist/chunks/file-upload-Bh63PQSE.js +430 -0
  23. package/dist/chunks/friendly-captcha-v1-CqO4WVre.js +40 -0
  24. package/dist/chunks/friendly-captcha-v2-CyykcJcM.js +47 -0
  25. package/dist/chunks/friendly-challenge-Dg8XkStd.js +1101 -0
  26. package/dist/chunks/go-cardless-CuND59rR.js +26 -0
  27. package/dist/chunks/google-address--uR8WDSm.js +208 -0
  28. package/dist/chunks/hcaptcha-CmaFUesv.js +72 -0
  29. package/dist/chunks/hidden-CYnZYple.js +36 -0
  30. package/dist/chunks/http-18nn97DZ.js +29 -0
  31. package/dist/chunks/i18n-vUh-KGiH.js +55 -0
  32. package/dist/chunks/loqate-BICNJlVK.js +97 -0
  33. package/dist/chunks/mollie-DwlsgHZ1.js +26 -0
  34. package/dist/chunks/moneris-B_IFZFTx.js +159 -0
  35. package/dist/chunks/opayo-U2x_TOII.js +192 -0
  36. package/dist/chunks/paddle-BqXFrc79.js +75 -0
  37. package/dist/chunks/paypal-Cn_DYGDb.js +121 -0
  38. package/dist/chunks/payway-Rnq796eC.js +75 -0
  39. package/dist/chunks/phone-country-B6Me4lK0.js +3317 -0
  40. package/dist/chunks/place-kit-ldUl-u9w.js +56 -0
  41. package/dist/chunks/placekit-autocomplete.esm-D-lGeaZl.js +1771 -0
  42. package/dist/chunks/recaptcha-enterprise-DPJNyv1X.js +72 -0
  43. package/dist/chunks/recaptcha-shared-DTI4qWVR.js +22 -0
  44. package/dist/chunks/recaptcha-v2-checkbox-zFjpvJ5c.js +49 -0
  45. package/dist/chunks/recaptcha-v2-invisible-CnYtkNvz.js +62 -0
  46. package/dist/chunks/recaptcha-v3-EAlWhnkX.js +33 -0
  47. package/dist/chunks/repeater-CXD1eLSn.js +151 -0
  48. package/dist/chunks/rich-text-DkmZRhGj.js +442 -0
  49. package/dist/chunks/scripts-BGD_iU_6.js +41 -0
  50. package/dist/chunks/sdk-B7u9fTlP.js +2103 -0
  51. package/dist/chunks/shared-DC6_1u8X.js +85 -0
  52. package/dist/chunks/signature-E9KyYXS1.js +765 -0
  53. package/dist/chunks/snaptcha-CCDunGeb.js +8 -0
  54. package/dist/chunks/square-BLqK51rS.js +61 -0
  55. package/dist/chunks/stripe-B8gHpZNC.js +273 -0
  56. package/dist/chunks/styles-BIh6g7V_.js +22 -0
  57. package/dist/chunks/summary-EcNE0cvg.js +191 -0
  58. package/dist/chunks/table-yxEDL6kA.js +124 -0
  59. package/dist/chunks/text-limit-D0H_Ca2c.js +179 -0
  60. package/dist/chunks/theme-classes-vSHpdCUO.js +59 -0
  61. package/dist/chunks/turnstile-DP0bdR7T.js +68 -0
  62. package/dist/chunks/utils-ByrEVYrJ.js +49584 -0
  63. package/dist/css/formie-base.css +78 -0
  64. package/dist/css/formie-theme.css +19 -0
  65. package/dist/css/formie.css +2 -0
  66. package/dist/css/theme/_buttons.css +249 -0
  67. package/dist/css/theme/_loading.css +37 -0
  68. package/dist/css/theme/_messages.css +39 -0
  69. package/dist/css/theme/_progress.css +62 -0
  70. package/dist/css/theme/_tokens.css +361 -0
  71. package/dist/css/theme/_typography.css +70 -0
  72. package/dist/css/theme/fields/_address.css +17 -0
  73. package/dist/css/theme/fields/_check-radio.css +108 -0
  74. package/dist/css/theme/fields/_file.css +58 -0
  75. package/dist/css/theme/fields/_group.css +13 -0
  76. package/dist/css/theme/fields/_input.css +48 -0
  77. package/dist/css/theme/fields/_nested.css +19 -0
  78. package/dist/css/theme/fields/_repeater.css +69 -0
  79. package/dist/css/theme/fields/_rich-text.css +201 -0
  80. package/dist/css/theme/fields/_select.css +37 -0
  81. package/dist/css/theme/fields/_signature.css +39 -0
  82. package/dist/css/theme/fields/_summary.css +53 -0
  83. package/dist/css/theme/fields/_table.css +121 -0
  84. package/dist/css/theme/fields/_text-limit.css +10 -0
  85. package/dist/css/theme/forms/_field.css +62 -0
  86. package/dist/css/theme/forms/_form.css +166 -0
  87. package/dist/css/theme/integrations/_payment-modal.css +32 -0
  88. package/dist/css/theme/integrations/_paypal.css +10 -0
  89. package/dist/css/theme/integrations/_payway.css +10 -0
  90. package/dist/css/theme/integrations/_stripe.css +24 -0
  91. package/dist/css/theme/utilities/_accessibility.css +13 -0
  92. package/dist/css/theme-base/_controls.css +41 -0
  93. package/dist/css/theme-base/_primitives.css +34 -0
  94. package/dist/index.d.ts +30 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +3206 -0
  97. package/dist/js/compatibility/dom-adapter.d.ts +12 -0
  98. package/dist/js/compatibility/dom-adapter.d.ts.map +1 -0
  99. package/dist/js/compatibility/event-map.d.ts +25 -0
  100. package/dist/js/compatibility/event-map.d.ts.map +1 -0
  101. package/dist/js/compatibility/validator-adapter.d.ts +17 -0
  102. package/dist/js/compatibility/validator-adapter.d.ts.map +1 -0
  103. package/dist/js/contracts/client.d.ts +40 -0
  104. package/dist/js/contracts/client.d.ts.map +1 -0
  105. package/dist/js/contracts/common.d.ts +5 -0
  106. package/dist/js/contracts/common.d.ts.map +1 -0
  107. package/dist/js/contracts/modules.d.ts +47 -0
  108. package/dist/js/contracts/modules.d.ts.map +1 -0
  109. package/dist/js/contracts/schema.d.ts +79 -0
  110. package/dist/js/contracts/schema.d.ts.map +1 -0
  111. package/dist/js/contracts/theme.d.ts +2 -0
  112. package/dist/js/contracts/theme.d.ts.map +1 -0
  113. package/dist/js/core/create-formie-client.d.ts +3 -0
  114. package/dist/js/core/create-formie-client.d.ts.map +1 -0
  115. package/dist/js/core/dom-events.d.ts +2 -0
  116. package/dist/js/core/dom-events.d.ts.map +1 -0
  117. package/dist/js/core/formie.d.ts +27 -0
  118. package/dist/js/core/formie.d.ts.map +1 -0
  119. package/dist/js/core/hydrate-modules.d.ts +22 -0
  120. package/dist/js/core/hydrate-modules.d.ts.map +1 -0
  121. package/dist/js/core/page-client-event.d.ts +9 -0
  122. package/dist/js/core/page-client-event.d.ts.map +1 -0
  123. package/dist/js/core/page-tab-errors.d.ts +2 -0
  124. package/dist/js/core/page-tab-errors.d.ts.map +1 -0
  125. package/dist/js/core/submit-flow.d.ts +21 -0
  126. package/dist/js/core/submit-flow.d.ts.map +1 -0
  127. package/dist/js/core/submit-result-state.d.ts +8 -0
  128. package/dist/js/core/submit-result-state.d.ts.map +1 -0
  129. package/dist/js/core/submit-result-ui.d.ts +10 -0
  130. package/dist/js/core/submit-result-ui.d.ts.map +1 -0
  131. package/dist/js/events/event-bus.d.ts +21 -0
  132. package/dist/js/events/event-bus.d.ts.map +1 -0
  133. package/dist/js/modules/address/address-finder.d.ts +2 -0
  134. package/dist/js/modules/address/address-finder.d.ts.map +1 -0
  135. package/dist/js/modules/address/api.d.ts +8 -0
  136. package/dist/js/modules/address/api.d.ts.map +1 -0
  137. package/dist/js/modules/address/constants.d.ts +15 -0
  138. package/dist/js/modules/address/constants.d.ts.map +1 -0
  139. package/dist/js/modules/address/factories.d.ts +35 -0
  140. package/dist/js/modules/address/factories.d.ts.map +1 -0
  141. package/dist/js/modules/address/google-address.d.ts +2 -0
  142. package/dist/js/modules/address/google-address.d.ts.map +1 -0
  143. package/dist/js/modules/address/host.d.ts +30 -0
  144. package/dist/js/modules/address/host.d.ts.map +1 -0
  145. package/dist/js/modules/address/index.d.ts +3 -0
  146. package/dist/js/modules/address/index.d.ts.map +1 -0
  147. package/dist/js/modules/address/loqate.d.ts +2 -0
  148. package/dist/js/modules/address/loqate.d.ts.map +1 -0
  149. package/dist/js/modules/address/place-kit.d.ts +2 -0
  150. package/dist/js/modules/address/place-kit.d.ts.map +1 -0
  151. package/dist/js/modules/captchas/api.d.ts +9 -0
  152. package/dist/js/modules/captchas/api.d.ts.map +1 -0
  153. package/dist/js/modules/captchas/captcha-eu.d.ts +2 -0
  154. package/dist/js/modules/captchas/captcha-eu.d.ts.map +1 -0
  155. package/dist/js/modules/captchas/constants.d.ts +5 -0
  156. package/dist/js/modules/captchas/constants.d.ts.map +1 -0
  157. package/dist/js/modules/captchas/factories.d.ts +63 -0
  158. package/dist/js/modules/captchas/factories.d.ts.map +1 -0
  159. package/dist/js/modules/captchas/friendly-captcha-v1.d.ts +2 -0
  160. package/dist/js/modules/captchas/friendly-captcha-v1.d.ts.map +1 -0
  161. package/dist/js/modules/captchas/friendly-captcha-v2.d.ts +2 -0
  162. package/dist/js/modules/captchas/friendly-captcha-v2.d.ts.map +1 -0
  163. package/dist/js/modules/captchas/hcaptcha.d.ts +2 -0
  164. package/dist/js/modules/captchas/hcaptcha.d.ts.map +1 -0
  165. package/dist/js/modules/captchas/host.d.ts +78 -0
  166. package/dist/js/modules/captchas/host.d.ts.map +1 -0
  167. package/dist/js/modules/captchas/index.d.ts +3 -0
  168. package/dist/js/modules/captchas/index.d.ts.map +1 -0
  169. package/dist/js/modules/captchas/recaptcha-enterprise.d.ts +2 -0
  170. package/dist/js/modules/captchas/recaptcha-enterprise.d.ts.map +1 -0
  171. package/dist/js/modules/captchas/recaptcha-shared.d.ts +26 -0
  172. package/dist/js/modules/captchas/recaptcha-shared.d.ts.map +1 -0
  173. package/dist/js/modules/captchas/recaptcha-v2-checkbox.d.ts +2 -0
  174. package/dist/js/modules/captchas/recaptcha-v2-checkbox.d.ts.map +1 -0
  175. package/dist/js/modules/captchas/recaptcha-v2-invisible.d.ts +2 -0
  176. package/dist/js/modules/captchas/recaptcha-v2-invisible.d.ts.map +1 -0
  177. package/dist/js/modules/captchas/recaptcha-v3.d.ts +2 -0
  178. package/dist/js/modules/captchas/recaptcha-v3.d.ts.map +1 -0
  179. package/dist/js/modules/captchas/snaptcha.d.ts +2 -0
  180. package/dist/js/modules/captchas/snaptcha.d.ts.map +1 -0
  181. package/dist/js/modules/captchas/turnstile.d.ts +2 -0
  182. package/dist/js/modules/captchas/turnstile.d.ts.map +1 -0
  183. package/dist/js/modules/captchas/utils.d.ts +13 -0
  184. package/dist/js/modules/captchas/utils.d.ts.map +1 -0
  185. package/dist/js/modules/fields/calculations.d.ts +3 -0
  186. package/dist/js/modules/fields/calculations.d.ts.map +1 -0
  187. package/dist/js/modules/fields/checkbox-radio.d.ts +3 -0
  188. package/dist/js/modules/fields/checkbox-radio.d.ts.map +1 -0
  189. package/dist/js/modules/fields/conditions/config.d.ts +5 -0
  190. package/dist/js/modules/fields/conditions/config.d.ts.map +1 -0
  191. package/dist/js/modules/fields/conditions/effects.d.ts +2 -0
  192. package/dist/js/modules/fields/conditions/effects.d.ts.map +1 -0
  193. package/dist/js/modules/fields/conditions/evaluator.d.ts +6 -0
  194. package/dist/js/modules/fields/conditions/evaluator.d.ts.map +1 -0
  195. package/dist/js/modules/fields/conditions/references.d.ts +5 -0
  196. package/dist/js/modules/fields/conditions/references.d.ts.map +1 -0
  197. package/dist/js/modules/fields/conditions/transforms.d.ts +3 -0
  198. package/dist/js/modules/fields/conditions/transforms.d.ts.map +1 -0
  199. package/dist/js/modules/fields/conditions/types.d.ts +30 -0
  200. package/dist/js/modules/fields/conditions/types.d.ts.map +1 -0
  201. package/dist/js/modules/fields/conditions/values.d.ts +5 -0
  202. package/dist/js/modules/fields/conditions/values.d.ts.map +1 -0
  203. package/dist/js/modules/fields/conditions.d.ts +3 -0
  204. package/dist/js/modules/fields/conditions.d.ts.map +1 -0
  205. package/dist/js/modules/fields/date-picker.d.ts +3 -0
  206. package/dist/js/modules/fields/date-picker.d.ts.map +1 -0
  207. package/dist/js/modules/fields/file-upload.d.ts +3 -0
  208. package/dist/js/modules/fields/file-upload.d.ts.map +1 -0
  209. package/dist/js/modules/fields/hidden.d.ts +3 -0
  210. package/dist/js/modules/fields/hidden.d.ts.map +1 -0
  211. package/dist/js/modules/fields/index.d.ts +3 -0
  212. package/dist/js/modules/fields/index.d.ts.map +1 -0
  213. package/dist/js/modules/fields/phone-country.d.ts +3 -0
  214. package/dist/js/modules/fields/phone-country.d.ts.map +1 -0
  215. package/dist/js/modules/fields/repeater.d.ts +3 -0
  216. package/dist/js/modules/fields/repeater.d.ts.map +1 -0
  217. package/dist/js/modules/fields/rich-text.d.ts +3 -0
  218. package/dist/js/modules/fields/rich-text.d.ts.map +1 -0
  219. package/dist/js/modules/fields/shared.d.ts +20 -0
  220. package/dist/js/modules/fields/shared.d.ts.map +1 -0
  221. package/dist/js/modules/fields/signature.d.ts +3 -0
  222. package/dist/js/modules/fields/signature.d.ts.map +1 -0
  223. package/dist/js/modules/fields/summary.d.ts +3 -0
  224. package/dist/js/modules/fields/summary.d.ts.map +1 -0
  225. package/dist/js/modules/fields/table.d.ts +3 -0
  226. package/dist/js/modules/fields/table.d.ts.map +1 -0
  227. package/dist/js/modules/fields/text-limit.d.ts +3 -0
  228. package/dist/js/modules/fields/text-limit.d.ts.map +1 -0
  229. package/dist/js/modules/loader.d.ts +11 -0
  230. package/dist/js/modules/loader.d.ts.map +1 -0
  231. package/dist/js/modules/payments/api.d.ts +8 -0
  232. package/dist/js/modules/payments/api.d.ts.map +1 -0
  233. package/dist/js/modules/payments/bpoint.d.ts +2 -0
  234. package/dist/js/modules/payments/bpoint.d.ts.map +1 -0
  235. package/dist/js/modules/payments/constants.d.ts +5 -0
  236. package/dist/js/modules/payments/constants.d.ts.map +1 -0
  237. package/dist/js/modules/payments/eway.d.ts +9 -0
  238. package/dist/js/modules/payments/eway.d.ts.map +1 -0
  239. package/dist/js/modules/payments/factories.d.ts +54 -0
  240. package/dist/js/modules/payments/factories.d.ts.map +1 -0
  241. package/dist/js/modules/payments/go-cardless.d.ts +2 -0
  242. package/dist/js/modules/payments/go-cardless.d.ts.map +1 -0
  243. package/dist/js/modules/payments/host.d.ts +70 -0
  244. package/dist/js/modules/payments/host.d.ts.map +1 -0
  245. package/dist/js/modules/payments/index.d.ts +3 -0
  246. package/dist/js/modules/payments/index.d.ts.map +1 -0
  247. package/dist/js/modules/payments/mollie.d.ts +2 -0
  248. package/dist/js/modules/payments/mollie.d.ts.map +1 -0
  249. package/dist/js/modules/payments/moneris.d.ts +2 -0
  250. package/dist/js/modules/payments/moneris.d.ts.map +1 -0
  251. package/dist/js/modules/payments/opayo.d.ts +25 -0
  252. package/dist/js/modules/payments/opayo.d.ts.map +1 -0
  253. package/dist/js/modules/payments/paddle.d.ts +2 -0
  254. package/dist/js/modules/payments/paddle.d.ts.map +1 -0
  255. package/dist/js/modules/payments/paypal.d.ts +2 -0
  256. package/dist/js/modules/payments/paypal.d.ts.map +1 -0
  257. package/dist/js/modules/payments/payway.d.ts +2 -0
  258. package/dist/js/modules/payments/payway.d.ts.map +1 -0
  259. package/dist/js/modules/payments/square.d.ts +2 -0
  260. package/dist/js/modules/payments/square.d.ts.map +1 -0
  261. package/dist/js/modules/payments/stripe.d.ts +2 -0
  262. package/dist/js/modules/payments/stripe.d.ts.map +1 -0
  263. package/dist/js/modules/payments/utils.d.ts +17 -0
  264. package/dist/js/modules/payments/utils.d.ts.map +1 -0
  265. package/dist/js/modules/registry.d.ts +9 -0
  266. package/dist/js/modules/registry.d.ts.map +1 -0
  267. package/dist/js/modules/styles.d.ts +2 -0
  268. package/dist/js/modules/styles.d.ts.map +1 -0
  269. package/dist/js/submit/pipeline.d.ts +18 -0
  270. package/dist/js/submit/pipeline.d.ts.map +1 -0
  271. package/dist/js/theme/theme-classes.d.ts +10 -0
  272. package/dist/js/theme/theme-classes.d.ts.map +1 -0
  273. package/dist/js/transport/forms-api.d.ts +11 -0
  274. package/dist/js/transport/forms-api.d.ts.map +1 -0
  275. package/dist/js/utils/async.d.ts +8 -0
  276. package/dist/js/utils/async.d.ts.map +1 -0
  277. package/dist/js/utils/debug.d.ts +10 -0
  278. package/dist/js/utils/debug.d.ts.map +1 -0
  279. package/dist/js/utils/event-names.d.ts +13 -0
  280. package/dist/js/utils/event-names.d.ts.map +1 -0
  281. package/dist/js/utils/field-references.d.ts +6 -0
  282. package/dist/js/utils/field-references.d.ts.map +1 -0
  283. package/dist/js/utils/field-references.keys.d.ts +4 -0
  284. package/dist/js/utils/field-references.keys.d.ts.map +1 -0
  285. package/dist/js/utils/field-references.parser.d.ts +3 -0
  286. package/dist/js/utils/field-references.parser.d.ts.map +1 -0
  287. package/dist/js/utils/field-references.registry.d.ts +3 -0
  288. package/dist/js/utils/field-references.registry.d.ts.map +1 -0
  289. package/dist/js/utils/field-references.resolver.d.ts +4 -0
  290. package/dist/js/utils/field-references.resolver.d.ts.map +1 -0
  291. package/dist/js/utils/field-references.types.d.ts +27 -0
  292. package/dist/js/utils/field-references.types.d.ts.map +1 -0
  293. package/dist/js/utils/fields.d.ts +5 -0
  294. package/dist/js/utils/fields.d.ts.map +1 -0
  295. package/dist/js/utils/http.d.ts +9 -0
  296. package/dist/js/utils/http.d.ts.map +1 -0
  297. package/dist/js/utils/i18n.d.ts +7 -0
  298. package/dist/js/utils/i18n.d.ts.map +1 -0
  299. package/dist/js/utils/scripts.d.ts +13 -0
  300. package/dist/js/utils/scripts.d.ts.map +1 -0
  301. package/dist/js/utils/unload-warning.d.ts +10 -0
  302. package/dist/js/utils/unload-warning.d.ts.map +1 -0
  303. package/dist/js/validation/rules/email.d.ts +4 -0
  304. package/dist/js/validation/rules/email.d.ts.map +1 -0
  305. package/dist/js/validation/rules/match.d.ts +4 -0
  306. package/dist/js/validation/rules/match.d.ts.map +1 -0
  307. package/dist/js/validation/rules/number.d.ts +4 -0
  308. package/dist/js/validation/rules/number.d.ts.map +1 -0
  309. package/dist/js/validation/rules/required.d.ts +4 -0
  310. package/dist/js/validation/rules/required.d.ts.map +1 -0
  311. package/dist/js/validation/rules/shared.d.ts +7 -0
  312. package/dist/js/validation/rules/shared.d.ts.map +1 -0
  313. package/dist/js/validation/rules/url.d.ts +4 -0
  314. package/dist/js/validation/rules/url.d.ts.map +1 -0
  315. package/dist/js/validation/rules.d.ts +10 -0
  316. package/dist/js/validation/rules.d.ts.map +1 -0
  317. package/dist/js/validation/types.d.ts +44 -0
  318. package/dist/js/validation/types.d.ts.map +1 -0
  319. package/dist/js/validation/validator.d.ts +53 -0
  320. package/dist/js/validation/validator.d.ts.map +1 -0
  321. package/package.json +78 -0
  322. package/src/css/formie-base.css +78 -0
  323. package/src/css/formie-theme.css +19 -0
  324. package/src/css/formie.css +2 -0
  325. package/src/css/theme/_buttons.css +249 -0
  326. package/src/css/theme/_loading.css +37 -0
  327. package/src/css/theme/_messages.css +39 -0
  328. package/src/css/theme/_progress.css +62 -0
  329. package/src/css/theme/_tokens.css +361 -0
  330. package/src/css/theme/_typography.css +70 -0
  331. package/src/css/theme/fields/_address.css +17 -0
  332. package/src/css/theme/fields/_check-radio.css +108 -0
  333. package/src/css/theme/fields/_file.css +58 -0
  334. package/src/css/theme/fields/_group.css +13 -0
  335. package/src/css/theme/fields/_input.css +48 -0
  336. package/src/css/theme/fields/_nested.css +19 -0
  337. package/src/css/theme/fields/_repeater.css +69 -0
  338. package/src/css/theme/fields/_rich-text.css +201 -0
  339. package/src/css/theme/fields/_select.css +37 -0
  340. package/src/css/theme/fields/_signature.css +39 -0
  341. package/src/css/theme/fields/_summary.css +53 -0
  342. package/src/css/theme/fields/_table.css +121 -0
  343. package/src/css/theme/fields/_text-limit.css +10 -0
  344. package/src/css/theme/forms/_field.css +62 -0
  345. package/src/css/theme/forms/_form.css +166 -0
  346. package/src/css/theme/integrations/_payment-modal.css +32 -0
  347. package/src/css/theme/integrations/_paypal.css +10 -0
  348. package/src/css/theme/integrations/_payway.css +10 -0
  349. package/src/css/theme/integrations/_stripe.css +24 -0
  350. package/src/css/theme/utilities/_accessibility.css +13 -0
  351. package/src/css/theme-base/_controls.css +41 -0
  352. package/src/css/theme-base/_primitives.css +34 -0
  353. package/src/icons/rich-text/aligncenter.svg +6 -0
  354. package/src/icons/rich-text/alignleft.svg +6 -0
  355. package/src/icons/rich-text/alignright.svg +6 -0
  356. package/src/icons/rich-text/bold.svg +4 -0
  357. package/src/icons/rich-text/clear.svg +6 -0
  358. package/src/icons/rich-text/code.svg +4 -0
  359. package/src/icons/rich-text/heading1.svg +3 -0
  360. package/src/icons/rich-text/heading2.svg +3 -0
  361. package/src/icons/rich-text/image.svg +6 -0
  362. package/src/icons/rich-text/italic.svg +5 -0
  363. package/src/icons/rich-text/line.svg +3 -0
  364. package/src/icons/rich-text/link.svg +4 -0
  365. package/src/icons/rich-text/olist.svg +8 -0
  366. package/src/icons/rich-text/paragraph.svg +3 -0
  367. package/src/icons/rich-text/quote.svg +4 -0
  368. package/src/icons/rich-text/strikethrough.svg +4 -0
  369. package/src/icons/rich-text/ulist.svg +8 -0
  370. package/src/icons/rich-text/underline.svg +4 -0
  371. package/src/index.ts +125 -0
  372. package/src/js/compatibility/dom-adapter.ts +129 -0
  373. package/src/js/compatibility/event-map.ts +72 -0
  374. package/src/js/compatibility/validator-adapter.ts +105 -0
  375. package/src/js/contracts/client.ts +43 -0
  376. package/src/js/contracts/common.ts +14 -0
  377. package/src/js/contracts/modules.ts +53 -0
  378. package/src/js/contracts/schema.ts +83 -0
  379. package/src/js/contracts/theme.ts +1 -0
  380. package/src/js/core/create-formie-client.ts +1519 -0
  381. package/src/js/core/dom-events.ts +8 -0
  382. package/src/js/core/formie.ts +242 -0
  383. package/src/js/core/hydrate-modules.ts +102 -0
  384. package/src/js/core/page-client-event.ts +129 -0
  385. package/src/js/core/page-tab-errors.ts +37 -0
  386. package/src/js/core/submit-flow.ts +120 -0
  387. package/src/js/core/submit-result-state.ts +597 -0
  388. package/src/js/core/submit-result-ui.ts +448 -0
  389. package/src/js/events/event-bus.ts +109 -0
  390. package/src/js/modules/address/address-finder.ts +85 -0
  391. package/src/js/modules/address/api.ts +22 -0
  392. package/src/js/modules/address/constants.ts +15 -0
  393. package/src/js/modules/address/factories.ts +203 -0
  394. package/src/js/modules/address/google-address.ts +345 -0
  395. package/src/js/modules/address/host.ts +137 -0
  396. package/src/js/modules/address/index.ts +10 -0
  397. package/src/js/modules/address/loqate.ts +128 -0
  398. package/src/js/modules/address/place-kit.ts +94 -0
  399. package/src/js/modules/captchas/api.ts +25 -0
  400. package/src/js/modules/captchas/captcha-eu.ts +86 -0
  401. package/src/js/modules/captchas/constants.ts +4 -0
  402. package/src/js/modules/captchas/factories.ts +485 -0
  403. package/src/js/modules/captchas/friendly-captcha-v1.ts +65 -0
  404. package/src/js/modules/captchas/friendly-captcha-v2.ts +84 -0
  405. package/src/js/modules/captchas/hcaptcha.ts +153 -0
  406. package/src/js/modules/captchas/host.ts +448 -0
  407. package/src/js/modules/captchas/index.ts +16 -0
  408. package/src/js/modules/captchas/recaptcha-enterprise.ts +138 -0
  409. package/src/js/modules/captchas/recaptcha-shared.ts +69 -0
  410. package/src/js/modules/captchas/recaptcha-v2-checkbox.ts +72 -0
  411. package/src/js/modules/captchas/recaptcha-v2-invisible.ts +108 -0
  412. package/src/js/modules/captchas/recaptcha-v3.ts +62 -0
  413. package/src/js/modules/captchas/snaptcha.ts +10 -0
  414. package/src/js/modules/captchas/turnstile.ts +131 -0
  415. package/src/js/modules/captchas/utils.ts +85 -0
  416. package/src/js/modules/fields/calculations.ts +273 -0
  417. package/src/js/modules/fields/checkbox-radio.ts +295 -0
  418. package/src/js/modules/fields/conditions/config.ts +79 -0
  419. package/src/js/modules/fields/conditions/effects.ts +166 -0
  420. package/src/js/modules/fields/conditions/evaluator.ts +44 -0
  421. package/src/js/modules/fields/conditions/references.ts +165 -0
  422. package/src/js/modules/fields/conditions/transforms.ts +206 -0
  423. package/src/js/modules/fields/conditions/types.ts +33 -0
  424. package/src/js/modules/fields/conditions/values.ts +115 -0
  425. package/src/js/modules/fields/conditions.ts +229 -0
  426. package/src/js/modules/fields/date-picker.ts +272 -0
  427. package/src/js/modules/fields/file-upload.ts +628 -0
  428. package/src/js/modules/fields/hidden.ts +58 -0
  429. package/src/js/modules/fields/index.ts +19 -0
  430. package/src/js/modules/fields/phone-country.ts +226 -0
  431. package/src/js/modules/fields/repeater.ts +231 -0
  432. package/src/js/modules/fields/rich-text.ts +217 -0
  433. package/src/js/modules/fields/shared.ts +238 -0
  434. package/src/js/modules/fields/signature.ts +202 -0
  435. package/src/js/modules/fields/summary.ts +272 -0
  436. package/src/js/modules/fields/table.ts +197 -0
  437. package/src/js/modules/fields/text-limit.ts +280 -0
  438. package/src/js/modules/loader.ts +331 -0
  439. package/src/js/modules/payments/api.ts +20 -0
  440. package/src/js/modules/payments/bpoint.ts +48 -0
  441. package/src/js/modules/payments/constants.ts +17 -0
  442. package/src/js/modules/payments/eway.ts +132 -0
  443. package/src/js/modules/payments/factories.ts +332 -0
  444. package/src/js/modules/payments/go-cardless.ts +37 -0
  445. package/src/js/modules/payments/host.ts +459 -0
  446. package/src/js/modules/payments/index.ts +17 -0
  447. package/src/js/modules/payments/mollie.ts +38 -0
  448. package/src/js/modules/payments/moneris.ts +216 -0
  449. package/src/js/modules/payments/opayo.ts +272 -0
  450. package/src/js/modules/payments/paddle.ts +111 -0
  451. package/src/js/modules/payments/payment.ts +183 -0
  452. package/src/js/modules/payments/paypal.ts +214 -0
  453. package/src/js/modules/payments/payway.ts +114 -0
  454. package/src/js/modules/payments/square.ts +106 -0
  455. package/src/js/modules/payments/stripe.ts +426 -0
  456. package/src/js/modules/payments/stub-payment-module.ts +87 -0
  457. package/src/js/modules/payments/utils.ts +60 -0
  458. package/src/js/modules/registry.ts +38 -0
  459. package/src/js/modules/styles.ts +29 -0
  460. package/src/js/submit/pipeline.ts +514 -0
  461. package/src/js/theme/theme-classes.ts +106 -0
  462. package/src/js/transport/forms-api.ts +345 -0
  463. package/src/js/utils/async.ts +81 -0
  464. package/src/js/utils/debug.ts +59 -0
  465. package/src/js/utils/event-names.ts +60 -0
  466. package/src/js/utils/field-references.keys.ts +47 -0
  467. package/src/js/utils/field-references.parser.ts +121 -0
  468. package/src/js/utils/field-references.registry.ts +50 -0
  469. package/src/js/utils/field-references.resolver.ts +115 -0
  470. package/src/js/utils/field-references.ts +11 -0
  471. package/src/js/utils/field-references.types.ts +31 -0
  472. package/src/js/utils/fields.ts +58 -0
  473. package/src/js/utils/http.ts +51 -0
  474. package/src/js/utils/i18n.ts +98 -0
  475. package/src/js/utils/scripts.ts +84 -0
  476. package/src/js/utils/unload-warning.ts +190 -0
  477. package/src/js/validation/rules/email.ts +18 -0
  478. package/src/js/validation/rules/match.ts +26 -0
  479. package/src/js/validation/rules/minmax.ts +47 -0
  480. package/src/js/validation/rules/number.ts +55 -0
  481. package/src/js/validation/rules/pattern.ts +29 -0
  482. package/src/js/validation/rules/required.ts +30 -0
  483. package/src/js/validation/rules/shared.ts +47 -0
  484. package/src/js/validation/rules/url.ts +23 -0
  485. package/src/js/validation/rules.ts +16 -0
  486. package/src/js/validation/types.ts +50 -0
  487. package/src/js/validation/validator.ts +643 -0
  488. package/src/vendor.d.ts +100 -0
  489. package/src/vite-env.d.ts +22 -0
  490. package/vite-dev.mjs +22 -0
@@ -0,0 +1,1101 @@
1
+ //#region ../../node_modules/friendly-challenge/index.js
2
+ var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
3
+ var EQ_CHAR = "=".charCodeAt(0);
4
+ var lookup = new Uint8Array(256);
5
+ for (let i = 0; i < 64; i++) lookup[CHARS.charCodeAt(i)] = i;
6
+ function encode(bytes) {
7
+ const len = bytes.length;
8
+ let base64 = "";
9
+ for (let i = 0; i < len; i += 3) {
10
+ const b0 = bytes[i + 0];
11
+ const b1 = bytes[i + 1];
12
+ const b2 = bytes[i + 2];
13
+ let t = "";
14
+ t += CHARS.charAt(b0 >>> 2);
15
+ t += CHARS.charAt((b0 & 3) << 4 | b1 >>> 4);
16
+ t += CHARS.charAt((b1 & 15) << 2 | b2 >>> 6);
17
+ t += CHARS.charAt(b2 & 63);
18
+ base64 += t;
19
+ }
20
+ if (len % 3 === 2) base64 = base64.substring(0, base64.length - 1) + "=";
21
+ else if (len % 3 === 1) base64 = base64.substring(0, base64.length - 2) + "==";
22
+ return base64;
23
+ }
24
+ function decode(base64) {
25
+ const len = base64.length;
26
+ let bufferLength = len * 3 >>> 2;
27
+ if (base64.charCodeAt(len - 1) === EQ_CHAR) bufferLength--;
28
+ if (base64.charCodeAt(len - 2) === EQ_CHAR) bufferLength--;
29
+ const bytes = new Uint8Array(bufferLength);
30
+ for (let i = 0, p = 0; i < len; i += 4) {
31
+ const encoded1 = lookup[base64.charCodeAt(i + 0)];
32
+ const encoded2 = lookup[base64.charCodeAt(i + 1)];
33
+ const encoded3 = lookup[base64.charCodeAt(i + 2)];
34
+ const encoded4 = lookup[base64.charCodeAt(i + 3)];
35
+ bytes[p++] = encoded1 << 2 | encoded2 >> 4;
36
+ bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
37
+ bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
38
+ }
39
+ return bytes;
40
+ }
41
+ var css = ".frc-captcha *{margin:0;padding:0;border:0;text-align:initial;border-radius:0;filter:none!important;transition:none!important;font-weight:400;font-size:14px;line-height:1.2;text-decoration:none;background-color:initial;color:#222}.frc-captcha{position:relative;min-width:250px;max-width:312px;border:1px solid #f4f4f4;padding-bottom:12px;background-color:#fff}.frc-captcha b{font-weight:700}.frc-container{display:flex;align-items:center;min-height:52px}.frc-icon{fill:#222;stroke:#222;flex-shrink:0;margin:8px 8px 0}.frc-icon.frc-warning{fill:#c00}.frc-success .frc-icon{animation:1s ease-in both frc-fade-in}.frc-content{white-space:nowrap;display:flex;flex-direction:column;margin:4px 6px 0 0;overflow-x:auto;flex-grow:1}.frc-banner{position:absolute;bottom:0;right:6px;line-height:1}.frc-banner *{font-size:10px;opacity:.8;text-decoration:none}.frc-progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:3px 0;height:4px;border:none;background-color:#eee;color:#222;width:100%;transition:.5s linear}.frc-progress::-webkit-progress-bar{background:#eee}.frc-progress::-webkit-progress-value{background:#222}.frc-progress::-moz-progress-bar{background:#222}.frc-button{cursor:pointer;padding:2px 6px;background-color:#f1f1f1;border:1px solid transparent;text-align:center;font-weight:600;text-transform:none}.frc-button:focus{border:1px solid #333}.frc-button:hover{background-color:#ddd}.frc-captcha-solution{display:none}.frc-err-url{text-decoration:underline;font-size:.9em}.frc-rtl{direction:rtl}.frc-rtl .frc-content{margin:4px 0 0 6px}.frc-banner.frc-rtl{left:6px;right:auto}.dark.frc-captcha{color:#fff;background-color:#222;border-color:#333}.dark.frc-captcha *{color:#fff}.dark.frc-captcha button{background-color:#444}.dark .frc-icon{fill:#fff;stroke:#fff}.dark .frc-progress{background-color:#444}.dark .frc-progress::-webkit-progress-bar{background:#444}.dark .frc-progress::-webkit-progress-value{background:#ddd}.dark .frc-progress::-moz-progress-bar{background:#ddd}@keyframes frc-fade-in{from{opacity:0}to{opacity:1}}";
42
+ var SOLVER_TYPE_JS = 1;
43
+ var CHALLENGE_SIZE_BYTES = 128;
44
+ var loaderSVG = `<circle cx="12" cy="12" r="8" stroke-width="3" stroke-dasharray="15 10" fill="none" stroke-linecap="round" transform="rotate(0 12 12)"><animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="0.9s" values="0 12 12;360 12 12"/></circle>`;
45
+ var errorSVG = `<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>`;
46
+ /**
47
+ * Base template used for all widget states
48
+ * The reason we use raw string interpolation here is so we don't have to ship something like lit-html.
49
+ */
50
+ function getTemplate(fieldName, rtl, svgContent, svgAriaHidden, textContent, solutionString, buttonText, progress = false, debugData, additionalContainerClasses) {
51
+ return `<div class="frc-container${additionalContainerClasses ? " " + additionalContainerClasses : ""}${rtl ? " frc-rtl" : ""}">
52
+ <svg class="frc-icon"${svgAriaHidden ? " aria-hidden=\"true\"" : ""} role="img" xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 24 24">${svgContent}</svg>
53
+ <div class="frc-content">
54
+ <span class="frc-text" ${debugData ? `data-debug="${debugData}"` : ``}>${textContent}</span>
55
+ ${buttonText ? `<button type="button" class="frc-button">${buttonText}</button>` : ""}
56
+ ${progress ? `<progress class="frc-progress" value="0">0%</progress>` : ""}
57
+ </div>
58
+ </div><span class="frc-banner${rtl ? " frc-rtl" : ""}"><a lang="en" href="https://friendlycaptcha.com/" rel="noopener" target="_blank"><b>Friendly</b>Captcha ⇗</a></span>
59
+ ${fieldName === "-" ? "" : `<input name="${fieldName}" class="frc-captcha-solution" type="hidden" value="${solutionString}">`}`;
60
+ }
61
+ /**
62
+ * Used when the widget is ready to start solving.
63
+ */
64
+ function getReadyHTML(fieldName, l) {
65
+ return getTemplate(fieldName, l.rtl, `<path d="M17,11c0.34,0,0.67,0.04,1,0.09V6.27L10.5,3L3,6.27v4.91c0,4.54,3.2,8.79,7.5,9.82c0.55-0.13,1.08-0.32,1.6-0.55 C11.41,19.47,11,18.28,11,17C11,13.69,13.69,11,17,11z"/><path d="M17,13c-2.21,0-4,1.79-4,4c0,2.21,1.79,4,4,4s4-1.79,4-4C21,14.79,19.21,13,17,13z M17,14.38"/>`, true, l.text_ready, ".UNSTARTED", l.button_start, false);
66
+ }
67
+ /**
68
+ * Used when the widget is retrieving a puzzle
69
+ */
70
+ function getFetchingHTML(fieldName, l) {
71
+ return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_fetching, ".FETCHING", void 0, true);
72
+ }
73
+ /**
74
+ * Used when the solver is running, displays a progress bar.
75
+ */
76
+ function getRunningHTML(fieldName, l) {
77
+ return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_solving, ".UNFINISHED", void 0, true);
78
+ }
79
+ function getDoneHTML(fieldName, l, solution, data) {
80
+ const timeData = `${data.t.toFixed(0)}s (${(data.h / data.t * .001).toFixed(0)}K/s)${data.solver === SOLVER_TYPE_JS ? " JS Fallback" : ""}`;
81
+ return getTemplate(fieldName, l.rtl, `<title>${l.text_completed_sr}</title><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path>`, false, l.text_completed, solution, void 0, false, timeData, "frc-success");
82
+ }
83
+ function getExpiredHTML(fieldName, l) {
84
+ return getTemplate(fieldName, l.rtl, errorSVG, true, l.text_expired, ".EXPIRED", l.button_restart);
85
+ }
86
+ function getErrorHTML(fieldName, l, errorDescription, recoverable = true, headless = false) {
87
+ return getTemplate(fieldName, l.rtl, errorSVG, true, `<b>${l.text_error}</b><br>${errorDescription}`, headless ? ".HEADLESS_ERROR" : ".ERROR", recoverable ? l.button_retry : void 0);
88
+ }
89
+ /**
90
+ * Injects the style if no #frc-style element is already present
91
+ * (to support custom stylesheets)
92
+ */
93
+ function injectStyle(styleNonce = null) {
94
+ if (!document.querySelector("#frc-style")) {
95
+ const styleSheet = document.createElement("style");
96
+ styleSheet.id = "frc-style";
97
+ styleSheet.innerHTML = css;
98
+ if (styleNonce) styleSheet.setAttribute("nonce", styleNonce);
99
+ document.head.appendChild(styleSheet);
100
+ }
101
+ }
102
+ /**
103
+ * @param element parent element of friendlycaptcha
104
+ * @param progress value between 0 and 1
105
+ */
106
+ function updateProgressBar(element, data) {
107
+ const p = element.querySelector(".frc-progress");
108
+ const perc = (data.i + 1) / data.n;
109
+ if (p) {
110
+ p.value = perc;
111
+ p.innerText = (perc * 100).toFixed(1) + "%";
112
+ p.title = data.i + 1 + "/" + data.n + " (" + (data.h / data.t * .001).toFixed(0) + "K/s)";
113
+ }
114
+ }
115
+ /**
116
+ * Traverses parent nodes until a <form> is found, returns null if not found.
117
+ */
118
+ function findParentFormElement(element) {
119
+ while (element.tagName !== "FORM") {
120
+ element = element.parentElement;
121
+ if (!element) return null;
122
+ }
123
+ return element;
124
+ }
125
+ /**
126
+ * Add listener to specified element that will only fire once on focus.
127
+ */
128
+ function executeOnceOnFocusInEvent(element, listener) {
129
+ element.addEventListener("focusin", listener, {
130
+ once: true,
131
+ passive: true
132
+ });
133
+ }
134
+ var nav;
135
+ var ua;
136
+ if (typeof navigator !== "undefined" && typeof navigator.userAgent === "string") {
137
+ nav = navigator;
138
+ ua = nav.userAgent.toLowerCase();
139
+ }
140
+ /**
141
+ * Headless browser detection on the clientside is imperfect. One can modify any clientside code to disable or change this check,
142
+ * and one can spoof whatever is checked here. However, that doesn't make it worthless: it's yet another hurdle for spammers and
143
+ * it stops unsophisticated scripters from making any request whatsoever.
144
+ */
145
+ function isHeadless() {
146
+ return ua.indexOf("headless") !== -1 || nav.appVersion.indexOf("Headless") !== -1 || ua.indexOf("bot") !== -1 || ua.indexOf("crawl") !== -1 || nav.webdriver === true || !nav.language || nav.languages !== void 0 && !nav.languages.length;
147
+ }
148
+ /**
149
+ * Maps a value between 0 and 255 to a difficulty threshold (as uint32)
150
+ * Difficulty 0 maps to 99.99% probability of being right on the first attempt
151
+ * Anything above 250 needs 2^32 tries on average to solve.
152
+ * 150 to 180 seems reasonable
153
+ */
154
+ function difficultyToThreshold(value) {
155
+ if (value > 255) value = 255;
156
+ else if (value < 0) value = 0;
157
+ return Math.pow(2, (255.999 - value) / 8) >>> 0;
158
+ }
159
+ var PUZZLE_EXPIRY_OFFSET = 13;
160
+ var NUMBER_OF_PUZZLES_OFFSET = 14;
161
+ var PUZZLE_DIFFICULTY_OFFSET = 15;
162
+ function getPuzzleSolverInputs(puzzleBuffer, numPuzzles) {
163
+ const startingPoints = [];
164
+ for (let i = 0; i < numPuzzles; i++) {
165
+ const input = new Uint8Array(CHALLENGE_SIZE_BYTES);
166
+ input.set(puzzleBuffer);
167
+ input[120] = i;
168
+ startingPoints.push(input);
169
+ }
170
+ return startingPoints;
171
+ }
172
+ function decodeBase64Puzzle(base64Puzzle) {
173
+ const parts = base64Puzzle.split(".");
174
+ const puzzle = parts[1];
175
+ const arr = decode(puzzle);
176
+ return {
177
+ signature: parts[0],
178
+ base64: puzzle,
179
+ buffer: arr,
180
+ n: arr[NUMBER_OF_PUZZLES_OFFSET],
181
+ threshold: difficultyToThreshold(arr[PUZZLE_DIFFICULTY_OFFSET]),
182
+ expiry: arr[PUZZLE_EXPIRY_OFFSET] * 3e5
183
+ };
184
+ }
185
+ async function getPuzzle(urlsSeparatedByComma, siteKey, lang) {
186
+ const urls = urlsSeparatedByComma.split(",");
187
+ for (let i = 0; i < urls.length; i++) try {
188
+ const response = await fetchAndRetryWithBackoff(urls[i] + "?sitekey=" + siteKey, {
189
+ headers: [["x-frc-client", "js-0.9.19"]],
190
+ mode: "cors"
191
+ }, 2);
192
+ if (response.ok) return (await response.json()).data.puzzle;
193
+ else {
194
+ let json;
195
+ try {
196
+ json = await response.json();
197
+ } catch (e) {}
198
+ if (json && json.errors && json.errors[0] === "endpoint_not_enabled") throw Error(`Endpoint not allowed (${response.status})`);
199
+ if (i === urls.length - 1) throw Error(`Response status ${response.status} ${response.statusText} ${json ? json.errors : ""}`);
200
+ }
201
+ } catch (e) {
202
+ console.error("[FRC Fetch]:", e);
203
+ const err = /* @__PURE__ */ new Error(`${lang.text_fetch_error} <a class="frc-err-url" href="${urls[i]}">${urls[i]}</a>`);
204
+ err.rawError = e;
205
+ throw err;
206
+ }
207
+ throw Error(`Internal error`);
208
+ }
209
+ /**
210
+ * Retries given request with exponential backoff (starting with 1000ms delay, multiplying by 4 every time)
211
+ * @param url Request (can be string url) to fetch
212
+ * @param opts Options for fetch
213
+ * @param n Number of times to attempt before giving up.
214
+ */
215
+ async function fetchAndRetryWithBackoff(url, opts, n) {
216
+ let time = 1e3;
217
+ return fetch(url, opts).catch(async (error) => {
218
+ if (n === 0) throw error;
219
+ await new Promise((r) => setTimeout(r, time));
220
+ time *= 4;
221
+ return fetchAndRetryWithBackoff(url, opts, n - 1);
222
+ });
223
+ }
224
+ var LANG_EN = {
225
+ text_init: "Initializing...",
226
+ text_ready: "Anti-Robot Verification",
227
+ button_start: "Click to start verification",
228
+ text_fetching: "Fetching Challenge",
229
+ text_solving: "Verifying you are human...",
230
+ text_completed: "I am human",
231
+ text_completed_sr: "Automatic spam check completed",
232
+ text_expired: "Anti-Robot verification expired",
233
+ button_restart: "Restart",
234
+ text_error: "Verification failed",
235
+ button_retry: "Retry",
236
+ text_fetch_error: "Failed to connect to"
237
+ };
238
+ var LANG_FR = {
239
+ text_init: "Chargement...",
240
+ text_ready: "Vérification Anti-Robot",
241
+ button_start: "Clique ici pour vérifier",
242
+ text_fetching: "Chargement du défi",
243
+ text_solving: "Nous vérifions que vous n'êtes pas un robot...",
244
+ text_completed: "Je ne suis pas un robot",
245
+ text_completed_sr: "Vérification automatique des spams terminée",
246
+ text_expired: "Vérification anti-robot expirée",
247
+ button_restart: "Redémarrer",
248
+ text_error: "Échec de la vérification",
249
+ button_retry: "Recommencer",
250
+ text_fetch_error: "Problème de connexion avec"
251
+ };
252
+ var LANG_DE = {
253
+ text_init: "Initialisierung...",
254
+ text_ready: "Anti-Roboter-Verifizierung",
255
+ button_start: "Hier klicken",
256
+ text_fetching: "Herausforderung laden...",
257
+ text_solving: "Verifizierung, dass Sie ein Mensch sind...",
258
+ text_completed: "Ich bin ein Mensch",
259
+ text_completed_sr: "Automatische Spamprüfung abgeschlossen",
260
+ text_expired: "Verifizierung abgelaufen",
261
+ button_restart: "Erneut starten",
262
+ text_error: "Verifizierung fehlgeschlagen",
263
+ button_retry: "Erneut versuchen",
264
+ text_fetch_error: "Verbindungsproblem mit"
265
+ };
266
+ var LANG_NL = {
267
+ text_init: "Initializeren...",
268
+ text_ready: "Anti-robotverificatie",
269
+ button_start: "Klik om te starten",
270
+ text_fetching: "Aan het laden...",
271
+ text_solving: "Anti-robotverificatie bezig...",
272
+ text_completed: "Ik ben een mens",
273
+ text_completed_sr: "Automatische anti-spamcheck voltooid",
274
+ text_expired: "Verificatie verlopen",
275
+ button_restart: "Opnieuw starten",
276
+ text_error: "Verificatie mislukt",
277
+ button_retry: "Opnieuw proberen",
278
+ text_fetch_error: "Verbinding mislukt met"
279
+ };
280
+ var LANG_IT = {
281
+ text_init: "Inizializzazione...",
282
+ text_ready: "Verifica Anti-Robot",
283
+ button_start: "Clicca per iniziare",
284
+ text_fetching: "Caricamento...",
285
+ text_solving: "Verificando che sei umano...",
286
+ text_completed: "Non sono un robot",
287
+ text_completed_sr: "Controllo automatico dello spam completato",
288
+ text_expired: "Verifica Anti-Robot scaduta",
289
+ button_restart: "Ricomincia",
290
+ text_error: "Verifica fallita",
291
+ button_retry: "Riprova",
292
+ text_fetch_error: "Problema di connessione con"
293
+ };
294
+ var LANG_PT = {
295
+ text_init: "Inicializando...",
296
+ text_ready: "Verificação Anti-Robô",
297
+ button_start: "Clique para iniciar verificação",
298
+ text_fetching: "Carregando...",
299
+ text_solving: "Verificando se você é humano...",
300
+ text_completed: "Eu sou humano",
301
+ text_completed_sr: "Verificação automática de spam concluída",
302
+ text_expired: "Verificação Anti-Robô expirada",
303
+ button_restart: "Reiniciar",
304
+ text_error: "Verificação falhou",
305
+ button_retry: "Tentar novamente",
306
+ text_fetch_error: "Falha de conexão com"
307
+ };
308
+ var LANG_ES = {
309
+ text_init: "Inicializando...",
310
+ text_ready: "Verificación Anti-Robot",
311
+ button_start: "Haga clic para iniciar la verificación",
312
+ text_fetching: "Cargando desafío",
313
+ text_solving: "Verificando que eres humano...",
314
+ text_completed: "Soy humano",
315
+ text_completed_sr: "Verificación automática de spam completada",
316
+ text_expired: "Verificación Anti-Robot expirada",
317
+ button_restart: "Reiniciar",
318
+ text_error: "Ha fallado la verificación",
319
+ button_retry: "Intentar de nuevo",
320
+ text_fetch_error: "Error al conectarse a"
321
+ };
322
+ var LANG_CA = {
323
+ text_init: "Inicialitzant...",
324
+ text_ready: "Verificació Anti-Robot",
325
+ button_start: "Fes clic per començar la verificació",
326
+ text_fetching: "Carregant repte",
327
+ text_solving: "Verificant que ets humà...",
328
+ text_completed: "Soc humà",
329
+ text_completed_sr: "Verificació automàtica de correu brossa completada",
330
+ text_expired: "La verificació Anti-Robot ha expirat",
331
+ button_restart: "Reiniciar",
332
+ text_error: "Ha fallat la verificació",
333
+ button_retry: "Tornar a provar",
334
+ text_fetch_error: "Error connectant a"
335
+ };
336
+ var LANG_JA = {
337
+ text_init: "開始しています...",
338
+ text_ready: "アンチロボット認証",
339
+ button_start: "クリックして認証を開始",
340
+ text_fetching: "ロードしています",
341
+ text_solving: "認証中...",
342
+ text_completed: "私はロボットではありません",
343
+ text_completed_sr: "自動スパムチェックが完了しました",
344
+ text_expired: "認証の期限が切れています",
345
+ button_restart: "再度認証を行う",
346
+ text_error: "認証にエラーが発生しました",
347
+ button_retry: "再度認証を行う",
348
+ text_fetch_error: "接続ができませんでした"
349
+ };
350
+ var LANG_DA = {
351
+ text_init: "Aktiverer...",
352
+ text_ready: "Jeg er ikke en robot",
353
+ button_start: "Klik for at starte verifikationen",
354
+ text_fetching: "Henter data",
355
+ text_solving: "Kontrollerer at du er et menneske...",
356
+ text_completed: "Jeg er et menneske.",
357
+ text_completed_sr: "Automatisk spamkontrol gennemført",
358
+ text_expired: "Verifikationen kunne ikke fuldføres",
359
+ button_restart: "Genstart",
360
+ text_error: "Bekræftelse mislykkedes",
361
+ button_retry: "Prøv igen",
362
+ text_fetch_error: "Forbindelsen mislykkedes"
363
+ };
364
+ var LANG_RU = {
365
+ text_init: "Инициализация...",
366
+ text_ready: "АнтиРобот проверка",
367
+ button_start: "Нажмите, чтобы начать проверку",
368
+ text_fetching: "Получаю задачу",
369
+ text_solving: "Проверяю, что вы человек...",
370
+ text_completed: "Я человек",
371
+ text_completed_sr: "Aвтоматическая проверка на спам завершена",
372
+ text_expired: "Срок АнтиРоботной проверки истёк",
373
+ button_restart: "Начать заново",
374
+ text_error: "Ошибка проверки",
375
+ button_retry: "Повторить ещё раз",
376
+ text_fetch_error: "Ошибка подключения"
377
+ };
378
+ var LANG_SV = {
379
+ text_init: "Aktiverar...",
380
+ text_ready: "Jag är inte en robot",
381
+ button_start: "Klicka för att verifiera",
382
+ text_fetching: "Hämtar data",
383
+ text_solving: "Kontrollerar att du är människa...",
384
+ text_completed: "Jag är en människa",
385
+ text_completed_sr: "Automatisk spamkontroll slutförd",
386
+ text_expired: "Anti-robot-verifieringen har löpt ut",
387
+ button_restart: "Börja om",
388
+ text_error: "Verifiering kunde inte slutföras",
389
+ button_retry: "Omstart",
390
+ text_fetch_error: "Verifiering misslyckades"
391
+ };
392
+ var LANG_TR = {
393
+ text_init: "Başlatılıyor...",
394
+ text_ready: "Anti-Robot Doğrulaması",
395
+ button_start: "Doğrulamayı başlatmak için tıklayın",
396
+ text_fetching: "Yükleniyor",
397
+ text_solving: "Robot olmadığınız doğrulanıyor...",
398
+ text_completed: "Ben bir insanım",
399
+ text_completed_sr: "Otomatik spam kontrolü tamamlandı",
400
+ text_expired: "Anti-Robot doğrulamasının süresi doldu",
401
+ button_restart: "Yeniden başlat",
402
+ text_error: "Doğrulama başarısız oldu",
403
+ button_retry: "Tekrar dene",
404
+ text_fetch_error: "Bağlantı başarısız oldu"
405
+ };
406
+ var LANG_EL = {
407
+ text_init: "Προετοιμασία...",
408
+ text_ready: "Anti-Robot Επαλήθευση",
409
+ button_start: " Κάντε κλικ για να ξεκινήσει η επαλήθευση",
410
+ text_fetching: " Λήψη πρόκλησης",
411
+ text_solving: " Επιβεβαίωση ανθρώπου...",
412
+ text_completed: "Είμαι άνθρωπος",
413
+ text_completed_sr: " Ο αυτόματος έλεγχος ανεπιθύμητου περιεχομένου ολοκληρώθηκε",
414
+ text_expired: " Η επαλήθευση Anti-Robot έληξε",
415
+ button_restart: " Επανεκκίνηση",
416
+ text_error: " Η επαλήθευση απέτυχε",
417
+ button_retry: " Δοκιμάστε ξανά",
418
+ text_fetch_error: " Αποτυχία σύνδεσης με"
419
+ };
420
+ var LANG_UK = {
421
+ text_init: "Ініціалізація...",
422
+ text_ready: "Антиробот верифікація",
423
+ button_start: "Натисніть, щоб розпочати верифікацію",
424
+ text_fetching: "З’єднання",
425
+ text_solving: "Перевірка, що ви не робот...",
426
+ text_completed: "Я не робот",
427
+ text_completed_sr: "Автоматична перевірка спаму завершена",
428
+ text_expired: "Час вичерпано",
429
+ button_restart: "Почати знову",
430
+ text_error: "Верифікація не вдалась",
431
+ button_retry: "Спробувати знову",
432
+ text_fetch_error: "Не вдалось з’єднатись"
433
+ };
434
+ var LANG_BG = {
435
+ text_init: "Инициализиране...",
436
+ text_ready: "Анти-робот проверка",
437
+ button_start: "Щракнете, за да започнете проверката",
438
+ text_fetching: "Предизвикателство",
439
+ text_solving: "Проверяваме дали си човек...",
440
+ text_completed: "Аз съм човек",
441
+ text_completed_sr: "Автоматичната проверка за спам е завършена",
442
+ text_expired: "Анти-Робот проверката изтече",
443
+ button_restart: "Рестартирайте",
444
+ text_error: "Неуспешна проверка",
445
+ button_retry: "Опитайте пак",
446
+ text_fetch_error: "Неуспешно свързване с"
447
+ };
448
+ var LANG_CS = {
449
+ text_init: "Inicializace...",
450
+ text_ready: "Ověření proti robotům",
451
+ button_start: "Klikněte pro ověření",
452
+ text_fetching: "Problém při načítání",
453
+ text_solving: "Ověření, že jste člověk...",
454
+ text_completed: "Jsem člověk",
455
+ text_completed_sr: "Automatická kontrola spamu dokončena",
456
+ text_expired: "Ověření proti robotům vypršelo",
457
+ button_restart: "Restartovat",
458
+ text_error: "Ověření se nezdařilo",
459
+ button_retry: "Zkusit znovu",
460
+ text_fetch_error: "Připojení se nezdařilo"
461
+ };
462
+ var LANG_SK = {
463
+ text_init: "Inicializácia...",
464
+ text_ready: "Overenie proti robotom",
465
+ button_start: "Kliknite pre overenie",
466
+ text_fetching: "Problém pri načítaní",
467
+ text_solving: "Overenie, že ste človek...",
468
+ text_completed: "Som človek",
469
+ text_completed_sr: "Automatická kontrola spamu dokončená",
470
+ text_expired: "Overenie proti robotom vypršalo",
471
+ button_restart: "Reštartovať",
472
+ text_error: "Overenie sa nepodarilo",
473
+ button_retry: "Skúsiť znova",
474
+ text_fetch_error: "Pripojenie sa nepodarilo"
475
+ };
476
+ var LANG_NO = {
477
+ text_init: " Aktiverer...",
478
+ text_ready: "Jeg er ikke en robot",
479
+ button_start: "Klikk for å starte verifiseringen",
480
+ text_fetching: "Henter data",
481
+ text_solving: "Sjekker at du er et menneske...",
482
+ text_completed: "Jeg er et menneske",
483
+ text_completed_sr: "Automatisk spam-sjekk fullført",
484
+ text_expired: "Verifisering kunne ikke fullføres",
485
+ button_restart: "Omstart",
486
+ text_error: "Bekreftelsen mislyktes",
487
+ button_retry: "Prøv på nytt",
488
+ text_fetch_error: "Tilkoblingen mislyktes"
489
+ };
490
+ var localizations = {
491
+ en: LANG_EN,
492
+ de: LANG_DE,
493
+ nl: LANG_NL,
494
+ fr: LANG_FR,
495
+ it: LANG_IT,
496
+ pt: LANG_PT,
497
+ es: LANG_ES,
498
+ ca: LANG_CA,
499
+ ja: LANG_JA,
500
+ da: LANG_DA,
501
+ ru: LANG_RU,
502
+ sv: LANG_SV,
503
+ tr: LANG_TR,
504
+ el: LANG_EL,
505
+ uk: LANG_UK,
506
+ bg: LANG_BG,
507
+ cs: LANG_CS,
508
+ sk: LANG_SK,
509
+ no: LANG_NO,
510
+ fi: {
511
+ text_init: "Aktivoidaan...",
512
+ text_ready: "En ole robotti",
513
+ button_start: "Aloita vahvistus klikkaamalla",
514
+ text_fetching: "Haetaan tietoja",
515
+ text_solving: "Tarkistaa, että olet ihminen...",
516
+ text_completed: "Olen ihminen",
517
+ text_completed_sr: "Automaattinen roskapostin tarkistus suoritettu",
518
+ text_expired: "Vahvistusta ei voitu suorittaa loppuun",
519
+ button_restart: "Uudelleenkäynnistys",
520
+ text_error: "Vahvistus epäonnistui",
521
+ button_retry: "Yritä uudelleen",
522
+ text_fetch_error: "Yhteys epäonnistui"
523
+ },
524
+ lv: {
525
+ text_init: "Notiek inicializēšana...",
526
+ text_ready: "Verifikācija, ka neesat robots",
527
+ button_start: "Noklikšķiniet, lai sāktu verifikāciju",
528
+ text_fetching: "Notiek drošības uzdevuma izgūšana",
529
+ text_solving: "Notiek pārbaude, vai esat cilvēks...",
530
+ text_completed: "Es esmu cilvēks",
531
+ text_completed_sr: "Automātiska surogātpasta pārbaude pabeigta",
532
+ text_expired: "Verifikācijas, ka neesat robots, derīgums beidzies",
533
+ button_restart: "Restartēt",
534
+ text_error: "Verifikācija neizdevās",
535
+ button_retry: "Mēģināt vēlreiz",
536
+ text_fetch_error: "Neizdevās izveidot savienojumu ar"
537
+ },
538
+ lt: {
539
+ text_init: "Inicijuojama...",
540
+ text_ready: "Patikrinimas, ar nesate robotas",
541
+ button_start: "Spustelėkite patikrinimui pradėti",
542
+ text_fetching: "Gavimo iššūkis",
543
+ text_solving: "Tikrinama, ar esate žmogus...",
544
+ text_completed: "Esu žmogus",
545
+ text_completed_sr: "Automatinė patikra dėl pašto šiukšlių atlikta",
546
+ text_expired: "Patikrinimas, ar nesate robotas, baigė galioti",
547
+ button_restart: "Pradėti iš naujo",
548
+ text_error: "Patikrinimas nepavyko",
549
+ button_retry: "Kartoti",
550
+ text_fetch_error: "Nepavyko prisijungti prie"
551
+ },
552
+ pl: {
553
+ text_init: "Inicjowanie...",
554
+ text_ready: "Weryfikacja antybotowa",
555
+ button_start: "Kliknij, aby rozpocząć weryfikację",
556
+ text_fetching: "Pobieranie",
557
+ text_solving: "Weryfikacja, czy nie jesteś robotem...",
558
+ text_completed: "Nie jestem robotem",
559
+ text_completed_sr: "Zakończono automatyczne sprawdzanie spamu",
560
+ text_expired: "Weryfikacja antybotowa wygasła",
561
+ button_restart: "Uruchom ponownie",
562
+ text_error: "Weryfikacja nie powiodła się",
563
+ button_retry: "Spróbuj ponownie",
564
+ text_fetch_error: "Nie udało się połączyć z"
565
+ },
566
+ et: {
567
+ text_init: "Initsialiseerimine...",
568
+ text_ready: "Robotivastane kinnitus",
569
+ button_start: "Kinnitamisega alustamiseks klõpsake",
570
+ text_fetching: "Väljakutse toomine",
571
+ text_solving: "Kinnitatakse, et sa oled inimene...",
572
+ text_completed: "Ma olen inimene",
573
+ text_completed_sr: "Automaatne rämpsposti kontroll on lõpetatud",
574
+ text_expired: "Robotivastane kinnitus aegus",
575
+ button_restart: "Taaskäivita",
576
+ text_error: "Kinnitamine nurjus",
577
+ button_retry: "Proovi uuesti",
578
+ text_fetch_error: "Ühenduse loomine nurjus"
579
+ },
580
+ hr: {
581
+ text_init: "Početno postavljanje...",
582
+ text_ready: "Provjera protiv robota",
583
+ button_start: "Kliknite za početak provjere",
584
+ text_fetching: "Dohvaćanje izazova",
585
+ text_solving: "Provjeravamo jeste li čovjek...",
586
+ text_completed: "Nisam robot",
587
+ text_completed_sr: "Automatska provjera je završena",
588
+ text_expired: "Vrijeme za provjeru protiv robota je isteklo",
589
+ button_restart: "Osvježi",
590
+ text_error: "Provjera nije uspjlela",
591
+ button_retry: " Ponovo pokreni",
592
+ text_fetch_error: "Nije moguće uspostaviti vezu"
593
+ },
594
+ sr: {
595
+ text_init: "Pokretanje...",
596
+ text_ready: "Anti-Robot Verifikacija",
597
+ button_start: "Kliknite da biste započeli verifikaciju",
598
+ text_fetching: "Učitavanje izazova",
599
+ text_solving: "Verifikacija da ste čovek...",
600
+ text_completed: "Ja sam čovek",
601
+ text_completed_sr: "Automatska provera neželjene pošte je završena",
602
+ text_expired: "Anti-Robot verifikacija je istekla",
603
+ button_restart: "Ponovo pokrenuti",
604
+ text_error: "Verifikacija nije uspela",
605
+ button_retry: "Pokušajte ponovo",
606
+ text_fetch_error: "Neuspelo povezivanje sa..."
607
+ },
608
+ sl: {
609
+ text_init: "Inicializiranje...",
610
+ text_ready: "Preverjanje robotov",
611
+ button_start: "Kliknite za začetek preverjanja",
612
+ text_fetching: "Prenašanje izziva",
613
+ text_solving: "Preverjamo, ali ste človek",
614
+ text_completed: "Nisem robot",
615
+ text_completed_sr: "Avtomatsko preverjanje je zaključeno",
616
+ text_expired: "Preverjanje robotov je poteklo",
617
+ button_restart: "Osveži",
618
+ text_error: "Preverjanje ni uspelo",
619
+ button_retry: "Poskusi ponovno",
620
+ text_fetch_error: "Povezave ni bilo mogoče vzpostaviti"
621
+ },
622
+ hu: {
623
+ text_init: "Inicializálás...",
624
+ text_ready: "Robotellenes ellenőrzés",
625
+ button_start: "Kattintson az ellenőrzés megkezdéséhez",
626
+ text_fetching: "Feladvány lekérése",
627
+ text_solving: "Annak igazolása, hogy Ön nem robot...",
628
+ text_completed: "Nem vagyok robot",
629
+ text_completed_sr: "Automatikus spam ellenőrzés befejeződött",
630
+ text_expired: "Robotellenes ellenőrzés lejárt",
631
+ button_restart: "Újraindítás",
632
+ text_error: "Az ellenőrzés nem sikerült",
633
+ button_retry: "Próbálja újra",
634
+ text_fetch_error: "Nem sikerült csatlakozni"
635
+ },
636
+ ro: {
637
+ text_init: "Se inițializează...",
638
+ text_ready: "Verificare anti-robot",
639
+ button_start: "Click pentru a începe verificarea",
640
+ text_fetching: "Downloading",
641
+ text_solving: "Verificare că ești om...",
642
+ text_completed: "Sunt om",
643
+ text_completed_sr: "Verificarea automată a spam-ului a fost finalizată",
644
+ text_expired: "Verificarea anti-robot a expirat",
645
+ button_restart: "Restart",
646
+ text_error: "Verificare eșuată",
647
+ button_retry: "Reîncearcă",
648
+ text_fetch_error: "Nu s-a putut conecta"
649
+ },
650
+ zh: {
651
+ text_init: "初始化中……",
652
+ text_ready: "人机验证",
653
+ button_start: "点击开始",
654
+ text_fetching: "正在加载",
655
+ text_solving: "人机校验中……",
656
+ text_completed: "我不是机器人",
657
+ text_completed_sr: "人机验证完成",
658
+ text_expired: "验证已过期",
659
+ button_restart: "重新开始",
660
+ text_error: "校验失败",
661
+ button_retry: "重试",
662
+ text_fetch_error: "无法连接到"
663
+ },
664
+ zh_tw: {
665
+ text_init: "正在初始化……",
666
+ text_ready: "反機器人驗證",
667
+ button_start: "點擊開始驗證",
668
+ text_fetching: "載入中",
669
+ text_solving: "反機器人驗證中……",
670
+ text_completed: "我不是機器人",
671
+ text_completed_sr: "驗證完成",
672
+ text_expired: "驗證超時",
673
+ button_restart: "重新開始",
674
+ text_error: "驗證失敗",
675
+ button_retry: "重試",
676
+ text_fetch_error: "無法連線到"
677
+ },
678
+ vi: {
679
+ text_init: "Đang khởi tạo...",
680
+ text_ready: "Xác minh chống Robot",
681
+ button_start: "Bấm vào đây để xác minh",
682
+ text_fetching: "Tìm nạp và xử lý thử thách",
683
+ text_solving: "Xác minh bạn là người...",
684
+ text_completed: "Bạn là con người",
685
+ text_completed_sr: "Xác minh hoàn tất",
686
+ text_expired: "Xác minh đã hết hạn",
687
+ button_restart: "Khởi động lại",
688
+ text_error: "Xác minh thất bại",
689
+ button_retry: "Thử lại",
690
+ text_fetch_error: "Không kết nối được"
691
+ },
692
+ he: {
693
+ text_init: "בביצוע...",
694
+ text_ready: "אימות אנוש",
695
+ button_start: "צריך ללחוץ להתחלת האימות",
696
+ text_fetching: "אתגר המענה בהכנה",
697
+ text_solving: "מתבצע אימות אנוש...",
698
+ text_completed: "אני לא רובוט",
699
+ text_completed_sr: "בדיקת הספאם האוטומטית הסתיימה",
700
+ text_expired: "פג תוקף אימות האנוש",
701
+ button_restart: "להתחיל שוב",
702
+ text_error: "אימות האנוש נכשל",
703
+ button_retry: "לנסות שוב",
704
+ text_fetch_error: "נכשל החיבור אל",
705
+ rtl: true
706
+ },
707
+ th: {
708
+ text_init: "การเริ่มต้น...",
709
+ text_ready: " การตรวจสอบต่อต้านหุ่นยนต์",
710
+ button_start: "คลิกเพื่อเริ่มการตรวจสอบ",
711
+ text_fetching: "การดึงความท้าทาย",
712
+ text_solving: "ยืนยันว่าคุณเป็นมนุษย์...",
713
+ text_completed: "ฉันเป็นมนุษย์",
714
+ text_completed_sr: "การตรวจสอบสแปมอัตโนมัติเสร็จสมบูรณ์",
715
+ text_expired: "การตรวจสอบ ต่อต้านหุ่นยนต์ หมดอายุ",
716
+ button_restart: "รีสตาร์ท",
717
+ text_error: "การยืนยันล้มเหลว",
718
+ button_retry: "ลองใหม่",
719
+ text_fetch_error: "ไม่สามารถเชื่อมต่อได้"
720
+ },
721
+ kr: {
722
+ text_init: "초기화 중",
723
+ text_ready: "Anti-Robot 검증",
724
+ button_start: "검증을 위해 클릭해 주세요",
725
+ text_fetching: "검증 준비 중",
726
+ text_solving: "검증 중",
727
+ text_completed: "검증이 완료되었습니다",
728
+ text_completed_sr: "자동 스팸 확인 완료",
729
+ text_expired: "Anti-Robot 검증 만료",
730
+ button_restart: "다시 시작합니다",
731
+ text_error: "검증 실패",
732
+ button_retry: "다시 시도해 주세요",
733
+ text_fetch_error: "연결하지 못했습니다"
734
+ },
735
+ ar: {
736
+ text_init: "...التهيئة",
737
+ text_ready: "يتم التحقيق",
738
+ button_start: "إضغط هنا للتحقيق",
739
+ text_fetching: "تهيئة التحدي",
740
+ text_solving: "نتحقق من أنك لست روبوتًا...",
741
+ text_completed: "أنا لست روبوتًا",
742
+ text_completed_sr: "تم الانتهاء من التحقق التلقائي من البريد العشوائي",
743
+ text_expired: "انتهت صلاحية التحقق",
744
+ button_restart: "إعادة تشغيل",
745
+ text_error: "فشل التحقق",
746
+ button_retry: "ابدأ مرة أخرى",
747
+ text_fetch_error: "مشكلة في الاتصال مع"
748
+ },
749
+ nb: LANG_NO
750
+ };
751
+ function createDiagnosticsBuffer(solverID, timeToSolved) {
752
+ const arr = new Uint8Array(3);
753
+ const view = new DataView(arr.buffer);
754
+ view.setUint8(0, solverID);
755
+ view.setUint16(1, timeToSolved);
756
+ return arr;
757
+ }
758
+ var workerString = "!function(){\"use strict\";const A=\"=\".charCodeAt(0),I=new Uint8Array(256);for(let A=0;A<64;A++)I[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".charCodeAt(A)]=A;function g(A){const I={},g=A.exports,C=g.memory,Q=g.__alloc,t=g.__retain,B=g.__rtti_base||-1;return I.__allocArray=(A,I)=>{const g=function(A){return new Uint32Array(C.buffer)[(B+4>>>2)+2*A]}(A),e=31-Math.clz32(g>>>6&31),o=I.length,i=Q(o<<e,0),r=Q(12,A),n=new Uint32Array(C.buffer);n[r+0>>>2]=t(i),n[r+4>>>2]=i,n[r+8>>>2]=o<<e;const E=C.buffer,s=new Uint8Array(E);if(16384&g)for(let A=0;A<o;++A)s[(i>>>e)+A]=t(I[A]);else s.set(I,i>>>e);return r},I.__getUint8Array=A=>{const I=new Uint32Array(C.buffer),g=I[A+4>>>2];return new Uint8Array(C.buffer,g,I[g-4>>>2]>>>0)},function(A,I={}){const g=A.__argumentsLength?I=>{A.__argumentsLength.value=I}:A.__setArgumentsLength||A.__setargc||(()=>({}));for(const C in A){if(!Object.prototype.hasOwnProperty.call(A,C))continue;const Q=A[C],t=C.split(\".\")[0];\"function\"==typeof Q&&Q!==g?(I[t]=(...A)=>(g(A.length),Q(...A))).original=Q:I[t]=Q}return I}(g,I)}class C{constructor(A){this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.v=new Uint32Array(32),this.m=new Uint32Array(32),this.outlen=A}}function Q(A,I){return A[I]^A[I+1]<<8^A[I+2]<<16^A[I+3]<<24}function t(A,I,g,C,Q,t,B,e){const o=I[B],i=I[B+1],r=I[e],n=I[e+1];let E,s,w,a,c=A[g],D=A[g+1],f=A[C],h=A[C+1],y=A[Q],l=A[Q+1],u=A[t],N=A[t+1];E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+o,s=(c&o|(c|o)&~E)>>>31,c=E,D=D+i+s,w=u^c,a=N^D,u=a,N=w,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=w>>>24^a<<8,h=a>>>24^w<<8,E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+r,s=(c&r|(c|r)&~E)>>>31,c=E,D=D+n+s,w=u^c,a=N^D,u=w>>>16^a<<16,N=a>>>16^w<<16,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=a>>>31^w<<1,h=w>>>31^a<<1,A[g]=c,A[g+1]=D,A[C]=f,A[C+1]=h,A[Q]=y,A[Q+1]=l,A[t]=u,A[t+1]=N}const B=[4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225],e=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6,22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8,14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16,18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26,4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18,24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22,26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20,12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10,20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6];function o(A,I){const g=A.v,C=A.m;for(let I=0;I<16;I++)g[I]=A.h[I],g[I+16]=B[I];g[24]=g[24]^A.t,g[25]=g[25]^A.t/4294967296,I&&(g[28]=~g[28],g[29]=~g[29]);for(let I=0;I<32;I++)C[I]=Q(A.b,4*I);for(let A=0;A<12;A++)t(g,C,0,8,16,24,e[16*A+0],e[16*A+1]),t(g,C,2,10,18,26,e[16*A+2],e[16*A+3]),t(g,C,4,12,20,28,e[16*A+4],e[16*A+5]),t(g,C,6,14,22,30,e[16*A+6],e[16*A+7]),t(g,C,0,10,20,30,e[16*A+8],e[16*A+9]),t(g,C,2,12,22,24,e[16*A+10],e[16*A+11]),t(g,C,4,14,16,26,e[16*A+12],e[16*A+13]),t(g,C,6,8,18,28,e[16*A+14],e[16*A+15]);for(let I=0;I<16;I++)A.h[I]=A.h[I]^g[I]^g[I+16]}function i(A,I){for(let I=0;I<16;I++)A.h[I]=B[I];A.b.set(I),A.h[0]^=16842752^A.outlen}async function r(){return(A,I,g=4294967295)=>{const Q=function(A,I,g){if(128!=A.length)throw Error(\"Invalid input\");const Q=A.buffer,t=new DataView(Q),B=new C(32);B.t=128;const e=t.getUint32(124,!0),r=e+g;for(let g=e;g<r;g++)if(t.setUint32(124,g,!0),i(B,A),o(B,!0),B.h[0]<I)return 0==ASC_TARGET?new Uint8Array(B.h.buffer):Uint8Array.wrap(B.h.buffer);return new Uint8Array(0)}(A,I,g);return[A,Q]}}let n,E;Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,\"slice\",{value:function(A,I){return new Uint8Array(Array.prototype.slice.call(this,A,I))}}),self.ASC_TARGET=0;const s=new Promise((A=>E=A));self.onerror=A=>{self.postMessage({type:\"error\",message:JSON.stringify(A)})},self.onmessage=async C=>{const Q=C.data;try{if(\"solver\"===Q.type){if(Q.forceJS){n=1;const A=await r();E(A)}else try{n=2;const C=WebAssembly.compile(function(g){let C=3285;g.charCodeAt(4379)===A&&C--,g.charCodeAt(4378)===A&&C--;const Q=new Uint8Array(C);for(let A=0,C=0;A<4380;A+=4){const t=I[g.charCodeAt(A+0)],B=I[g.charCodeAt(A+1)],e=I[g.charCodeAt(A+2)],o=I[g.charCodeAt(A+3)];Q[C++]=t<<2|B>>4,Q[C++]=(15&B)<<4|e>>2,Q[C++]=(3&e)<<6|63&o}return Q}(\"AGFzbQEAAAABKghgAABgAn9/AGADf39/AX9gAX8AYAR/f39/AGAAAX9gAX8Bf2ACf38BfwINAQNlbnYFYWJvcnQABAMMCwcGAwAAAQIFAQIABQMBAAEGFgR/AUEAC38BQQALfwBBAwt/AEHgDAsHbgkGbWVtb3J5AgAHX19hbGxvYwABCF9fcmV0YWluAAIJX19yZWxlYXNlAAMJX19jb2xsZWN0AAQHX19yZXNldAAFC19fcnR0aV9iYXNlAwMNVWludDhBcnJheV9JRAMCDHNvbHZlQmxha2UyYgAKCAELCvQSC5IBAQV/IABB8P///wNLBEAACyMBQRBqIgQgAEEPakFwcSICQRAgAkEQSxsiBmoiAj8AIgVBEHQiA0sEQCAFIAIgA2tB//8DakGAgHxxQRB2IgMgBSADShtAAEEASARAIANAAEEASARAAAsLCyACJAEgBEEQayICIAY2AgAgAkEBNgIEIAIgATYCCCACIAA2AgwgBAsEACAACwMAAQsDAAELBgAjACQBC7sCAQF/AkAgAUUNACAAQQA6AAAgACABakEEayICQQA6AAMgAUECTQ0AIABBADoAASAAQQA6AAIgAkEAOgACIAJBADoAASABQQZNDQAgAEEAOgADIAJBADoAACABQQhNDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmpBHGsiAUEANgIYIAJBCE0NACAAQQA2AgQgAEEANgIIIAFBADYCECABQQA2AhQgAkEYTQ0AIABBADYCDCAAQQA2AhAgAEEANgIUIABBADYCGCABQQA2AgAgAUEANgIEIAFBADYCCCABQQA2AgwgACAAQQRxQRhqIgFqIQAgAiABayEBA0AgAUEgTwRAIABCADcDACAAQgA3AwggAEIANwMQIABCADcDGCABQSBrIQEgAEEgaiEADAELCwsLcgACfyAARQRAQQxBAhABIQALIAALQQA2AgAgAEEANgIEIABBADYCCCABQfD///8DIAJ2SwRAQcAKQfAKQRJBORAAAAsgASACdCIBQQAQASICIAEQBiAAKAIAGiAAIAI2AgAgACACNgIEIAAgATYCCCAAC88BAQJ/QaABQQAQASIAQQxBAxABQYABQQAQBzYCACAAQQxBBBABQQhBAxAHNgIEIABCADcDCCAAQQA2AhAgAEIANwMYIABCADcDICAAQgA3AyggAEIANwMwIABCADcDOCAAQgA3A0AgAEIANwNIIABCADcDUCAAQgA3A1ggAEIANwNgIABCADcDaCAAQgA3A3AgAEIANwN4IABCADcDgAEgAEIANwOIASAAQgA3A5ABQYABQQUQASIBQYABEAYgACABNgKYASAAQSA2ApwBIAAL2AkCA38SfiAAKAIEIQIgACgCmAEhAwNAIARBgAFIBEAgAyAEaiABIARqKQMANwMAIARBCGohBAwBCwsgAigCBCkDACEMIAIoAgQpAwghDSACKAIEKQMQIQ4gAigCBCkDGCEPIAIoAgQpAyAhBSACKAIEKQMoIQsgAigCBCkDMCEGIAIoAgQpAzghB0KIkvOd/8z5hOoAIQhCu86qptjQ67O7fyEJQqvw0/Sv7ry3PCEQQvHt9Pilp/2npX8hCiAAKQMIQtGFmu/6z5SH0QCFIRFCn9j52cKR2oKbfyESQpSF+aXAyom+YCETQvnC+JuRo7Pw2wAhFEEAIQQDQCAEQcABSARAIAUgCCARIAwgBSADIARBgAhqIgEtAABBA3RqKQMAfHwiBYVCIIoiDHwiCIVCGIoiESAIIAwgBSARIAMgAS0AAUEDdGopAwB8fCIMhUIQiiIIfCIVhUI/iiEFIAsgCSASIA0gCyADIAEtAAJBA3RqKQMAfHwiDYVCIIoiCXwiEYVCGIohCyAGIBAgEyAOIAYgAyABLQAEQQN0aikDAHx8IgaFQiCKIg58IhCFQhiKIhIgECAOIAYgEiADIAEtAAVBA3RqKQMAfHwiDoVCEIoiE3wiEIVCP4ohBiAHIAogFCAPIAcgAyABLQAGQQN0aikDAHx8IgeFQiCKIg98IgqFQhiKIhIgCiAPIAcgEiADIAEtAAdBA3RqKQMAfHwiD4VCEIoiCnwiEoVCP4ohByAQIAogDCARIAkgDSALIAMgAS0AA0EDdGopAwB8fCINhUIQiiIJfCIWIAuFQj+KIgwgAyABLQAIQQN0aikDAHx8IhCFQiCKIgp8IgsgECALIAyFQhiKIhEgAyABLQAJQQN0aikDAHx8IgwgCoVCEIoiFHwiECARhUI/iiELIAYgEiAIIA0gBiADIAEtAApBA3RqKQMAfHwiDYVCIIoiCHwiCoVCGIoiBiANIAYgAyABLQALQQN0aikDAHx8Ig0gCIVCEIoiESAKfCIKhUI/iiEGIAcgFSAJIA4gByADIAEtAAxBA3RqKQMAfHwiDoVCIIoiCHwiCYVCGIoiByAOIAcgAyABLQANQQN0aikDAHx8Ig4gCIVCEIoiEiAJfCIIhUI/iiEHIAUgFiATIA8gBSADIAEtAA5BA3RqKQMAfHwiD4VCIIoiCXwiFYVCGIoiBSAPIAUgAyABLQAPQQN0aikDAHx8Ig8gCYVCEIoiEyAVfCIJhUI/iiEFIARBEGohBAwBCwsgAigCBCACKAIEKQMAIAggDIWFNwMAIAIoAgQgAigCBCkDCCAJIA2FhTcDCCACKAIEIAIoAgQpAxAgDiAQhYU3AxAgAigCBCACKAIEKQMYIAogD4WFNwMYIAIoAgQgAigCBCkDICAFIBGFhTcDICACKAIEIAIoAgQpAyggCyAShYU3AyggAigCBCACKAIEKQMwIAYgE4WFNwMwIAIoAgQgAigCBCkDOCAHIBSFhTcDOCAAIAw3AxggACANNwMgIAAgDjcDKCAAIA83AzAgACAFNwM4IAAgCzcDQCAAIAY3A0ggACAHNwNQIAAgCDcDWCAAIAk3A2AgACAQNwNoIAAgCjcDcCAAIBE3A3ggACASNwOAASAAIBM3A4gBIAAgFDcDkAEL4QIBBH8gACgCCEGAAUcEQEHQCUGACkEeQQUQAAALIAAoAgAhBBAIIgMoAgQhBSADQoABNwMIIAQoAnwiACACaiEGA0AgACAGSQRAIAQgADYCfCADKAIEIgIoAgQgAygCnAGtQoiS95X/zPmE6gCFNwMAIAIoAgRCu86qptjQ67O7fzcDCCACKAIEQqvw0/Sv7ry3PDcDECACKAIEQvHt9Pilp/2npX83AxggAigCBELRhZrv+s+Uh9EANwMgIAIoAgRCn9j52cKR2oKbfzcDKCACKAIEQuv6htq/tfbBHzcDMCACKAIEQvnC+JuRo7Pw2wA3AzggAyAEEAkgBSgCBCkDAKcgAUkEQEEAIAUoAgAiAUEQaygCDCICSwRAQfALQbAMQc0NQQUQAAALQQxBAxABIgAgATYCACAAIAI2AgggACABNgIEIAAPCyAAQQFqIQAMAQsLQQxBAxABQQBBABAHCwwAQaANJABBoA0kAQsL+gQJAEGBCAu/AQECAwQFBgcICQoLDA0ODw4KBAgJDw0GAQwAAgsHBQMLCAwABQIPDQoOAwYHAQkEBwkDAQ0MCw4CBgUKBAAPCAkABQcCBAoPDgELDAYIAw0CDAYKAAsIAwQNBwUPDgEJDAUBDw4NBAoABwYDCQIICw0LBw4MAQMJBQAPBAgGAgoGDw4JCwMACAwCDQcBBAoFCgIIBAcGAQUPCwkOAwwNAAABAgMEBQYHCAkKCwwNDg8OCgQICQ8NBgEMAAILBwUDAEHACQspGgAAAAEAAAABAAAAGgAAAEkAbgB2AGEAbABpAGQAIABpAG4AcAB1AHQAQfAJCzEiAAAAAQAAAAEAAAAiAAAAcwByAGMALwBzAG8AbAB2AGUAcgBXAGEAcwBtAC4AdABzAEGwCgsrHAAAAAEAAAABAAAAHAAAAEkAbgB2AGEAbABpAGQAIABsAGUAbgBnAHQAaABB4AoLNSYAAAABAAAAAQAAACYAAAB+AGwAaQBiAC8AYQByAHIAYQB5AGIAdQBmAGYAZQByAC4AdABzAEGgCws1JgAAAAEAAAABAAAAJgAAAH4AbABpAGIALwBzAHQAYQB0AGkAYwBhAHIAcgBhAHkALgB0AHMAQeALCzMkAAAAAQAAAAEAAAAkAAAASQBuAGQAZQB4ACAAbwB1AHQAIABvAGYAIAByAGEAbgBnAGUAQaAMCzMkAAAAAQAAAAEAAAAkAAAAfgBsAGkAYgAvAHQAeQBwAGUAZABhAHIAcgBhAHkALgB0AHMAQeAMCy4GAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAYQAAAAIAAAAhAgAAAgAAACQC\")),Q=await async function(A){const I=await async function(A){const I={env:{abort(){throw Error(\"Wasm aborted\")}}};return{exports:g(await WebAssembly.instantiate(A,I))}}(A),C=I.exports.__retain(I.exports.__allocArray(I.exports.Uint8Array_ID,new Uint8Array(128)));let Q=I.exports.__getUint8Array(C);return(A,g,t=4294967295)=>{Q.set(A);const B=I.exports.solveBlake2b(C,g,t);Q=I.exports.__getUint8Array(C);const e=I.exports.__getUint8Array(B);return I.exports.__release(B),[Q,e]}}(await C);E(Q)}catch(A){console.log(\"FriendlyCaptcha failed to initialize WebAssembly, falling back to Javascript solver: \"+A.toString()),n=1;const I=await r();E(I)}self.postMessage({type:\"ready\",solver:n})}else if(\"start\"===Q.type){const A=await s;self.postMessage({type:\"started\"});let I,g=0;for(let C=0;C<256;C++){Q.puzzleSolverInput[123]=C;const[t,B]=A(Q.puzzleSolverInput,Q.threshold);if(0!==B.length){I=t;break}console.warn(\"FC: Internal error or no solution found\"),g+=Math.pow(2,32)-1}g+=new DataView(I.slice(-4).buffer).getUint32(0,!0),self.postMessage({type:\"done\",solution:I.slice(-8),h:g,puzzleIndex:Q.puzzleIndex,puzzleNumber:Q.puzzleNumber})}}catch(A){setTimeout((()=>{throw A}))}}}();";
759
+ var URL;
760
+ if (typeof window !== "undefined") URL = window.URL || window.webkitURL;
761
+ var WorkerGroup = class {
762
+ constructor() {
763
+ this.workers = [];
764
+ this.puzzleNumber = 0;
765
+ this.numPuzzles = 0;
766
+ this.threshold = 0;
767
+ this.startTime = 0;
768
+ this.progress = 0;
769
+ this.totalHashes = 0;
770
+ this.puzzleSolverInputs = [];
771
+ this.puzzleIndex = 0;
772
+ this.solutionBuffer = new Uint8Array(0);
773
+ this.solverType = 1;
774
+ this.readyPromise = new Promise(() => {});
775
+ this.readyCount = 0;
776
+ this.startCount = 0;
777
+ this.progressCallback = () => 0;
778
+ this.readyCallback = () => 0;
779
+ this.startedCallback = () => 0;
780
+ this.doneCallback = () => 0;
781
+ this.errorCallback = () => 0;
782
+ }
783
+ init() {
784
+ this.terminateWorkers();
785
+ this.progress = 0;
786
+ this.totalHashes = 0;
787
+ let setReady;
788
+ this.readyPromise = new Promise((resolve) => setReady = resolve);
789
+ this.readyCount = 0;
790
+ this.startCount = 0;
791
+ this.workers = new Array(4);
792
+ const workerBlob = new Blob([workerString], { type: "text/javascript" });
793
+ for (let i = 0; i < this.workers.length; i++) {
794
+ this.workers[i] = new Worker(URL.createObjectURL(workerBlob));
795
+ this.workers[i].onerror = (e) => this.errorCallback(e);
796
+ this.workers[i].onmessage = (e) => {
797
+ const data = e.data;
798
+ if (!data) return;
799
+ if (data.type === "ready") {
800
+ this.readyCount++;
801
+ this.solverType = data.solver;
802
+ if (this.readyCount == this.workers.length) {
803
+ setReady();
804
+ this.readyCallback();
805
+ }
806
+ } else if (data.type === "started") {
807
+ this.startCount++;
808
+ if (this.startCount == 1) {
809
+ this.startTime = Date.now();
810
+ this.startedCallback();
811
+ }
812
+ } else if (data.type === "done") {
813
+ if (data.puzzleNumber !== this.puzzleNumber) return;
814
+ if (this.puzzleIndex < this.puzzleSolverInputs.length) {
815
+ this.workers[i].postMessage({
816
+ type: "start",
817
+ puzzleSolverInput: this.puzzleSolverInputs[this.puzzleIndex],
818
+ threshold: this.threshold,
819
+ puzzleIndex: this.puzzleIndex,
820
+ puzzleNumber: this.puzzleNumber
821
+ });
822
+ this.puzzleIndex++;
823
+ }
824
+ this.progress++;
825
+ this.totalHashes += data.h;
826
+ this.progressCallback({
827
+ n: this.numPuzzles,
828
+ h: this.totalHashes,
829
+ t: (Date.now() - this.startTime) / 1e3,
830
+ i: this.progress
831
+ });
832
+ this.solutionBuffer.set(data.solution, data.puzzleIndex * 8);
833
+ if (this.progress == this.numPuzzles) {
834
+ const totalTime = (Date.now() - this.startTime) / 1e3;
835
+ this.doneCallback({
836
+ solution: this.solutionBuffer,
837
+ h: this.totalHashes,
838
+ t: totalTime,
839
+ diagnostics: createDiagnosticsBuffer(this.solverType, totalTime),
840
+ solver: this.solverType
841
+ });
842
+ }
843
+ } else if (data.type === "error") this.errorCallback(data);
844
+ };
845
+ }
846
+ }
847
+ setupSolver(forceJS = false) {
848
+ const msg = {
849
+ type: "solver",
850
+ forceJS
851
+ };
852
+ for (let i = 0; i < this.workers.length; i++) this.workers[i].postMessage(msg);
853
+ }
854
+ async start(puzzle) {
855
+ await this.readyPromise;
856
+ this.puzzleSolverInputs = getPuzzleSolverInputs(puzzle.buffer, puzzle.n);
857
+ this.solutionBuffer = new Uint8Array(8 * puzzle.n);
858
+ this.numPuzzles = puzzle.n;
859
+ this.threshold = puzzle.threshold;
860
+ this.puzzleIndex = 0;
861
+ this.puzzleNumber++;
862
+ for (let i = 0; i < this.workers.length; i++) {
863
+ if (this.puzzleIndex === this.puzzleSolverInputs.length) break;
864
+ this.workers[i].postMessage({
865
+ type: "start",
866
+ puzzleSolverInput: this.puzzleSolverInputs[i],
867
+ threshold: this.threshold,
868
+ puzzleIndex: this.puzzleIndex,
869
+ puzzleNumber: this.puzzleNumber
870
+ });
871
+ this.puzzleIndex++;
872
+ }
873
+ }
874
+ terminateWorkers() {
875
+ if (this.workers.length == 0) return;
876
+ for (let i = 0; i < this.workers.length; i++) this.workers[i].terminate();
877
+ this.workers = [];
878
+ }
879
+ };
880
+ var PUZZLE_ENDPOINT_URL = "https://api.friendlycaptcha.com/api/v1/puzzle";
881
+ var WidgetInstance = class {
882
+ constructor(element, options = {}) {
883
+ this.workerGroup = new WorkerGroup();
884
+ /**
885
+ * The captcha has been succesfully solved.
886
+ */
887
+ this.valid = false;
888
+ /**
889
+ * Some errors may cause a need for the (worker) to be reinitialized. If this is
890
+ * true `init` will be called again when start is called.
891
+ */
892
+ this.needsReInit = false;
893
+ /**
894
+ * Start() has been called at least once ever.
895
+ */
896
+ this.hasBeenStarted = false;
897
+ this.hasBeenDestroyed = false;
898
+ this.opts = Object.assign({
899
+ forceJSFallback: false,
900
+ skipStyleInjection: false,
901
+ startMode: "focus",
902
+ puzzleEndpoint: element.dataset["puzzleEndpoint"] || PUZZLE_ENDPOINT_URL,
903
+ startedCallback: () => 0,
904
+ readyCallback: () => 0,
905
+ doneCallback: () => 0,
906
+ errorCallback: () => 0,
907
+ sitekey: element.dataset["sitekey"] || "",
908
+ language: element.dataset["lang"] || "en",
909
+ solutionFieldName: element.dataset["solutionFieldName"] || "frc-captcha-solution",
910
+ styleNonce: null
911
+ }, options);
912
+ this.e = element;
913
+ this.e.friendlyChallengeWidget = this;
914
+ this.loadLanguage();
915
+ element.innerText = this.lang.text_init;
916
+ if (!this.opts.skipStyleInjection) injectStyle(this.opts.styleNonce);
917
+ this.init(this.opts.startMode === "auto" || this.e.dataset["start"] === "auto");
918
+ }
919
+ init(forceStart) {
920
+ if (this.hasBeenDestroyed) {
921
+ console.error("FriendlyCaptcha widget has been destroyed using destroy(), it can not be used anymore.");
922
+ return;
923
+ }
924
+ this.initWorkerGroup();
925
+ if (forceStart) this.start();
926
+ else if (this.e.dataset["start"] !== "none" && (this.opts.startMode === "focus" || this.e.dataset["start"] === "focus")) {
927
+ const form = findParentFormElement(this.e);
928
+ if (form) executeOnceOnFocusInEvent(form, () => this.start());
929
+ else console.log("FriendlyCaptcha div seems not to be contained in a form, autostart will not work");
930
+ }
931
+ }
932
+ /**
933
+ * Loads the configured language, or a language passed to this function.
934
+ * Note that only the next update will be in the new language, consider calling `reset()` after switching languages.
935
+ */
936
+ loadLanguage(lang) {
937
+ if (lang !== void 0) this.opts.language = lang;
938
+ else if (this.e.dataset["lang"]) this.opts.language = this.e.dataset["lang"];
939
+ if (typeof this.opts.language === "string") {
940
+ let langCode = this.opts.language.toLowerCase();
941
+ let l = localizations[langCode];
942
+ if (l === void 0 && langCode[2] === "-") {
943
+ langCode = langCode.substring(0, 2);
944
+ l = localizations[langCode];
945
+ }
946
+ if (l === void 0) {
947
+ console.error("FriendlyCaptcha: language \"" + this.opts.language + "\" not found.");
948
+ l = localizations.en;
949
+ }
950
+ this.lang = l;
951
+ } else this.lang = Object.assign(Object.assign({}, localizations.en), this.opts.language);
952
+ }
953
+ /**
954
+ * Add a listener to the button that calls `this.start` on click.
955
+ */
956
+ makeButtonStart() {
957
+ const b = this.e.querySelector("button");
958
+ if (b) {
959
+ b.addEventListener("click", (e) => this.start(), {
960
+ once: true,
961
+ passive: true
962
+ });
963
+ b.addEventListener("touchstart", (e) => this.start(), {
964
+ once: true,
965
+ passive: true
966
+ });
967
+ }
968
+ }
969
+ onWorkerError(e) {
970
+ this.hasBeenStarted = false;
971
+ this.needsReInit = true;
972
+ if (this.expiryTimeout) clearTimeout(this.expiryTimeout);
973
+ console.error("[FRC]", e);
974
+ this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, "Background worker error " + e.message);
975
+ this.makeButtonStart();
976
+ this.opts.forceJSFallback = true;
977
+ }
978
+ initWorkerGroup() {
979
+ this.workerGroup.progressCallback = (progress) => {
980
+ updateProgressBar(this.e, progress);
981
+ };
982
+ this.workerGroup.readyCallback = () => {
983
+ this.e.innerHTML = getReadyHTML(this.opts.solutionFieldName, this.lang);
984
+ this.makeButtonStart();
985
+ this.opts.readyCallback();
986
+ };
987
+ this.workerGroup.startedCallback = () => {
988
+ this.e.innerHTML = getRunningHTML(this.opts.solutionFieldName, this.lang);
989
+ this.opts.startedCallback();
990
+ };
991
+ this.workerGroup.doneCallback = (data) => {
992
+ const solutionPayload = this.handleDone(data);
993
+ this.opts.doneCallback(solutionPayload);
994
+ const callback = this.e.dataset["callback"];
995
+ if (callback) window[callback](solutionPayload);
996
+ };
997
+ this.workerGroup.errorCallback = (e) => {
998
+ this.onWorkerError(e);
999
+ };
1000
+ this.workerGroup.init();
1001
+ this.workerGroup.setupSolver(this.opts.forceJSFallback);
1002
+ }
1003
+ expire() {
1004
+ this.hasBeenStarted = false;
1005
+ if (this.e.isConnected !== false) {
1006
+ this.e.innerHTML = getExpiredHTML(this.opts.solutionFieldName, this.lang);
1007
+ this.makeButtonStart();
1008
+ }
1009
+ }
1010
+ async start() {
1011
+ if (this.hasBeenDestroyed) {
1012
+ console.error("Can not start FriendlyCaptcha widget which has been destroyed");
1013
+ return;
1014
+ }
1015
+ if (this.hasBeenStarted) {
1016
+ console.warn("Can not start FriendlyCaptcha widget which has already been started");
1017
+ return;
1018
+ }
1019
+ const sitekey = this.opts.sitekey || this.e.dataset["sitekey"];
1020
+ if (!sitekey) {
1021
+ console.error("FriendlyCaptcha: sitekey not set on frc-captcha element");
1022
+ this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, "Website problem: sitekey not set", false);
1023
+ return;
1024
+ }
1025
+ if (isHeadless()) {
1026
+ this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, "Browser check failed, try a different browser", false, true);
1027
+ return;
1028
+ }
1029
+ if (this.needsReInit) {
1030
+ this.needsReInit = false;
1031
+ this.init(true);
1032
+ return;
1033
+ }
1034
+ this.hasBeenStarted = true;
1035
+ try {
1036
+ this.e.innerHTML = getFetchingHTML(this.opts.solutionFieldName, this.lang);
1037
+ this.puzzle = decodeBase64Puzzle(await getPuzzle(this.opts.puzzleEndpoint, sitekey, this.lang));
1038
+ if (this.expiryTimeout) clearTimeout(this.expiryTimeout);
1039
+ this.expiryTimeout = setTimeout(() => this.expire(), this.puzzle.expiry - 3e4);
1040
+ } catch (e) {
1041
+ console.error("[FRC]", e);
1042
+ this.hasBeenStarted = false;
1043
+ if (this.expiryTimeout) clearTimeout(this.expiryTimeout);
1044
+ this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, e.message);
1045
+ this.makeButtonStart();
1046
+ this.opts.errorCallback({
1047
+ code: "error_getting_puzzle",
1048
+ description: e.toString(),
1049
+ error: e
1050
+ });
1051
+ const callback = this.e.dataset["callback-error"];
1052
+ if (callback) window[callback](this);
1053
+ return;
1054
+ }
1055
+ await this.workerGroup.start(this.puzzle);
1056
+ }
1057
+ /**
1058
+ * This is to be called when the puzzle has been succesfully completed.
1059
+ * Here the hidden field gets updated with the solution.
1060
+ * @param data message from the webworker
1061
+ */
1062
+ handleDone(data) {
1063
+ this.valid = true;
1064
+ const puzzleSolutionMessage = `${this.puzzle.signature}.${this.puzzle.base64}.${encode(data.solution)}.${encode(data.diagnostics)}`;
1065
+ this.e.innerHTML = getDoneHTML(this.opts.solutionFieldName, this.lang, puzzleSolutionMessage, data);
1066
+ this.needsReInit = true;
1067
+ return puzzleSolutionMessage;
1068
+ }
1069
+ /**
1070
+ * Cleans up the widget entirely, removing any DOM elements and terminating any background workers.
1071
+ * After it is destroyed it can no longer be used for any purpose.
1072
+ */
1073
+ destroy() {
1074
+ this.workerGroup.terminateWorkers();
1075
+ this.needsReInit = false;
1076
+ this.hasBeenStarted = false;
1077
+ if (this.expiryTimeout) clearTimeout(this.expiryTimeout);
1078
+ if (this.e) {
1079
+ this.e.remove();
1080
+ delete this.e;
1081
+ }
1082
+ this.hasBeenDestroyed = true;
1083
+ }
1084
+ /**
1085
+ * Resets the widget to the initial state.
1086
+ * This is useful in situations where the page does not refresh when you submit and the form may be re-submitted again
1087
+ */
1088
+ reset() {
1089
+ if (this.hasBeenDestroyed) {
1090
+ console.error("FriendlyCaptcha widget has been destroyed, it can not be used anymore");
1091
+ return;
1092
+ }
1093
+ this.workerGroup.terminateWorkers();
1094
+ this.needsReInit = false;
1095
+ this.hasBeenStarted = false;
1096
+ if (this.expiryTimeout) clearTimeout(this.expiryTimeout);
1097
+ this.init(this.opts.startMode === "auto" || this.e.dataset["start"] === "auto");
1098
+ }
1099
+ };
1100
+ //#endregion
1101
+ export { WidgetInstance, localizations };