@uptrademedia/site-kit 1.1.0 → 1.1.2
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/README.md +1 -1
- package/dist/{chunk-6NTMCSHP.js → chunk-53UQPBNI.js} +2 -2
- package/dist/{chunk-6NTMCSHP.js.map → chunk-53UQPBNI.js.map} +1 -1
- package/dist/{chunk-GM2ZDV2B.mjs → chunk-AQWUIXKC.mjs} +4 -3
- package/dist/chunk-AQWUIXKC.mjs.map +1 -0
- package/dist/{chunk-JRCYNWUZ.js → chunk-GHSZWROI.js} +5 -5
- package/dist/{chunk-JRCYNWUZ.js.map → chunk-GHSZWROI.js.map} +1 -1
- package/dist/{chunk-ZG2AGGPZ.js → chunk-HAQGHTGV.js} +3 -3
- package/dist/chunk-HAQGHTGV.js.map +1 -0
- package/dist/{chunk-F6D3L676.js → chunk-HEUULOSC.js} +4 -4
- package/dist/{chunk-F6D3L676.js.map → chunk-HEUULOSC.js.map} +1 -1
- package/dist/{chunk-QT73LSTP.mjs → chunk-HYJHGCYY.mjs} +3 -3
- package/dist/chunk-HYJHGCYY.mjs.map +1 -0
- package/dist/{chunk-WG2SI2UN.mjs → chunk-KG46POJZ.mjs} +2 -2
- package/dist/{chunk-WG2SI2UN.mjs.map → chunk-KG46POJZ.mjs.map} +1 -1
- package/dist/{chunk-SONJCT7Z.mjs → chunk-TI5CH4WT.mjs} +142 -28
- package/dist/chunk-TI5CH4WT.mjs.map +1 -0
- package/dist/{chunk-ASVFZY6X.mjs → chunk-TJUON7TH.mjs} +2 -2
- package/dist/chunk-TJUON7TH.mjs.map +1 -0
- package/dist/{chunk-H5PVDCCM.js → chunk-UENZ4BYN.js} +4 -3
- package/dist/chunk-UENZ4BYN.js.map +1 -0
- package/dist/{chunk-4KKQQRZV.js → chunk-V7QPQBFG.js} +2 -2
- package/dist/chunk-V7QPQBFG.js.map +1 -0
- package/dist/{chunk-WZMRFNJK.mjs → chunk-YT5SBY5W.mjs} +4 -4
- package/dist/{chunk-WZMRFNJK.mjs.map → chunk-YT5SBY5W.mjs.map} +1 -1
- package/dist/{chunk-MVNUEXP3.js → chunk-YZRNC2Z6.js} +142 -28
- package/dist/chunk-YZRNC2Z6.js.map +1 -0
- package/dist/{chunk-35Y3M4ZE.mjs → chunk-ZUYWXUHQ.mjs} +5 -5
- package/dist/{chunk-35Y3M4ZE.mjs.map → chunk-ZUYWXUHQ.mjs.map} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +2 -2
- package/dist/cli/index.mjs.map +1 -1
- package/dist/commerce/index.d.mts +1 -1
- package/dist/commerce/index.d.ts +1 -1
- package/dist/commerce/index.js +40 -40
- package/dist/commerce/index.mjs +1 -1
- package/dist/engage/index.d.mts +2 -1
- package/dist/engage/index.d.ts +2 -1
- package/dist/engage/index.js +4 -4
- package/dist/engage/index.mjs +1 -1
- package/dist/{generators-H6YQQRR4.mjs → generators-EQHJ22YW.mjs} +3 -3
- package/dist/{generators-H6YQQRR4.mjs.map → generators-EQHJ22YW.mjs.map} +1 -1
- package/dist/{generators-HZZLGIUB.js → generators-UXPMVYP4.js} +9 -9
- package/dist/{generators-HZZLGIUB.js.map → generators-UXPMVYP4.js.map} +1 -1
- package/dist/index.d.mts +10 -5
- package/dist/index.d.ts +10 -5
- package/dist/index.js +50 -48
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -18
- package/dist/index.mjs.map +1 -1
- package/dist/redirects/index.d.mts +1 -1
- package/dist/redirects/index.d.ts +1 -1
- package/dist/redirects/index.js +5 -5
- package/dist/redirects/index.mjs +1 -1
- package/dist/{routing-DpR93G8R.d.ts → routing-D311WhuV.d.ts} +1 -1
- package/dist/{routing-yuOiCiAy.d.mts → routing-bTjqOM8S.d.mts} +1 -1
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.d.ts +1 -1
- package/dist/seo/index.js +5 -5
- package/dist/seo/index.mjs +1 -1
- package/dist/seo/server.d.mts +1 -1
- package/dist/seo/server.d.ts +1 -1
- package/dist/seo/server.js +3 -3
- package/dist/seo/server.mjs +1 -1
- package/dist/setup/client.js +3 -3
- package/dist/setup/client.mjs +1 -1
- package/dist/setup/index.js +5 -5
- package/dist/setup/index.mjs +2 -2
- package/dist/setup/server.js +2 -2
- package/dist/setup/server.mjs +1 -1
- package/dist/{useEventModal-BRRT7ZSv.d.ts → useEventModal-CaDHkAMI.d.ts} +3 -1
- package/dist/{useEventModal-NSrCRDlG.d.mts → useEventModal-CfeDPU95.d.mts} +3 -1
- package/package.json +2 -2
- package/dist/chunk-4KKQQRZV.js.map +0 -1
- package/dist/chunk-ASVFZY6X.mjs.map +0 -1
- package/dist/chunk-GM2ZDV2B.mjs.map +0 -1
- package/dist/chunk-H5PVDCCM.js.map +0 -1
- package/dist/chunk-MVNUEXP3.js.map +0 -1
- package/dist/chunk-QT73LSTP.mjs.map +0 -1
- package/dist/chunk-SONJCT7Z.mjs.map +0 -1
- package/dist/chunk-ZG2AGGPZ.js.map +0 -1
|
@@ -3,7 +3,7 @@ import { NextRequest, NextResponse } from 'next/server';
|
|
|
3
3
|
/**
|
|
4
4
|
* Managed Redirects - Next.js Middleware Helper
|
|
5
5
|
*
|
|
6
|
-
* Fetches redirect rules from
|
|
6
|
+
* Fetches redirect rules from Sonor and applies them.
|
|
7
7
|
* Can be used in middleware.ts for server-side redirects.
|
|
8
8
|
*
|
|
9
9
|
* Usage in middleware.ts:
|
|
@@ -3,7 +3,7 @@ import { NextRequest, NextResponse } from 'next/server';
|
|
|
3
3
|
/**
|
|
4
4
|
* Managed Redirects - Next.js Middleware Helper
|
|
5
5
|
*
|
|
6
|
-
* Fetches redirect rules from
|
|
6
|
+
* Fetches redirect rules from Sonor and applies them.
|
|
7
7
|
* Can be used in middleware.ts for server-side redirects.
|
|
8
8
|
*
|
|
9
9
|
* Usage in middleware.ts:
|
package/dist/redirects/index.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkV7QPQBFG_js = require('../chunk-V7QPQBFG.js');
|
|
4
4
|
require('../chunk-ZSMWDLMK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "clearRedirectCache", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkV7QPQBFG_js.clearRedirectCache; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "fetchRedirectRules", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkV7QPQBFG_js.fetchRedirectRules; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "generateNextRedirects", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkV7QPQBFG_js.generateNextRedirects; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "handleManagedRedirects", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkV7QPQBFG_js.handleManagedRedirects; }
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=index.js.map
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
package/dist/redirects/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from '../chunk-
|
|
1
|
+
export { clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from '../chunk-TJUON7TH.mjs';
|
|
2
2
|
import '../chunk-4XPGGLVP.mjs';
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -60,7 +60,7 @@ declare function getRobotsDirective(options: GetRobotsOptions): Promise<RobotsDi
|
|
|
60
60
|
*/
|
|
61
61
|
declare function generateSitemap(options: GetSitemapEntriesOptions): Promise<SitemapEntry[]>;
|
|
62
62
|
/**
|
|
63
|
-
* Register local sitemap entries with
|
|
63
|
+
* Register local sitemap entries with Sonor
|
|
64
64
|
*
|
|
65
65
|
* Call this at build time to sync your local routes to seo_pages.
|
|
66
66
|
* This ensures analytics only tracks real pages.
|
|
@@ -60,7 +60,7 @@ declare function getRobotsDirective(options: GetRobotsOptions): Promise<RobotsDi
|
|
|
60
60
|
*/
|
|
61
61
|
declare function generateSitemap(options: GetSitemapEntriesOptions): Promise<SitemapEntry[]>;
|
|
62
62
|
/**
|
|
63
|
-
* Register local sitemap entries with
|
|
63
|
+
* Register local sitemap entries with Sonor
|
|
64
64
|
*
|
|
65
65
|
* Call this at build time to sync your local routes to seo_pages.
|
|
66
66
|
* This ensures analytics only tracks real pages.
|
package/dist/seo/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { G as GetABVariantOptions, a as ABTestResult, b as GetManagedMetadataOptions, k as ManagedMetadataResult, m as ManagedSchemaProps, h as ManagedFAQProps, i as ManagedInternalLinksProps, f as ManagedContentProps, M as ManagedContentBlock, o as ManagedScriptsProps } from '../types-BF2v5qX3.mjs';
|
|
2
2
|
export { A as ABTest, F as FAQItem, c as GetRedirectOptions, d as GetRobotsOptions, e as GetSitemapEntriesOptions, g as ManagedFAQData, j as ManagedLink, l as ManagedRedirect, n as ManagedScript, R as RedirectResult, p as RobotsDirective, q as SEOPageData, r as SchemaMarkup, s as SitemapEntry, U as UptradeSEOConfig } from '../types-BF2v5qX3.mjs';
|
|
3
|
-
export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-
|
|
3
|
+
export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-bTjqOM8S.mjs';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import 'next';
|
|
6
6
|
|
package/dist/seo/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { G as GetABVariantOptions, a as ABTestResult, b as GetManagedMetadataOptions, k as ManagedMetadataResult, m as ManagedSchemaProps, h as ManagedFAQProps, i as ManagedInternalLinksProps, f as ManagedContentProps, M as ManagedContentBlock, o as ManagedScriptsProps } from '../types-BF2v5qX3.js';
|
|
2
2
|
export { A as ABTest, F as FAQItem, c as GetRedirectOptions, d as GetRobotsOptions, e as GetSitemapEntriesOptions, g as ManagedFAQData, j as ManagedLink, l as ManagedRedirect, n as ManagedScript, R as RedirectResult, p as RobotsDirective, q as SEOPageData, r as SchemaMarkup, s as SitemapEntry, U as UptradeSEOConfig } from '../types-BF2v5qX3.js';
|
|
3
|
-
export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-
|
|
3
|
+
export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-D311WhuV.js';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import 'next';
|
|
6
6
|
|
package/dist/seo/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var chunkG7RSD56P_js = require('../chunk-G7RSD56P.js');
|
|
6
|
-
var
|
|
6
|
+
var chunk53UQPBNI_js = require('../chunk-53UQPBNI.js');
|
|
7
7
|
var chunkFOBATMSH_js = require('../chunk-FOBATMSH.js');
|
|
8
8
|
require('../chunk-ZSMWDLMK.js');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -759,19 +759,19 @@ Object.defineProperty(exports, "SitemapSync", {
|
|
|
759
759
|
});
|
|
760
760
|
Object.defineProperty(exports, "generateSitemap", {
|
|
761
761
|
enumerable: true,
|
|
762
|
-
get: function () { return
|
|
762
|
+
get: function () { return chunk53UQPBNI_js.generateSitemap; }
|
|
763
763
|
});
|
|
764
764
|
Object.defineProperty(exports, "getRedirect", {
|
|
765
765
|
enumerable: true,
|
|
766
|
-
get: function () { return
|
|
766
|
+
get: function () { return chunk53UQPBNI_js.getRedirect; }
|
|
767
767
|
});
|
|
768
768
|
Object.defineProperty(exports, "getRobotsDirective", {
|
|
769
769
|
enumerable: true,
|
|
770
|
-
get: function () { return
|
|
770
|
+
get: function () { return chunk53UQPBNI_js.getRobotsDirective; }
|
|
771
771
|
});
|
|
772
772
|
Object.defineProperty(exports, "isIndexable", {
|
|
773
773
|
enumerable: true,
|
|
774
|
-
get: function () { return
|
|
774
|
+
get: function () { return chunk53UQPBNI_js.isIndexable; }
|
|
775
775
|
});
|
|
776
776
|
Object.defineProperty(exports, "getABTest", {
|
|
777
777
|
enumerable: true,
|
package/dist/seo/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { SitemapSync } from '../chunk-BQOFRBGZ.mjs';
|
|
2
|
-
export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-
|
|
2
|
+
export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-KG46POJZ.mjs';
|
|
3
3
|
import { getSEOPageData, getABTest, recordABImpression, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getContentBlock, getEntities, getManagedScripts } from '../chunk-MLY7AWHG.mjs';
|
|
4
4
|
export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-MLY7AWHG.mjs';
|
|
5
5
|
import '../chunk-4XPGGLVP.mjs';
|
package/dist/seo/server.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { g as generateSitemap, r as registerLocalSitemap } from '../routing-
|
|
1
|
+
export { g as generateSitemap, r as registerLocalSitemap } from '../routing-bTjqOM8S.mjs';
|
|
2
2
|
export { A as ABTest, a as ABTestResult, F as FAQItem, G as GetABVariantOptions, b as GetManagedMetadataOptions, c as GetRedirectOptions, d as GetRobotsOptions, e as GetSitemapEntriesOptions, M as ManagedContentBlock, f as ManagedContentProps, g as ManagedFAQData, h as ManagedFAQProps, i as ManagedInternalLinksProps, j as ManagedLink, k as ManagedMetadataResult, l as ManagedRedirect, m as ManagedSchemaProps, n as ManagedScript, o as ManagedScriptsProps, R as RedirectResult, p as RobotsDirective, S as SEOEntity, q as SEOPageData, r as SchemaMarkup, s as SitemapEntry, U as UptradeSEOConfig } from '../types-BF2v5qX3.mjs';
|
|
3
3
|
import 'next';
|
|
4
4
|
|
package/dist/seo/server.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { g as generateSitemap, r as registerLocalSitemap } from '../routing-
|
|
1
|
+
export { g as generateSitemap, r as registerLocalSitemap } from '../routing-D311WhuV.js';
|
|
2
2
|
export { A as ABTest, a as ABTestResult, F as FAQItem, G as GetABVariantOptions, b as GetManagedMetadataOptions, c as GetRedirectOptions, d as GetRobotsOptions, e as GetSitemapEntriesOptions, M as ManagedContentBlock, f as ManagedContentProps, g as ManagedFAQData, h as ManagedFAQProps, i as ManagedInternalLinksProps, j as ManagedLink, k as ManagedMetadataResult, l as ManagedRedirect, m as ManagedSchemaProps, n as ManagedScript, o as ManagedScriptsProps, R as RedirectResult, p as RobotsDirective, S as SEOEntity, q as SEOPageData, r as SchemaMarkup, s as SitemapEntry, U as UptradeSEOConfig } from '../types-BF2v5qX3.js';
|
|
3
3
|
import 'next';
|
|
4
4
|
|
package/dist/seo/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk53UQPBNI_js = require('../chunk-53UQPBNI.js');
|
|
4
4
|
require('../chunk-FOBATMSH.js');
|
|
5
5
|
require('../chunk-ZSMWDLMK.js');
|
|
6
6
|
var react = require('react');
|
|
@@ -185,11 +185,11 @@ react.cache(async (projectId) => {
|
|
|
185
185
|
|
|
186
186
|
Object.defineProperty(exports, "generateSitemap", {
|
|
187
187
|
enumerable: true,
|
|
188
|
-
get: function () { return
|
|
188
|
+
get: function () { return chunk53UQPBNI_js.generateSitemap; }
|
|
189
189
|
});
|
|
190
190
|
Object.defineProperty(exports, "registerLocalSitemap", {
|
|
191
191
|
enumerable: true,
|
|
192
|
-
get: function () { return
|
|
192
|
+
get: function () { return chunk53UQPBNI_js.registerLocalSitemap; }
|
|
193
193
|
});
|
|
194
194
|
exports.getABTest = getABTest;
|
|
195
195
|
exports.getContentBlock = getContentBlock;
|
package/dist/seo/server.mjs
CHANGED
package/dist/setup/client.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunk5TTUNB63_js = require('../chunk-5TTUNB63.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkGHSZWROI_js = require('../chunk-GHSZWROI.js');
|
|
6
6
|
require('../chunk-ZSMWDLMK.js');
|
|
7
7
|
|
|
8
8
|
|
|
@@ -21,11 +21,11 @@ Object.defineProperty(exports, "getSnippetsByModule", {
|
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "SetupWizard", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkGHSZWROI_js.SetupWizard; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "UptradeSetup", {
|
|
27
27
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkGHSZWROI_js.SetupWizard; }
|
|
29
29
|
});
|
|
30
30
|
//# sourceMappingURL=client.js.map
|
|
31
31
|
//# sourceMappingURL=client.js.map
|
package/dist/setup/client.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export { IntegrationCodeView, generateIntegrationCode, getSnippetsByModule } from '../chunk-TEYPRKYU.mjs';
|
|
3
|
-
export { SetupWizard, SetupWizard as UptradeSetup } from '../chunk-
|
|
3
|
+
export { SetupWizard, SetupWizard as UptradeSetup } from '../chunk-ZUYWXUHQ.mjs';
|
|
4
4
|
import '../chunk-4XPGGLVP.mjs';
|
|
5
5
|
//# sourceMappingURL=client.mjs.map
|
|
6
6
|
//# sourceMappingURL=client.mjs.map
|
package/dist/setup/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunk5TTUNB63_js = require('../chunk-5TTUNB63.js');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkHEUULOSC_js = require('../chunk-HEUULOSC.js');
|
|
5
|
+
var chunkGHSZWROI_js = require('../chunk-GHSZWROI.js');
|
|
6
6
|
require('../chunk-ZSMWDLMK.js');
|
|
7
7
|
|
|
8
8
|
|
|
@@ -21,15 +21,15 @@ Object.defineProperty(exports, "getSnippetsByModule", {
|
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "handleRequest", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkHEUULOSC_js.handleRequest; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "SetupWizard", {
|
|
27
27
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkGHSZWROI_js.SetupWizard; }
|
|
29
29
|
});
|
|
30
30
|
Object.defineProperty(exports, "UptradeSetup", {
|
|
31
31
|
enumerable: true,
|
|
32
|
-
get: function () { return
|
|
32
|
+
get: function () { return chunkGHSZWROI_js.SetupWizard; }
|
|
33
33
|
});
|
|
34
34
|
//# sourceMappingURL=index.js.map
|
|
35
35
|
//# sourceMappingURL=index.js.map
|
package/dist/setup/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { IntegrationCodeView, generateIntegrationCode, getSnippetsByModule } from '../chunk-TEYPRKYU.mjs';
|
|
2
|
-
export { handleRequest } from '../chunk-
|
|
3
|
-
export { SetupWizard, SetupWizard as UptradeSetup } from '../chunk-
|
|
2
|
+
export { handleRequest } from '../chunk-YT5SBY5W.mjs';
|
|
3
|
+
export { SetupWizard, SetupWizard as UptradeSetup } from '../chunk-ZUYWXUHQ.mjs';
|
|
4
4
|
import '../chunk-4XPGGLVP.mjs';
|
|
5
5
|
//# sourceMappingURL=index.mjs.map
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
package/dist/setup/server.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkHEUULOSC_js = require('../chunk-HEUULOSC.js');
|
|
4
4
|
require('../chunk-ZSMWDLMK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "handleRequest", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkHEUULOSC_js.handleRequest; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=server.js.map
|
|
13
13
|
//# sourceMappingURL=server.js.map
|
package/dist/setup/server.mjs
CHANGED
|
@@ -141,6 +141,8 @@ interface CalendarViewProps {
|
|
|
141
141
|
minDate?: Date;
|
|
142
142
|
/** Maximum date to show */
|
|
143
143
|
maxDate?: Date;
|
|
144
|
+
/** How to display events in cells: 'title' = text, 'image' = thumbnail with details on hover */
|
|
145
|
+
eventDisplay?: 'title' | 'image';
|
|
144
146
|
/** Custom class names */
|
|
145
147
|
className?: string;
|
|
146
148
|
headerClassName?: string;
|
|
@@ -152,7 +154,7 @@ interface EventOnDay {
|
|
|
152
154
|
event: CommerceOffering;
|
|
153
155
|
schedule: CommerceSchedule;
|
|
154
156
|
}
|
|
155
|
-
declare function CalendarView({ events: propEvents, initialDate, category, onEventClick, onDayClick, showNavigation, showHeader, weekStartsOn, minDate, maxDate, className, headerClassName, dayClassName, eventClassName, todayClassName, }: CalendarViewProps): react_jsx_runtime.JSX.Element;
|
|
157
|
+
declare function CalendarView({ events: propEvents, initialDate, category, onEventClick, onDayClick, showNavigation, showHeader, weekStartsOn, minDate, maxDate, eventDisplay, className, headerClassName, dayClassName, eventClassName, todayClassName, }: CalendarViewProps): react_jsx_runtime.JSX.Element;
|
|
156
158
|
|
|
157
159
|
interface EventModalProps {
|
|
158
160
|
/** Event to display */
|
|
@@ -141,6 +141,8 @@ interface CalendarViewProps {
|
|
|
141
141
|
minDate?: Date;
|
|
142
142
|
/** Maximum date to show */
|
|
143
143
|
maxDate?: Date;
|
|
144
|
+
/** How to display events in cells: 'title' = text, 'image' = thumbnail with details on hover */
|
|
145
|
+
eventDisplay?: 'title' | 'image';
|
|
144
146
|
/** Custom class names */
|
|
145
147
|
className?: string;
|
|
146
148
|
headerClassName?: string;
|
|
@@ -152,7 +154,7 @@ interface EventOnDay {
|
|
|
152
154
|
event: CommerceOffering;
|
|
153
155
|
schedule: CommerceSchedule;
|
|
154
156
|
}
|
|
155
|
-
declare function CalendarView({ events: propEvents, initialDate, category, onEventClick, onDayClick, showNavigation, showHeader, weekStartsOn, minDate, maxDate, className, headerClassName, dayClassName, eventClassName, todayClassName, }: CalendarViewProps): react_jsx_runtime.JSX.Element;
|
|
157
|
+
declare function CalendarView({ events: propEvents, initialDate, category, onEventClick, onDayClick, showNavigation, showHeader, weekStartsOn, minDate, maxDate, eventDisplay, className, headerClassName, dayClassName, eventClassName, todayClassName, }: CalendarViewProps): react_jsx_runtime.JSX.Element;
|
|
156
158
|
|
|
157
159
|
interface EventModalProps {
|
|
158
160
|
/** Event to display */
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uptrademedia/site-kit",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Complete client-side integration kit for
|
|
3
|
+
"version": "1.1.2",
|
|
4
|
+
"description": "Complete client-side integration kit for Sonor - SEO, Analytics, Engage, Forms, Blog",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/redirects/index.ts"],"names":["NextResponse"],"mappings":"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","file":"chunk-4KKQQRZV.js","sourcesContent":["/**\n * Managed Redirects - Next.js Middleware Helper\n * \n * Fetches redirect rules from Uptrade Portal and applies them.\n * Can be used in middleware.ts for server-side redirects.\n * \n * Usage in middleware.ts:\n * \n * import { handleManagedRedirects } from '@uptrade/site-kit/redirects'\n * \n * export async function middleware(request: NextRequest) {\n * const redirect = await handleManagedRedirects(request, {\n * domain: 'example.com', // Your site's domain (without https://)\n * portalApiUrl: process.env.PORTAL_API_URL || 'https://api.uptrademedia.com',\n * })\n * \n * if (redirect) return redirect\n * \n * return NextResponse.next()\n * }\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\n\nexport interface RedirectRule {\n from_path: string\n to_path: string\n redirect_type: '301' | '302' | '307' | '308'\n is_enabled: boolean\n}\n\nexport interface RedirectConfig {\n domain: string // Required: the domain to fetch redirects for\n portalApiUrl?: string\n cacheSeconds?: number\n}\n\n// Cache for redirect rules\nlet cachedRules: RedirectRule[] = []\nlet cacheExpiry = 0\n\n/**\n * Fetch redirect rules from Portal API\n */\nexport async function fetchRedirectRules(config: RedirectConfig): Promise<RedirectRule[]> {\n const now = Date.now()\n const cacheSeconds = config.cacheSeconds ?? 300 // 5 min default\n\n // Return cached if still valid\n if (cachedRules.length > 0 && now < cacheExpiry) {\n return cachedRules\n }\n\n try {\n const baseUrl = config.portalApiUrl || 'https://api.uptrademedia.com'\n // Use domain-based lookup from public endpoint (no auth required)\n const domain = config.domain || ''\n const url = `${baseUrl}/api/public/seo/redirects?domain=${encodeURIComponent(domain)}`\n\n const res = await fetch(url, {\n headers: { 'Content-Type': 'application/json' },\n next: { revalidate: cacheSeconds },\n })\n\n if (!res.ok) {\n console.error(`[site-kit] Failed to fetch redirects: ${res.status}`)\n return cachedRules\n }\n\n const data = await res.json()\n cachedRules = (data.redirects || []).filter((r: RedirectRule) => r.is_enabled)\n cacheExpiry = now + (cacheSeconds * 1000)\n \n return cachedRules\n } catch (error) {\n console.error('[site-kit] Error fetching redirects:', error)\n return cachedRules\n }\n}\n\n/**\n * Handle managed redirects in middleware\n * Returns a NextResponse.redirect if a match is found, otherwise undefined\n */\nexport async function handleManagedRedirects(\n request: NextRequest,\n config: RedirectConfig,\n): Promise<NextResponse | undefined> {\n const pathname = request.nextUrl.pathname\n \n // Skip for static assets and API routes\n if (\n pathname.startsWith('/_next') ||\n pathname.startsWith('/api') ||\n pathname.includes('.') // Has file extension\n ) {\n return undefined\n }\n\n const rules = await fetchRedirectRules(config)\n \n // Find matching redirect\n const match = rules.find(r => {\n // Exact match\n if (r.from_path === pathname) return true\n \n // Match with trailing slash variance\n const normalizedFrom = r.from_path.endsWith('/') \n ? r.from_path.slice(0, -1) \n : r.from_path\n const normalizedPath = pathname.endsWith('/') \n ? pathname.slice(0, -1) \n : pathname\n \n return normalizedFrom === normalizedPath\n })\n\n if (!match) {\n return undefined\n }\n\n // Build redirect URL\n const redirectUrl = new URL(match.to_path, request.url)\n \n // Preserve query params\n request.nextUrl.searchParams.forEach((value, key) => {\n redirectUrl.searchParams.set(key, value)\n })\n\n // Track hit (fire and forget)\n trackRedirectHit(config, match.from_path).catch(() => {})\n\n // Return redirect response\n const statusCode = parseInt(match.redirect_type) as 301 | 302 | 307 | 308\n return NextResponse.redirect(redirectUrl, statusCode)\n}\n\n/**\n * Track redirect hit for analytics\n */\nasync function trackRedirectHit(config: RedirectConfig, fromPath: string): Promise<void> {\n try {\n const baseUrl = config.portalApiUrl || 'https://api.uptrademedia.com'\n await fetch(`${baseUrl}/api/public/seo/redirects/hit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ domain: config.domain, from_path: fromPath }),\n })\n } catch {\n // Ignore tracking errors\n }\n}\n\n/**\n * Generate Next.js redirects config from Portal\n * Use this in next.config.js for build-time redirects\n * \n * Usage in next.config.js:\n * \n * const { generateNextRedirects } = require('@uptrade/site-kit/redirects')\n * \n * module.exports = {\n * async redirects() {\n * return generateNextRedirects({\n * domain: 'example.com',\n * portalApiUrl: process.env.PORTAL_API_URL,\n * })\n * }\n * }\n */\nexport async function generateNextRedirects(config: RedirectConfig): Promise<Array<{\n source: string\n destination: string\n permanent: boolean\n}>> {\n const rules = await fetchRedirectRules({ ...config, cacheSeconds: 0 })\n \n return rules.map(r => ({\n source: r.from_path,\n destination: r.to_path,\n permanent: r.redirect_type === '301' || r.redirect_type === '308',\n }))\n}\n\n/**\n * Clear redirect cache (useful for development)\n */\nexport function clearRedirectCache(): void {\n cachedRules = []\n cacheExpiry = 0\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/redirects/index.ts"],"names":[],"mappings":"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","file":"chunk-ASVFZY6X.mjs","sourcesContent":["/**\n * Managed Redirects - Next.js Middleware Helper\n * \n * Fetches redirect rules from Uptrade Portal and applies them.\n * Can be used in middleware.ts for server-side redirects.\n * \n * Usage in middleware.ts:\n * \n * import { handleManagedRedirects } from '@uptrade/site-kit/redirects'\n * \n * export async function middleware(request: NextRequest) {\n * const redirect = await handleManagedRedirects(request, {\n * domain: 'example.com', // Your site's domain (without https://)\n * portalApiUrl: process.env.PORTAL_API_URL || 'https://api.uptrademedia.com',\n * })\n * \n * if (redirect) return redirect\n * \n * return NextResponse.next()\n * }\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\n\nexport interface RedirectRule {\n from_path: string\n to_path: string\n redirect_type: '301' | '302' | '307' | '308'\n is_enabled: boolean\n}\n\nexport interface RedirectConfig {\n domain: string // Required: the domain to fetch redirects for\n portalApiUrl?: string\n cacheSeconds?: number\n}\n\n// Cache for redirect rules\nlet cachedRules: RedirectRule[] = []\nlet cacheExpiry = 0\n\n/**\n * Fetch redirect rules from Portal API\n */\nexport async function fetchRedirectRules(config: RedirectConfig): Promise<RedirectRule[]> {\n const now = Date.now()\n const cacheSeconds = config.cacheSeconds ?? 300 // 5 min default\n\n // Return cached if still valid\n if (cachedRules.length > 0 && now < cacheExpiry) {\n return cachedRules\n }\n\n try {\n const baseUrl = config.portalApiUrl || 'https://api.uptrademedia.com'\n // Use domain-based lookup from public endpoint (no auth required)\n const domain = config.domain || ''\n const url = `${baseUrl}/api/public/seo/redirects?domain=${encodeURIComponent(domain)}`\n\n const res = await fetch(url, {\n headers: { 'Content-Type': 'application/json' },\n next: { revalidate: cacheSeconds },\n })\n\n if (!res.ok) {\n console.error(`[site-kit] Failed to fetch redirects: ${res.status}`)\n return cachedRules\n }\n\n const data = await res.json()\n cachedRules = (data.redirects || []).filter((r: RedirectRule) => r.is_enabled)\n cacheExpiry = now + (cacheSeconds * 1000)\n \n return cachedRules\n } catch (error) {\n console.error('[site-kit] Error fetching redirects:', error)\n return cachedRules\n }\n}\n\n/**\n * Handle managed redirects in middleware\n * Returns a NextResponse.redirect if a match is found, otherwise undefined\n */\nexport async function handleManagedRedirects(\n request: NextRequest,\n config: RedirectConfig,\n): Promise<NextResponse | undefined> {\n const pathname = request.nextUrl.pathname\n \n // Skip for static assets and API routes\n if (\n pathname.startsWith('/_next') ||\n pathname.startsWith('/api') ||\n pathname.includes('.') // Has file extension\n ) {\n return undefined\n }\n\n const rules = await fetchRedirectRules(config)\n \n // Find matching redirect\n const match = rules.find(r => {\n // Exact match\n if (r.from_path === pathname) return true\n \n // Match with trailing slash variance\n const normalizedFrom = r.from_path.endsWith('/') \n ? r.from_path.slice(0, -1) \n : r.from_path\n const normalizedPath = pathname.endsWith('/') \n ? pathname.slice(0, -1) \n : pathname\n \n return normalizedFrom === normalizedPath\n })\n\n if (!match) {\n return undefined\n }\n\n // Build redirect URL\n const redirectUrl = new URL(match.to_path, request.url)\n \n // Preserve query params\n request.nextUrl.searchParams.forEach((value, key) => {\n redirectUrl.searchParams.set(key, value)\n })\n\n // Track hit (fire and forget)\n trackRedirectHit(config, match.from_path).catch(() => {})\n\n // Return redirect response\n const statusCode = parseInt(match.redirect_type) as 301 | 302 | 307 | 308\n return NextResponse.redirect(redirectUrl, statusCode)\n}\n\n/**\n * Track redirect hit for analytics\n */\nasync function trackRedirectHit(config: RedirectConfig, fromPath: string): Promise<void> {\n try {\n const baseUrl = config.portalApiUrl || 'https://api.uptrademedia.com'\n await fetch(`${baseUrl}/api/public/seo/redirects/hit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ domain: config.domain, from_path: fromPath }),\n })\n } catch {\n // Ignore tracking errors\n }\n}\n\n/**\n * Generate Next.js redirects config from Portal\n * Use this in next.config.js for build-time redirects\n * \n * Usage in next.config.js:\n * \n * const { generateNextRedirects } = require('@uptrade/site-kit/redirects')\n * \n * module.exports = {\n * async redirects() {\n * return generateNextRedirects({\n * domain: 'example.com',\n * portalApiUrl: process.env.PORTAL_API_URL,\n * })\n * }\n * }\n */\nexport async function generateNextRedirects(config: RedirectConfig): Promise<Array<{\n source: string\n destination: string\n permanent: boolean\n}>> {\n const rules = await fetchRedirectRules({ ...config, cacheSeconds: 0 })\n \n return rules.map(r => ({\n source: r.from_path,\n destination: r.to_path,\n permanent: r.redirect_type === '301' || r.redirect_type === '308',\n }))\n}\n\n/**\n * Clear redirect cache (useful for development)\n */\nexport function clearRedirectCache(): void {\n cachedRules = []\n cacheExpiry = 0\n}\n"]}
|