@prosopo/procaptcha-bundle 2.0.2 → 2.1.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 (120) hide show
  1. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts +1 -14
  2. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts.map +1 -1
  3. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.js +18 -206
  4. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.js.map +1 -1
  5. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.d.ts +2 -0
  6. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.d.ts.map +1 -0
  7. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.js +36 -0
  8. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.js.map +1 -0
  9. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.d.ts +2 -0
  10. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.d.ts.map +1 -0
  11. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.js +69 -0
  12. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.js.map +1 -0
  13. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.d.ts +2 -0
  14. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.d.ts.map +1 -0
  15. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.js +8 -0
  16. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.js.map +1 -0
  17. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/config.d.ts +8 -0
  18. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/config.d.ts.map +1 -0
  19. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/config.js +31 -0
  20. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/config.js.map +1 -0
  21. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.d.ts +19 -0
  22. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.d.ts.map +1 -0
  23. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.js +147 -0
  24. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.js.map +1 -0
  25. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/form.d.ts +2 -0
  26. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/form.d.ts.map +1 -0
  27. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/form.js +2 -0
  28. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/form.js.map +1 -0
  29. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/language.d.ts +3 -0
  30. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/language.d.ts.map +1 -0
  31. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/language.js +17 -0
  32. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/language.js.map +1 -0
  33. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.d.ts +3 -0
  34. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.d.ts.map +1 -0
  35. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.js +9 -0
  36. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.js.map +1 -0
  37. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.d.ts +3 -0
  38. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.d.ts.map +1 -0
  39. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.js +9 -0
  40. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.js.map +1 -0
  41. package/dist/bundle/ProcaptchaWidget-BZq2OhjK.js +615 -0
  42. package/dist/bundle/ProcaptchaWidget-b_oUhvT9.js +149 -0
  43. package/dist/bundle/index-Ck7UqzKB.js +19822 -0
  44. package/dist/bundle/index.d.ts +1 -14
  45. package/dist/bundle/index.d.ts.map +1 -1
  46. package/dist/bundle/procaptcha.bundle.js +1 -1
  47. package/dist/bundle/tests/captchaType.test.d.ts +2 -0
  48. package/dist/bundle/tests/captchaType.test.d.ts.map +1 -0
  49. package/dist/bundle/tests/config.test.d.ts +2 -0
  50. package/dist/bundle/tests/config.test.d.ts.map +1 -0
  51. package/dist/bundle/util/captchaType.d.ts +2 -0
  52. package/dist/bundle/util/captchaType.d.ts.map +1 -0
  53. package/dist/bundle/util/config.d.ts +8 -0
  54. package/dist/bundle/util/config.d.ts.map +1 -0
  55. package/dist/bundle/util/defaultCallbacks.d.ts +19 -0
  56. package/dist/bundle/util/defaultCallbacks.d.ts.map +1 -0
  57. package/dist/bundle/util/form.d.ts +2 -0
  58. package/dist/bundle/util/form.d.ts.map +1 -0
  59. package/dist/bundle/util/language.d.ts +3 -0
  60. package/dist/bundle/util/language.d.ts.map +1 -0
  61. package/dist/bundle/util/theme.d.ts +3 -0
  62. package/dist/bundle/util/theme.d.ts.map +1 -0
  63. package/dist/bundle/util/timeout.d.ts +3 -0
  64. package/dist/bundle/util/timeout.d.ts.map +1 -0
  65. package/dist/bundle/{utils-C4GbA2iF.js → utils-9IQXYrRR.js} +8183 -11782
  66. package/dist/cjs/index.cjs +30 -199
  67. package/dist/cjs/util/captchaType.cjs +12 -0
  68. package/dist/cjs/util/config.cjs +33 -0
  69. package/dist/cjs/util/defaultCallbacks.cjs +134 -0
  70. package/dist/cjs/util/form.cjs +4 -0
  71. package/dist/cjs/util/language.cjs +18 -0
  72. package/dist/cjs/util/theme.cjs +9 -0
  73. package/dist/cjs/util/timeout.cjs +14 -0
  74. package/dist/index.d.ts +1 -14
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +18 -206
  77. package/dist/index.js.map +1 -1
  78. package/dist/tests/captchaType.test.d.ts +2 -0
  79. package/dist/tests/captchaType.test.d.ts.map +1 -0
  80. package/dist/tests/captchaType.test.js +36 -0
  81. package/dist/tests/captchaType.test.js.map +1 -0
  82. package/dist/tests/config.test.d.ts +2 -0
  83. package/dist/tests/config.test.d.ts.map +1 -0
  84. package/dist/tests/config.test.js +69 -0
  85. package/dist/tests/config.test.js.map +1 -0
  86. package/dist/util/captchaType.d.ts +3 -0
  87. package/dist/util/captchaType.d.ts.map +1 -0
  88. package/dist/util/captchaType.js +8 -0
  89. package/dist/util/captchaType.js.map +1 -0
  90. package/dist/util/config.d.ts +8 -0
  91. package/dist/util/config.d.ts.map +1 -0
  92. package/dist/util/config.js +31 -0
  93. package/dist/util/config.js.map +1 -0
  94. package/dist/util/defaultCallbacks.d.ts +19 -0
  95. package/dist/util/defaultCallbacks.d.ts.map +1 -0
  96. package/dist/util/defaultCallbacks.js +147 -0
  97. package/dist/util/defaultCallbacks.js.map +1 -0
  98. package/dist/util/form.d.ts +2 -0
  99. package/dist/util/form.d.ts.map +1 -0
  100. package/dist/util/form.js +2 -0
  101. package/dist/util/form.js.map +1 -0
  102. package/dist/util/language.d.ts +3 -0
  103. package/dist/util/language.d.ts.map +1 -0
  104. package/dist/util/language.js +17 -0
  105. package/dist/util/language.js.map +1 -0
  106. package/dist/util/theme.d.ts +3 -0
  107. package/dist/util/theme.d.ts.map +1 -0
  108. package/dist/util/theme.js +9 -0
  109. package/dist/util/theme.js.map +1 -0
  110. package/dist/util/timeout.d.ts +3 -0
  111. package/dist/util/timeout.d.ts.map +1 -0
  112. package/dist/util/timeout.js +9 -0
  113. package/dist/util/timeout.js.map +1 -0
  114. package/package.json +64 -59
  115. package/stats.html +1 -1
  116. package/vite.config.ts +24 -24
  117. package/vite.test.config.ts +34 -0
  118. package/dist/bundle/ProcaptchaWidget-BfqnMHY0.js +0 -155
  119. package/dist/bundle/ProcaptchaWidget-DlGRz6Tc.js +0 -775
  120. package/dist/bundle/index-DU1XrpZS.js +0 -14976
