@sonordev/site-kit 7.4.0 → 8.0.0
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.
- package/AGENTS.md +40 -12
- package/CHANGELOG.md +67 -0
- package/README.md +44 -18
- package/agent-manifest.json +111 -56
- package/dist/AnalyticsProvider-LYFDQRRJ.js +13 -0
- package/dist/{ArticleViewTracker-3DH53RSB.js → ArticleViewTracker-HG7IIRJY.js} +6 -5
- package/dist/{BlocksPopup-FGWYVHCH.js → BlocksPopup-GFX3GZIK.js} +6 -5
- package/dist/{ChatWidget-CDQZCLVH.js → ChatWidget-DVS7MLBN.js} +8 -5
- package/dist/{FileField-IPJ7L2W6.js → FileField-DVN7NUBI.js} +5 -5
- package/dist/{FormSpotlight-CQI2DBWI.js → FormSpotlight-W4SXKKO6.js} +3 -3
- package/dist/{FormStage-4WHD6ED4.js → FormStage-JTEE5MZD.js} +3 -3
- package/dist/ManagedForm-ZAUHIHGP.js +19 -0
- package/dist/{ManagedNewsletterForm-3D2BK3KQ.js → ManagedNewsletterForm-DQIB5Z4Y.js} +9 -6
- package/dist/{SignalCore-HEQYITTM.js → SignalCore-W5PYYMGX.js} +7 -7
- package/dist/SiteChat-MY2GATWC.js +6 -0
- package/dist/SiteDesignReporter-ICZWEGCY.js +12 -0
- package/dist/SitePopups-TGULLAER.js +13 -0
- package/dist/SitemapSync-AN2OBJE6.js +9 -0
- package/dist/_client/booking-widget.js +6 -5
- package/dist/_client/testimonial-section.js +3 -2
- package/dist/affiliates/index.js +6 -6
- package/dist/analytics/index.js +73 -7
- package/dist/articles/index.js +2 -2
- package/dist/articles/server-ui.js +3 -3
- package/dist/articles/server.js +2 -2
- package/dist/brand.css +1 -1
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +39 -8
- package/dist/chunk-3G7YABRA.js +25 -0
- package/dist/{chunk-CGWUXUYZ.js → chunk-3RDJKIYO.js} +2 -2
- package/dist/{chunk-J4FSB4OG.js → chunk-3YKQLC7J.js} +5 -2
- package/dist/{chunk-3E3PPSNR.js → chunk-56VDS2RP.js} +2 -2
- package/dist/chunk-5ROTTMBL.js +19 -0
- package/dist/{chunk-KHQ5GD6T.js → chunk-5S2XDG5O.js} +1 -1
- package/dist/chunk-5TM3WPCI.js +7 -0
- package/dist/{chunk-7HPZSWS4.js → chunk-6CJGZFOU.js} +1 -1
- package/dist/{chunk-RYVDGXC2.js → chunk-6KU7STM3.js} +3 -1
- package/dist/{chunk-FUQTV5O6.js → chunk-6QFINXLH.js} +3 -3
- package/dist/{chunk-AH4AXO4P.js → chunk-6ZXJ3SXR.js} +1 -1
- package/dist/{chunk-XA2BNW5M.js → chunk-7YEEOIWI.js} +1 -1
- package/dist/{chunk-IE5SSOCN.js → chunk-BQ2CXKTQ.js} +3 -11
- package/dist/{chunk-X6F6SO4S.js → chunk-C7TLGL3R.js} +21 -1
- package/dist/{chunk-43OCZ3JA.js → chunk-CAH4Y4PY.js} +4 -2
- package/dist/{chunk-PXKIGZ2F.js → chunk-EATJPSTS.js} +1 -1
- package/dist/{chunk-OOD6GMT4.js → chunk-GNSXOTIK.js} +6 -4
- package/dist/{chunk-EHR4NIMX.js → chunk-ICAVVF6D.js} +3 -3
- package/dist/{chunk-MHGAZ3LL.js → chunk-IJQ767JS.js} +3 -5
- package/dist/{chunk-CKW4HFJG.js → chunk-J65N34YM.js} +3 -3
- package/dist/{chunk-4BHRA7TI.js → chunk-JIH32RH2.js} +3 -3
- package/dist/{chunk-D2RGEWHS.js → chunk-K22OLAPC.js} +2 -2
- package/dist/{chunk-CG4ETW5Y.js → chunk-KRBBH64S.js} +3 -3
- package/dist/{chunk-JRCNUUNG.js → chunk-LBIQ5LTC.js} +1 -1
- package/dist/{chunk-MDP7EB4J.js → chunk-LKH44GI3.js} +5 -5
- package/dist/{chunk-ZTLMPUO6.js → chunk-LNSF6BJC.js} +1 -1
- package/dist/{chunk-5O62CER4.js → chunk-M62U7TJF.js} +1 -1
- package/dist/{chunk-EDYHROQ7.js → chunk-NFRJTOTB.js} +3 -3
- package/dist/{chunk-4DJMJ4V5.js → chunk-OE3NXEOF.js} +1 -1
- package/dist/{chunk-AV4QAK5F.js → chunk-OGK7OL3T.js} +5 -4
- package/dist/{chunk-YCFW2OQO.js → chunk-PD7K54EQ.js} +2 -2
- package/dist/{chunk-PF64OEXC.js → chunk-PIX7FAMX.js} +2 -2
- package/dist/{chunk-XEMHGJEG.js → chunk-ROAOI6GG.js} +10 -10
- package/dist/{chunk-6LLTLLEJ.js → chunk-S7SSYGUJ.js} +6 -5
- package/dist/{chunk-ATE6IFVK.js → chunk-SBPAXWLF.js} +1 -1
- package/dist/{chunk-DA5XC7Y6.js → chunk-TOSZGJEQ.js} +1 -1
- package/dist/{chunk-4NTBQNHA.js → chunk-TYAVHRWH.js} +80 -81
- package/dist/{chunk-ZTLU3BSW.js → chunk-TZ5RTANX.js} +2 -2
- package/dist/{chunk-4YTYGG2C.js → chunk-URJN75ZG.js} +29 -16
- package/dist/{chunk-CSN45MHO.js → chunk-UUWUAMUC.js} +13 -16
- package/dist/{chunk-PKGN32AU.js → chunk-XPTJRVL2.js} +1 -1
- package/dist/{chunk-662ILEZ6.js → chunk-Y35BWW2C.js} +3 -7
- package/dist/{chunk-PQDJNIHR.js → chunk-ZHNQFNO3.js} +2 -2
- package/dist/chunk-ZKADJNR2.js +52 -0
- package/dist/{chunk-GK7TV7EK.js → chunk-ZLFGXKLG.js} +1 -1
- package/dist/client/index.js +6 -5
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/sentences.d.ts +46 -0
- package/dist/contracts/site-cache.d.ts +2 -0
- package/dist/cta-bar/index.js +1 -1
- package/dist/fleet/index.js +6 -5
- package/dist/forms/field-autocomplete.d.ts +16 -8
- package/dist/forms/index.d.ts +5 -0
- package/dist/forms/index.js +17 -17
- package/dist/forms/server.js +7 -7
- package/dist/forms/static.js +2 -2
- package/dist/forms/submitForm.d.ts +5 -0
- package/dist/images/index.js +4 -4
- package/dist/index.d.ts +3 -7
- package/dist/index.js +1 -1
- package/dist/layout/SiteKitLayout.d.ts +2 -1
- package/dist/layout/client.js +11 -9
- package/dist/layout/index.js +13 -11
- package/dist/llms/index.js +7 -6
- package/dist/maps/index.js +6 -6
- package/dist/mcp/sonor.d.ts +47 -3
- package/dist/mcp/sonor.js +30 -20
- package/dist/proxy/index.d.ts +3 -3
- package/dist/proxy/index.js +1 -1
- package/dist/reputation/index.js +3 -2
- package/dist/reputation/server.js +2 -1
- package/dist/revalidate/index.js +3 -3
- package/dist/robots/indexnow.js +2 -2
- package/dist/runtime/index.d.ts +32 -0
- package/dist/runtime/index.js +7 -0
- package/dist/seo/api.d.ts +0 -4
- package/dist/seo/client.js +6 -5
- package/dist/seo/getManagedMetadata.d.ts +24 -0
- package/dist/seo/index.d.ts +2 -3
- package/dist/seo/index.js +14 -132
- package/dist/seo/indexnow.js +2 -2
- package/dist/seo/llms.js +7 -6
- package/dist/seo/register-sitemap-cli.js +2 -2
- package/dist/seo/server-api.d.ts +0 -6
- package/dist/seo/server.d.ts +1 -1
- package/dist/seo/server.js +4 -4
- package/dist/seo/sitemap.js +4 -3
- package/dist/seo/types.d.ts +9 -30
- package/dist/server/index.d.ts +8 -1
- package/dist/server/index.js +4 -3
- package/dist/server/mint-site-token.d.ts +0 -11
- package/dist/server/server-fetch.d.ts +19 -0
- package/dist/server-api-EGOKC7Q3.js +9 -0
- package/dist/shared/build-entries.d.ts +21 -9
- package/dist/shared/clientApiConfig.d.ts +56 -0
- package/dist/shared/identity-reader.d.ts +26 -0
- package/dist/shared/identity-storage.d.ts +30 -0
- package/dist/shared/identity.d.ts +13 -13
- package/dist/shared/import-specifiers.d.ts +26 -0
- package/dist/shared/sonorFetch.d.ts +4 -3
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +2 -2
- package/dist/sitemap/index.js +4 -3
- package/dist/slots/index.js +3 -3
- package/dist/sync/index.js +6 -5
- package/dist/types.d.ts +0 -1
- package/dist/website/cta-bar.js +1 -1
- package/dist/website/images.js +4 -4
- package/dist/website/index.js +7 -6
- package/dist/website/popups.js +10 -7
- package/dist/website/slots.js +3 -3
- package/dist/{writeLLMsTxt-OL4KQERZ.js → writeLLMsTxt-UZGN6IBU.js} +3 -2
- package/docs/MIGRATING-TO-7.md +5 -2
- package/docs/MIGRATING-TO-8.md +183 -0
- package/docs.json +4 -8
- package/package.json +15 -44
- package/skills/site-kit/SKILL.md +41 -11
- package/src/analytics/README.md +14 -14
- package/src/chat/README.md +7 -7
- package/src/forms/README.md +61 -6
- package/src/mcp/README.md +61 -20
- package/src/proxy/README.md +5 -4
- package/src/revalidate/README.md +2 -2
- package/src/runtime/README.md +51 -0
- package/src/seo/README.md +24 -8
- package/src/sync/README.md +2 -2
- package/src/website/README.md +3 -2
- package/dist/AnalyticsProvider-BQXV3ZF3.js +0 -11
- package/dist/ManagedForm-7FZNH4L2.js +0 -16
- package/dist/SiteChat-DMPDXY3W.js +0 -5
- package/dist/SiteDesignReporter-Y2IOJE52.js +0 -11
- package/dist/SitePopups-HD2LDKVU.js +0 -10
- package/dist/SitemapSync-OKPZHRX6.js +0 -8
- package/dist/chunk-24QZEO3Q.js +0 -41
- package/dist/chunk-BU66S5B7.js +0 -1
- package/dist/chunk-G3NHWMP5.js +0 -233
- package/dist/chunk-HODO5BX5.js +0 -28
- package/dist/chunk-L3AQCDCY.js +0 -386
- package/dist/chunk-P5GB6NEO.js +0 -66
- package/dist/chunk-SWKE6FWH.js +0 -47
- package/dist/cms/CmsPage.d.ts +0 -17
- package/dist/cms/CmsPreview.d.ts +0 -37
- package/dist/cms/CmsSection.d.ts +0 -8
- package/dist/cms/PortableTextRenderer.d.ts +0 -7
- package/dist/cms/index.d.ts +0 -37
- package/dist/cms/index.js +0 -5
- package/dist/cms/sanity-image.d.ts +0 -47
- package/dist/cms/sections/CtaSection.d.ts +0 -3
- package/dist/cms/sections/CustomSection.d.ts +0 -7
- package/dist/cms/sections/FaqSection.d.ts +0 -3
- package/dist/cms/sections/FormSection.d.ts +0 -8
- package/dist/cms/sections/GallerySection.d.ts +0 -3
- package/dist/cms/sections/HeroSection.d.ts +0 -3
- package/dist/cms/sections/RichTextSection.d.ts +0 -3
- package/dist/cms/sections/TestimonialsSection.d.ts +0 -3
- package/dist/cms/sections/index.d.ts +0 -8
- package/dist/cms/server-api.d.ts +0 -49
- package/dist/cms/server.d.ts +0 -1
- package/dist/cms/server.js +0 -5
- package/dist/cms/types.d.ts +0 -104
- package/dist/commerce/CalendarView.d.ts +0 -43
- package/dist/commerce/CheckoutForm.d.ts +0 -11
- package/dist/commerce/EventCalendar.d.ts +0 -26
- package/dist/commerce/EventCheckout.d.ts +0 -42
- package/dist/commerce/EventEmbed.d.ts +0 -11
- package/dist/commerce/EventModal.d.ts +0 -43
- package/dist/commerce/EventTile.d.ts +0 -10
- package/dist/commerce/EventsAgenda.d.ts +0 -38
- package/dist/commerce/EventsWidget.d.ts +0 -84
- package/dist/commerce/OfferingCard.d.ts +0 -9
- package/dist/commerce/OfferingList.d.ts +0 -9
- package/dist/commerce/ProductDetail.d.ts +0 -38
- package/dist/commerce/ProductEmbed.d.ts +0 -11
- package/dist/commerce/ProductGrid.d.ts +0 -41
- package/dist/commerce/ProductPage.d.ts +0 -39
- package/dist/commerce/RegistrationForm.d.ts +0 -9
- package/dist/commerce/SizeChart.d.ts +0 -8
- package/dist/commerce/UpcomingEvents.d.ts +0 -9
- package/dist/commerce/api.d.ts +0 -179
- package/dist/commerce/events-extras.d.ts +0 -60
- package/dist/commerce/index.d.ts +0 -33
- package/dist/commerce/index.js +0 -8022
- package/dist/commerce/server.d.ts +0 -161
- package/dist/commerce/server.js +0 -2
- package/dist/commerce/types.d.ts +0 -340
- package/dist/commerce/useEventModal.d.ts +0 -20
- package/dist/commerce/utils.d.ts +0 -17
- package/dist/engage/EngageWidget.d.ts +0 -21
- package/dist/engage/index.d.ts +0 -14
- package/dist/engage/index.js +0 -45
- package/dist/engage/types.d.ts +0 -33
- package/dist/seo/ManagedContent.d.ts +0 -14
- package/dist/server-api-BVCBLJKL.js +0 -9
- package/dist/website/cms/server.d.ts +0 -2
- package/dist/website/cms/server.js +0 -5
- package/dist/website/cms-server.d.ts +0 -2
- package/dist/website/cms.d.ts +0 -2
- package/dist/website/cms.js +0 -5
- package/src/commerce/README.md +0 -109
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { reviewPhotoUrl } from './chunk-CAT235HY.js';
|
|
3
|
-
import { fetchReviews } from './chunk-
|
|
3
|
+
import { fetchReviews } from './chunk-NFRJTOTB.js';
|
|
4
4
|
import { useState, useEffect, useCallback } from 'react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -10,7 +10,9 @@ var SITE_CACHE_TAGS = {
|
|
|
10
10
|
/** Article categories and tags. */
|
|
11
11
|
taxonomy: "editorial-taxonomy",
|
|
12
12
|
/** Portfolio items (agency-site-kit). */
|
|
13
|
-
portfolio: "portfolio"
|
|
13
|
+
portfolio: "portfolio",
|
|
14
|
+
/** Products, services, events and membership plans (commerce-kit). */
|
|
15
|
+
commerce: "commerce"
|
|
14
16
|
};
|
|
15
17
|
function isSiteRevalidatePong(body) {
|
|
16
18
|
return typeof body === "object" && body !== null && body.ok === true && body.ping === true;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FormEnhancer } from './chunk-
|
|
2
|
-
import { StaticForm } from './chunk-
|
|
3
|
-
import { serverApiFetch } from './chunk-
|
|
1
|
+
import { FormEnhancer } from './chunk-PIX7FAMX.js';
|
|
2
|
+
import { StaticForm } from './chunk-LNSF6BJC.js';
|
|
3
|
+
import { serverApiFetch } from './chunk-C7TLGL3R.js';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
async function ServerForm({
|
|
@@ -54,7 +54,7 @@ function useSignal() {
|
|
|
54
54
|
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
55
55
|
}
|
|
56
56
|
var LazySignalCore = dynamic(
|
|
57
|
-
() => import('./SignalCore-
|
|
57
|
+
() => import('./SignalCore-W5PYYMGX.js').then((m) => ({ default: m.SignalCore })),
|
|
58
58
|
{ ssr: false }
|
|
59
59
|
);
|
|
60
60
|
function SignalBridge({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { secretsMatch, readCappedBody } from './chunk-XTRZGXB2.js';
|
|
2
|
-
import { SITE_KIT_VERSION } from './chunk-
|
|
2
|
+
import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
|
|
3
3
|
|
|
4
4
|
// src/llms/revalidate.ts
|
|
5
5
|
function createLlmsRevalidateHandler(secret, options) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { trackedFreshFetch } from './chunk-UAYAJPEP.js';
|
|
2
|
+
import { isNextControlFlow } from './chunk-C7TLGL3R.js';
|
|
2
3
|
import { monotonicMs } from './chunk-MH2DSGC6.js';
|
|
3
|
-
import { SITE_KIT_VERSION } from './chunk-
|
|
4
|
+
import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
|
|
4
5
|
import 'server-only';
|
|
5
6
|
|
|
6
7
|
var MINT_PATH = "/api/public/site-token";
|
|
@@ -37,15 +38,6 @@ function failClosed(reason, rawKey, now) {
|
|
|
37
38
|
`site-kit: could not mint a site token (${reason}). Refusing to publish the raw SONOR_API_KEY in page HTML, so this build fails instead. Check that the mint endpoint is reachable and the key is valid, then rebuild. To ship anyway \u2014 which publishes the project secret in public HTML \u2014 set SONOR_SITE_TOKEN_FALLBACK=raw.`
|
|
38
39
|
);
|
|
39
40
|
}
|
|
40
|
-
function isFrameworkSignal(err) {
|
|
41
|
-
if (!err || typeof err !== "object") return false;
|
|
42
|
-
const e = err;
|
|
43
|
-
if (e.digest === "DYNAMIC_SERVER_USAGE") return true;
|
|
44
|
-
if (e.code === "NEXT_STATIC_GEN_BAILOUT") return true;
|
|
45
|
-
if (typeof e.digest === "string" && e.digest.startsWith("NEXT_")) return true;
|
|
46
|
-
if (e.$$typeof === /* @__PURE__ */ Symbol.for("react.postpone")) return true;
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
41
|
async function resolveClientCredential(rawKey, apiUrl) {
|
|
50
42
|
if (!rawKey) return "";
|
|
51
43
|
if (rawKey.startsWith(SITE_TOKEN_PREFIX)) return rawKey;
|
|
@@ -77,7 +69,7 @@ async function mintWithRetry(rawKey, apiUrl) {
|
|
|
77
69
|
signal: typeof AbortSignal !== "undefined" && AbortSignal.timeout ? AbortSignal.timeout(MINT_TIMEOUT_MS) : void 0
|
|
78
70
|
});
|
|
79
71
|
} catch (err) {
|
|
80
|
-
if (
|
|
72
|
+
if (isNextControlFlow(err)) throw err;
|
|
81
73
|
lastReason = err instanceof Error ? err.message : "network error";
|
|
82
74
|
if (attempt < MINT_MAX_ATTEMPTS - 1) {
|
|
83
75
|
await sleep(retryDelayMs(null, attempt));
|
|
@@ -37,6 +37,25 @@ function attemptSignal(budgetMs, callerSignal) {
|
|
|
37
37
|
function sleep(ms) {
|
|
38
38
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
39
39
|
}
|
|
40
|
+
var NEXT_CONTROL_DIGESTS = /* @__PURE__ */ new Set([
|
|
41
|
+
"DYNAMIC_SERVER_USAGE",
|
|
42
|
+
"BAILOUT_TO_CLIENT_SIDE_RENDERING",
|
|
43
|
+
"HANGING_PROMISE_REJECTION"
|
|
44
|
+
]);
|
|
45
|
+
var REACT_POSTPONE = /* @__PURE__ */ Symbol.for("react.postpone");
|
|
46
|
+
function isNextControlFlow(error) {
|
|
47
|
+
for (let current = error, depth = 0; current && typeof current === "object" && depth < 5; depth++) {
|
|
48
|
+
const { digest, code, message } = current;
|
|
49
|
+
if (typeof digest === "string" && (NEXT_CONTROL_DIGESTS.has(digest) || digest.startsWith("NEXT_"))) return true;
|
|
50
|
+
if (code === "NEXT_STATIC_GEN_BAILOUT") return true;
|
|
51
|
+
if (current.$$typeof === REACT_POSTPONE) return true;
|
|
52
|
+
if (typeof message === "string" && message.includes("needs to bail out of prerendering at this point because it used") && message.includes("ppr-caught-error")) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
current = current.cause;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
40
59
|
async function serverApiFetch(path, options = {}) {
|
|
41
60
|
const {
|
|
42
61
|
method = "GET",
|
|
@@ -116,6 +135,7 @@ async function serverApiFetch(path, options = {}) {
|
|
|
116
135
|
}
|
|
117
136
|
return await response.json();
|
|
118
137
|
} catch (error) {
|
|
138
|
+
if (isNextControlFlow(error)) throw error;
|
|
119
139
|
if (retry && attempt < attempts && monotonicMs() < deadline) {
|
|
120
140
|
await sleep(
|
|
121
141
|
Math.min(200 * attempt * attempt + retryJitter() * 150, Math.max(0, deadline - monotonicMs()))
|
|
@@ -132,4 +152,4 @@ async function serverApiFetch(path, options = {}) {
|
|
|
132
152
|
return null;
|
|
133
153
|
}
|
|
134
154
|
|
|
135
|
-
export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch };
|
|
155
|
+
export { isNextControlFlow, requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FRAME_READY_MESSAGE } from './chunk-EKBEOXTH.js';
|
|
2
|
+
import { readPublishedApiConfig, DEFAULT_SONOR_API_URL } from './chunk-3G7YABRA.js';
|
|
2
3
|
|
|
3
4
|
// src/shared/frame.ts
|
|
4
5
|
function isFramed() {
|
|
@@ -48,8 +49,9 @@ function announceFrameReady() {
|
|
|
48
49
|
var announcedSuppression = false;
|
|
49
50
|
function resolveAnalyticsTarget(options = {}) {
|
|
50
51
|
const config = typeof window === "undefined" ? void 0 : window;
|
|
51
|
-
const
|
|
52
|
-
const
|
|
52
|
+
const published = readPublishedApiConfig();
|
|
53
|
+
const apiUrl = options.apiUrl || published.apiUrl || DEFAULT_SONOR_API_URL;
|
|
54
|
+
const apiKey = options.apiKey || published.apiKey;
|
|
53
55
|
if (!apiKey) return null;
|
|
54
56
|
const hostname = (config?.location?.hostname || "").toLowerCase().replace(/\.+$/, "");
|
|
55
57
|
const local = hostname === "localhost" || hostname.endsWith(".localhost") || hostname === "127.0.0.1" || hostname === "[::1]" || hostname === "::1" || hostname === "0.0.0.0";
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { VISUAL_VIEWPORT_GAP_PROPERTY } from './chunk-6T6CQVNL.js';
|
|
3
3
|
import { GlassStyles } from './chunk-JE4A5S4F.js';
|
|
4
4
|
import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
|
|
5
|
-
import { useForm } from './chunk-
|
|
5
|
+
import { useForm } from './chunk-UUWUAMUC.js';
|
|
6
6
|
import { parseColor, relativeLuminance, DARK_LUMINANCE, contrastRatio } from './chunk-S22FSH7C.js';
|
|
7
|
-
import {
|
|
7
|
+
import { readPublishedApiConfig } from './chunk-3G7YABRA.js';
|
|
8
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
8
9
|
import { useState, useEffect, useRef, useLayoutEffect, useCallback, Fragment as Fragment$1 } from 'react';
|
|
9
10
|
import { lexer } from 'marked';
|
|
10
11
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -556,8 +557,9 @@ function getApiConfig() {
|
|
|
556
557
|
const isDev = typeof process !== "undefined" && process.env?.NODE_ENV === "development";
|
|
557
558
|
const defaultApiUrl = isDev && process.env?.SONOR_API_URL ? process.env.SONOR_API_URL : "https://api.sonor.io";
|
|
558
559
|
const defaultSignalUrl = isDev && (process.env?.SONOR_SIGNAL_URL || process.env?.NEXT_PUBLIC_SIGNAL_API_URL) ? process.env.SONOR_SIGNAL_URL || process.env.NEXT_PUBLIC_SIGNAL_API_URL : "https://signal.sonor.io";
|
|
559
|
-
const
|
|
560
|
-
const
|
|
560
|
+
const published = readPublishedApiConfig();
|
|
561
|
+
const apiUrl = published.apiUrl || defaultApiUrl;
|
|
562
|
+
const apiKey = published.apiKey;
|
|
561
563
|
const signalUrl = typeof window !== "undefined" ? window.__SITE_KIT_SIGNAL_URL__ || defaultSignalUrl : defaultSignalUrl;
|
|
562
564
|
return { apiUrl, apiKey, signalUrl };
|
|
563
565
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { sanitizeFleetVersion, buildFleetHeartbeatPayload } from './chunk-ZTZQPYP6.js';
|
|
3
3
|
import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
4
|
-
import { resolveAnalyticsTarget } from './chunk-
|
|
5
|
-
import { sonorFetch } from './chunk-
|
|
6
|
-
import { SITE_KIT_VERSION } from './chunk-
|
|
4
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
5
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
6
|
+
import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
|
|
7
7
|
import { useRef, useEffect } from 'react';
|
|
8
8
|
|
|
9
9
|
// src/fleet/heartbeat.ts
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getClientApiConfig } from './chunk-3G7YABRA.js';
|
|
2
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
2
3
|
|
|
3
4
|
// src/sync/api.ts
|
|
4
|
-
var DEFAULT_API_URL = "https://api.sonor.io";
|
|
5
5
|
function getApiConfig() {
|
|
6
|
-
|
|
7
|
-
const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
|
|
8
|
-
return { apiUrl, apiKey };
|
|
6
|
+
return getClientApiConfig();
|
|
9
7
|
}
|
|
10
8
|
function buildHeaders(isPost = false) {
|
|
11
9
|
const headers = {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { registerAnalyticsDispatcher } from './chunk-LCDVPAMR.js';
|
|
3
|
-
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-
|
|
3
|
+
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
|
|
4
4
|
import { onPageLeave } from './chunk-L2V5PUFN.js';
|
|
5
|
-
import { resolveAnalyticsTarget } from './chunk-
|
|
6
|
-
import { sonorFetch, sonorBeacon } from './chunk-
|
|
5
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
6
|
+
import { sonorFetch, sonorBeacon } from './chunk-56VDS2RP.js';
|
|
7
7
|
import { createContext, useRef, useEffect, useState, useMemo, useCallback, useContext } from 'react';
|
|
8
8
|
import { usePathname } from 'next/navigation';
|
|
9
9
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { freshFetch } from './chunk-UAYAJPEP.js';
|
|
2
2
|
import { LLM_GEO_CONTRACT_VERSION } from './chunk-NZ4RXN3G.js';
|
|
3
3
|
import { withSiteParam } from './chunk-MJP63SSS.js';
|
|
4
|
+
import { getClientApiConfig } from './chunk-3G7YABRA.js';
|
|
4
5
|
import { cache } from 'react';
|
|
5
6
|
|
|
6
7
|
function getApiConfig() {
|
|
7
|
-
const apiUrl
|
|
8
|
-
|
|
9
|
-
return { apiUrl, apiKey };
|
|
8
|
+
const { apiUrl, apiKey } = getClientApiConfig({ serverKey: true });
|
|
9
|
+
return { apiUrl, apiKey: apiKey ?? "" };
|
|
10
10
|
}
|
|
11
11
|
async function apiGet(endpoint, options) {
|
|
12
12
|
const { apiUrl, apiKey } = getApiConfig();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { locToPath, isMalformedSitemapPath, inferPageType } from './chunk-YVKRYQRG.js';
|
|
3
|
-
import { resolveAnalyticsTarget } from './chunk-
|
|
4
|
-
import { sonorFetch } from './chunk-
|
|
3
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
4
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
5
5
|
import { useRef, useEffect } from 'react';
|
|
6
6
|
|
|
7
7
|
var SYNC_STAMP_KEY = "_sk_sitemap_synced_at";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { toHexColor, normalizeDesignTokens, designTokensHash } from './chunk-IHG36STL.js';
|
|
2
2
|
import { contrastRatio, parseColor, relativeLuminance } from './chunk-S22FSH7C.js';
|
|
3
|
-
import { resolveAnalyticsTarget } from './chunk-
|
|
4
|
-
import { sonorFetch } from './chunk-
|
|
5
|
-
import { SITE_KIT_VERSION } from './chunk-
|
|
3
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
4
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
5
|
+
import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
|
|
6
6
|
|
|
7
7
|
// src/website/design.ts
|
|
8
8
|
var SITE_DESIGN_PATH = "/api/public/site/design";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveSiteHost } from './chunk-FESKKJAS.js';
|
|
2
|
-
import { configureSiteCredential, currentCredential } from './chunk-
|
|
2
|
+
import { configureSiteCredential, currentCredential } from './chunk-ZLFGXKLG.js';
|
|
3
3
|
|
|
4
4
|
// src/shared/publishCredential.ts
|
|
5
5
|
function publishSiteCredential({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { countStageViews, countStageQuestions, useFieldControls } from './chunk-
|
|
3
|
-
import {
|
|
4
|
-
import { DelightStyles, FormMomentum, FormField } from './chunk-4NTBQNHA.js';
|
|
5
|
-
import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-CSN45MHO.js';
|
|
2
|
+
import { countStageViews, countStageQuestions, useFieldControls } from './chunk-SBPAXWLF.js';
|
|
3
|
+
import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-UUWUAMUC.js';
|
|
6
4
|
import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
|
|
7
5
|
import { isFieldVisible, validateField, isFieldComplete, isDisplayOnly, unseenControlValues } from './chunk-C2FZBUSS.js';
|
|
6
|
+
import { HoneypotField } from './chunk-DXO6SBMD.js';
|
|
7
|
+
import { DelightStyles, FormMomentum, FormField } from './chunk-TYAVHRWH.js';
|
|
8
8
|
import { DEFAULT_FORM_SUCCESS_MESSAGE } from './chunk-5SQK3D53.js';
|
|
9
9
|
import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
|
|
10
10
|
import { useState, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
@@ -63,7 +63,7 @@ function FormClient({
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
let cancelled = false;
|
|
66
|
-
const load = resolvedExperience === "stage" ? import('./FormStage-
|
|
66
|
+
const load = resolvedExperience === "stage" ? import('./FormStage-JTEE5MZD.js').then((m) => m.FormStage) : import('./FormSpotlight-W4SXKKO6.js').then((m) => m.FormSpotlight);
|
|
67
67
|
load.then((Component) => {
|
|
68
68
|
if (!cancelled) setExperience(() => Component);
|
|
69
69
|
}).catch((err) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HoneypotField } from './chunk-DXO6SBMD.js';
|
|
2
|
-
import { FormField } from './chunk-
|
|
2
|
+
import { FormField } from './chunk-TYAVHRWH.js';
|
|
3
3
|
import { normalizeFormConfig } from './chunk-5SQK3D53.js';
|
|
4
4
|
import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-
|
|
1
|
+
import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-TZ5RTANX.js';
|
|
2
2
|
import { createHash } from 'crypto';
|
|
3
3
|
import { existsSync, readFileSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { monotonicMs } from './chunk-MH2DSGC6.js';
|
|
2
|
+
import { getClientApiConfig } from './chunk-3G7YABRA.js';
|
|
2
3
|
|
|
3
4
|
// src/reputation/api.ts
|
|
4
5
|
var reviewsCache = /* @__PURE__ */ new Map();
|
|
5
6
|
var CACHE_TTL = 6e4;
|
|
6
7
|
function getApiConfig() {
|
|
7
|
-
const apiUrl
|
|
8
|
-
|
|
9
|
-
return { apiUrl, apiKey };
|
|
8
|
+
const { apiUrl, apiKey } = getClientApiConfig({ serverKey: true });
|
|
9
|
+
return { apiUrl, apiKey: apiKey ?? "" };
|
|
10
10
|
}
|
|
11
11
|
async function fetchWithRetry(url, headers, retries = 2) {
|
|
12
12
|
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { writeLLMsTxtToPublic } from './chunk-TZ5RTANX.js';
|
|
1
2
|
import { getSiteConfig } from './chunk-Z22QVHT4.js';
|
|
2
|
-
import { writeLLMsTxtToPublic } from './chunk-ZTLU3BSW.js';
|
|
3
3
|
import { buildFetch } from './chunk-UAYAJPEP.js';
|
|
4
4
|
import { findAppDirForDiscovery } from './chunk-ZEGVKVD5.js';
|
|
5
5
|
import { stripEmbeddedDomain, locToPath, inferPageType, isMalformedSitemapPath, resolveTrailingSlash, stripTrailingSlash, llmsWriteTimeoutMs, applyTrailingSlash } from './chunk-YVKRYQRG.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-
|
|
2
|
+
import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-IJQ767JS.js';
|
|
3
|
+
import { readPublishedApiConfig, DEFAULT_SONOR_API_URL } from './chunk-3G7YABRA.js';
|
|
3
4
|
import { useState, useRef, useMemo, useCallback, useEffect, useId } from 'react';
|
|
4
5
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
6
|
|
|
@@ -125,7 +126,6 @@ function bookingRecoveryFromError(error) {
|
|
|
125
126
|
if (/time reservation expired|invalid slot hold|meeting details changed/i.test(message)) return "hold";
|
|
126
127
|
return null;
|
|
127
128
|
}
|
|
128
|
-
var DEFAULT_API_URL = "https://api.sonor.io";
|
|
129
129
|
var DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
130
130
|
var MONTHS = [
|
|
131
131
|
"January",
|
|
@@ -217,8 +217,9 @@ function BookingWidget({
|
|
|
217
217
|
autoSelectFirstDay = true,
|
|
218
218
|
styles = {}
|
|
219
219
|
}) {
|
|
220
|
-
const
|
|
221
|
-
const
|
|
220
|
+
const published = readPublishedApiConfig();
|
|
221
|
+
const apiKey = propApiKey || published.apiKey;
|
|
222
|
+
const apiUrl = propApiUrl || published.apiUrl || DEFAULT_SONOR_API_URL;
|
|
222
223
|
const [step, setStep] = useState(bookingTypeSlug ? "datetime" : "type");
|
|
223
224
|
const [loading, setLoading] = useState(false);
|
|
224
225
|
const [slotsLoading, setSlotsLoading] = useState(false);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
|
|
3
|
-
import { resolveAnalyticsTarget } from './chunk-
|
|
3
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
4
4
|
import { useState, useEffect } from 'react';
|
|
5
5
|
import ReactDOM from 'react-dom';
|
|
6
6
|
import dynamic from 'next/dynamic';
|
|
7
7
|
import { jsx } from 'react/jsx-runtime';
|
|
8
8
|
|
|
9
9
|
var LazyChatWidget = dynamic(
|
|
10
|
-
() => import('./ChatWidget-
|
|
10
|
+
() => import('./ChatWidget-DVS7MLBN.js').then((m) => ({ default: m.ChatWidget })),
|
|
11
11
|
{ ssr: false }
|
|
12
12
|
);
|
|
13
13
|
function SiteChat(props) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
3
2
|
import { shellValuesToCarry } from './chunk-C2FZBUSS.js';
|
|
3
|
+
import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
4
4
|
import { normalizeFormConfig } from './chunk-5SQK3D53.js';
|
|
5
5
|
import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
|
|
6
6
|
import React, { useRef, useEffect, useState, useMemo, useCallback } from 'react';
|
|
7
7
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
8
|
|
|
9
|
-
var loadInteractiveForm = () => import('./ManagedForm-
|
|
9
|
+
var loadInteractiveForm = () => import('./ManagedForm-ZAUHIHGP.js').then((m) => m.ManagedForm);
|
|
10
10
|
var REPLAY_WAIT_MS = 8e3;
|
|
11
11
|
function FormEnhancer({
|
|
12
12
|
formId,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { SITE_EDIT_PARAM } from './chunk-6G43IRWR.js';
|
|
3
|
-
import { publishSiteCredential } from './chunk-
|
|
4
|
-
import { FleetHeartbeat } from './chunk-
|
|
5
|
-
import { SignalBridge } from './chunk-AH4AXO4P.js';
|
|
3
|
+
import { publishSiteCredential } from './chunk-LBIQ5LTC.js';
|
|
4
|
+
import { FleetHeartbeat } from './chunk-ICAVVF6D.js';
|
|
6
5
|
import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
7
6
|
import { resolveSiteHost } from './chunk-FESKKJAS.js';
|
|
8
|
-
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-
|
|
9
|
-
import { announceFrameReady, isCrossOriginFrame } from './chunk-
|
|
7
|
+
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
|
|
8
|
+
import { announceFrameReady, isCrossOriginFrame } from './chunk-CAH4Y4PY.js';
|
|
9
|
+
import { SignalBridge } from './chunk-6ZXJ3SXR.js';
|
|
10
10
|
import React, { useState, useRef, useCallback, useEffect, Suspense } from 'react';
|
|
11
11
|
import dynamic from 'next/dynamic';
|
|
12
12
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -33,23 +33,23 @@ function startEditBridge() {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
var LazyAnalyticsProvider = dynamic(
|
|
36
|
-
() => import('./AnalyticsProvider-
|
|
36
|
+
() => import('./AnalyticsProvider-LYFDQRRJ.js').then((m) => ({ default: m.AnalyticsProvider })),
|
|
37
37
|
{ ssr: false }
|
|
38
38
|
);
|
|
39
39
|
var LazySiteChat = dynamic(
|
|
40
|
-
() => import('./SiteChat-
|
|
40
|
+
() => import('./SiteChat-MY2GATWC.js').then((m) => ({ default: m.SiteChat })),
|
|
41
41
|
{ ssr: false }
|
|
42
42
|
);
|
|
43
43
|
var LazySitePopups = dynamic(
|
|
44
|
-
() => import('./SitePopups-
|
|
44
|
+
() => import('./SitePopups-TGULLAER.js').then((m) => ({ default: m.SitePopups })),
|
|
45
45
|
{ ssr: false }
|
|
46
46
|
);
|
|
47
47
|
var LazySiteDesignReporter = dynamic(
|
|
48
|
-
() => import('./SiteDesignReporter-
|
|
48
|
+
() => import('./SiteDesignReporter-ICZWEGCY.js').then((m) => ({ default: m.SiteDesignReporter })),
|
|
49
49
|
{ ssr: false }
|
|
50
50
|
);
|
|
51
51
|
var LazySitemapSync = dynamic(
|
|
52
|
-
() => import('./SitemapSync-
|
|
52
|
+
() => import('./SitemapSync-AN2OBJE6.js').then((m) => ({ default: m.SitemapSync })),
|
|
53
53
|
{ ssr: false }
|
|
54
54
|
);
|
|
55
55
|
function SiteKitClientProviders({
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
|
|
4
|
+
import { getOrCreateVisitorId } from './chunk-ZKADJNR2.js';
|
|
5
|
+
import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
|
|
6
|
+
import { sonorFetch } from './chunk-56VDS2RP.js';
|
|
6
7
|
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
7
8
|
import ReactDOM from 'react-dom';
|
|
8
9
|
import dynamic from 'next/dynamic';
|
|
@@ -160,7 +161,7 @@ function activatePopup(active, id, popups) {
|
|
|
160
161
|
return [...active, id];
|
|
161
162
|
}
|
|
162
163
|
var LazyBlocksPopup = dynamic(
|
|
163
|
-
() => import('./BlocksPopup-
|
|
164
|
+
() => import('./BlocksPopup-GFX3GZIK.js').then((m) => ({ default: m.BlocksPopup })),
|
|
164
165
|
{ ssr: false }
|
|
165
166
|
);
|
|
166
167
|
function SitePopups(props) {
|
|
@@ -346,7 +347,7 @@ function PopupView({
|
|
|
346
347
|
);
|
|
347
348
|
}
|
|
348
349
|
function trackPopupEvent(apiUrl, apiKey, endpoint, data) {
|
|
349
|
-
const visitorId =
|
|
350
|
+
const { visitorId } = readAnalyticsIdentity();
|
|
350
351
|
sonorFetch(`${apiUrl.replace(/\/$/, "")}/engage/widget/${endpoint}`, {
|
|
351
352
|
method: "POST",
|
|
352
353
|
headers: { "Content-Type": "application/json" },
|
|
@@ -26,7 +26,7 @@ function useFieldControls(fields) {
|
|
|
26
26
|
}
|
|
27
27
|
if (needsFile && !requested.current.file) {
|
|
28
28
|
requested.current.file = true;
|
|
29
|
-
import('./FileField-
|
|
29
|
+
import('./FileField-DVN7NUBI.js').then((m) => {
|
|
30
30
|
if (!cancelled) setControls((prev) => ({ ...prev, File: m.FileField }));
|
|
31
31
|
}).catch(() => {
|
|
32
32
|
requested.current.file = false;
|