@prosopo/procaptcha-bundle 2.0.3 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts +12 -0
  2. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts.map +1 -0
  3. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/index.js +71 -0
  4. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/index.js.map +1 -0
  5. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.d.ts +2 -0
  6. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.d.ts.map +1 -0
  7. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.js +36 -0
  8. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/captchaType.test.js.map +1 -0
  9. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.d.ts +2 -0
  10. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.d.ts.map +1 -0
  11. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.js +69 -0
  12. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/tests/config.test.js.map +1 -0
  13. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.d.ts +2 -0
  14. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.d.ts.map +1 -0
  15. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.js +8 -0
  16. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/captchaType.js.map +1 -0
  17. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/config.d.ts +8 -0
  18. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/config.d.ts.map +1 -0
  19. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/config.js +31 -0
  20. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/config.js.map +1 -0
  21. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.d.ts +19 -0
  22. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.d.ts.map +1 -0
  23. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.js +147 -0
  24. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/defaultCallbacks.js.map +1 -0
  25. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/form.d.ts +2 -0
  26. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/form.d.ts.map +1 -0
  27. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/form.js +2 -0
  28. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/form.js.map +1 -0
  29. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/language.d.ts +3 -0
  30. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/language.d.ts.map +1 -0
  31. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/language.js +17 -0
  32. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/language.js.map +1 -0
  33. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.d.ts +3 -0
  34. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.d.ts.map +1 -0
  35. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.js +9 -0
  36. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/theme.js.map +1 -0
  37. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.d.ts +3 -0
  38. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.d.ts.map +1 -0
  39. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.js +9 -0
  40. package/.rollup.cache/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/dist/bundle/util/timeout.js.map +1 -0
  41. package/dist/bundle/ProcaptchaWidget-BJTWbWXX.js +157 -0
  42. package/dist/bundle/ProcaptchaWidget-CyCdGVAQ.js +624 -0
  43. package/dist/bundle/index-DkYajG2c.js +19015 -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-Cpz4o_0n.js → utils-CAk_TqSc.js} +9596 -11830
  66. package/dist/cjs/index.cjs +43 -200
  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 +65 -59
  115. package/stats.html +1 -1
  116. package/vite.config.ts +24 -24
  117. package/vite.config.ts.timestamp-1717674816132-b375b28e04de9.mjs +56 -0
  118. package/vite.config.ts.timestamp-1723148478701-50a086cc53355.mjs +56 -0
  119. package/vite.test.config.ts +34 -0
  120. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts +0 -25
  121. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.d.ts.map +0 -1
  122. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.js +0 -259
  123. package/.rollup.cache/home/runner/work/captcha/captcha/packages/procaptcha-bundle/dist/bundle/index.js.map +0 -1
  124. package/dist/bundle/ProcaptchaWidget-BzBkw8-_.js +0 -775
  125. package/dist/bundle/ProcaptchaWidget-nO3NsM0R.js +0 -155
  126. package/dist/bundle/index-DsnIPyZG.js +0 -14976
@@ -1,230 +1,73 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const jsxRuntime = require("react/jsx-runtime");
3
+ const jsxDevRuntime = require("react/jsx-dev-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__ */ jsxDevRuntime.jsxDEV(procaptchaPow.ProcaptchaPow, { config: config2, callbacks }, void 0, false, {
41
+ fileName: "/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/src/index.tsx",
42
+ lineNumber: 77,
43
+ columnNumber: 6
44
+ }, void 0)
193
45
  );
194
46
  break;
195
47
  case "frictionless":
196
48
  client.createRoot(element).render(
197
- /* @__PURE__ */ jsxRuntime.jsx(procaptchaFrictionless.ProcaptchaFrictionless, { config, callbacks })
49
+ /* @__PURE__ */ jsxDevRuntime.jsxDEV(procaptchaFrictionless.ProcaptchaFrictionless, { config: config2, callbacks }, void 0, false, {
50
+ fileName: "/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/src/index.tsx",
51
+ lineNumber: 82,
52
+ columnNumber: 6
53
+ }, void 0)
198
54
  );
199
55
  break;
200
56
  default:
201
57
  client.createRoot(element).render(
202
- /* @__PURE__ */ jsxRuntime.jsx(procaptchaReact.Procaptcha, { config, callbacks })
58
+ /* @__PURE__ */ jsxDevRuntime.jsxDEV(procaptchaReact.Procaptcha, { config: config2, callbacks }, void 0, false, {
59
+ fileName: "/home/chris/dev/prosopo/captcha-private/captcha/packages/procaptcha-bundle/src/index.tsx",
60
+ lineNumber: 87,
61
+ columnNumber: 6
62
+ }, void 0)
203
63
  );
204
64
  break;
205
65
  }
206
66
  }
207
67
  };
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
68
  const render = (element, renderOptions) => {
226
69
  const siteKey = renderOptions.siteKey;
227
- renderLogic([element], getConfig(siteKey), renderOptions);
70
+ renderLogic([element], config.getConfig(siteKey), renderOptions);
228
71
  };
229
72
  function ready(fn) {
230
73
  if (document && document.readyState !== "loading") {
@@ -236,13 +79,13 @@ function ready(fn) {
236
79
  }
237
80
  }
238
81
  window.procaptcha = { ready, render };
239
- const { onloadUrlCallback, renderExplicit } = extractParams(BUNDLE_NAME);
82
+ const { onloadUrlCallback, renderExplicit } = config.extractParams(BUNDLE_NAME);
240
83
  if (renderExplicit !== "explicit") {
241
84
  ready(implicitRender);
242
85
  }
243
86
  if (onloadUrlCallback) {
244
- const onloadCallback = getWindowCallback(onloadUrlCallback);
245
- getProcaptchaScript()?.addEventListener("load", () => {
87
+ const onloadCallback = defaultCallbacks.getWindowCallback(onloadUrlCallback);
88
+ config.getProcaptchaScript(BUNDLE_NAME)?.addEventListener("load", () => {
246
89
  ready(onloadCallback);
247
90
  });
248
91
  }
@@ -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 locale = require("@prosopo/locale");
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 locale.LanguageSchema.parse(languageAttribute);
13
+ } catch (error) {
14
+ console.error(`Invalid language attribute: ${languageAttribute}`);
15
+ return locale.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"}