@@ -4,227 +4,58 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const procaptchaFrictionless = require("@prosopo/procaptcha-frictionless");
5
5
  const procaptchaPow = require("@prosopo/procaptcha-pow");
6
6
  const procaptchaReact = require("@prosopo/procaptcha-react");
7
- const types = require("@prosopo/types");
8
7
  const util = require("@prosopo/util");
9
8
  const client = require("react-dom/client");
9
+ const captchaType = require("./util/captchaType.cjs");
10
+ const config = require("./util/config.cjs");
11
+ const defaultCallbacks = require("./util/defaultCallbacks.cjs");
12
+ const language = require("./util/language.cjs");
13
+ const theme = require("./util/theme.cjs");
14
+ const timeout = require("./util/timeout.cjs");
10
15
  const BUNDLE_NAME = "procaptcha.bundle.js";
11
- const getProcaptchaScript = () => document.querySelector(`script[src*="${BUNDLE_NAME}"]`);
12
- const extractParams = (name) => {
13
- const script = getProcaptchaScript();
14
- if (script && script.src.indexOf(`${name}`) !== -1) {
15
- const params = new URLSearchParams(script.src.split("?")[1]);
16
- return {
17
- onloadUrlCallback: params.get("onload") || void 0,
18
- renderExplicit: params.get("render") || void 0
19
- };
20
- }
21
- return { onloadUrlCallback: void 0, renderExplicit: void 0 };
22
- };
23
- const getConfig = (siteKey) => {
24
- if (!siteKey) {
25
- siteKey = process.env.PROSOPO_SITE_KEY || "";
26
- }
27
- return types.ProcaptchaConfigSchema.parse({
28
- defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? types.EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : types.EnvironmentTypesSchema.enum.development,
29
- userAccountAddress: "",
30
- account: {
31
- address: siteKey
32
- },
33
- serverUrl: process.env.PROSOPO_SERVER_URL || "",
34
- mongoAtlasUri: process.env.PROSOPO_MONGO_EVENTS_URI || "",
35
- devOnlyWatchEvents: process.env._DEV_ONLY_WATCH_EVENTS === "true" || false
36
- });
37
- };
38
- const getParentForm = (element) => element.closest("form");
39
- const getWindowCallback = (callbackName) => {
40
- const fn = window[callbackName.replace("window.", "")];
41
- if (typeof fn !== "function") {
42
- throw new Error(
43
- `Callback ${callbackName} is not defined on the window object`
44
- );
45
- }
46
- return fn;
47
- };
48
- const handleOnHuman = (element, token) => {
49
- removeProcaptchaResponse();
50
- const form = getParentForm(element);
51
- if (!form) {
52
- console.error("Parent form not found for the element:", element);
53
- return;
54
- }
55
- const input = document.createElement("input");
56
- input.type = "hidden";
57
- input.name = types.ApiParams.procaptchaResponse;
58
- input.value = token;
59
- form.appendChild(input);
60
- };
61
- const customThemeSet = /* @__PURE__ */ new Set(["light", "dark"]);
62
- const validateTheme = (themeAttribute) => customThemeSet.has(themeAttribute) ? themeAttribute : "light";
63
- const setValidChallengeLength = (renderOptions, element, config) => {
64
- const challengeValidLengthAttribute = renderOptions?.["challenge-valid-length"] || element.getAttribute("data-challenge-valid-length");
65
- if (challengeValidLengthAttribute) {
66
- config.captchas.image.solutionTimeout = Number.parseInt(
67
- challengeValidLengthAttribute
68
- );
69
- config.captchas.pow.solutionTimeout = Number.parseInt(
70
- challengeValidLengthAttribute
71
- );
72
- }
73
- };
74
- const removeProcaptchaResponse = () => {
75
- const element = Array.from(
76
- document.getElementsByName(types.ApiParams.procaptchaResponse)
16
+ const implicitRender = () => {
17
+ const elements = Array.from(
18
+ document.getElementsByClassName("procaptcha")
77
19
  );
78
- element.map((el) => el.remove());
79
- };
80
- const getDefaultCallbacks = (element) => ({
81
- onHuman: (token) => handleOnHuman(element, token),
82
- onChallengeExpired: () => {
83
- removeProcaptchaResponse();
84
- console.log("Challenge expired");
85
- },
86
- onExpired: () => {
87
- removeProcaptchaResponse();
88
- alert("Completed challenge has expired, please try again");
89
- },
90
- onError: (error) => {
91
- removeProcaptchaResponse();
92
- console.error(error);
93
- },
94
- onClose: () => {
95
- console.log("Challenge closed");
96
- },
97
- onOpen: () => {
98
- console.log("Challenge opened");
99
- }
100
- });
101
- const setTheme = (renderOptions, element, config) => {
102
- const themeAttribute = renderOptions?.theme || element.getAttribute("data-theme") || "light";
103
- config.theme = validateTheme(themeAttribute);
104
- };
105
- function setUserCallbacks(renderOptions, callbacks, element) {
106
- if (typeof renderOptions?.callback === "function") {
107
- const fn = renderOptions.callback;
108
- callbacks.onHuman = (token) => {
109
- handleOnHuman(element, token);
110
- fn(token);
111
- };
112
- } else {
113
- const callbackName = typeof renderOptions?.callback === "string" ? renderOptions?.callback : element.getAttribute("data-callback");
114
- if (callbackName)
115
- callbacks.onHuman = (token) => {
116
- handleOnHuman(element, token);
117
- const fn = getWindowCallback(callbackName);
118
- fn(token);
119
- };
120
- }
121
- if (renderOptions && renderOptions["chalexpired-callback"] && typeof renderOptions["chalexpired-callback"] === "function") {
122
- const fn = renderOptions["chalexpired-callback"];
123
- callbacks.onChallengeExpired = () => {
124
- removeProcaptchaResponse();
125
- fn();
126
- };
127
- } else {
128
- const chalExpiredCallbackName = typeof renderOptions?.["chalexpired-callback"] === "string" ? renderOptions?.["chalexpired-callback"] : element.getAttribute("data-chalexpired-callback");
129
- if (chalExpiredCallbackName)
130
- callbacks.onChallengeExpired = () => {
131
- const fn = getWindowCallback(chalExpiredCallbackName);
132
- removeProcaptchaResponse();
133
- fn();
134
- };
135
- }
136
- if (renderOptions && renderOptions["expired-callback"] && typeof renderOptions["expired-callback"] === "function") {
137
- const fn = renderOptions["expired-callback"];
138
- callbacks.onExpired = () => {
139
- removeProcaptchaResponse();
140
- fn();
141
- };
142
- } else {
143
- const onExpiredCallbackName = typeof renderOptions?.["expired-callback"] === "string" ? renderOptions?.["expired-callback"] : element.getAttribute("data-expired-callback");
144
- if (onExpiredCallbackName)
145
- callbacks.onExpired = () => {
146
- const fn = getWindowCallback(onExpiredCallbackName);
147
- removeProcaptchaResponse();
148
- fn();
149
- };
150
- }
151
- if (renderOptions && renderOptions?.["error-callback"] && typeof renderOptions["error-callback"] === "function") {
152
- const fn = renderOptions["error-callback"];
153
- callbacks.onError = () => {
154
- removeProcaptchaResponse();
155
- fn();
156
- };
157
- } else {
158
- const errorCallbackName = typeof renderOptions?.["error-callback"] === "string" ? renderOptions?.["error-callback"] : element.getAttribute("data-error-callback");
159
- if (errorCallbackName)
160
- callbacks.onError = () => {
161
- const fn = getWindowCallback(errorCallbackName);
162
- removeProcaptchaResponse();
163
- fn();
164
- };
165
- }
166
- if (typeof renderOptions?.["close-callback"] === "function") {
167
- callbacks.onClose = renderOptions["close-callback"];
168
- } else {
169
- const onCloseCallbackName = typeof renderOptions?.["close-callback"] === "string" ? renderOptions?.["close-callback"] : element.getAttribute("data-close-callback");
170
- if (onCloseCallbackName)
171
- callbacks.onClose = getWindowCallback(onCloseCallbackName);
172
- }
173
- if (renderOptions?.["open-callback"]) {
174
- if (typeof renderOptions["open-callback"] === "function") {
175
- callbacks.onOpen = renderOptions["open-callback"];
176
- } else {
177
- const onOpenCallbackName = typeof renderOptions?.["open-callback"] === "string" ? renderOptions?.["open-callback"] : element.getAttribute("data-open-callback");
178
- if (onOpenCallbackName)
179
- callbacks.onOpen = getWindowCallback(onOpenCallbackName);
20
+ if (elements.length) {
21
+ const siteKey = util.at(elements, 0).getAttribute("data-sitekey");
22
+ if (!siteKey) {
23
+ console.error("No siteKey found");
24
+ return;
180
25
  }
26
+ const captchaType$1 = captchaType.getCaptchaType(elements);
27
+ renderLogic(elements, config.getConfig(siteKey), { captchaType: captchaType$1, siteKey });
181
28
  }
182
- }
183
- const renderLogic = (elements, config, renderOptions) => {
29
+ };
30
+ const renderLogic = (elements, config2, renderOptions) => {
184
31
  for (const element of elements) {
185
- const callbacks = getDefaultCallbacks(element);
186
- setUserCallbacks(renderOptions, callbacks, element);
187
- setTheme(renderOptions, element, config);
188
- setValidChallengeLength(renderOptions, element, config);
32
+ const callbacks = defaultCallbacks.getDefaultCallbacks(element);
33
+ defaultCallbacks.setUserCallbacks(renderOptions, callbacks, element);
34
+ theme.setTheme(renderOptions, element, config2);
35
+ timeout.setValidChallengeLength(renderOptions, element, config2);
36
+ language.setLanguage(renderOptions, element, config2);
189
37
  switch (renderOptions?.captchaType) {
190
38
  case "pow":
191
39
  client.createRoot(element).render(
192
- /* @__PURE__ */ jsxRuntime.jsx(procaptchaPow.ProcaptchaPow, { config, callbacks })
40
+ /* @__PURE__ */ jsxRuntime.jsx(procaptchaPow.ProcaptchaPow, { config: config2, callbacks })
193
41
  );
194
42
  break;
195
43
  case "frictionless":
196
44
  client.createRoot(element).render(
197
- /* @__PURE__ */ jsxRuntime.jsx(procaptchaFrictionless.ProcaptchaFrictionless, { config, callbacks })
45
+ /* @__PURE__ */ jsxRuntime.jsx(procaptchaFrictionless.ProcaptchaFrictionless, { config: config2, callbacks })
198
46
  );
199
47
  break;
200
48
  default:
201
49
  client.createRoot(element).render(
202
- /* @__PURE__ */ jsxRuntime.jsx(procaptchaReact.Procaptcha, { config, callbacks })
50
+ /* @__PURE__ */ jsxRuntime.jsx(procaptchaReact.Procaptcha, { config: config2, callbacks })
203
51
  );
204
52
  break;
205
53
  }
206
54
  }
207
55
  };
208
- const implicitRender = () => {
209
- const elements = Array.from(
210
- document.getElementsByClassName("procaptcha")
211
- );
212
- if (elements.length) {
213
- const siteKey = util.at(elements, 0).getAttribute("data-sitekey");
214
- if (!siteKey) {
215
- console.error("No siteKey found");
216
- return;
217
- }
218
- const features = Object.values(types.FeaturesEnum);
219
- const captchaType = features.find(
220
- (feature) => feature === util.at(elements, 0).getAttribute("data-captcha-type")
221
- ) || "frictionless";
222
- renderLogic(elements, getConfig(siteKey), { captchaType, siteKey });
223
- }
224
- };
225
56
  const render = (element, renderOptions) => {
226
57
  const siteKey = renderOptions.siteKey;
227
- renderLogic([element], getConfig(siteKey), renderOptions);
58
+ renderLogic([element], config.getConfig(siteKey), renderOptions);
228
59
  };
229
60
  function ready(fn) {
230
61
  if (document && document.readyState !== "loading") {
@@ -236,13 +67,13 @@ function ready(fn) {
236
67
  }
237
68
  }
238
69
  window.procaptcha = { ready, render };
239
- const { onloadUrlCallback, renderExplicit } = extractParams(BUNDLE_NAME);
70
+ const { onloadUrlCallback, renderExplicit } = config.extractParams(BUNDLE_NAME);
240
71
  if (renderExplicit !== "explicit") {
241
72
  ready(implicitRender);
242
73
  }
243
74
  if (onloadUrlCallback) {
244
- const onloadCallback = getWindowCallback(onloadUrlCallback);
245
- getProcaptchaScript()?.addEventListener("load", () => {
75
+ const onloadCallback = defaultCallbacks.getWindowCallback(onloadUrlCallback);
76
+ config.getProcaptchaScript(BUNDLE_NAME)?.addEventListener("load", () => {
246
77
  ready(onloadCallback);
247
78
  });
248
79
  }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@prosopo/types");
4
+ const util = require("@prosopo/util");
5
+ function getCaptchaType(elements) {
6
+ const features = Object.values(types.FeaturesEnum);
7
+ const captchaType = features.find(
8
+ (feature) => feature === util.at(elements, 0).getAttribute("data-captcha-type")
9
+ ) || "frictionless";
10
+ return captchaType;
11
+ }
12
+ exports.getCaptchaType = getCaptchaType;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@prosopo/types");
4
+ const getConfig = (siteKey) => {
5
+ if (!siteKey) {
6
+ siteKey = process.env.PROSOPO_SITE_KEY || "";
7
+ }
8
+ return types.ProcaptchaConfigSchema.parse({
9
+ defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? types.EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : types.EnvironmentTypesSchema.enum.development,
10
+ userAccountAddress: "",
11
+ account: {
12
+ address: siteKey
13
+ },
14
+ serverUrl: process.env.PROSOPO_SERVER_URL || "",
15
+ mongoAtlasUri: process.env.PROSOPO_MONGO_EVENTS_URI || "",
16
+ devOnlyWatchEvents: process.env._DEV_ONLY_WATCH_EVENTS === "true" || false
17
+ });
18
+ };
19
+ const getProcaptchaScript = (name) => document.querySelector(`script[src*="${name}"]`);
20
+ const extractParams = (name) => {
21
+ const script = getProcaptchaScript(name);
22
+ if (script && script.src.indexOf(`${name}`) !== -1) {
23
+ const params = new URLSearchParams(script.src.split("?")[1]);
24
+ return {
25
+ onloadUrlCallback: params.get("onload") || void 0,
26
+ renderExplicit: params.get("render") || void 0
27
+ };
28
+ }
29
+ return { onloadUrlCallback: void 0, renderExplicit: void 0 };
30
+ };
31
+ exports.extractParams = extractParams;
32
+ exports.getConfig = getConfig;
33
+ exports.getProcaptchaScript = getProcaptchaScript;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@prosopo/types");
4
+ const form = require("./form.cjs");
5
+ const getWindowCallback = (callbackName) => {
6
+ const fn = window[callbackName.replace("window.", "")];
7
+ if (typeof fn !== "function") {
8
+ throw new Error(
9
+ `Callback ${callbackName} is not defined on the window object`
10
+ );
11
+ }
12
+ return fn;
13
+ };
14
+ const getDefaultCallbacks = (element) => ({
15
+ onHuman: (token) => handleOnHuman(element, token),
16
+ onChallengeExpired: () => {
17
+ removeProcaptchaResponse();
18
+ console.log("Challenge expired");
19
+ },
20
+ onExpired: () => {
21
+ removeProcaptchaResponse();
22
+ alert("Completed challenge has expired, please try again");
23
+ },
24
+ onError: (error) => {
25
+ removeProcaptchaResponse();
26
+ console.error(error);
27
+ },
28
+ onClose: () => {
29
+ console.log("Challenge closed");
30
+ },
31
+ onOpen: () => {
32
+ console.log("Challenge opened");
33
+ }
34
+ });
35
+ function setUserCallbacks(renderOptions, callbacks, element) {
36
+ if (typeof renderOptions?.callback === "function") {
37
+ const fn = renderOptions.callback;
38
+ callbacks.onHuman = (token) => {
39
+ handleOnHuman(element, token);
40
+ fn(token);
41
+ };
42
+ } else {
43
+ const callbackName = typeof renderOptions?.callback === "string" ? renderOptions?.callback : element.getAttribute("data-callback");
44
+ if (callbackName)
45
+ callbacks.onHuman = (token) => {
46
+ handleOnHuman(element, token);
47
+ const fn = getWindowCallback(callbackName);
48
+ fn(token);
49
+ };
50
+ }
51
+ if (renderOptions?.["chalexpired-callback"] && typeof renderOptions["chalexpired-callback"] === "function") {
52
+ const fn = renderOptions["chalexpired-callback"];
53
+ callbacks.onChallengeExpired = () => {
54
+ removeProcaptchaResponse();
55
+ fn();
56
+ };
57
+ } else {
58
+ const chalExpiredCallbackName = typeof renderOptions?.["chalexpired-callback"] === "string" ? renderOptions?.["chalexpired-callback"] : element.getAttribute("data-chalexpired-callback");
59
+ if (chalExpiredCallbackName)
60
+ callbacks.onChallengeExpired = () => {
61
+ const fn = getWindowCallback(chalExpiredCallbackName);
62
+ removeProcaptchaResponse();
63
+ fn();
64
+ };
65
+ }
66
+ if (renderOptions?.["expired-callback"] && typeof renderOptions["expired-callback"] === "function") {
67
+ const fn = renderOptions["expired-callback"];
68
+ callbacks.onExpired = () => {
69
+ removeProcaptchaResponse();
70
+ fn();
71
+ };
72
+ } else {
73
+ const onExpiredCallbackName = typeof renderOptions?.["expired-callback"] === "string" ? renderOptions?.["expired-callback"] : element.getAttribute("data-expired-callback");
74
+ if (onExpiredCallbackName)
75
+ callbacks.onExpired = () => {
76
+ const fn = getWindowCallback(onExpiredCallbackName);
77
+ removeProcaptchaResponse();
78
+ fn();
79
+ };
80
+ }
81
+ if (renderOptions?.["error-callback"] && typeof renderOptions["error-callback"] === "function") {
82
+ const fn = renderOptions["error-callback"];
83
+ callbacks.onError = () => {
84
+ removeProcaptchaResponse();
85
+ fn();
86
+ };
87
+ } else {
88
+ const errorCallbackName = typeof renderOptions?.["error-callback"] === "string" ? renderOptions?.["error-callback"] : element.getAttribute("data-error-callback");
89
+ if (errorCallbackName)
90
+ callbacks.onError = () => {
91
+ const fn = getWindowCallback(errorCallbackName);
92
+ removeProcaptchaResponse();
93
+ fn();
94
+ };
95
+ }
96
+ if (typeof renderOptions?.["close-callback"] === "function") {
97
+ callbacks.onClose = renderOptions["close-callback"];
98
+ } else {
99
+ const onCloseCallbackName = typeof renderOptions?.["close-callback"] === "string" ? renderOptions?.["close-callback"] : element.getAttribute("data-close-callback");
100
+ if (onCloseCallbackName)
101
+ callbacks.onClose = getWindowCallback(onCloseCallbackName);
102
+ }
103
+ if (renderOptions?.["open-callback"]) {
104
+ if (typeof renderOptions["open-callback"] === "function") {
105
+ callbacks.onOpen = renderOptions["open-callback"];
106
+ } else {
107
+ const onOpenCallbackName = typeof renderOptions?.["open-callback"] === "string" ? renderOptions?.["open-callback"] : element.getAttribute("data-open-callback");
108
+ if (onOpenCallbackName)
109
+ callbacks.onOpen = getWindowCallback(onOpenCallbackName);
110
+ }
111
+ }
112
+ }
113
+ const handleOnHuman = (element, token) => {
114
+ removeProcaptchaResponse();
115
+ const form$1 = form.getParentForm(element);
116
+ if (!form$1) {
117
+ console.error("Parent form not found for the element:", element);
118
+ return;
119
+ }
120
+ const input = document.createElement("input");
121
+ input.type = "hidden";
122
+ input.name = types.ApiParams.procaptchaResponse;
123
+ input.value = token;
124
+ form$1.appendChild(input);
125
+ };
126
+ const removeProcaptchaResponse = () => {
127
+ const element = Array.from(
128
+ document.getElementsByName(types.ApiParams.procaptchaResponse)
129
+ );
130
+ element.map((el) => el.remove());
131
+ };
132
+ exports.getDefaultCallbacks = getDefaultCallbacks;
133
+ exports.getWindowCallback = getWindowCallback;
134
+ exports.setUserCallbacks = setUserCallbacks;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const getParentForm = (element) => element.closest("form");
4
+ exports.getParentForm = getParentForm;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const types = require("@prosopo/types");
4
+ const setLanguage = (renderOptions, element, config) => {
5
+ const languageAttribute = renderOptions?.language || element.getAttribute("data-language");
6
+ if (languageAttribute) {
7
+ config.language = validateLanguage(languageAttribute);
8
+ }
9
+ };
10
+ const validateLanguage = (languageAttribute) => {
11
+ try {
12
+ return types.LanguageSchema.parse(languageAttribute);
13
+ } catch (error) {
14
+ console.error(`Invalid language attribute: ${languageAttribute}`);
15
+ return types.LanguageSchema.parse("en");
16
+ }
17
+ };
18
+ exports.setLanguage = setLanguage;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const setTheme = (renderOptions, element, config) => {
4
+ const themeAttribute = renderOptions?.theme || element.getAttribute("data-theme") || "light";
5
+ config.theme = validateTheme(themeAttribute);
6
+ };
7
+ const customThemeSet = /* @__PURE__ */ new Set(["light", "dark"]);
8
+ const validateTheme = (themeAttribute) => customThemeSet.has(themeAttribute) ? themeAttribute : "light";
9
+ exports.setTheme = setTheme;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const setValidChallengeLength = (renderOptions, element, config) => {
4
+ const challengeValidLengthAttribute = renderOptions?.["challenge-valid-length"] || element.getAttribute("data-challenge-valid-length");
5
+ if (challengeValidLengthAttribute) {
6
+ config.captchas.image.solutionTimeout = Number.parseInt(
7
+ challengeValidLengthAttribute
8
+ );
9
+ config.captchas.pow.solutionTimeout = Number.parseInt(
10
+ challengeValidLengthAttribute
11
+ );
12
+ }
13
+ };
14
+ exports.setValidChallengeLength = setValidChallengeLength;
package/dist/index.d.ts CHANGED
@@ -1,16 +1,4 @@
1
- import { type Features, type ProcaptchaToken } from "@prosopo/types";
2
- interface ProcaptchaRenderOptions {
3
- siteKey: string;
4
- theme?: "light" | "dark";
5
- captchaType?: Features;
6
- callback?: string | ((token: ProcaptchaToken) => void);
7
- "challenge-valid-length"?: string;
8
- "chalexpired-callback"?: string | (() => void);
9
- "expired-callback"?: string | (() => void);
10
- "open-callback"?: string | (() => void);
11
- "close-callback"?: string | (() => void);
12
- "error-callback"?: string | (() => void);
13
- }
1
+ import type { ProcaptchaRenderOptions } from "@prosopo/types";
14
2
  export declare const render: (element: Element, renderOptions: ProcaptchaRenderOptions) => void;
15
3
  export default function ready(fn: () => void): void;
16
4
  declare global {
@@ -21,5 +9,4 @@ declare global {
21
9
  };
22
10
  }
23
11
  }
24
- export {};
25
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAGL,KAAK,QAAQ,EAKb,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAIxB,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,CAAC;IACvD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CAC1C;AAiUD,eAAO,MAAM,MAAM,YACR,OAAO,iBACD,uBAAuB,SAKvC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,QAQ3C;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE;YAAE,KAAK,EAAE,OAAO,KAAK,CAAC;YAAC,MAAM,EAAE,OAAO,MAAM,CAAA;SAAE,CAAC;KAC5D;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEX,uBAAuB,EACvB,MAAM,gBAAgB,CAAC;AA0ExB,eAAO,MAAM,MAAM,YACT,OAAO,iBACD,uBAAuB,SAKtC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,QAQ3C;AAGD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,UAAU,EAAE;YAAE,KAAK,EAAE,OAAO,KAAK,CAAC;YAAC,MAAM,EAAE,OAAO,MAAM,CAAA;SAAE,CAAC;KAC3D;CACD"}