@burdenoff/website-sdk 2026.720.2 → 2026.720.4

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 (59) hide show
  1. package/dist/client/index.d.mts +1 -1
  2. package/dist/client/index.d.ts +1 -1
  3. package/dist/client/index.js +68 -20
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/client/index.mjs +68 -20
  6. package/dist/client/index.mjs.map +1 -1
  7. package/dist/components/contact.js +68 -20
  8. package/dist/components/contact.js.map +1 -1
  9. package/dist/components/contact.mjs +68 -20
  10. package/dist/components/contact.mjs.map +1 -1
  11. package/dist/components/newsletter.js +68 -20
  12. package/dist/components/newsletter.js.map +1 -1
  13. package/dist/components/newsletter.mjs +68 -20
  14. package/dist/components/newsletter.mjs.map +1 -1
  15. package/dist/components/partners.js +68 -20
  16. package/dist/components/partners.js.map +1 -1
  17. package/dist/components/partners.mjs +68 -20
  18. package/dist/components/partners.mjs.map +1 -1
  19. package/dist/components/pricing.js +68 -20
  20. package/dist/components/pricing.js.map +1 -1
  21. package/dist/components/pricing.mjs +68 -20
  22. package/dist/components/pricing.mjs.map +1 -1
  23. package/dist/components/resource-links.js +68 -20
  24. package/dist/components/resource-links.js.map +1 -1
  25. package/dist/components/resource-links.mjs +68 -20
  26. package/dist/components/resource-links.mjs.map +1 -1
  27. package/dist/components/social-links.js +68 -20
  28. package/dist/components/social-links.js.map +1 -1
  29. package/dist/components/social-links.mjs +68 -20
  30. package/dist/components/social-links.mjs.map +1 -1
  31. package/dist/components/unsubscribe.js +68 -20
  32. package/dist/components/unsubscribe.js.map +1 -1
  33. package/dist/components/unsubscribe.mjs +68 -20
  34. package/dist/components/unsubscribe.mjs.map +1 -1
  35. package/dist/components/waitlist.js +68 -20
  36. package/dist/components/waitlist.js.map +1 -1
  37. package/dist/components/waitlist.mjs +68 -20
  38. package/dist/components/waitlist.mjs.map +1 -1
  39. package/dist/content/index.js +68 -20
  40. package/dist/content/index.js.map +1 -1
  41. package/dist/content/index.mjs +68 -20
  42. package/dist/content/index.mjs.map +1 -1
  43. package/dist/index.d.mts +1 -1
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.js +68 -20
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +68 -20
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/product/index.js +68 -20
  50. package/dist/product/index.js.map +1 -1
  51. package/dist/product/index.mjs +68 -20
  52. package/dist/product/index.mjs.map +1 -1
  53. package/dist/{provider-D7Rij9UM.d.mts → provider-DBAnqeTv.d.mts} +24 -0
  54. package/dist/{provider-D7Rij9UM.d.ts → provider-DBAnqeTv.d.ts} +24 -0
  55. package/dist/store/index.js +68 -20
  56. package/dist/store/index.js.map +1 -1
  57. package/dist/store/index.mjs +68 -20
  58. package/dist/store/index.mjs.map +1 -1
  59. package/package.json +1 -1
