Skip to content

Commit 26a8a89

Browse files
authored
Ensure done callback is correctly fired on captcha reload (#1469)
Signed-off-by: Srijon Saha <[email protected]>
1 parent 28e16e5 commit 26a8a89

10 files changed

+175
-61
lines changed

Diff for: dist/auth0.js

+49-22
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* auth0-js v9.27.0
33
* Author: Auth0
4-
* Date: 2024-09-27
4+
* Date: 2024-10-11
55
* License: MIT
66
*/
77

@@ -176,17 +176,13 @@
176176
};
177177

178178
var test = {
179-
__proto__: null,
180179
foo: {}
181180
};
182181

183182
var $Object = Object;
184183

185-
/** @type {import('.')} */
186184
var hasProto = function hasProto() {
187-
// @ts-expect-error: TS errors on an inherited property for some reason
188-
return { __proto__: test }.foo === test.foo
189-
&& !(test instanceof $Object);
185+
return { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);
190186
};
191187

192188
/* eslint no-invalid-this: 1 */
@@ -278,7 +274,7 @@
278274
var $hasOwn = Object.prototype.hasOwnProperty;
279275

280276

281-
/** @type {import('.')} */
277+
/** @type {(o: {}, p: PropertyKey) => p is keyof o} */
282278
var hasown = functionBind.call(call, $hasOwn);
283279

284280
var undefined$1;
@@ -3407,7 +3403,7 @@
34073403

34083404
if (typeof value === 'boolean') {
34093405
value = String(value);
3410-
} // fix https://github.com/visionmedia/superagent/issues/1680
3406+
} //fix https://github.com/visionmedia/superagent/issues/1680
34113407

34123408

34133409
if (options) this._getFormData().append(name, value, options);else this._getFormData().append(name, value);
@@ -3986,10 +3982,34 @@
39863982
*/
39873983

