@rovela-ai/sdk 0.5.5 → 0.5.7
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/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +13 -2
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/seo.d.ts +33 -0
- package/dist/core/seo.d.ts.map +1 -1
- package/dist/core/seo.js +72 -8
- package/dist/core/seo.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAW7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAmJD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAuB,EAClC,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"AdminNav.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAW7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAmJD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAuB,EAClC,IAAI,EACJ,QAAc,EACd,SAAc,GACf,EAAE,aAAa,2CAmLf"}
|
|
@@ -11,7 +11,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
11
11
|
*/
|
|
12
12
|
import React from 'react';
|
|
13
13
|
import { usePathname } from 'next/navigation';
|
|
14
|
-
import { LayoutDashboard, Package, FolderOpen, ClipboardList, Users, UserCog, Settings, ExternalLink, Truck, CreditCard, Tag, Receipt, BarChart3 } from 'lucide-react';
|
|
14
|
+
import { LayoutDashboard, Package, FolderOpen, ClipboardList, Users, UserCog, Settings, ExternalLink, Truck, CreditCard, Tag, Receipt, BarChart3, Pencil } from 'lucide-react';
|
|
15
15
|
import { useStoreSettingsOptional } from '../../core';
|
|
16
16
|
import { useAdminAuth } from '../hooks/useAdminAuth';
|
|
17
17
|
import { AdminUserMenu } from './AdminUserMenu';
|
|
@@ -128,6 +128,17 @@ export function AdminNav({ activeNav, items, storeName: storeNameProp = 'Admin',
|
|
|
128
128
|
// AdminNav is mounted outside a SessionProvider — useAdminAuth defends
|
|
129
129
|
// against that and returns `{ admin: null }`.
|
|
130
130
|
const { admin } = useAdminAuth();
|
|
131
|
+
// Deep-link back to the Rovela editor (/generate/[id]) so the merchant has a
|
|
132
|
+
// clean Manage ↔ Edit loop from the admin sidebar. Only rendered when
|
|
133
|
+
// NEXT_PUBLIC_ROVELA_PROJECT_ID is set (present on every store rebuilt since
|
|
134
|
+
// buildStoreEnvVars started emitting it); older stores show nothing. These
|
|
135
|
+
// must be literal `process.env.NEXT_PUBLIC_*` reads so the consuming store's
|
|
136
|
+
// Next.js build statically inlines them. Base falls back to prod rovela.ai.
|
|
137
|
+
const rovelaProjectId = process.env.NEXT_PUBLIC_ROVELA_PROJECT_ID;
|
|
138
|
+
const rovelaBase = process.env.NEXT_PUBLIC_ROVELA_URL || 'https://rovela.ai';
|
|
139
|
+
const editStoreUrl = rovelaProjectId
|
|
140
|
+
? `${rovelaBase.replace(/\/$/, '')}/generate/${rovelaProjectId}`
|
|
141
|
+
: null;
|
|
131
142
|
// Auto-detect active nav from pathname when not explicitly provided
|
|
132
143
|
const pathname = usePathname();
|
|
133
144
|
const resolvedActiveNav = activeNav ?? (() => {
|
|
@@ -179,6 +190,6 @@ export function AdminNav({ activeNav, items, storeName: storeNameProp = 'Admin',
|
|
|
179
190
|
// Logo image from environment variable
|
|
180
191
|
_jsxs("a", { href: "/admin", className: "admin-sidebar-header-link", children: [_jsx("img", { src: logoUrl, alt: storeName, className: "admin-sidebar-logo" }), _jsxs("div", { className: "admin-sidebar-header-text", children: [_jsx("span", { className: "admin-sidebar-store-name", children: storeName }), _jsx("span", { className: "admin-sidebar-subtitle", children: "Admin Panel" })] })] })) : (
|
|
181
192
|
// Fallback: Store initial badge
|
|
182
|
-
_jsxs(_Fragment, { children: [_jsx("div", { className: "admin-sidebar-badge", children: storeName.charAt(0).toUpperCase() }), _jsxs("div", { className: "admin-sidebar-header-text", children: [_jsx("span", { className: "admin-sidebar-store-name", children: storeName }), _jsx("span", { className: "admin-sidebar-subtitle", children: "Admin Panel" })] })] }))) }), _jsx("div", { className: "admin-sidebar-nav", children: _jsx("div", { className: "admin-sidebar-groups", children: navGroups.map((group) => (_jsxs("div", { className: "admin-sidebar-section", children: [_jsx("p", { className: "admin-sidebar-section-title", children: group.label }), _jsx("ul", { className: "admin-sidebar-items", children: group.items.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive: resolvedActiveNav === item.id }) }, item.id))) })] }, group.label))) }) }), _jsx("div", { className: "admin-sidebar-footer", children: _jsxs("div", { className: "admin-sidebar-footer-content", children: [_jsx(NavItemButton, { item: settingsItem, isActive: resolvedActiveNav === 'settings' }), _jsxs("a", { href: storeUrl, target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-link", children: [_jsx(ExternalLink, { className: "admin-sidebar-item-icon" }), "View Store"] }), _jsx("div", { className: "admin-sidebar-user-menu", children: _jsx(AdminUserMenu, {}) }), _jsxs("a", { href: "https://rovela.ai", target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-powered-by", children: [_jsx("span", { children: "Powered by" }), _jsx(RovelaLogo, { className: "admin-rovela-logo" }), _jsx("span", { className: "admin-powered-by-name", children: "Rovela" })] })] }) })] }));
|
|
193
|
+
_jsxs(_Fragment, { children: [_jsx("div", { className: "admin-sidebar-badge", children: storeName.charAt(0).toUpperCase() }), _jsxs("div", { className: "admin-sidebar-header-text", children: [_jsx("span", { className: "admin-sidebar-store-name", children: storeName }), _jsx("span", { className: "admin-sidebar-subtitle", children: "Admin Panel" })] })] }))) }), _jsx("div", { className: "admin-sidebar-nav", children: _jsx("div", { className: "admin-sidebar-groups", children: navGroups.map((group) => (_jsxs("div", { className: "admin-sidebar-section", children: [_jsx("p", { className: "admin-sidebar-section-title", children: group.label }), _jsx("ul", { className: "admin-sidebar-items", children: group.items.map((item) => (_jsx("li", { children: _jsx(NavItemButton, { item: item, isActive: resolvedActiveNav === item.id }) }, item.id))) })] }, group.label))) }) }), _jsx("div", { className: "admin-sidebar-footer", children: _jsxs("div", { className: "admin-sidebar-footer-content", children: [_jsx(NavItemButton, { item: settingsItem, isActive: resolvedActiveNav === 'settings' }), editStoreUrl && (_jsxs("a", { href: editStoreUrl, target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-link", children: [_jsx(Pencil, { className: "admin-sidebar-item-icon" }), "Edit Store"] })), _jsxs("a", { href: storeUrl, target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-link", children: [_jsx(ExternalLink, { className: "admin-sidebar-item-icon" }), "View Store"] }), _jsx("div", { className: "admin-sidebar-user-menu", children: _jsx(AdminUserMenu, {}) }), _jsxs("a", { href: "https://rovela.ai", target: "_blank", rel: "noopener noreferrer", className: "admin-sidebar-powered-by", children: [_jsx("span", { children: "Powered by" }), _jsx(RovelaLogo, { className: "admin-rovela-logo" }), _jsx("span", { className: "admin-powered-by-name", children: "Rovela" })] })] }) })] }));
|
|
183
194
|
}
|
|
184
195
|
//# sourceMappingURL=AdminNav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAO,KAAyB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"AdminNav.js","sourceRoot":"","sources":["../../../src/admin/components/AdminNav.tsx"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -19,6 +19,6 @@ export { StoreSettingsProvider, useStoreSettings, useStoreSettingsOptional, } fr
|
|
|
19
19
|
export type { StoreSettings, StoreSettingsContextValue, StoreSettingsProviderProps, } from './StoreSettingsProvider';
|
|
20
20
|
export { cn, formatPrice, parsePrice, getCurrencySymbol, generateSlug, generateSKU, formatDate, formatRelativeTime, truncate, capitalize, titleCase, clamp, percentage, isValidEmail, isValidPhone, compact, pick, omit, sleep, retry, } from './utils';
|
|
21
21
|
export type { FormatPriceOptions } from './utils';
|
|
22
|
-
export { serializeJsonLd, stripHtml, buildProductJsonLd, buildStoreJsonLdGraph, } from './seo';
|
|
23
|
-
export type { ProductSeoInput, StoreSeoContext, AggregateRatingInput, } from './seo';
|
|
22
|
+
export { serializeJsonLd, stripHtml, buildProductJsonLd, buildStoreJsonLdGraph, buildBreadcrumbJsonLd, buildFaqJsonLd, } from './seo';
|
|
23
|
+
export type { ProductSeoInput, StoreSeoContext, AggregateRatingInput, ReturnPolicyInput, } from './seo';
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,cAAc,SAAS,CAAA;AAGvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAEhC,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAEL,EAAE,EAEF,WAAW,EACX,UAAU,EACV,iBAAiB,EAEjB,YAAY,EAEZ,WAAW,EAEX,UAAU,EACV,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,SAAS,EAET,KAAK,EACL,UAAU,EAEV,YAAY,EACZ,YAAY,EAEZ,OAAO,EACP,IAAI,EACJ,IAAI,EAEJ,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,EACL,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,cAAc,SAAS,CAAA;AAGvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAEhC,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAEL,EAAE,EAEF,WAAW,EACX,UAAU,EACV,iBAAiB,EAEjB,YAAY,EAEZ,WAAW,EAEX,UAAU,EACV,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,SAAS,EAET,KAAK,EACL,UAAU,EAEV,YAAY,EACZ,YAAY,EAEZ,OAAO,EACP,IAAI,EACJ,IAAI,EAEJ,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,EACL,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACf,MAAM,OAAO,CAAA;AACd,YAAY,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,OAAO,CAAA"}
|
package/dist/core/index.js
CHANGED
|
@@ -41,5 +41,5 @@ compact, pick, omit,
|
|
|
41
41
|
// Async utilities
|
|
42
42
|
sleep, retry, } from './utils';
|
|
43
43
|
// SEO / JSON-LD builders (pure, server-safe) — see ./seo
|
|
44
|
-
export { serializeJsonLd, stripHtml, buildProductJsonLd, buildStoreJsonLdGraph, } from './seo';
|
|
44
|
+
export { serializeJsonLd, stripHtml, buildProductJsonLd, buildStoreJsonLdGraph, buildBreadcrumbJsonLd, buildFaqJsonLd, } from './seo';
|
|
45
45
|
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,cAAc,SAAS,CAAA;AAEvB,kDAAkD;AAClD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAQhC,qCAAqC;AACrC,OAAO;AACL,cAAc;AACd,EAAE;AACF,mBAAmB;AACnB,WAAW,EACX,UAAU,EACV,iBAAiB;AACjB,kBAAkB;AAClB,YAAY;AACZ,iBAAiB;AACjB,WAAW;AACX,kBAAkB;AAClB,UAAU,EACV,kBAAkB;AAClB,mBAAmB;AACnB,QAAQ,EACR,UAAU,EACV,SAAS;AACT,mBAAmB;AACnB,KAAK,EACL,UAAU;AACV,aAAa;AACb,YAAY,EACZ,YAAY;AACZ,mBAAmB;AACnB,OAAO,EACP,IAAI,EACJ,IAAI;AACJ,kBAAkB;AAClB,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAIhB,yDAAyD;AACzD,OAAO,EACL,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,cAAc,SAAS,CAAA;AAEvB,kDAAkD;AAClD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAQhC,qCAAqC;AACrC,OAAO;AACL,cAAc;AACd,EAAE;AACF,mBAAmB;AACnB,WAAW,EACX,UAAU,EACV,iBAAiB;AACjB,kBAAkB;AAClB,YAAY;AACZ,iBAAiB;AACjB,WAAW;AACX,kBAAkB;AAClB,UAAU,EACV,kBAAkB;AAClB,mBAAmB;AACnB,QAAQ,EACR,UAAU,EACV,SAAS;AACT,mBAAmB;AACnB,KAAK,EACL,UAAU;AACV,aAAa;AACb,YAAY,EACZ,YAAY;AACZ,mBAAmB;AACnB,OAAO,EACP,IAAI,EACJ,IAAI;AACJ,kBAAkB;AAClB,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAIhB,yDAAyD;AACzD,OAAO,EACL,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACf,MAAM,OAAO,CAAA"}
|
package/dist/core/seo.d.ts
CHANGED
|
@@ -31,6 +31,14 @@ export interface AggregateRatingInput {
|
|
|
31
31
|
ratingValue: number;
|
|
32
32
|
reviewCount: number;
|
|
33
33
|
}
|
|
34
|
+
export interface ReturnPolicyInput {
|
|
35
|
+
/** Return window in days. `0` (or less) emits a "returns not permitted" policy. */
|
|
36
|
+
merchantReturnDays: number;
|
|
37
|
+
/** Who pays return shipping. */
|
|
38
|
+
returnFees: 'free' | 'customer-paid';
|
|
39
|
+
/** ISO 3166-1 alpha-2 the policy applies to, e.g. "US". */
|
|
40
|
+
applicableCountry: string;
|
|
41
|
+
}
|
|
34
42
|
/** Strip HTML tags + collapse whitespace. Defensive for stores that store rich-text descriptions. */
|
|
35
43
|
export declare function stripHtml(input: string): string;
|
|
36
44
|
/**
|
|
@@ -59,5 +67,30 @@ export declare function buildStoreJsonLdGraph(ctx: {
|
|
|
59
67
|
storeName: string;
|
|
60
68
|
logoUrl?: string | null;
|
|
61
69
|
sameAs?: string[];
|
|
70
|
+
/** Public support email → `Organization.contactPoint`. */
|
|
71
|
+
contactEmail?: string | null;
|
|
72
|
+
/** Store-wide return policy → `Organization.hasMerchantReturnPolicy`. Omitted when null. */
|
|
73
|
+
returnPolicy?: ReturnPolicyInput | null;
|
|
74
|
+
/** ISO country codes the store ships to → `Organization.areaServed`. Omitted when empty. */
|
|
75
|
+
shipsToCountries?: string[] | null;
|
|
62
76
|
}): Record<string, unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* `BreadcrumbList` JSON-LD for any page with a clear hierarchy (e.g. a PDP:
|
|
79
|
+
* Home › Products › {name}). Helps search + AI assistants understand site
|
|
80
|
+
* structure and earns breadcrumb rich results. Pass ABSOLUTE urls.
|
|
81
|
+
*/
|
|
82
|
+
export declare function buildBreadcrumbJsonLd(items: Array<{
|
|
83
|
+
name: string;
|
|
84
|
+
url: string;
|
|
85
|
+
}>): Record<string, unknown>;
|
|
86
|
+
/**
|
|
87
|
+
* `FAQPage` JSON-LD. The single highest-leverage GEO signal per 2026 research
|
|
88
|
+
* (≈3× AI-citation rate) — but Google + AI engines REQUIRE the same Q&A to be
|
|
89
|
+
* visible on the page. Callers MUST render `items` in the DOM and pass the
|
|
90
|
+
* identical array here. Keep each answer self-contained for verbatim extraction.
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildFaqJsonLd(items: Array<{
|
|
93
|
+
question: string;
|
|
94
|
+
answer: string;
|
|
95
|
+
}>): Record<string, unknown>;
|
|
63
96
|
//# sourceMappingURL=seo.d.ts.map
|
package/dist/core/seo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/core/seo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,sFAAsF;IACtF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qGAAqG;AACrG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAWD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,eAAe,GAAG;IAAE,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,GACvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCzB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/core/seo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,sFAAsF;IACtF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gCAAgC;IAChC,UAAU,EAAE,MAAM,GAAG,eAAe,CAAA;IACpC,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,qGAAqG;AACrG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAWD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,eAAe,GAAG;IAAE,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,GACvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCzB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACvC,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACnC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyD1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB"}
|
package/dist/core/seo.js
CHANGED
|
@@ -83,17 +83,47 @@ export function buildProductJsonLd(product, ctx) {
|
|
|
83
83
|
export function buildStoreJsonLdGraph(ctx) {
|
|
84
84
|
const base = trimTrailingSlash(ctx.storeUrl);
|
|
85
85
|
const orgId = base ? `${base}/#organization` : undefined;
|
|
86
|
+
const returnsOnce = ctx.returnPolicy;
|
|
87
|
+
const hasReturnWindow = !!returnsOnce && returnsOnce.merchantReturnDays > 0;
|
|
88
|
+
const organization = {
|
|
89
|
+
'@type': ['Organization', 'OnlineStore'],
|
|
90
|
+
...(orgId && { '@id': orgId }),
|
|
91
|
+
name: ctx.storeName,
|
|
92
|
+
...(base && { url: base }),
|
|
93
|
+
...(ctx.logoUrl && { logo: ctx.logoUrl }),
|
|
94
|
+
...(ctx.contactEmail && {
|
|
95
|
+
contactPoint: {
|
|
96
|
+
'@type': 'ContactPoint',
|
|
97
|
+
contactType: 'customer support',
|
|
98
|
+
email: ctx.contactEmail,
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
...(ctx.shipsToCountries &&
|
|
102
|
+
ctx.shipsToCountries.length > 0 && {
|
|
103
|
+
areaServed: ctx.shipsToCountries.map((c) => ({ '@type': 'Country', name: c })),
|
|
104
|
+
}),
|
|
105
|
+
...(returnsOnce && {
|
|
106
|
+
hasMerchantReturnPolicy: {
|
|
107
|
+
'@type': 'MerchantReturnPolicy',
|
|
108
|
+
applicableCountry: returnsOnce.applicableCountry,
|
|
109
|
+
returnPolicyCategory: hasReturnWindow
|
|
110
|
+
? 'https://schema.org/MerchantReturnFiniteReturnWindow'
|
|
111
|
+
: 'https://schema.org/MerchantReturnNotPermitted',
|
|
112
|
+
...(hasReturnWindow && {
|
|
113
|
+
merchantReturnDays: returnsOnce.merchantReturnDays,
|
|
114
|
+
returnMethod: 'https://schema.org/ReturnByMail',
|
|
115
|
+
returnFees: returnsOnce.returnFees === 'free'
|
|
116
|
+
? 'https://schema.org/FreeReturn'
|
|
117
|
+
: 'https://schema.org/ReturnShippingFees',
|
|
118
|
+
}),
|
|
119
|
+
},
|
|
120
|
+
}),
|
|
121
|
+
...(ctx.sameAs && ctx.sameAs.length > 0 && { sameAs: ctx.sameAs }),
|
|
122
|
+
};
|
|
86
123
|
return {
|
|
87
124
|
'@context': 'https://schema.org',
|
|
88
125
|
'@graph': [
|
|
89
|
-
|
|
90
|
-
'@type': 'Organization',
|
|
91
|
-
...(orgId && { '@id': orgId }),
|
|
92
|
-
name: ctx.storeName,
|
|
93
|
-
...(base && { url: base }),
|
|
94
|
-
...(ctx.logoUrl && { logo: ctx.logoUrl }),
|
|
95
|
-
...(ctx.sameAs && ctx.sameAs.length > 0 && { sameAs: ctx.sameAs }),
|
|
96
|
-
},
|
|
126
|
+
organization,
|
|
97
127
|
{
|
|
98
128
|
'@type': 'WebSite',
|
|
99
129
|
...(base && { '@id': `${base}/#website` }),
|
|
@@ -104,4 +134,38 @@ export function buildStoreJsonLdGraph(ctx) {
|
|
|
104
134
|
],
|
|
105
135
|
};
|
|
106
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* `BreadcrumbList` JSON-LD for any page with a clear hierarchy (e.g. a PDP:
|
|
139
|
+
* Home › Products › {name}). Helps search + AI assistants understand site
|
|
140
|
+
* structure and earns breadcrumb rich results. Pass ABSOLUTE urls.
|
|
141
|
+
*/
|
|
142
|
+
export function buildBreadcrumbJsonLd(items) {
|
|
143
|
+
return {
|
|
144
|
+
'@context': 'https://schema.org',
|
|
145
|
+
'@type': 'BreadcrumbList',
|
|
146
|
+
itemListElement: items.map((it, i) => ({
|
|
147
|
+
'@type': 'ListItem',
|
|
148
|
+
position: i + 1,
|
|
149
|
+
name: it.name,
|
|
150
|
+
item: it.url,
|
|
151
|
+
})),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* `FAQPage` JSON-LD. The single highest-leverage GEO signal per 2026 research
|
|
156
|
+
* (≈3× AI-citation rate) — but Google + AI engines REQUIRE the same Q&A to be
|
|
157
|
+
* visible on the page. Callers MUST render `items` in the DOM and pass the
|
|
158
|
+
* identical array here. Keep each answer self-contained for verbatim extraction.
|
|
159
|
+
*/
|
|
160
|
+
export function buildFaqJsonLd(items) {
|
|
161
|
+
return {
|
|
162
|
+
'@context': 'https://schema.org',
|
|
163
|
+
'@type': 'FAQPage',
|
|
164
|
+
mainEntity: items.map((it) => ({
|
|
165
|
+
'@type': 'Question',
|
|
166
|
+
name: it.question,
|
|
167
|
+
acceptedAnswer: { '@type': 'Answer', text: it.answer },
|
|
168
|
+
})),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
107
171
|
//# sourceMappingURL=seo.js.map
|
package/dist/core/seo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/core/seo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/core/seo.ts"],"names":[],"mappings":"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"}
|