@sonordev/site-kit 5.8.2 → 5.8.3
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/agent-manifest.json +6 -1
- package/dist/{AnalyticsProvider-4JV3OFCG.js → AnalyticsProvider-DPXR6FSV.js} +10 -10
- package/dist/{AnalyticsProvider-4JV3OFCG.js.map → AnalyticsProvider-DPXR6FSV.js.map} +1 -1
- package/dist/{AnalyticsProvider-LUEUDZZC.mjs → AnalyticsProvider-IGOD64MY.mjs} +6 -6
- package/dist/{AnalyticsProvider-LUEUDZZC.mjs.map → AnalyticsProvider-IGOD64MY.mjs.map} +1 -1
- package/dist/{BlogViewTracker-YQMTEGYZ.mjs → BlogViewTracker-Q7Y4MN4B.mjs} +5 -5
- package/dist/{BlogViewTracker-YQMTEGYZ.mjs.map → BlogViewTracker-Q7Y4MN4B.mjs.map} +1 -1
- package/dist/{BlogViewTracker-32C4SCHA.js → BlogViewTracker-S3CSRBIZ.js} +6 -6
- package/dist/{BlogViewTracker-32C4SCHA.js.map → BlogViewTracker-S3CSRBIZ.js.map} +1 -1
- package/dist/ChatWidget-76R7NOWD.js +24 -0
- package/dist/{ChatWidget-KCXQXNUF.js.map → ChatWidget-76R7NOWD.js.map} +1 -1
- package/dist/ChatWidget-G3KOUDX5.mjs +15 -0
- package/dist/{ChatWidget-IRTAMRQS.mjs.map → ChatWidget-G3KOUDX5.mjs.map} +1 -1
- package/dist/EngageWidget-HD4F2ZVE.js +21 -0
- package/dist/{EngageWidget-EUUZHQOU.js.map → EngageWidget-HD4F2ZVE.js.map} +1 -1
- package/dist/EngageWidget-UJ47PQFG.mjs +12 -0
- package/dist/{EngageWidget-7AIUJRXV.mjs.map → EngageWidget-UJ47PQFG.mjs.map} +1 -1
- package/dist/{FileField-SNI5XCHQ.js → FileField-FV6WSZMX.js} +6 -6
- package/dist/{FileField-SNI5XCHQ.js.map → FileField-FV6WSZMX.js.map} +1 -1
- package/dist/{FileField-XJYJO5HE.mjs → FileField-WNMEA3PK.mjs} +5 -5
- package/dist/{FileField-XJYJO5HE.mjs.map → FileField-WNMEA3PK.mjs.map} +1 -1
- package/dist/{FormSpotlight-S64G4CMM.js → FormSpotlight-2VRQXEFI.js} +9 -9
- package/dist/{FormSpotlight-S64G4CMM.js.map → FormSpotlight-2VRQXEFI.js.map} +1 -1
- package/dist/{FormSpotlight-BCXI4A4R.mjs → FormSpotlight-NGWEPGI4.mjs} +3 -3
- package/dist/{FormSpotlight-BCXI4A4R.mjs.map → FormSpotlight-NGWEPGI4.mjs.map} +1 -1
- package/dist/{FormStage-RHARCSPS.mjs → FormStage-7L4BBOLC.mjs} +3 -3
- package/dist/{FormStage-RHARCSPS.mjs.map → FormStage-7L4BBOLC.mjs.map} +1 -1
- package/dist/{FormStage-PX5TVY25.js → FormStage-Q3KQVFVW.js} +9 -9
- package/dist/{FormStage-PX5TVY25.js.map → FormStage-Q3KQVFVW.js.map} +1 -1
- package/dist/ManagedForm-4ZGU4R3G.js +25 -0
- package/dist/{ManagedForm-RI2TSUZD.js.map → ManagedForm-4ZGU4R3G.js.map} +1 -1
- package/dist/ManagedForm-Z7QE4KYI.mjs +16 -0
- package/dist/{ManagedForm-7IDXBQS6.mjs.map → ManagedForm-Z7QE4KYI.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-IAGIHBNT.js → ManagedNewsletterForm-22EPZB7Z.js} +8 -8
- package/dist/{ManagedNewsletterForm-IAGIHBNT.js.map → ManagedNewsletterForm-22EPZB7Z.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-UXBJ5OJB.mjs → ManagedNewsletterForm-4TVO2VL4.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-UXBJ5OJB.mjs.map → ManagedNewsletterForm-4TVO2VL4.mjs.map} +1 -1
- package/dist/{SignalCore-Q2BQMPCJ.js → SignalCore-2N7UZGF3.js} +11 -11
- package/dist/{SignalCore-Q2BQMPCJ.js.map → SignalCore-2N7UZGF3.js.map} +1 -1
- package/dist/{SignalCore-37WGILFY.mjs → SignalCore-57OK3DHA.mjs} +5 -5
- package/dist/{SignalCore-37WGILFY.mjs.map → SignalCore-57OK3DHA.mjs.map} +1 -1
- package/dist/SitemapSync-GF4OKN4Z.js +18 -0
- package/dist/{SitemapSync-DWEL7HTB.js.map → SitemapSync-GF4OKN4Z.js.map} +1 -1
- package/dist/SitemapSync-WIUEYOBS.mjs +9 -0
- package/dist/{SitemapSync-YIAI7PMT.mjs.map → SitemapSync-WIUEYOBS.mjs.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/blog/index.js +18 -18
- package/dist/blog/index.mjs +4 -4
- package/dist/blog/server-ui.js +14 -14
- package/dist/blog/server-ui.mjs +2 -2
- package/dist/{chunk-EZ5DX7ED.mjs → chunk-25F2EXOC.mjs} +3 -3
- package/dist/{chunk-EZ5DX7ED.mjs.map → chunk-25F2EXOC.mjs.map} +1 -1
- package/dist/{chunk-3Y7IKQDD.js → chunk-2TS4ALOA.js} +14 -14
- package/dist/{chunk-3Y7IKQDD.js.map → chunk-2TS4ALOA.js.map} +1 -1
- package/dist/{chunk-NHX6YJ7G.mjs → chunk-3OO5EDKD.mjs} +8 -8
- package/dist/{chunk-NHX6YJ7G.mjs.map → chunk-3OO5EDKD.mjs.map} +1 -1
- package/dist/{chunk-3EXBBFXX.mjs → chunk-4C5CZJIN.mjs} +4 -4
- package/dist/{chunk-3EXBBFXX.mjs.map → chunk-4C5CZJIN.mjs.map} +1 -1
- package/dist/{chunk-7SLYI62M.mjs → chunk-4NVMAYMQ.mjs} +4 -4
- package/dist/{chunk-7SLYI62M.mjs.map → chunk-4NVMAYMQ.mjs.map} +1 -1
- package/dist/chunk-5FETEH3Y.mjs +6 -0
- package/dist/{chunk-TAPCWMBV.mjs.map → chunk-5FETEH3Y.mjs.map} +1 -1
- package/dist/{chunk-D7CF3OPZ.js → chunk-5HFD36AN.js} +5 -5
- package/dist/{chunk-D7CF3OPZ.js.map → chunk-5HFD36AN.js.map} +1 -1
- package/dist/{chunk-PXWYMOZY.js → chunk-6CCS2EGF.js} +11 -11
- package/dist/{chunk-PXWYMOZY.js.map → chunk-6CCS2EGF.js.map} +1 -1
- package/dist/chunk-7R6H3GQ4.js +8 -0
- package/dist/{chunk-TJVZEDE3.js.map → chunk-7R6H3GQ4.js.map} +1 -1
- package/dist/{chunk-U6O5NG56.js → chunk-7VZYP4K5.js} +15 -15
- package/dist/{chunk-U6O5NG56.js.map → chunk-7VZYP4K5.js.map} +1 -1
- package/dist/chunk-AJBOEV4I.mjs +453 -0
- package/dist/chunk-AJBOEV4I.mjs.map +1 -0
- package/dist/{chunk-3HGHWDCY.js → chunk-CNTDV7HM.js} +4 -4
- package/dist/{chunk-3HGHWDCY.js.map → chunk-CNTDV7HM.js.map} +1 -1
- package/dist/{chunk-QWXTQC3N.js → chunk-CY2RFEW6.js} +3 -3
- package/dist/{chunk-QWXTQC3N.js.map → chunk-CY2RFEW6.js.map} +1 -1
- package/dist/{chunk-7BI2RVQD.js → chunk-CZEIHFLW.js} +4 -4
- package/dist/{chunk-7BI2RVQD.js.map → chunk-CZEIHFLW.js.map} +1 -1
- package/dist/{chunk-NM567VXC.mjs → chunk-F2KW4OJF.mjs} +4 -4
- package/dist/{chunk-NM567VXC.mjs.map → chunk-F2KW4OJF.mjs.map} +1 -1
- package/dist/{chunk-3Z3TOPND.js → chunk-F3KA6V2Y.js} +3 -3
- package/dist/{chunk-3Z3TOPND.js.map → chunk-F3KA6V2Y.js.map} +1 -1
- package/dist/{chunk-5BZNVKNK.mjs → chunk-FD72QL42.mjs} +3 -3
- package/dist/{chunk-5BZNVKNK.mjs.map → chunk-FD72QL42.mjs.map} +1 -1
- package/dist/{chunk-U5WMGUDV.js → chunk-FTB5LAD3.js} +4 -4
- package/dist/{chunk-U5WMGUDV.js.map → chunk-FTB5LAD3.js.map} +1 -1
- package/dist/{chunk-TCVOGK6U.mjs → chunk-HBHS5VRN.mjs} +3 -3
- package/dist/{chunk-TCVOGK6U.mjs.map → chunk-HBHS5VRN.mjs.map} +1 -1
- package/dist/{chunk-4PXUMDHL.mjs → chunk-HEOLGDUX.mjs} +3 -3
- package/dist/{chunk-4PXUMDHL.mjs.map → chunk-HEOLGDUX.mjs.map} +1 -1
- package/dist/{chunk-GDH42JAS.js → chunk-I7HOMMIK.js} +15 -15
- package/dist/{chunk-GDH42JAS.js.map → chunk-I7HOMMIK.js.map} +1 -1
- package/dist/{chunk-73EBIAF3.js → chunk-IIHIRHSW.js} +18 -18
- package/dist/{chunk-73EBIAF3.js.map → chunk-IIHIRHSW.js.map} +1 -1
- package/dist/{chunk-M45AL7EA.js → chunk-LB44BNJ2.js} +2 -2
- package/dist/{chunk-M45AL7EA.js.map → chunk-LB44BNJ2.js.map} +1 -1
- package/dist/{chunk-6FTC6EYD.mjs → chunk-LGOQ65JQ.mjs} +7 -7
- package/dist/{chunk-6FTC6EYD.mjs.map → chunk-LGOQ65JQ.mjs.map} +1 -1
- package/dist/{chunk-X6NPTILR.mjs → chunk-MQS6AF5K.mjs} +3 -3
- package/dist/{chunk-X6NPTILR.mjs.map → chunk-MQS6AF5K.mjs.map} +1 -1
- package/dist/{chunk-RA4DCRMR.mjs → chunk-MWKI6ZIS.mjs} +3 -3
- package/dist/{chunk-RA4DCRMR.mjs.map → chunk-MWKI6ZIS.mjs.map} +1 -1
- package/dist/{chunk-GKVEWOYN.js → chunk-MYMZRHTC.js} +8 -8
- package/dist/{chunk-GKVEWOYN.js.map → chunk-MYMZRHTC.js.map} +1 -1
- package/dist/{chunk-LUF22UGR.js → chunk-NBT4L2D7.js} +8 -8
- package/dist/{chunk-LUF22UGR.js.map → chunk-NBT4L2D7.js.map} +1 -1
- package/dist/{chunk-SCVSPTXJ.mjs → chunk-NCDF2RK4.mjs} +3 -3
- package/dist/{chunk-SCVSPTXJ.mjs.map → chunk-NCDF2RK4.mjs.map} +1 -1
- package/dist/{chunk-ZTY4YS7Q.js → chunk-NMM27UOF.js} +3 -3
- package/dist/{chunk-ZTY4YS7Q.js.map → chunk-NMM27UOF.js.map} +1 -1
- package/dist/{chunk-ZDXY44FH.js → chunk-NR7YZQRR.js} +4 -4
- package/dist/{chunk-ZDXY44FH.js.map → chunk-NR7YZQRR.js.map} +1 -1
- package/dist/{chunk-PXK4WNSU.js → chunk-PI3FHABB.js} +10 -10
- package/dist/{chunk-PXK4WNSU.js.map → chunk-PI3FHABB.js.map} +1 -1
- package/dist/{chunk-DTWR7VRQ.js → chunk-PIEHBSCN.js} +5 -5
- package/dist/{chunk-DTWR7VRQ.js.map → chunk-PIEHBSCN.js.map} +1 -1
- package/dist/{chunk-OX2GTNMB.mjs → chunk-PIPERXI7.mjs} +3 -3
- package/dist/{chunk-OX2GTNMB.mjs.map → chunk-PIPERXI7.mjs.map} +1 -1
- package/dist/{chunk-FWFJZV52.mjs → chunk-POJZA67T.mjs} +4 -4
- package/dist/{chunk-FWFJZV52.mjs.map → chunk-POJZA67T.mjs.map} +1 -1
- package/dist/{chunk-HOJ4J4X2.mjs → chunk-PQYQHZWV.mjs} +2 -2
- package/dist/{chunk-HOJ4J4X2.mjs.map → chunk-PQYQHZWV.mjs.map} +1 -1
- package/dist/{chunk-YVQNOB3Q.mjs → chunk-QOOLMSBY.mjs} +3 -3
- package/dist/{chunk-YVQNOB3Q.mjs.map → chunk-QOOLMSBY.mjs.map} +1 -1
- package/dist/{chunk-JR2FT6T5.js → chunk-QQQAW6WY.js} +6 -6
- package/dist/{chunk-JR2FT6T5.js.map → chunk-QQQAW6WY.js.map} +1 -1
- package/dist/{chunk-SJPI34DL.mjs → chunk-QXMWNIKL.mjs} +3 -3
- package/dist/{chunk-SJPI34DL.mjs.map → chunk-QXMWNIKL.mjs.map} +1 -1
- package/dist/{chunk-AHKVOYFO.mjs → chunk-R5IPDAMM.mjs} +3 -3
- package/dist/{chunk-AHKVOYFO.mjs.map → chunk-R5IPDAMM.mjs.map} +1 -1
- package/dist/{chunk-RQOKQC7J.mjs → chunk-RFAAY3BW.mjs} +3 -3
- package/dist/{chunk-RQOKQC7J.mjs.map → chunk-RFAAY3BW.mjs.map} +1 -1
- package/dist/{chunk-QK54SZPF.mjs → chunk-ROSYCNXG.mjs} +4 -4
- package/dist/{chunk-QK54SZPF.mjs.map → chunk-ROSYCNXG.mjs.map} +1 -1
- package/dist/{chunk-OBNMSO66.js → chunk-S2Y7LVQ2.js} +14 -14
- package/dist/{chunk-OBNMSO66.js.map → chunk-S2Y7LVQ2.js.map} +1 -1
- package/dist/{chunk-ALVQOG4M.mjs → chunk-SFC3OWSE.mjs} +3 -3
- package/dist/{chunk-ALVQOG4M.mjs.map → chunk-SFC3OWSE.mjs.map} +1 -1
- package/dist/{chunk-F2ZFMPW4.js → chunk-TR3F3CLV.js} +7 -7
- package/dist/{chunk-F2ZFMPW4.js.map → chunk-TR3F3CLV.js.map} +1 -1
- package/dist/{chunk-RI25UGHE.mjs → chunk-UEUWC3PH.mjs} +3 -3
- package/dist/{chunk-RI25UGHE.mjs.map → chunk-UEUWC3PH.mjs.map} +1 -1
- package/dist/{chunk-YC2CKOX6.js → chunk-UHM3CCCC.js} +12 -12
- package/dist/{chunk-YC2CKOX6.js.map → chunk-UHM3CCCC.js.map} +1 -1
- package/dist/{chunk-AUTJQGZ2.mjs → chunk-UQY5KC64.mjs} +4 -4
- package/dist/{chunk-AUTJQGZ2.mjs.map → chunk-UQY5KC64.mjs.map} +1 -1
- package/dist/{chunk-HQ2EPU5R.js → chunk-VVBMWV4O.js} +5 -5
- package/dist/{chunk-HQ2EPU5R.js.map → chunk-VVBMWV4O.js.map} +1 -1
- package/dist/{chunk-KPWK23G7.js → chunk-W2U5SLMY.js} +3 -3
- package/dist/{chunk-KPWK23G7.js.map → chunk-W2U5SLMY.js.map} +1 -1
- package/dist/{chunk-FX232N4P.mjs → chunk-WINDP776.mjs} +4 -4
- package/dist/{chunk-FX232N4P.mjs.map → chunk-WINDP776.mjs.map} +1 -1
- package/dist/chunk-XEB77DQS.js +468 -0
- package/dist/chunk-XEB77DQS.js.map +1 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +57 -57
- package/dist/commerce/index.mjs +5 -5
- package/dist/commerce/server.d.ts +1 -1
- package/dist/commerce/server.js +7 -7
- package/dist/commerce/server.js.map +1 -1
- package/dist/commerce/server.mjs +7 -7
- package/dist/commerce/server.mjs.map +1 -1
- package/dist/engage/index.js +10 -10
- package/dist/engage/index.mjs +7 -7
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +21 -21
- package/dist/forms/index.mjs +10 -10
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +63 -63
- package/dist/index.mjs +9 -9
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/llms/client.d.ts +18 -0
- package/dist/llms/client.d.ts.map +1 -0
- package/dist/llms/client.js +66 -0
- package/dist/llms/client.js.map +1 -0
- package/dist/llms/client.mjs +5 -0
- package/dist/llms/client.mjs.map +1 -0
- package/dist/llms/index.js +58 -462
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +3 -449
- package/dist/llms/index.mjs.map +1 -1
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/ManagedSchema.d.ts.map +1 -1
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +25 -17
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +17 -9
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/server.js +5 -5
- package/dist/seo/server.mjs +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/build-entries.d.ts +6 -0
- package/dist/shared/build-entries.d.ts.map +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/package.json +6 -1
- package/dist/ChatWidget-IRTAMRQS.mjs +0 -15
- package/dist/ChatWidget-KCXQXNUF.js +0 -24
- package/dist/EngageWidget-7AIUJRXV.mjs +0 -12
- package/dist/EngageWidget-EUUZHQOU.js +0 -21
- package/dist/ManagedForm-7IDXBQS6.mjs +0 -16
- package/dist/ManagedForm-RI2TSUZD.js +0 -25
- package/dist/SitemapSync-DWEL7HTB.js +0 -18
- package/dist/SitemapSync-YIAI7PMT.mjs +0 -9
- package/dist/chunk-TAPCWMBV.mjs +0 -6
- package/dist/chunk-TJVZEDE3.js +0 -8
package/dist/cli/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { TITLE_MAX_PX, OG_REPORT_ATTR } from '../chunk-YU7QZ3PP.mjs';
|
|
|
6
6
|
import { require_main } from '../chunk-NNZDWY3L.mjs';
|
|
7
7
|
import { findAppDirForDiscovery, NEXT_PROXY_FILES, NEXT_MIDDLEWARE_FILES, findConventionFile, NEXT_APP_DIRS, findSitemapRoute, findProxyFiles, findNextConfig, findRootLayout, discoverNextJsRoutes, hasPageFile, NEXT_SOURCE_EXTENSIONS } from '../chunk-U2V542EO.mjs';
|
|
8
8
|
import { applyTrailingSlash } from '../chunk-4LYW6PMU.mjs';
|
|
9
|
-
import { SITE_KIT_VERSION } from '../chunk-
|
|
9
|
+
import { SITE_KIT_VERSION } from '../chunk-5FETEH3Y.mjs';
|
|
10
10
|
import { __commonJS, __require, __toESM, __export, __privateAdd, __publicField, __privateGet, __privateMethod, __privateSet, __privateWrapper } from '../chunk-BEXTDHO4.mjs';
|
|
11
11
|
import { EventEmitter } from 'events';
|
|
12
12
|
import childProcess, { execFile as execFile$1, execSync, spawnSync, spawn } from 'child_process';
|
package/dist/client/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkVVBMWV4O_js = require('../chunk-VVBMWV4O.js');
|
|
5
5
|
var chunkHGNSJXWT_js = require('../chunk-HGNSJXWT.js');
|
|
6
6
|
require('../chunk-H5NBFNND.js');
|
|
7
7
|
require('../chunk-SWIKKSKL.js');
|
|
@@ -9,8 +9,8 @@ var chunk3DWIYCQX_js = require('../chunk-3DWIYCQX.js');
|
|
|
9
9
|
var chunkG6WF4G3E_js = require('../chunk-G6WF4G3E.js');
|
|
10
10
|
var chunkRC4WWQXR_js = require('../chunk-RC4WWQXR.js');
|
|
11
11
|
require('../chunk-VJMPIRSD.js');
|
|
12
|
-
require('../chunk-
|
|
13
|
-
require('../chunk-
|
|
12
|
+
require('../chunk-CZEIHFLW.js');
|
|
13
|
+
require('../chunk-7R6H3GQ4.js');
|
|
14
14
|
require('../chunk-SNAQBZPT.js');
|
|
15
15
|
|
|
16
16
|
// src/client/SiteKitCredential.tsx
|
|
@@ -20,7 +20,7 @@ function SiteKitCredential({
|
|
|
20
20
|
site,
|
|
21
21
|
debug
|
|
22
22
|
}) {
|
|
23
|
-
|
|
23
|
+
chunkVVBMWV4O_js.publishSiteCredential({ apiKey, apiUrl, site, debug });
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
26
|
|
package/dist/client/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { publishSiteCredential } from '../chunk-
|
|
2
|
+
import { publishSiteCredential } from '../chunk-SFC3OWSE.mjs';
|
|
3
3
|
export { useDeferredActivation } from '../chunk-ZVBLXXNJ.mjs';
|
|
4
4
|
import '../chunk-JLVCWC6A.mjs';
|
|
5
5
|
import '../chunk-ZN4HBK5C.mjs';
|
|
@@ -7,8 +7,8 @@ export { trackConversion, trackEvent } from '../chunk-SHLWA6JY.mjs';
|
|
|
7
7
|
export { VISUAL_VIEWPORT_GAP_PROPERTY, VisualViewportGap, useVisualViewportGap } from '../chunk-NSWO43XW.mjs';
|
|
8
8
|
export { getOrCreateSessionId, getOrCreateVisitorId, useSiteKitIdentity } from '../chunk-ZZQAGCSI.mjs';
|
|
9
9
|
import '../chunk-6EDVCUAG.mjs';
|
|
10
|
-
import '../chunk-
|
|
11
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-NCDF2RK4.mjs';
|
|
11
|
+
import '../chunk-5FETEH3Y.mjs';
|
|
12
12
|
import '../chunk-BEXTDHO4.mjs';
|
|
13
13
|
|
|
14
14
|
// src/client/SiteKitCredential.tsx
|
package/dist/commerce/index.js
CHANGED
|
@@ -1,228 +1,228 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkS2Y7LVQ2_js = require('../chunk-S2Y7LVQ2.js');
|
|
5
5
|
require('../chunk-3SDMJMN2.js');
|
|
6
|
-
require('../chunk-
|
|
6
|
+
require('../chunk-5HFD36AN.js');
|
|
7
7
|
require('../chunk-3DWIYCQX.js');
|
|
8
8
|
require('../chunk-RC4WWQXR.js');
|
|
9
9
|
require('../chunk-P4Y75QSU.js');
|
|
10
10
|
require('../chunk-VJMPIRSD.js');
|
|
11
11
|
require('../chunk-5RNAUYWE.js');
|
|
12
|
-
require('../chunk-
|
|
13
|
-
require('../chunk-
|
|
14
|
-
require('../chunk-
|
|
12
|
+
require('../chunk-I7HOMMIK.js');
|
|
13
|
+
require('../chunk-CZEIHFLW.js');
|
|
14
|
+
require('../chunk-7R6H3GQ4.js');
|
|
15
15
|
require('../chunk-SNAQBZPT.js');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
Object.defineProperty(exports, "CalendarView", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkS2Y7LVQ2_js.CalendarView; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "CapacityBadge", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkS2Y7LVQ2_js.CapacityBadge; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "CheckoutForm", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkS2Y7LVQ2_js.CheckoutForm; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "EventCalendar", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkS2Y7LVQ2_js.EventCalendar; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "EventCheckout", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkS2Y7LVQ2_js.EventCheckout; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "EventEmbed", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkS2Y7LVQ2_js.EventEmbed; }
|
|
42
42
|
});
|
|
43
43
|
Object.defineProperty(exports, "EventJsonLd", {
|
|
44
44
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkS2Y7LVQ2_js.EventJsonLd; }
|
|
46
46
|
});
|
|
47
47
|
Object.defineProperty(exports, "EventModal", {
|
|
48
48
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkS2Y7LVQ2_js.EventModal; }
|
|
50
50
|
});
|
|
51
51
|
Object.defineProperty(exports, "EventTile", {
|
|
52
52
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkS2Y7LVQ2_js.EventTile; }
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(exports, "EventsAgenda", {
|
|
56
56
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkS2Y7LVQ2_js.EventsAgenda; }
|
|
58
58
|
});
|
|
59
59
|
Object.defineProperty(exports, "EventsWidget", {
|
|
60
60
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkS2Y7LVQ2_js.EventsWidget; }
|
|
62
62
|
});
|
|
63
63
|
Object.defineProperty(exports, "OfferingCard", {
|
|
64
64
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkS2Y7LVQ2_js.OfferingCard; }
|
|
66
66
|
});
|
|
67
67
|
Object.defineProperty(exports, "OfferingList", {
|
|
68
68
|
enumerable: true,
|
|
69
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunkS2Y7LVQ2_js.OfferingList; }
|
|
70
70
|
});
|
|
71
71
|
Object.defineProperty(exports, "ProductDetail", {
|
|
72
72
|
enumerable: true,
|
|
73
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunkS2Y7LVQ2_js.ProductDetail; }
|
|
74
74
|
});
|
|
75
75
|
Object.defineProperty(exports, "ProductEmbed", {
|
|
76
76
|
enumerable: true,
|
|
77
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunkS2Y7LVQ2_js.ProductEmbed; }
|
|
78
78
|
});
|
|
79
79
|
Object.defineProperty(exports, "ProductGrid", {
|
|
80
80
|
enumerable: true,
|
|
81
|
-
get: function () { return
|
|
81
|
+
get: function () { return chunkS2Y7LVQ2_js.ProductGrid; }
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(exports, "ProductPage", {
|
|
84
84
|
enumerable: true,
|
|
85
|
-
get: function () { return
|
|
85
|
+
get: function () { return chunkS2Y7LVQ2_js.ProductPage; }
|
|
86
86
|
});
|
|
87
87
|
Object.defineProperty(exports, "RegistrationForm", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkS2Y7LVQ2_js.RegistrationForm; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "SizeChart", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkS2Y7LVQ2_js.SizeChart; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "UpcomingEvents", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkS2Y7LVQ2_js.UpcomingEvents; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "createCheckoutSession", {
|
|
100
100
|
enumerable: true,
|
|
101
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunkS2Y7LVQ2_js.createCheckoutSession; }
|
|
102
102
|
});
|
|
103
103
|
Object.defineProperty(exports, "createPaymentIntent", {
|
|
104
104
|
enumerable: true,
|
|
105
|
-
get: function () { return
|
|
105
|
+
get: function () { return chunkS2Y7LVQ2_js.createPaymentIntent; }
|
|
106
106
|
});
|
|
107
107
|
Object.defineProperty(exports, "fetchActiveProcessor", {
|
|
108
108
|
enumerable: true,
|
|
109
|
-
get: function () { return
|
|
109
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchActiveProcessor; }
|
|
110
110
|
});
|
|
111
111
|
Object.defineProperty(exports, "fetchCategories", {
|
|
112
112
|
enumerable: true,
|
|
113
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchCategories; }
|
|
114
114
|
});
|
|
115
115
|
Object.defineProperty(exports, "fetchLatestOffering", {
|
|
116
116
|
enumerable: true,
|
|
117
|
-
get: function () { return
|
|
117
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchLatestOffering; }
|
|
118
118
|
});
|
|
119
119
|
Object.defineProperty(exports, "fetchNextEvent", {
|
|
120
120
|
enumerable: true,
|
|
121
|
-
get: function () { return
|
|
121
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchNextEvent; }
|
|
122
122
|
});
|
|
123
123
|
Object.defineProperty(exports, "fetchOffering", {
|
|
124
124
|
enumerable: true,
|
|
125
|
-
get: function () { return
|
|
125
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchOffering; }
|
|
126
126
|
});
|
|
127
127
|
Object.defineProperty(exports, "fetchOfferings", {
|
|
128
128
|
enumerable: true,
|
|
129
|
-
get: function () { return
|
|
129
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchOfferings; }
|
|
130
130
|
});
|
|
131
131
|
Object.defineProperty(exports, "fetchProcessorConfig", {
|
|
132
132
|
enumerable: true,
|
|
133
|
-
get: function () { return
|
|
133
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchProcessorConfig; }
|
|
134
134
|
});
|
|
135
135
|
Object.defineProperty(exports, "fetchProductBySlug", {
|
|
136
136
|
enumerable: true,
|
|
137
|
-
get: function () { return
|
|
137
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchProductBySlug; }
|
|
138
138
|
});
|
|
139
139
|
Object.defineProperty(exports, "fetchProducts", {
|
|
140
140
|
enumerable: true,
|
|
141
|
-
get: function () { return
|
|
141
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchProducts; }
|
|
142
142
|
});
|
|
143
143
|
Object.defineProperty(exports, "fetchProductsPublic", {
|
|
144
144
|
enumerable: true,
|
|
145
|
-
get: function () { return
|
|
145
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchProductsPublic; }
|
|
146
146
|
});
|
|
147
147
|
Object.defineProperty(exports, "fetchServices", {
|
|
148
148
|
enumerable: true,
|
|
149
|
-
get: function () { return
|
|
149
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchServices; }
|
|
150
150
|
});
|
|
151
151
|
Object.defineProperty(exports, "fetchShippingRates", {
|
|
152
152
|
enumerable: true,
|
|
153
|
-
get: function () { return
|
|
153
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchShippingRates; }
|
|
154
154
|
});
|
|
155
155
|
Object.defineProperty(exports, "fetchUpcomingEvents", {
|
|
156
156
|
enumerable: true,
|
|
157
|
-
get: function () { return
|
|
157
|
+
get: function () { return chunkS2Y7LVQ2_js.fetchUpcomingEvents; }
|
|
158
158
|
});
|
|
159
159
|
Object.defineProperty(exports, "formatDate", {
|
|
160
160
|
enumerable: true,
|
|
161
|
-
get: function () { return
|
|
161
|
+
get: function () { return chunkS2Y7LVQ2_js.formatDate; }
|
|
162
162
|
});
|
|
163
163
|
Object.defineProperty(exports, "formatDateRange", {
|
|
164
164
|
enumerable: true,
|
|
165
|
-
get: function () { return
|
|
165
|
+
get: function () { return chunkS2Y7LVQ2_js.formatDateRange; }
|
|
166
166
|
});
|
|
167
167
|
Object.defineProperty(exports, "formatDateTime", {
|
|
168
168
|
enumerable: true,
|
|
169
|
-
get: function () { return
|
|
169
|
+
get: function () { return chunkS2Y7LVQ2_js.formatDateTime; }
|
|
170
170
|
});
|
|
171
171
|
Object.defineProperty(exports, "formatPrice", {
|
|
172
172
|
enumerable: true,
|
|
173
|
-
get: function () { return
|
|
173
|
+
get: function () { return chunkS2Y7LVQ2_js.formatPrice; }
|
|
174
174
|
});
|
|
175
175
|
Object.defineProperty(exports, "formatTime", {
|
|
176
176
|
enumerable: true,
|
|
177
|
-
get: function () { return
|
|
177
|
+
get: function () { return chunkS2Y7LVQ2_js.formatTime; }
|
|
178
178
|
});
|
|
179
179
|
Object.defineProperty(exports, "getOfferingUrl", {
|
|
180
180
|
enumerable: true,
|
|
181
|
-
get: function () { return
|
|
181
|
+
get: function () { return chunkS2Y7LVQ2_js.getOfferingUrl; }
|
|
182
182
|
});
|
|
183
183
|
Object.defineProperty(exports, "getRelativeTimeUntil", {
|
|
184
184
|
enumerable: true,
|
|
185
|
-
get: function () { return
|
|
185
|
+
get: function () { return chunkS2Y7LVQ2_js.getRelativeTimeUntil; }
|
|
186
186
|
});
|
|
187
187
|
Object.defineProperty(exports, "getSpotsRemaining", {
|
|
188
188
|
enumerable: true,
|
|
189
|
-
get: function () { return
|
|
189
|
+
get: function () { return chunkS2Y7LVQ2_js.getSpotsRemaining; }
|
|
190
190
|
});
|
|
191
191
|
Object.defineProperty(exports, "googleCalendarUrl", {
|
|
192
192
|
enumerable: true,
|
|
193
|
-
get: function () { return
|
|
193
|
+
get: function () { return chunkS2Y7LVQ2_js.googleCalendarUrl; }
|
|
194
194
|
});
|
|
195
195
|
Object.defineProperty(exports, "icsForEvent", {
|
|
196
196
|
enumerable: true,
|
|
197
|
-
get: function () { return
|
|
197
|
+
get: function () { return chunkS2Y7LVQ2_js.icsForEvent; }
|
|
198
198
|
});
|
|
199
199
|
Object.defineProperty(exports, "icsResponse", {
|
|
200
200
|
enumerable: true,
|
|
201
|
-
get: function () { return
|
|
201
|
+
get: function () { return chunkS2Y7LVQ2_js.icsResponse; }
|
|
202
202
|
});
|
|
203
203
|
Object.defineProperty(exports, "isEventSoldOut", {
|
|
204
204
|
enumerable: true,
|
|
205
|
-
get: function () { return
|
|
205
|
+
get: function () { return chunkS2Y7LVQ2_js.isEventSoldOut; }
|
|
206
206
|
});
|
|
207
207
|
Object.defineProperty(exports, "registerForEvent", {
|
|
208
208
|
enumerable: true,
|
|
209
|
-
get: function () { return
|
|
209
|
+
get: function () { return chunkS2Y7LVQ2_js.registerForEvent; }
|
|
210
210
|
});
|
|
211
211
|
Object.defineProperty(exports, "shippingSelection", {
|
|
212
212
|
enumerable: true,
|
|
213
|
-
get: function () { return
|
|
213
|
+
get: function () { return chunkS2Y7LVQ2_js.shippingSelection; }
|
|
214
214
|
});
|
|
215
215
|
Object.defineProperty(exports, "useEventModal", {
|
|
216
216
|
enumerable: true,
|
|
217
|
-
get: function () { return
|
|
217
|
+
get: function () { return chunkS2Y7LVQ2_js.useEventModal; }
|
|
218
218
|
});
|
|
219
219
|
Object.defineProperty(exports, "validateAddress", {
|
|
220
220
|
enumerable: true,
|
|
221
|
-
get: function () { return
|
|
221
|
+
get: function () { return chunkS2Y7LVQ2_js.validateAddress; }
|
|
222
222
|
});
|
|
223
223
|
Object.defineProperty(exports, "validateDiscountCode", {
|
|
224
224
|
enumerable: true,
|
|
225
|
-
get: function () { return
|
|
225
|
+
get: function () { return chunkS2Y7LVQ2_js.validateDiscountCode; }
|
|
226
226
|
});
|
|
227
227
|
//# sourceMappingURL=index.js.map
|
|
228
228
|
//# sourceMappingURL=index.js.map
|
package/dist/commerce/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { CalendarView, CapacityBadge, CheckoutForm, EventCalendar, EventCheckout, EventEmbed, EventJsonLd, EventModal, EventTile, EventsAgenda, EventsWidget, OfferingCard, OfferingList, ProductDetail, ProductEmbed, ProductGrid, ProductPage, RegistrationForm, SizeChart, UpcomingEvents, createCheckoutSession, createPaymentIntent, fetchActiveProcessor, fetchCategories, fetchLatestOffering, fetchNextEvent, fetchOffering, fetchOfferings, fetchProcessorConfig, fetchProductBySlug, fetchProducts, fetchProductsPublic, fetchServices, fetchShippingRates, fetchUpcomingEvents, formatDate, formatDateRange, formatDateTime, formatPrice, formatTime, getOfferingUrl, getRelativeTimeUntil, getSpotsRemaining, googleCalendarUrl, icsForEvent, icsResponse, isEventSoldOut, registerForEvent, shippingSelection, useEventModal, validateAddress, validateDiscountCode } from '../chunk-
|
|
2
|
+
export { CalendarView, CapacityBadge, CheckoutForm, EventCalendar, EventCheckout, EventEmbed, EventJsonLd, EventModal, EventTile, EventsAgenda, EventsWidget, OfferingCard, OfferingList, ProductDetail, ProductEmbed, ProductGrid, ProductPage, RegistrationForm, SizeChart, UpcomingEvents, createCheckoutSession, createPaymentIntent, fetchActiveProcessor, fetchCategories, fetchLatestOffering, fetchNextEvent, fetchOffering, fetchOfferings, fetchProcessorConfig, fetchProductBySlug, fetchProducts, fetchProductsPublic, fetchServices, fetchShippingRates, fetchUpcomingEvents, formatDate, formatDateRange, formatDateTime, formatPrice, formatTime, getOfferingUrl, getRelativeTimeUntil, getSpotsRemaining, googleCalendarUrl, icsForEvent, icsResponse, isEventSoldOut, registerForEvent, shippingSelection, useEventModal, validateAddress, validateDiscountCode } from '../chunk-POJZA67T.mjs';
|
|
3
3
|
import '../chunk-64BOVMXG.mjs';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-MQS6AF5K.mjs';
|
|
5
5
|
import '../chunk-SHLWA6JY.mjs';
|
|
6
6
|
import '../chunk-ZZQAGCSI.mjs';
|
|
7
7
|
import '../chunk-5SANRSX3.mjs';
|
|
8
8
|
import '../chunk-6EDVCUAG.mjs';
|
|
9
9
|
import '../chunk-A6UYV475.mjs';
|
|
10
|
-
import '../chunk-
|
|
11
|
-
import '../chunk-
|
|
12
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-4C5CZJIN.mjs';
|
|
11
|
+
import '../chunk-NCDF2RK4.mjs';
|
|
12
|
+
import '../chunk-5FETEH3Y.mjs';
|
|
13
13
|
import '../chunk-BEXTDHO4.mjs';
|
|
14
14
|
//# sourceMappingURL=index.mjs.map
|
|
15
15
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -99,7 +99,7 @@ export declare function getOfferingsResult(config: ServerConfig, options?: {
|
|
|
99
99
|
/**
|
|
100
100
|
* Fetch upcoming events (server-side), WITH schedules and category embedded.
|
|
101
101
|
*
|
|
102
|
-
* Uses POST /public/commerce/events — the same endpoint the client fetcher
|
|
102
|
+
* Uses POST /api/public/commerce/events — the same endpoint the client fetcher
|
|
103
103
|
* uses — because the GET offerings list does NOT embed commerce_schedules,
|
|
104
104
|
* which made this helper return events with empty `schedules[]` and forced
|
|
105
105
|
* sites to hand-roll their own fetcher for any calendar UI (the Ludlow PTO
|
package/dist/commerce/server.js
CHANGED
|
@@ -94,7 +94,7 @@ function transformOffering(data) {
|
|
|
94
94
|
async function getProductPaths(config) {
|
|
95
95
|
const { ok, data } = await apiFetch(
|
|
96
96
|
config,
|
|
97
|
-
`/public/commerce/offerings?type=product&status=active&fields=slug`
|
|
97
|
+
`/api/public/commerce/offerings?type=product&status=active&fields=slug`
|
|
98
98
|
);
|
|
99
99
|
if (!ok) console.error("[site-kit/commerce] getProductPaths failed \u2014 0 product pages will be prerendered");
|
|
100
100
|
if (!data?.offerings) return [];
|
|
@@ -103,7 +103,7 @@ async function getProductPaths(config) {
|
|
|
103
103
|
async function getEventPaths(config) {
|
|
104
104
|
const { ok, data } = await apiFetch(
|
|
105
105
|
config,
|
|
106
|
-
`/public/commerce/offerings?type=event&status=active&fields=slug`
|
|
106
|
+
`/api/public/commerce/offerings?type=event&status=active&fields=slug`
|
|
107
107
|
);
|
|
108
108
|
if (!ok) console.error("[site-kit/commerce] getEventPaths failed \u2014 0 event pages will be prerendered");
|
|
109
109
|
if (!data?.offerings) return [];
|
|
@@ -120,7 +120,7 @@ async function getOfferingPaths(config, type) {
|
|
|
120
120
|
}
|
|
121
121
|
const { ok, data } = await apiFetch(
|
|
122
122
|
config,
|
|
123
|
-
`/public/commerce/offerings?status=active&fields=slug${typeParam}`
|
|
123
|
+
`/api/public/commerce/offerings?status=active&fields=slug${typeParam}`
|
|
124
124
|
);
|
|
125
125
|
if (!ok) console.error("[site-kit/commerce] getOfferingPaths failed \u2014 0 pages will be prerendered");
|
|
126
126
|
if (!data?.offerings) return [];
|
|
@@ -132,7 +132,7 @@ async function getOfferingBySlug(config, slug) {
|
|
|
132
132
|
async function getOfferingBySlugResult(config, slug) {
|
|
133
133
|
const { ok, data } = await apiFetch(
|
|
134
134
|
config,
|
|
135
|
-
`/public/commerce/offerings/${slug}`
|
|
135
|
+
`/api/public/commerce/offerings/${slug}`
|
|
136
136
|
);
|
|
137
137
|
if (!data?.offering) return { ok, data: null };
|
|
138
138
|
return { ok: true, data: transformOffering(data.offering) };
|
|
@@ -158,7 +158,7 @@ async function getOfferingsResult(config, options = {}) {
|
|
|
158
158
|
}
|
|
159
159
|
const { ok, data } = await apiFetch(
|
|
160
160
|
config,
|
|
161
|
-
`/public/commerce/offerings?${params.toString()}`
|
|
161
|
+
`/api/public/commerce/offerings?${params.toString()}`
|
|
162
162
|
);
|
|
163
163
|
if (!data?.offerings) return { ok, data: [] };
|
|
164
164
|
return { ok: true, data: data.offerings.map(transformOffering) };
|
|
@@ -169,7 +169,7 @@ async function getUpcomingEvents(config, options = {}) {
|
|
|
169
169
|
async function getUpcomingEventsResult(config, options = {}) {
|
|
170
170
|
const primary = await apiPost(
|
|
171
171
|
config,
|
|
172
|
-
"/public/commerce/events",
|
|
172
|
+
"/api/public/commerce/events",
|
|
173
173
|
{
|
|
174
174
|
type: "event",
|
|
175
175
|
category: options.category,
|
|
@@ -192,7 +192,7 @@ async function getUpcomingEventsResult(config, options = {}) {
|
|
|
192
192
|
}
|
|
193
193
|
const legacy = await apiFetch(
|
|
194
194
|
config,
|
|
195
|
-
`/public/commerce/offerings?${params.toString()}`
|
|
195
|
+
`/api/public/commerce/offerings?${params.toString()}`
|
|
196
196
|
);
|
|
197
197
|
if (legacy.ok && legacy.data?.offerings) {
|
|
198
198
|
return { ok: true, data: legacy.data.offerings.map(transformOffering) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commerce/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["/**\n * @sonordev/site-kit/commerce - Server-side utilities\n * \n * Helpers for server-side rendering and dynamic routes.\n * Use in Next.js getStaticPaths, getStaticProps, or App Router.\n * \n * All data fetching goes through the Portal API.\n */\n\nimport type { CommerceOffering, OfferingType } from './types'\n\ninterface ServerConfig {\n apiUrl: string\n apiKey: string\n projectId: string\n}\n\ninterface SlugItem {\n slug: string\n}\n\n/**\n * Outcome of a server-side fetch.\n *\n * `ok` is the entire point. A helper that returns an empty array on failure lets\n * the calling page state a business fact it does not know: \"no upcoming events\",\n * \"no products available\" — when the truth is only that the API was unreachable.\n * QCR's /public-cruises told customers the business had no cruises during a\n * transient failure while three were on sale (2026-08-27).\n *\n * Branch on `ok` in new code. The legacy helpers returning a bare array or null\n * are kept for compatibility, but they cannot express this difference — an empty\n * result from them is indistinguishable from an outage.\n */\nexport interface ServerResult<T> {\n /** false = the request failed. `ok: true` with empty data means genuinely empty. */\n ok: boolean\n data: T\n}\n\n/**\n * Next throws to signal control flow, not failure — a DynamicServerError during\n * the static pass means \"this route can't be prerendered\", and redirect()/\n * notFound() throw too. Catching those and returning a failure logs a fake fetch\n * error on every build and makes a real API outage look identical to the\n * framework doing its job. Always rethrow.\n */\nfunction isFrameworkSignal(err: unknown): boolean {\n const digest = (err as { digest?: unknown } | null)?.digest\n return (\n typeof digest === 'string' &&\n (digest === 'DYNAMIC_SERVER_USAGE' || digest.startsWith('NEXT_'))\n )\n}\n\nasync function apiFetch<T>(\n config: ServerConfig,\n endpoint: string,\n): Promise<ServerResult<T | null>> {\n try {\n const response = await fetch(`${config.apiUrl}${endpoint}`, {\n headers: {\n 'X-API-Key': config.apiKey,\n 'X-Project-ID': config.projectId,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n console.error(`[site-kit/commerce] GET ${endpoint} failed: ${response.status}`)\n return { ok: false, data: null }\n }\n return { ok: true, data: (await response.json()) as T }\n } catch (error) {\n if (isFrameworkSignal(error)) throw error\n console.error(`[site-kit/commerce] GET ${endpoint} failed:`, error)\n return { ok: false, data: null }\n }\n}\n\nasync function apiPost<T>(\n config: ServerConfig,\n endpoint: string,\n body: Record<string, unknown>,\n): Promise<ServerResult<T | null>> {\n try {\n const response = await fetch(`${config.apiUrl}${endpoint}`, {\n method: 'POST',\n headers: {\n 'X-API-Key': config.apiKey,\n 'X-Project-ID': config.projectId,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n console.error(`[site-kit/commerce] POST ${endpoint} failed: ${response.status}`)\n return { ok: false, data: null }\n }\n return { ok: true, data: (await response.json()) as T }\n } catch (error) {\n if (isFrameworkSignal(error)) throw error\n console.error(`[site-kit/commerce] POST ${endpoint} failed:`, error)\n return { ok: false, data: null }\n }\n}\n\nfunction transformOffering(data: Record<string, unknown>): CommerceOffering {\n return {\n id: data.id as string,\n project_id: data.project_id as string,\n type: data.type as OfferingType,\n status: data.status as 'draft' | 'active' | 'archived' | 'sold_out',\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string | undefined,\n short_description: data.short_description as string | undefined,\n long_description: data.long_description as string | undefined,\n featured_image_url: data.featured_image_url as string | undefined,\n gallery_images: (data.gallery_image_urls as string[]) || [],\n price_type: (data.price_type as 'fixed' | 'variable' | 'quote' | 'free') || 'fixed',\n price: data.price as number | undefined,\n compare_at_price: data.compare_at_price as number | undefined,\n currency: (data.currency as string) || 'USD',\n price_is_public: (data.price_is_public as boolean) ?? true,\n billing_period: data.billing_period as 'weekly' | 'monthly' | 'quarterly' | 'yearly' | undefined,\n track_inventory: data.track_inventory as boolean | undefined,\n inventory_count: data.inventory_count as number | undefined,\n allow_backorder: data.allow_backorder as boolean | undefined,\n duration_minutes: data.duration_minutes as number | undefined,\n capacity: data.capacity as number | undefined,\n location: data.location as string | undefined,\n is_virtual: data.is_virtual as boolean | undefined,\n virtual_meeting_url: data.virtual_meeting_url as string | undefined,\n requires_booking: data.requires_booking as boolean | undefined,\n booking_lead_time_hours: data.booking_lead_time_hours as number | undefined,\n category: data.category as CommerceOffering['category'],\n category_id: data.category_id as string | undefined,\n tags: (data.tags as string[]) || [],\n seo_title: data.seo_title as string | undefined,\n seo_description: data.seo_description as string | undefined,\n features: (data.features as string[]) || [],\n specifications: (data.specifications as Record<string, string>) || {},\n schedules: (data.schedules as CommerceOffering['schedules']) || [],\n variants: (data.variants as CommerceOffering['variants']) || [],\n created_at: data.created_at as string,\n updated_at: data.updated_at as string,\n }\n}\n\n// ============================================\n// Static Path Generators\n// ============================================\n\n/**\n * Get all product slugs for static generation\n * \n * @example Next.js Pages Router\n * export async function getStaticPaths() {\n * const paths = await getProductPaths(config)\n * return { paths, fallback: 'blocking' }\n * }\n */\nexport async function getProductPaths(config: ServerConfig): Promise<{ params: { slug: string } }[]> {\n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/public/commerce/offerings?type=product&status=active&fields=slug`\n )\n\n // A failed path fetch prerenders ZERO product pages and looks like a healthy\n // build. Say so loudly rather than shipping a site with its catalogue missing.\n if (!ok) console.error('[site-kit/commerce] getProductPaths failed — 0 product pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n/**\n * Get all event slugs for static generation\n */\nexport async function getEventPaths(config: ServerConfig): Promise<{ params: { slug: string } }[]> {\n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/public/commerce/offerings?type=event&status=active&fields=slug`\n )\n\n if (!ok) console.error('[site-kit/commerce] getEventPaths failed — 0 event pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n/**\n * Get all offering slugs for static generation (any type)\n */\nexport async function getOfferingPaths(\n config: ServerConfig,\n type?: OfferingType | OfferingType[]\n): Promise<{ params: { slug: string } }[]> {\n let typeParam = ''\n if (type) {\n if (Array.isArray(type)) {\n typeParam = `&type=${type.join(',')}`\n } else {\n typeParam = `&type=${type}`\n }\n }\n \n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/public/commerce/offerings?status=active&fields=slug${typeParam}`\n )\n\n if (!ok) console.error('[site-kit/commerce] getOfferingPaths failed — 0 pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n// ============================================\n// Data Fetchers\n// ============================================\n\n/**\n * Fetch a single offering by slug (server-side)\n * \n * @example Next.js Pages Router\n * export async function getStaticProps({ params }) {\n * const product = await getOfferingBySlug(config, params.slug)\n * if (!product) return { notFound: true }\n * return { props: { product }, revalidate: 60 }\n * }\n */\nexport async function getOfferingBySlug(\n config: ServerConfig,\n slug: string\n): Promise<CommerceOffering | null> {\n return (await getOfferingBySlugResult(config, slug)).data\n}\n\n/**\n * As getOfferingBySlug, but distinguishes \"no such offering\" (ok: true, null)\n * from \"could not reach the API\" (ok: false, null). Use this before rendering a\n * 404 — a notFound() on a transient failure de-indexes a page that exists.\n */\nexport async function getOfferingBySlugResult(\n config: ServerConfig,\n slug: string\n): Promise<ServerResult<CommerceOffering | null>> {\n const { ok, data } = await apiFetch<{ offering: Record<string, unknown> }>(\n config,\n `/public/commerce/offerings/${slug}`\n )\n\n if (!data?.offering) return { ok, data: null }\n\n return { ok: true, data: transformOffering(data.offering) }\n}\n\n/**\n * Fetch all offerings of a type (server-side)\n */\nexport async function getOfferings(\n config: ServerConfig,\n options: {\n type?: OfferingType | OfferingType[]\n category?: string\n limit?: number\n status?: string\n } = {}\n): Promise<CommerceOffering[]> {\n return (await getOfferingsResult(config, options)).data\n}\n\n/**\n * As getOfferings, but distinguishes an empty catalogue from a failed request.\n * Branch on `ok` before rendering \"nothing available\" copy.\n */\nexport async function getOfferingsResult(\n config: ServerConfig,\n options: {\n type?: OfferingType | OfferingType[]\n category?: string\n limit?: number\n status?: string\n } = {}\n): Promise<ServerResult<CommerceOffering[]>> {\n const params = new URLSearchParams()\n params.set('status', options.status || 'active')\n \n if (options.type) {\n if (Array.isArray(options.type)) {\n params.set('type', options.type.join(','))\n } else {\n params.set('type', options.type)\n }\n }\n \n if (options.category) {\n params.set('category', options.category)\n }\n \n if (options.limit) {\n params.set('limit', options.limit.toString())\n }\n \n const { ok, data } = await apiFetch<{ offerings: Record<string, unknown>[] }>(\n config,\n `/public/commerce/offerings?${params.toString()}`\n )\n\n if (!data?.offerings) return { ok, data: [] }\n\n return { ok: true, data: data.offerings.map(transformOffering) }\n}\n\n/**\n * Fetch upcoming events (server-side), WITH schedules and category embedded.\n *\n * Uses POST /public/commerce/events — the same endpoint the client fetcher\n * uses — because the GET offerings list does NOT embed commerce_schedules,\n * which made this helper return events with empty `schedules[]` and forced\n * sites to hand-roll their own fetcher for any calendar UI (the Ludlow PTO\n * lesson). Falls back to the legacy offerings query if the events endpoint\n * is unavailable (older self-hosted API).\n */\nexport async function getUpcomingEvents(\n config: ServerConfig,\n options: { limit?: number; category?: string } = {}\n): Promise<CommerceOffering[]> {\n return (await getUpcomingEventsResult(config, options)).data\n}\n\n/**\n * As getUpcomingEvents, but tells you whether the list is empty because there is\n * nothing scheduled or because the API could not be reached.\n *\n * ALWAYS prefer this when the UI renders copy like \"no upcoming events\". Doing\n * otherwise is what put \"No public cruises currently on the schedule\" in front\n * of QCR's customers while three cruises were on sale — and, because the page\n * was statically revalidated, cached that claim for the whole revalidate window.\n */\nexport async function getUpcomingEventsResult(\n config: ServerConfig,\n options: { limit?: number; category?: string } = {}\n): Promise<ServerResult<CommerceOffering[]>> {\n const primary = await apiPost<{ events: Record<string, unknown>[] }>(\n config,\n '/public/commerce/events',\n {\n type: 'event',\n category: options.category,\n limit: options.limit,\n includePast: false,\n },\n )\n\n if (primary.ok && primary.data?.events) {\n return { ok: true, data: primary.data.events.map(transformOffering) }\n }\n\n // Legacy fallback: offerings list (no schedules embedded).\n const params = new URLSearchParams()\n params.set('type', 'event')\n params.set('status', 'active')\n params.set('upcoming', 'true')\n\n if (options.category) {\n params.set('category', options.category)\n }\n\n if (options.limit) {\n params.set('limit', options.limit.toString())\n }\n\n const legacy = await apiFetch<{ offerings: Record<string, unknown>[] }>(\n config,\n `/public/commerce/offerings?${params.toString()}`\n )\n\n if (legacy.ok && legacy.data?.offerings) {\n return { ok: true, data: legacy.data.offerings.map(transformOffering) }\n }\n\n // Nothing usable came back. It is only honestly \"empty\" if at least one call\n // actually reached the API; if both failed the caller must not claim empty.\n return { ok: primary.ok || legacy.ok, data: [] }\n}\n\n/**\n * Get next upcoming event (server-side)\n */\nexport async function getNextEvent(\n config: ServerConfig,\n category?: string\n): Promise<CommerceOffering | null> {\n return (await getNextEventResult(config, category)).data\n}\n\n/**\n * As getNextEvent, but distinguishes \"nothing scheduled\" from \"fetch failed\".\n */\nexport async function getNextEventResult(\n config: ServerConfig,\n category?: string\n): Promise<ServerResult<CommerceOffering | null>> {\n const { ok, data } = await getUpcomingEventsResult(config, { limit: 1, category })\n return { ok, data: data[0] || null }\n}\n\n// ============================================\n// Metadata Helpers\n// ============================================\n\n/**\n * Generate page metadata for an offering\n * \n * @example Next.js App Router\n * export async function generateMetadata({ params }) {\n * const product = await getOfferingBySlug(config, params.slug)\n * return generateOfferingMetadata(product, 'https://example.com')\n * }\n */\nexport function generateOfferingMetadata(\n offering: CommerceOffering | null,\n siteUrl: string\n): {\n title: string\n description: string\n openGraph: {\n title: string\n description: string\n images: string[]\n type: string\n url: string\n }\n} | null {\n if (!offering) return null\n \n const title = offering.seo_title || offering.name\n const description = offering.seo_description || offering.short_description || offering.description || ''\n const images = offering.featured_image_url ? [offering.featured_image_url] : []\n \n const typeMap: Record<OfferingType, string> = {\n product: 'product',\n service: 'website',\n event: 'website',\n class: 'website',\n subscription: 'product',\n }\n \n return {\n title,\n description,\n openGraph: {\n title,\n description,\n images,\n type: typeMap[offering.type] || 'website',\n url: `${siteUrl}/${offering.type}s/${offering.slug}`,\n },\n }\n}\n\n// ============================================\n// Export config builder\n// ============================================\n\n/**\n * Create a server config for API calls\n * \n * @param apiUrl - Portal API URL (e.g., 'https://api.sonor.io')\n * @param apiKey - Project API key\n * @param projectId - Project ID\n */\nexport function createServerConfig(\n apiUrl: string,\n apiKey: string,\n projectId: string\n): ServerConfig {\n return { apiUrl, apiKey, projectId }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commerce/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["/**\n * @sonordev/site-kit/commerce - Server-side utilities\n * \n * Helpers for server-side rendering and dynamic routes.\n * Use in Next.js getStaticPaths, getStaticProps, or App Router.\n * \n * All data fetching goes through the Portal API.\n */\n\nimport type { CommerceOffering, OfferingType } from './types'\n\ninterface ServerConfig {\n apiUrl: string\n apiKey: string\n projectId: string\n}\n\ninterface SlugItem {\n slug: string\n}\n\n/**\n * Outcome of a server-side fetch.\n *\n * `ok` is the entire point. A helper that returns an empty array on failure lets\n * the calling page state a business fact it does not know: \"no upcoming events\",\n * \"no products available\" — when the truth is only that the API was unreachable.\n * QCR's /public-cruises told customers the business had no cruises during a\n * transient failure while three were on sale (2026-08-27).\n *\n * Branch on `ok` in new code. The legacy helpers returning a bare array or null\n * are kept for compatibility, but they cannot express this difference — an empty\n * result from them is indistinguishable from an outage.\n */\nexport interface ServerResult<T> {\n /** false = the request failed. `ok: true` with empty data means genuinely empty. */\n ok: boolean\n data: T\n}\n\n/**\n * Next throws to signal control flow, not failure — a DynamicServerError during\n * the static pass means \"this route can't be prerendered\", and redirect()/\n * notFound() throw too. Catching those and returning a failure logs a fake fetch\n * error on every build and makes a real API outage look identical to the\n * framework doing its job. Always rethrow.\n */\nfunction isFrameworkSignal(err: unknown): boolean {\n const digest = (err as { digest?: unknown } | null)?.digest\n return (\n typeof digest === 'string' &&\n (digest === 'DYNAMIC_SERVER_USAGE' || digest.startsWith('NEXT_'))\n )\n}\n\nasync function apiFetch<T>(\n config: ServerConfig,\n endpoint: string,\n): Promise<ServerResult<T | null>> {\n try {\n const response = await fetch(`${config.apiUrl}${endpoint}`, {\n headers: {\n 'X-API-Key': config.apiKey,\n 'X-Project-ID': config.projectId,\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.ok) {\n console.error(`[site-kit/commerce] GET ${endpoint} failed: ${response.status}`)\n return { ok: false, data: null }\n }\n return { ok: true, data: (await response.json()) as T }\n } catch (error) {\n if (isFrameworkSignal(error)) throw error\n console.error(`[site-kit/commerce] GET ${endpoint} failed:`, error)\n return { ok: false, data: null }\n }\n}\n\nasync function apiPost<T>(\n config: ServerConfig,\n endpoint: string,\n body: Record<string, unknown>,\n): Promise<ServerResult<T | null>> {\n try {\n const response = await fetch(`${config.apiUrl}${endpoint}`, {\n method: 'POST',\n headers: {\n 'X-API-Key': config.apiKey,\n 'X-Project-ID': config.projectId,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n console.error(`[site-kit/commerce] POST ${endpoint} failed: ${response.status}`)\n return { ok: false, data: null }\n }\n return { ok: true, data: (await response.json()) as T }\n } catch (error) {\n if (isFrameworkSignal(error)) throw error\n console.error(`[site-kit/commerce] POST ${endpoint} failed:`, error)\n return { ok: false, data: null }\n }\n}\n\nfunction transformOffering(data: Record<string, unknown>): CommerceOffering {\n return {\n id: data.id as string,\n project_id: data.project_id as string,\n type: data.type as OfferingType,\n status: data.status as 'draft' | 'active' | 'archived' | 'sold_out',\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string | undefined,\n short_description: data.short_description as string | undefined,\n long_description: data.long_description as string | undefined,\n featured_image_url: data.featured_image_url as string | undefined,\n gallery_images: (data.gallery_image_urls as string[]) || [],\n price_type: (data.price_type as 'fixed' | 'variable' | 'quote' | 'free') || 'fixed',\n price: data.price as number | undefined,\n compare_at_price: data.compare_at_price as number | undefined,\n currency: (data.currency as string) || 'USD',\n price_is_public: (data.price_is_public as boolean) ?? true,\n billing_period: data.billing_period as 'weekly' | 'monthly' | 'quarterly' | 'yearly' | undefined,\n track_inventory: data.track_inventory as boolean | undefined,\n inventory_count: data.inventory_count as number | undefined,\n allow_backorder: data.allow_backorder as boolean | undefined,\n duration_minutes: data.duration_minutes as number | undefined,\n capacity: data.capacity as number | undefined,\n location: data.location as string | undefined,\n is_virtual: data.is_virtual as boolean | undefined,\n virtual_meeting_url: data.virtual_meeting_url as string | undefined,\n requires_booking: data.requires_booking as boolean | undefined,\n booking_lead_time_hours: data.booking_lead_time_hours as number | undefined,\n category: data.category as CommerceOffering['category'],\n category_id: data.category_id as string | undefined,\n tags: (data.tags as string[]) || [],\n seo_title: data.seo_title as string | undefined,\n seo_description: data.seo_description as string | undefined,\n features: (data.features as string[]) || [],\n specifications: (data.specifications as Record<string, string>) || {},\n schedules: (data.schedules as CommerceOffering['schedules']) || [],\n variants: (data.variants as CommerceOffering['variants']) || [],\n created_at: data.created_at as string,\n updated_at: data.updated_at as string,\n }\n}\n\n// ============================================\n// Static Path Generators\n// ============================================\n\n/**\n * Get all product slugs for static generation\n * \n * @example Next.js Pages Router\n * export async function getStaticPaths() {\n * const paths = await getProductPaths(config)\n * return { paths, fallback: 'blocking' }\n * }\n */\nexport async function getProductPaths(config: ServerConfig): Promise<{ params: { slug: string } }[]> {\n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/api/public/commerce/offerings?type=product&status=active&fields=slug`\n )\n\n // A failed path fetch prerenders ZERO product pages and looks like a healthy\n // build. Say so loudly rather than shipping a site with its catalogue missing.\n if (!ok) console.error('[site-kit/commerce] getProductPaths failed — 0 product pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n/**\n * Get all event slugs for static generation\n */\nexport async function getEventPaths(config: ServerConfig): Promise<{ params: { slug: string } }[]> {\n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/api/public/commerce/offerings?type=event&status=active&fields=slug`\n )\n\n if (!ok) console.error('[site-kit/commerce] getEventPaths failed — 0 event pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n/**\n * Get all offering slugs for static generation (any type)\n */\nexport async function getOfferingPaths(\n config: ServerConfig,\n type?: OfferingType | OfferingType[]\n): Promise<{ params: { slug: string } }[]> {\n let typeParam = ''\n if (type) {\n if (Array.isArray(type)) {\n typeParam = `&type=${type.join(',')}`\n } else {\n typeParam = `&type=${type}`\n }\n }\n \n const { ok, data } = await apiFetch<{ offerings: SlugItem[] }>(\n config,\n `/api/public/commerce/offerings?status=active&fields=slug${typeParam}`\n )\n\n if (!ok) console.error('[site-kit/commerce] getOfferingPaths failed — 0 pages will be prerendered')\n if (!data?.offerings) return []\n\n return data.offerings.map((item: SlugItem) => ({ params: { slug: item.slug } }))\n}\n\n// ============================================\n// Data Fetchers\n// ============================================\n\n/**\n * Fetch a single offering by slug (server-side)\n * \n * @example Next.js Pages Router\n * export async function getStaticProps({ params }) {\n * const product = await getOfferingBySlug(config, params.slug)\n * if (!product) return { notFound: true }\n * return { props: { product }, revalidate: 60 }\n * }\n */\nexport async function getOfferingBySlug(\n config: ServerConfig,\n slug: string\n): Promise<CommerceOffering | null> {\n return (await getOfferingBySlugResult(config, slug)).data\n}\n\n/**\n * As getOfferingBySlug, but distinguishes \"no such offering\" (ok: true, null)\n * from \"could not reach the API\" (ok: false, null). Use this before rendering a\n * 404 — a notFound() on a transient failure de-indexes a page that exists.\n */\nexport async function getOfferingBySlugResult(\n config: ServerConfig,\n slug: string\n): Promise<ServerResult<CommerceOffering | null>> {\n const { ok, data } = await apiFetch<{ offering: Record<string, unknown> }>(\n config,\n `/api/public/commerce/offerings/${slug}`\n )\n\n if (!data?.offering) return { ok, data: null }\n\n return { ok: true, data: transformOffering(data.offering) }\n}\n\n/**\n * Fetch all offerings of a type (server-side)\n */\nexport async function getOfferings(\n config: ServerConfig,\n options: {\n type?: OfferingType | OfferingType[]\n category?: string\n limit?: number\n status?: string\n } = {}\n): Promise<CommerceOffering[]> {\n return (await getOfferingsResult(config, options)).data\n}\n\n/**\n * As getOfferings, but distinguishes an empty catalogue from a failed request.\n * Branch on `ok` before rendering \"nothing available\" copy.\n */\nexport async function getOfferingsResult(\n config: ServerConfig,\n options: {\n type?: OfferingType | OfferingType[]\n category?: string\n limit?: number\n status?: string\n } = {}\n): Promise<ServerResult<CommerceOffering[]>> {\n const params = new URLSearchParams()\n params.set('status', options.status || 'active')\n \n if (options.type) {\n if (Array.isArray(options.type)) {\n params.set('type', options.type.join(','))\n } else {\n params.set('type', options.type)\n }\n }\n \n if (options.category) {\n params.set('category', options.category)\n }\n \n if (options.limit) {\n params.set('limit', options.limit.toString())\n }\n \n const { ok, data } = await apiFetch<{ offerings: Record<string, unknown>[] }>(\n config,\n `/api/public/commerce/offerings?${params.toString()}`\n )\n\n if (!data?.offerings) return { ok, data: [] }\n\n return { ok: true, data: data.offerings.map(transformOffering) }\n}\n\n/**\n * Fetch upcoming events (server-side), WITH schedules and category embedded.\n *\n * Uses POST /api/public/commerce/events — the same endpoint the client fetcher\n * uses — because the GET offerings list does NOT embed commerce_schedules,\n * which made this helper return events with empty `schedules[]` and forced\n * sites to hand-roll their own fetcher for any calendar UI (the Ludlow PTO\n * lesson). Falls back to the legacy offerings query if the events endpoint\n * is unavailable (older self-hosted API).\n */\nexport async function getUpcomingEvents(\n config: ServerConfig,\n options: { limit?: number; category?: string } = {}\n): Promise<CommerceOffering[]> {\n return (await getUpcomingEventsResult(config, options)).data\n}\n\n/**\n * As getUpcomingEvents, but tells you whether the list is empty because there is\n * nothing scheduled or because the API could not be reached.\n *\n * ALWAYS prefer this when the UI renders copy like \"no upcoming events\". Doing\n * otherwise is what put \"No public cruises currently on the schedule\" in front\n * of QCR's customers while three cruises were on sale — and, because the page\n * was statically revalidated, cached that claim for the whole revalidate window.\n */\nexport async function getUpcomingEventsResult(\n config: ServerConfig,\n options: { limit?: number; category?: string } = {}\n): Promise<ServerResult<CommerceOffering[]>> {\n const primary = await apiPost<{ events: Record<string, unknown>[] }>(\n config,\n '/api/public/commerce/events',\n {\n type: 'event',\n category: options.category,\n limit: options.limit,\n includePast: false,\n },\n )\n\n if (primary.ok && primary.data?.events) {\n return { ok: true, data: primary.data.events.map(transformOffering) }\n }\n\n // Legacy fallback: offerings list (no schedules embedded).\n const params = new URLSearchParams()\n params.set('type', 'event')\n params.set('status', 'active')\n params.set('upcoming', 'true')\n\n if (options.category) {\n params.set('category', options.category)\n }\n\n if (options.limit) {\n params.set('limit', options.limit.toString())\n }\n\n const legacy = await apiFetch<{ offerings: Record<string, unknown>[] }>(\n config,\n `/api/public/commerce/offerings?${params.toString()}`\n )\n\n if (legacy.ok && legacy.data?.offerings) {\n return { ok: true, data: legacy.data.offerings.map(transformOffering) }\n }\n\n // Nothing usable came back. It is only honestly \"empty\" if at least one call\n // actually reached the API; if both failed the caller must not claim empty.\n return { ok: primary.ok || legacy.ok, data: [] }\n}\n\n/**\n * Get next upcoming event (server-side)\n */\nexport async function getNextEvent(\n config: ServerConfig,\n category?: string\n): Promise<CommerceOffering | null> {\n return (await getNextEventResult(config, category)).data\n}\n\n/**\n * As getNextEvent, but distinguishes \"nothing scheduled\" from \"fetch failed\".\n */\nexport async function getNextEventResult(\n config: ServerConfig,\n category?: string\n): Promise<ServerResult<CommerceOffering | null>> {\n const { ok, data } = await getUpcomingEventsResult(config, { limit: 1, category })\n return { ok, data: data[0] || null }\n}\n\n// ============================================\n// Metadata Helpers\n// ============================================\n\n/**\n * Generate page metadata for an offering\n * \n * @example Next.js App Router\n * export async function generateMetadata({ params }) {\n * const product = await getOfferingBySlug(config, params.slug)\n * return generateOfferingMetadata(product, 'https://example.com')\n * }\n */\nexport function generateOfferingMetadata(\n offering: CommerceOffering | null,\n siteUrl: string\n): {\n title: string\n description: string\n openGraph: {\n title: string\n description: string\n images: string[]\n type: string\n url: string\n }\n} | null {\n if (!offering) return null\n \n const title = offering.seo_title || offering.name\n const description = offering.seo_description || offering.short_description || offering.description || ''\n const images = offering.featured_image_url ? [offering.featured_image_url] : []\n \n const typeMap: Record<OfferingType, string> = {\n product: 'product',\n service: 'website',\n event: 'website',\n class: 'website',\n subscription: 'product',\n }\n \n return {\n title,\n description,\n openGraph: {\n title,\n description,\n images,\n type: typeMap[offering.type] || 'website',\n url: `${siteUrl}/${offering.type}s/${offering.slug}`,\n },\n }\n}\n\n// ============================================\n// Export config builder\n// ============================================\n\n/**\n * Create a server config for API calls\n * \n * @param apiUrl - Portal API URL (e.g., 'https://api.sonor.io')\n * @param apiKey - Project API key\n * @param projectId - Project ID\n */\nexport function createServerConfig(\n apiUrl: string,\n apiKey: string,\n projectId: string\n): ServerConfig {\n return { apiUrl, apiKey, projectId }\n}\n"]}
|
package/dist/commerce/server.mjs
CHANGED
|
@@ -92,7 +92,7 @@ function transformOffering(data) {
|
|
|
92
92
|
async function getProductPaths(config) {
|
|
93
93
|
const { ok, data } = await apiFetch(
|
|
94
94
|
config,
|
|
95
|
-
`/public/commerce/offerings?type=product&status=active&fields=slug`
|
|
95
|
+
`/api/public/commerce/offerings?type=product&status=active&fields=slug`
|
|
96
96
|
);
|
|
97
97
|
if (!ok) console.error("[site-kit/commerce] getProductPaths failed \u2014 0 product pages will be prerendered");
|
|
98
98
|
if (!data?.offerings) return [];
|
|
@@ -101,7 +101,7 @@ async function getProductPaths(config) {
|
|
|
101
101
|
async function getEventPaths(config) {
|
|
102
102
|
const { ok, data } = await apiFetch(
|
|
103
103
|
config,
|
|
104
|
-
`/public/commerce/offerings?type=event&status=active&fields=slug`
|
|
104
|
+
`/api/public/commerce/offerings?type=event&status=active&fields=slug`
|
|
105
105
|
);
|
|
106
106
|
if (!ok) console.error("[site-kit/commerce] getEventPaths failed \u2014 0 event pages will be prerendered");
|
|
107
107
|
if (!data?.offerings) return [];
|
|
@@ -118,7 +118,7 @@ async function getOfferingPaths(config, type) {
|
|
|
118
118
|
}
|
|
119
119
|
const { ok, data } = await apiFetch(
|
|
120
120
|
config,
|
|
121
|
-
`/public/commerce/offerings?status=active&fields=slug${typeParam}`
|
|
121
|
+
`/api/public/commerce/offerings?status=active&fields=slug${typeParam}`
|
|
122
122
|
);
|
|
123
123
|
if (!ok) console.error("[site-kit/commerce] getOfferingPaths failed \u2014 0 pages will be prerendered");
|
|
124
124
|
if (!data?.offerings) return [];
|
|
@@ -130,7 +130,7 @@ async function getOfferingBySlug(config, slug) {
|
|
|
130
130
|
async function getOfferingBySlugResult(config, slug) {
|
|
131
131
|
const { ok, data } = await apiFetch(
|
|
132
132
|
config,
|
|
133
|
-
`/public/commerce/offerings/${slug}`
|
|
133
|
+
`/api/public/commerce/offerings/${slug}`
|
|
134
134
|
);
|
|
135
135
|
if (!data?.offering) return { ok, data: null };
|
|
136
136
|
return { ok: true, data: transformOffering(data.offering) };
|
|
@@ -156,7 +156,7 @@ async function getOfferingsResult(config, options = {}) {
|
|
|
156
156
|
}
|
|
157
157
|
const { ok, data } = await apiFetch(
|
|
158
158
|
config,
|
|
159
|
-
`/public/commerce/offerings?${params.toString()}`
|
|
159
|
+
`/api/public/commerce/offerings?${params.toString()}`
|
|
160
160
|
);
|
|
161
161
|
if (!data?.offerings) return { ok, data: [] };
|
|
162
162
|
return { ok: true, data: data.offerings.map(transformOffering) };
|
|
@@ -167,7 +167,7 @@ async function getUpcomingEvents(config, options = {}) {
|
|
|
167
167
|
async function getUpcomingEventsResult(config, options = {}) {
|
|
168
168
|
const primary = await apiPost(
|
|
169
169
|
config,
|
|
170
|
-
"/public/commerce/events",
|
|
170
|
+
"/api/public/commerce/events",
|
|
171
171
|
{
|
|
172
172
|
type: "event",
|
|
173
173
|
category: options.category,
|
|
@@ -190,7 +190,7 @@ async function getUpcomingEventsResult(config, options = {}) {
|
|
|
190
190
|
}
|
|
191
191
|
const legacy = await apiFetch(
|
|
192
192
|
config,
|
|
193
|
-
`/public/commerce/offerings?${params.toString()}`
|
|
193
|
+
`/api/public/commerce/offerings?${params.toString()}`
|
|
194
194
|
);
|
|
195
195
|
if (legacy.ok && legacy.data?.offerings) {
|
|
196
196
|
return { ok: true, data: legacy.data.offerings.map(transformOffering) };
|