39883984
request.getXHR = function () {
3989-
if (root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:')) {
3985+
if (root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:' || !root.ActiveXObject)) {
39903986
return new XMLHttpRequest();
39913987
}
39923988

3989+
try {
3990+
return new ActiveXObject('Microsoft.XMLHTTP');
3991+
} catch (_unused) {
3992+
/**/
3993+
}
3994+
3995+
try {
3996+
return new ActiveXObject('Msxml2.XMLHTTP.6.0');
3997+
} catch (_unused2) {
3998+
/**/
3999+
}
4000+
4001+
try {
4002+
return new ActiveXObject('Msxml2.XMLHTTP.3.0');
4003+
} catch (_unused3) {
4004+
/**/
4005+
}
4006+
4007+
try {
4008+
return new ActiveXObject('Msxml2.XMLHTTP');
4009+
} catch (_unused4) {
4010+
/**/
4011+
}
4012+
39934013
throw new Error('Browser-only version of superagent could not find XHR');
39944014
};
39954015
/**
@@ -4375,7 +4395,7 @@
43754395
if (new_error) {
43764396
new_error.original = error;
43774397
new_error.response = res;
4378-
new_error.status = new_error.status || res.status;
4398+
new_error.status = res.status;
43794399
self.callback(new_error, res);
43804400
} else {
43814401
self.callback(null, res);
@@ -4663,7 +4683,7 @@
46634683

46644684
try {
46654685
status = xhr.status;
4666-
} catch (_unused) {
4686+
} catch (_unused5) {
46674687
status = 0;
46684688
}
46694689

@@ -4695,7 +4715,7 @@
46954715
if (xhr.upload) {
46964716
xhr.upload.addEventListener('progress', handleProgress.bind(null, 'upload'));
46974717
}
4698-
} catch (_unused2) {// Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist.
4718+
} catch (_unused6) {// Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist.
46994719
// Reported here:
47004720
// https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context
47014721
}
@@ -7810,6 +7830,8 @@
78107830

78117831
var noop = function () { };
78127832
var captchaSolved = noop;
7833+
var done = noop;
7834+
var captchaReloaded = false;
78137835

78147836
var Flow = {
78157837
DEFAULT: 'default',
@@ -7969,7 +7991,7 @@
79697991
});
79707992
}
79717993

7972-
function injectCaptchaScript(opts, callback, setValue, done) {
7994+
function injectCaptchaScript(opts, callback, setValue) {
79737995
var callbackName =
79747996
opts.provider + 'Callback_' + Math.floor(Math.random() * 1000001);
79757997
var attributes = {
@@ -8017,7 +8039,7 @@
80178039
loadScript(scriptSrc, attributes);
80188040
}
80198041

8020-
function handleCaptchaProvider(element, options, challenge, done) {
8042+
function handleCaptchaProvider(element, options, challenge) {
80218043
var widgetId =
80228044
element.hasAttribute('data-wid') && element.getAttribute('data-wid');
80238045

@@ -8085,13 +8107,16 @@
80858107
var arkoseLoaded = false;
80868108
arkose.setConfig({
80878109
onReady: function () {
8088-
if (!arkoseLoaded) {
8110+
if (!arkoseLoaded || captchaReloaded) {
80898111
done(null, {
80908112
triggerCaptcha: function (solvedCallback) {
80918113
arkose.run();
80928114
captchaSolved = solvedCallback;
80938115
}
80948116
});
8117+
if (captchaReloaded) {
8118+
captchaReloaded = false;
8119+
}
80958120
arkoseLoaded = true;
80968121
}
80978122
},
@@ -8164,8 +8189,7 @@
81648189
done();
81658190
}
81668191
},
8167-
setValue,
8168-
done
8192+
setValue
81698193
);
81708194
}
81718195

@@ -8192,8 +8216,8 @@
81928216
*/
81938217
function render(auth0Client, flow, element, options, callback) {
81948218
options = objectHelper.merge(defaults$2).with(options || {});
8195-
function load(done) {
8196-
done = done || noop;
8219+
function load(loadDone) {
8220+
done = loadDone || noop;
81978221
function challengeCallback(err, challenge) {
81988222
if (err) {
81998223
element.innerHTML = options.templates.error(err);
@@ -8202,7 +8226,7 @@
82028226
if (!challenge.required) {
82038227
element.style.display = 'none';
82048228
element.innerHTML = '';
8205-
return;
8229+
return done();
82068230
}
82078231
element.style.display = '';
82088232
if (challenge.provider === AUTH0_PROVIDER) {
@@ -8216,7 +8240,7 @@
82168240
challenge.provider === ARKOSE_PROVIDER ||
82178241
challenge.provider === AUTH0_V2_CAPTCHA_PROVIDER
82188242
) {
8219-
handleCaptchaProvider(element, options, challenge, done);
8243+
handleCaptchaProvider(element, options, challenge);
82208244
}
82218245
}
82228246

@@ -8242,7 +8266,10 @@
82428266
load(callback);
82438267

82448268
return {
8245-
reload: load,
8269+
reload: function (reloadDone) {
8270+
captchaReloaded = true;
8271+
load(reloadDone);
8272+
},
82468273
getValue: getValue
82478274
};
82488275
}

Diff for: dist/auth0.min.esm.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/auth0.min.esm.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/auth0.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/auth0.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/cordova-auth0-plugin.js

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* auth0-js v9.27.0
33
* Author: Auth0
4-
* Date: 2024-09-27
4+
* Date: 2024-10-11
55
* License: MIT
66
*/
77

@@ -526,17 +526,13 @@
526526
};
527527

528528
var test = {
529-
__proto__: null,
530529
foo: {}
531530
};
532531

533532
var $Object = Object;
534533

535-
/** @type {import('.')} */
536534
var hasProto = function hasProto() {
537-
// @ts-expect-error: TS errors on an inherited property for some reason
538-
return { __proto__: test }.foo === test.foo
539-
&& !(test instanceof $Object);
535+
return { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);
540536
};
541537

542538
/* eslint no-invalid-this: 1 */
@@ -628,7 +624,7 @@
628624
var $hasOwn = Object.prototype.hasOwnProperty;
629625

630626

631-
/** @type {import('.')} */
627+
/** @type {(o: {}, p: PropertyKey) => p is keyof o} */
632628
var hasown = functionBind.call(call, $hasOwn);
633629

634630
var undefined$1;

Diff for: dist/cordova-auth0-plugin.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/cordova-auth0-plugin.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/web-auth/captcha.js

+17-10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import object from '../helper/object';
44

55
var noop = function () { };
66
var captchaSolved = noop;
7+
var done = noop;
8+
var captchaReloaded = false;
79

810
var Flow = {
911
DEFAULT: 'default',
@@ -163,7 +165,7 @@ function removeScript(url) {
163165
});
164166
}
165167

166-
function injectCaptchaScript(opts, callback, setValue, done) {
168+
function injectCaptchaScript(opts, callback, setValue) {
167169
var callbackName =
168170
opts.provider + 'Callback_' + Math.floor(Math.random() * 1000001);
169171
var attributes = {
@@ -211,7 +213,7 @@ function injectCaptchaScript(opts, callback, setValue, done) {
211213
loadScript(scriptSrc, attributes);
212214
}
213215

214-
function handleCaptchaProvider(element, options, challenge, done) {
216+
function handleCaptchaProvider(element, options, challenge) {
215217
var widgetId =
216218
element.hasAttribute('data-wid') && element.getAttribute('data-wid');
217219

@@ -279,13 +281,16 @@ function handleCaptchaProvider(element, options, challenge, done) {
279281
var arkoseLoaded = false;
280282
arkose.setConfig({
281283
onReady: function () {
282-
if (!arkoseLoaded) {
284+
if (!arkoseLoaded || captchaReloaded) {
283285
done(null, {
284286
triggerCaptcha: function (solvedCallback) {
285287
arkose.run();
286288
captchaSolved = solvedCallback;
287289
}
288290
});
291+
if (captchaReloaded) {
292+
captchaReloaded = false;
293+
}
289294
arkoseLoaded = true;
290295
}
291296
},
@@ -358,8 +363,7 @@ function handleCaptchaProvider(element, options, challenge, done) {
358363
done();
359364
}
360365
},
361-
setValue,
362-
done
366+
setValue
363367
);
364368
}
365369

@@ -386,8 +390,8 @@ function handleCaptchaProvider(element, options, challenge, done) {
386390
*/
387391
function render(auth0Client, flow, element, options, callback) {
388392
options = object.merge(defaults).with(options || {});
389-
function load(done) {
390-
done = done || noop;
393+
function load(loadDone) {
394+
done = loadDone || noop;
391395
function challengeCallback(err, challenge) {
392396
if (err) {
393397
element.innerHTML = options.templates.error(err);
@@ -396,7 +400,7 @@ function render(auth0Client, flow, element, options, callback) {
396400
if (!challenge.required) {
397401
element.style.display = 'none';
398402
element.innerHTML = '';
399-
return;
403+
return done();
400404
}
401405
element.style.display = '';
402406
if (challenge.provider === AUTH0_PROVIDER) {
@@ -410,7 +414,7 @@ function render(auth0Client, flow, element, options, callback) {
410414
challenge.provider === ARKOSE_PROVIDER ||
411415
challenge.provider === AUTH0_V2_CAPTCHA_PROVIDER
412416
) {
413-
handleCaptchaProvider(element, options, challenge, done);
417+
handleCaptchaProvider(element, options, challenge);
414418
}
415419
}
416420

@@ -436,7 +440,10 @@ function render(auth0Client, flow, element, options, callback) {
436440
load(callback);
437441

438442
return {
439-
reload: load,
443+
reload: function (reloadDone) {
444+
captchaReloaded = true;
445+
load(reloadDone);
446+
},
440447
getValue: getValue
441448
};
442449
}

0 commit comments

Comments
 (0)