Widget: Fix handling of HTTP-429 errors

This commit is contained in:
Raphael Michel
2026-06-16 09:11:33 +02:00
committed by GitHub
parent 36d49fbd77
commit ea928ea7d4
2 changed files with 35 additions and 5 deletions
@@ -2051,9 +2051,16 @@ var shared_root_methods = {
this.$root.set_cart_id(data.cart_id);
this.$root.overlay.frame_loading = false;
callback()
}, () => {
}, (xhr, data) => {
if (xhr.status === 429 && typeof xhr.responseURL !== "undefined") {
this.$root.overlay.error_message = strings['cart_error_429'];
this.$root.overlay.frame_loading = false;
this.$root.overlay.error_url_after = this.$root.newTabTarget;
this.$root.overlay.error_url_after_new_tab = true;
} else {
this.$root.overlay.error_message = strings['cart_error'];
this.$root.overlay.frame_loading = false;
}
})
},
get_cart_id: function() {
@@ -2142,7 +2149,14 @@ var shared_root_computed = {
if (this.subevent) {
target = this.target_url + this.subevent + '/';
}
return target;
var parameters = this.$root.consent_parameter
if (this.$root.additionalURLParams) {
parameters += `&${this.$root.additionalURLParams}`
}
if (parameters) {
target += '?' + parameters.replace(/^&/, '')
}
return target
},
useIframe: function () {
if (window.crossOriginIsolated === true) {
@@ -162,7 +162,15 @@ export function createWidgetStore (config: {
return params.toString()
},
newTabTarget (): string {
return this.subevent ? `${this.targetUrl}${this.subevent}/` : this.targetUrl
let url = this.subevent ? `${this.targetUrl}${this.subevent}/` : this.targetUrl
let parameters = this.consentParameter
if (this.additionalURLParams) {
parameters += `&${this.additionalURLParams}`
}
if (parameters) {
url += '?' + parameters.replace(/^&/, '')
}
return url
},
formTarget (): string {
const isFirefox = navigator.userAgent.toLowerCase().includes('firefox')
@@ -441,6 +449,7 @@ export function createWidgetStore (config: {
this.overlay.frameLoading = false
this.overlay.errorUrlAfter = this.newTabTarget
this.overlay.errorUrlAfterNewTab = true
return
} else if (e.status === 405) {
// Likely a redirect!
this.targetUrl = e.responseUrl.substring(0, e.responseUrl.indexOf('/cart/add') - 18)
@@ -460,11 +469,18 @@ export function createWidgetStore (config: {
this.overlay.frameLoading = true
const data = await createCart(url)
this.setCartId(data.cart_id)
return true
} catch (e) {
if (e instanceof ApiError && (e.status === 200 || (e.status >= 400 && e.status < 500))) {
if (e instanceof ApiError && e.status === 429) {
this.overlay.errorMessage = STRINGS.cart_error_429
this.overlay.frameLoading = false
this.overlay.errorUrlAfter = this.newTabTarget
this.overlay.errorUrlAfterNewTab = true
} else if (e instanceof ApiError && (e.status === 200 || (e.status >= 400 && e.status < 500))) {
this.overlay.errorMessage = STRINGS.cart_error
this.overlay.frameLoading = false
}
return false
}
},
redeem (voucherCode: string, event?: Event) {
@@ -484,7 +500,7 @@ export function createWidgetStore (config: {
async resume () {
if (!this.cartId && this.keepCart) {
// create an empty cart whose id we can persist
await this.createCart()
if (!await this.createCart()) return
}
let redirectUrl = `${this.targetUrl}w/${globalWidgetId}/`
if (this.subevent && this.isButton && this.items.length === 0) {