@@ -103,9 +103,23 @@ var _WebSDKClient = class _WebSDKClient {
103
103
  * Execute a GraphQL mutation
104
104
  */
105
105
  async mutate(mutation, variables) {
106
- return this.request(mutation, variables);
106
+ return this.request(mutation, variables, false);
107
107
  }
108
- async request(query, variables) {
108
+ /** HTTP statuses worth another attempt — transient server/edge conditions. */
109
+ static isRetriableStatus(status) {
110
+ return status === 429 || status === 408 || status >= 500 && status < 600;
111
+ }
112
+ static sleep(ms) {
113
+ return new Promise((resolve) => setTimeout(resolve, ms));
114
+ }
115
+ /**
116
+ * Perform the HTTP call with a hard timeout. Every outcome resolves to a
117
+ * GraphQLResponse — callers never hang, so a UI's `loading` state always
118
+ * settles into data or a renderable error.
119
+ */
120
+ async attempt(query, variables, timeoutMs) {
121
+ const controller = new AbortController();
122
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
109
123
  try {
110
124
  const response = await fetch(this.config.gatewayUrl, {
111
125
  method: "POST",
@@ -114,7 +128,8 @@ var _WebSDKClient = class _WebSDKClient {
114
128
  "x-product-id": this.config.productId,
115
129
  ...this.config.headers
116
130
  },
117
- body: JSON.stringify({ query, variables })
131
+ body: JSON.stringify({ query, variables }),
132
+ signal: controller.signal
118
133
  });
119
134
  if (!response.ok) {
120
135
  console.error(
@@ -123,34 +138,67 @@ var _WebSDKClient = class _WebSDKClient {
123
138
  response.statusText
124
139
  );
125
140
  return {
126
- errors: [
127
- {
128
- message: `HTTP ${response.status}: ${response.statusText}`,
129
- extensions: { code: `HTTP_${response.status}` }
130
- }
131
- ]
141
+ res: {
142
+ errors: [
143
+ {
144
+ message: `HTTP ${response.status}: ${response.statusText}`,
145
+ extensions: { code: `HTTP_${response.status}` }
146
+ }
147
+ ]
148
+ },
149
+ retriable: _WebSDKClient.isRetriableStatus(response.status)
132
150
  };
133
151
  }
134
- return await response.json();
152
+ return {
153
+ res: await response.json(),
154
+ retriable: false
155
+ };
135
156
  } catch (error) {
136
- console.error(
137
- "[WebSDK] Network error",
138
- error instanceof Error ? error.message : "unknown error"
139
- );
157
+ const aborted = error instanceof Error && (error.name === "AbortError" || controller.signal.aborted);
158
+ const message = aborted ? `Request timed out after ${timeoutMs}ms` : error instanceof Error ? error.message : "Network error";
159
+ console.error("[WebSDK] Network error", message);
140
160
  return {
141
- errors: [
142
- {
143
- message: error instanceof Error ? error.message : "Network error",
144
- extensions: { code: "NETWORK_ERROR" }
145
- }
146
- ]
161
+ res: {
162
+ errors: [
163
+ {
164
+ message,
165
+ extensions: { code: aborted ? "TIMEOUT" : "NETWORK_ERROR" }
166
+ }
167
+ ]
168
+ },
169
+ // Transport-level failures are worth one more try; a genuine outage
170
+ // just fails twice quickly and still renders an error state.
171
+ retriable: true
147
172
  };
173
+ } finally {
174
+ clearTimeout(timer);
175
+ }
176
+ }
177
+ async request(query, variables, retry = true) {
178
+ const timeoutMs = this.config.timeoutMs ?? _WebSDKClient.DEFAULT_TIMEOUT_MS;
179
+ const maxRetries = retry ? this.config.maxRetries ?? _WebSDKClient.DEFAULT_MAX_RETRIES : 0;
180
+ let last;
181
+ for (let i = 0; i <= maxRetries; i++) {
182
+ const { res, retriable } = await this.attempt(
183
+ query,
184
+ variables,
185
+ timeoutMs
186
+ );
187
+ if (!retriable || i === maxRetries) return res;
188
+ last = res;
189
+ await _WebSDKClient.sleep(
190
+ _WebSDKClient.RETRY_BASE_DELAY_MS * (i + 1) + Math.random() * 200
191
+ );
148
192
  }
193
+ return last;
149
194
  }
150
195
  };
151
196
  __publicField(_WebSDKClient, "CACHE_TTL", 5 * 60 * 1e3);
152
197
  // 5 minutes
153
198
  __publicField(_WebSDKClient, "MAX_CACHE_ENTRIES", 100);
199
+ __publicField(_WebSDKClient, "DEFAULT_TIMEOUT_MS", 12e3);
200
+ __publicField(_WebSDKClient, "DEFAULT_MAX_RETRIES", 1);
201
+ __publicField(_WebSDKClient, "RETRY_BASE_DELAY_MS", 400);
154
202
  var WebSDKContext = createContext(null);
155
203
  function useWebSDK() {
156
204
  const client = useContext(WebSDKContext);