@descope/web-components-ui 1.0.336 → 1.0.337

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.esm.js CHANGED
@@ -7208,6 +7208,53 @@ class RawRecaptcha extends BaseClass {
7208
7208
  return this.enterprise ? window.grecaptcha?.enterprise : window.grecaptcha;
7209
7209
  }
7210
7210
 
7211
+ #getNewToken(grecaptchaInstance, currentNode, recaptchaWidgetId) {
7212
+ if (!this.isConnected) {
7213
+ return;
7214
+ }
7215
+
7216
+ grecaptchaInstance.ready(() => {
7217
+ // clone the node and append it to the body so that it can be used by the grepcaptcha script
7218
+ const cloneNode = currentNode
7219
+ .querySelector('textarea[name^="g-recaptcha-response"]')
7220
+ ?.cloneNode();
7221
+ if (cloneNode) {
7222
+ cloneNode.style.display = 'none';
7223
+ document.body.appendChild(cloneNode);
7224
+ }
7225
+
7226
+ // cleaning up the recaptcha element we added to the body
7227
+ const removeCloneNode = () => {
7228
+ cloneNode.remove();
7229
+ };
7230
+
7231
+ if (!this.siteKey) {
7232
+ return;
7233
+ }
7234
+ // we should pass recaptchaWidgetId, but this does not allow us to run execute multiple times
7235
+ // also calling grecaptchaInstance.reset() does not work
7236
+ const exec = grecaptchaInstance?.execute(recaptchaWidgetId, { action: this.action });
7237
+ exec.then((token, e) => {
7238
+ if (e) {
7239
+ // eslint-disable-next-line no-console
7240
+ console.warn('could not execute recaptcha', e);
7241
+ } else {
7242
+ this.updateComponentsContext({
7243
+ risktoken: token,
7244
+ riskaction: this.action,
7245
+ });
7246
+ // if the component is still connected, we should try to get a new token before the token expires (2 minutes)
7247
+ if (this.isConnected) {
7248
+ setTimeout(() => {
7249
+ this.#getNewToken(grecaptchaInstance, currentNode, recaptchaWidgetId);
7250
+ }, 110000);
7251
+ }
7252
+ }
7253
+ removeCloneNode();
7254
+ });
7255
+ });
7256
+ }
7257
+
7211
7258
  #createOnLoadScript() {
7212
7259
  window.onRecaptchaLoadCallback = () => {
7213
7260
  const currentNode = this.recaptchaEle;
@@ -7224,48 +7271,12 @@ class RawRecaptcha extends BaseClass {
7224
7271
  }
7225
7272
 
7226
7273
  setTimeout(() => {
7227
- // returns recaptchaWidgetId
7228
7274
  const recaptchaWidgetId = grecaptchaInstance.render(currentNode, {
7229
7275
  sitekey: this.siteKey,
7230
7276
  badge: 'inline',
7231
7277
  size: 'invisible',
7232
7278
  });
7233
-
7234
- grecaptchaInstance.ready(() => {
7235
- // clone the node and append it to the body so that it can be used by the grepcaptcha script
7236
- const cloneNode = currentNode
7237
- .querySelector('textarea[name^="g-recaptcha-response"]')
7238
- ?.cloneNode();
7239
- if (cloneNode) {
7240
- cloneNode.style.display = 'none';
7241
- document.body.appendChild(cloneNode);
7242
- }
7243
-
7244
- // cleaning up the recaptcha element we added to the body
7245
- const removeCloneNode = () => {
7246
- cloneNode.remove();
7247
- };
7248
-
7249
- if (this.siteKey) {
7250
- // we should pass recaptchaWidgetId, but this does not allow us to run execute multiple times
7251
- // also calling grecaptchaInstance.reset() does not work
7252
- const exec = grecaptchaInstance?.execute(recaptchaWidgetId, { action: this.action });
7253
- exec
7254
- .then((token) => {
7255
- this.updateComponentsContext({
7256
- risktoken: token,
7257
- riskaction: this.action,
7258
- });
7259
-
7260
- removeCloneNode();
7261
- })
7262
- .catch((e) => {
7263
- removeCloneNode();
7264
- // eslint-disable-next-line no-console
7265
- console.warn('could not execute recaptcha', e);
7266
- });
7267
- }
7268
- });
7279
+ this.#getNewToken(grecaptchaInstance, currentNode, recaptchaWidgetId);
7269
7280
  }, 0);
7270
7281
  };
7271
7282
  }