@riverbankcms/sdk 0.6.1 → 0.7.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.
Files changed (172) hide show
  1. package/README.md +175 -0
  2. package/dist/cli/index.js +42 -95
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/init-docs/content/agents-section.md +50 -0
  5. package/dist/cli/init-docs/content/cli-reference.md +574 -0
  6. package/dist/cli/init-docs/content/content-management.md +384 -0
  7. package/dist/cli/init-docs/content/context-brand.md +125 -0
  8. package/dist/cli/init-docs/content/context-brief.md +77 -0
  9. package/dist/cli/init-docs/content/context-knowledge.md +111 -0
  10. package/dist/cli/init-docs/content/getting-started.md +130 -0
  11. package/dist/cli/init-docs/content/site-workflows-readme.md +96 -0
  12. package/dist/cli/init-docs/content/workflow-add-block.md +228 -0
  13. package/dist/cli/init-docs/content/workflow-create-page.md +193 -0
  14. package/dist/cli/init-docs/content/workflow-publish.md +280 -0
  15. package/dist/client/client.d.mts +2 -2
  16. package/dist/client/client.d.ts +2 -2
  17. package/dist/client/client.js +536 -71
  18. package/dist/client/client.js.map +1 -1
  19. package/dist/client/client.mjs +536 -78
  20. package/dist/client/client.mjs.map +1 -1
  21. package/dist/client/hooks.d.mts +2 -2
  22. package/dist/client/hooks.d.ts +2 -2
  23. package/dist/client/usePage-C9tJpuKa.d.mts +6813 -0
  24. package/dist/client/usePage-Db9kzA41.d.ts +6813 -0
  25. package/dist/server/{Layout-wBtJLTVX.d.ts → Layout-Ce7PU9I5.d.ts} +1 -1
  26. package/dist/server/{Layout-B7cvis7r.d.mts → Layout-WllR8Zug.d.mts} +1 -1
  27. package/dist/server/{chunk-I7ZR2WO3.mjs → chunk-5JT452F2.mjs} +537 -76
  28. package/dist/server/chunk-5JT452F2.mjs.map +1 -0
  29. package/dist/server/{chunk-Z5ZA6Q4D.mjs → chunk-74XUVNOO.mjs} +5 -3
  30. package/dist/server/chunk-74XUVNOO.mjs.map +1 -0
  31. package/dist/server/{chunk-3B364WO2.js → chunk-7BVRA5MY.js} +4 -49
  32. package/dist/server/chunk-7BVRA5MY.js.map +1 -0
  33. package/dist/server/chunk-AET56TQX.mjs +45 -0
  34. package/dist/server/chunk-AET56TQX.mjs.map +1 -0
  35. package/dist/server/chunk-ARNCLSQT.mjs +52 -0
  36. package/dist/server/chunk-ARNCLSQT.mjs.map +1 -0
  37. package/dist/server/chunk-BNQV3PXP.js +69 -0
  38. package/dist/server/chunk-BNQV3PXP.js.map +1 -0
  39. package/dist/server/{chunk-IVHIQFJH.js → chunk-HMENX4Y7.js} +543 -82
  40. package/dist/server/chunk-HMENX4Y7.js.map +1 -0
  41. package/dist/server/{chunk-I2D7KOEA.js → chunk-JWRNMNWI.js} +5 -3
  42. package/dist/server/chunk-JWRNMNWI.js.map +1 -0
  43. package/dist/server/chunk-LQUKXIW7.mjs +13 -0
  44. package/dist/server/chunk-LQUKXIW7.mjs.map +1 -0
  45. package/dist/server/{chunk-XXFF4RVR.mjs → chunk-RBJFXNDM.mjs} +1 -46
  46. package/dist/server/chunk-RBJFXNDM.mjs.map +1 -0
  47. package/dist/server/chunk-SWYWZT3L.mjs +69 -0
  48. package/dist/server/chunk-SWYWZT3L.mjs.map +1 -0
  49. package/dist/server/chunk-T26N3P26.js +52 -0
  50. package/dist/server/chunk-T26N3P26.js.map +1 -0
  51. package/dist/server/chunk-VODFQMUW.js +45 -0
  52. package/dist/server/chunk-VODFQMUW.js.map +1 -0
  53. package/dist/server/chunk-WYNEYDXO.js +13 -0
  54. package/dist/server/chunk-WYNEYDXO.js.map +1 -0
  55. package/dist/server/{components-CICSJyp_.d.ts → components--LT61IKp.d.ts} +2 -2
  56. package/dist/server/{components-CMMwDXTW.d.mts → components-RPzRQve6.d.mts} +2 -2
  57. package/dist/server/components.d.mts +4 -4
  58. package/dist/server/components.d.ts +4 -4
  59. package/dist/server/components.js +5 -4
  60. package/dist/server/components.js.map +1 -1
  61. package/dist/server/components.mjs +5 -4
  62. package/dist/server/config-validation.js +0 -1
  63. package/dist/server/config-validation.js.map +1 -1
  64. package/dist/server/config-validation.mjs +0 -1
  65. package/dist/server/config.js +0 -1
  66. package/dist/server/config.js.map +1 -1
  67. package/dist/server/config.mjs +0 -1
  68. package/dist/server/config.mjs.map +1 -1
  69. package/dist/server/data.d.mts +1 -1
  70. package/dist/server/data.d.ts +1 -1
  71. package/dist/server/data.js +0 -1
  72. package/dist/server/data.js.map +1 -1
  73. package/dist/server/data.mjs +0 -1
  74. package/dist/server/env.d.mts +23 -0
  75. package/dist/server/env.d.ts +23 -0
  76. package/dist/server/env.js +7 -0
  77. package/dist/server/env.js.map +1 -0
  78. package/dist/server/env.mjs +7 -0
  79. package/dist/server/index-BL66CU6d.d.mts +130 -0
  80. package/dist/server/{index-Bucs6UqG.d.mts → index-Bkva0WAj.d.mts} +1 -1
  81. package/dist/server/index-CJk9iQQW.d.ts +130 -0
  82. package/dist/server/{index-Cp7tJuRt.d.ts → index-CSBWKA3r.d.ts} +1 -1
  83. package/dist/server/index.d.mts +3 -3
  84. package/dist/server/index.d.ts +3 -3
  85. package/dist/server/index.js +2 -3
  86. package/dist/server/index.js.map +1 -1
  87. package/dist/server/index.mjs +1 -2
  88. package/dist/server/index.mjs.map +1 -1
  89. package/dist/server/{loadContent-Buvmudee.d.ts → loadContent-CXUWMuzY.d.ts} +11 -3
  90. package/dist/server/{loadContent-BS-3wesN.d.mts → loadContent-F_tAS0Nl.d.mts} +11 -3
  91. package/dist/server/{loadPage-IDGVDFBB.js → loadPage-6I7F6GRF.js} +1 -2
  92. package/dist/server/loadPage-6I7F6GRF.js.map +1 -0
  93. package/dist/server/{loadPage-B8mQUUSo.d.mts → loadPage-CxlYLe5K.d.mts} +1 -1
  94. package/dist/server/{loadPage-DNQTTRHL.mjs → loadPage-JI2SML4M.mjs} +1 -2
  95. package/dist/server/{loadPage-DP3nrHBi.d.ts → loadPage-i2r-X5b9.d.ts} +1 -1
  96. package/dist/server/metadata.d.mts +8 -135
  97. package/dist/server/metadata.d.ts +8 -135
  98. package/dist/server/metadata.js +4 -65
  99. package/dist/server/metadata.js.map +1 -1
  100. package/dist/server/metadata.mjs +4 -65
  101. package/dist/server/metadata.mjs.map +1 -1
  102. package/dist/server/navigation.js +0 -1
  103. package/dist/server/navigation.js.map +1 -1
  104. package/dist/server/navigation.mjs +0 -1
  105. package/dist/server/next/revalidate.d.mts +66 -0
  106. package/dist/server/next/revalidate.d.ts +66 -0
  107. package/dist/server/next/revalidate.js +59 -0
  108. package/dist/server/next/revalidate.js.map +1 -0
  109. package/dist/server/next/revalidate.mjs +59 -0
  110. package/dist/server/next/revalidate.mjs.map +1 -0
  111. package/dist/server/next/tags.d.mts +78 -0
  112. package/dist/server/next/tags.d.ts +78 -0
  113. package/dist/server/next/tags.js +34 -0
  114. package/dist/server/next/tags.js.map +1 -0
  115. package/dist/server/next/tags.mjs +34 -0
  116. package/dist/server/next/tags.mjs.map +1 -0
  117. package/dist/server/next.d.mts +432 -0
  118. package/dist/server/next.d.ts +432 -0
  119. package/dist/server/next.js +217 -0
  120. package/dist/server/next.js.map +1 -0
  121. package/dist/server/next.mjs +217 -0
  122. package/dist/server/next.mjs.map +1 -0
  123. package/dist/server/rendering/server.d.mts +3 -3
  124. package/dist/server/rendering/server.d.ts +3 -3
  125. package/dist/server/rendering/server.js +5 -4
  126. package/dist/server/rendering/server.js.map +1 -1
  127. package/dist/server/rendering/server.mjs +5 -4
  128. package/dist/server/rendering.d.mts +6 -6
  129. package/dist/server/rendering.d.ts +6 -6
  130. package/dist/server/rendering.js +7 -6
  131. package/dist/server/rendering.js.map +1 -1
  132. package/dist/server/rendering.mjs +9 -8
  133. package/dist/server/routing.d.mts +2 -2
  134. package/dist/server/routing.d.ts +2 -2
  135. package/dist/server/routing.js +2 -4
  136. package/dist/server/routing.js.map +1 -1
  137. package/dist/server/routing.mjs +1 -3
  138. package/dist/server/routing.mjs.map +1 -1
  139. package/dist/server/server.d.mts +4 -4
  140. package/dist/server/server.d.ts +4 -4
  141. package/dist/server/server.js +4 -5
  142. package/dist/server/server.js.map +1 -1
  143. package/dist/server/server.mjs +5 -6
  144. package/dist/server/theme-bridge.js +0 -1
  145. package/dist/server/theme-bridge.js.map +1 -1
  146. package/dist/server/theme-bridge.mjs +0 -1
  147. package/dist/server/theme-bridge.mjs.map +1 -1
  148. package/dist/server/theme.js +1 -3
  149. package/dist/server/theme.js.map +1 -1
  150. package/dist/server/theme.mjs +0 -2
  151. package/dist/server/theme.mjs.map +1 -1
  152. package/dist/server/{types-BvcJU7zk.d.ts → types-DnkRh0UL.d.ts} +118 -9
  153. package/dist/server/{types-1cLz0vnq.d.mts → types-MF2AWoKv.d.mts} +118 -9
  154. package/dist/server/webhooks.d.mts +75 -0
  155. package/dist/server/webhooks.d.ts +75 -0
  156. package/dist/server/webhooks.js +11 -0
  157. package/dist/server/webhooks.js.map +1 -0
  158. package/dist/server/webhooks.mjs +11 -0
  159. package/dist/server/webhooks.mjs.map +1 -0
  160. package/package.json +33 -1
  161. package/dist/server/chunk-3B364WO2.js.map +0 -1
  162. package/dist/server/chunk-BJTO5JO5.mjs +0 -11
  163. package/dist/server/chunk-DGUM43GV.js +0 -11
  164. package/dist/server/chunk-DGUM43GV.js.map +0 -1
  165. package/dist/server/chunk-I2D7KOEA.js.map +0 -1
  166. package/dist/server/chunk-I7ZR2WO3.mjs.map +0 -1
  167. package/dist/server/chunk-IVHIQFJH.js.map +0 -1
  168. package/dist/server/chunk-XXFF4RVR.mjs.map +0 -1
  169. package/dist/server/chunk-Z5ZA6Q4D.mjs.map +0 -1
  170. package/dist/server/loadPage-IDGVDFBB.js.map +0 -1
  171. /package/dist/server/{chunk-BJTO5JO5.mjs.map → env.mjs.map} +0 -0
  172. /package/dist/server/{loadPage-DNQTTRHL.mjs.map → loadPage-JI2SML4M.mjs.map} +0 -0
@@ -1,142 +1,15 @@
1
- import { a as LoadPageResult } from './loadPage-B8mQUUSo.mjs';
2
- import { S as SiteResponse } from './types-1cLz0vnq.mjs';
3
- import 'react/jsx-runtime';
4
- import 'react';
5
- import './schema-Z6-afHJG.mjs';
6
- import 'zod';
7
- import './core-DsNWrl3o.mjs';
1
+ export { P as PageMetadataInput, g as generatePageMetadata, a as generatePreviewMetadata } from './index-BL66CU6d.mjs';
2
+ import './loadPage-CxlYLe5K.mjs';
3
+ import './types-MF2AWoKv.mjs';
8
4
  import './types-Dsu9wsUh.mjs';
9
5
  import '@riverbankcms/ai';
6
+ import './schema-Z6-afHJG.mjs';
7
+ import 'zod';
10
8
  import './link-DjxLyC82.mjs';
11
9
  import '@riverbankcms/media-storage-supabase';
12
10
  import '@riverbankcms/db';
11
+ import 'react/jsx-runtime';
12
+ import 'react';
13
+ import './core-DsNWrl3o.mjs';
13
14
  import './types-CbagRQ_7.mjs';
14
15
  import './blockKinds-B6MWzNWp.mjs';
15
-
16
- /**
17
- * Metadata generation helper for Next.js pages
18
- *
19
- * Generates SEO-optimized metadata from Builder page data for use in
20
- * Next.js generateMetadata() functions.
21
- */
22
-
23
- /**
24
- * Next.js Metadata type
25
- * Simplified version to avoid requiring Next.js as a dependency
26
- */
27
- type Metadata = {
28
- title?: string;
29
- description?: string;
30
- alternates?: {
31
- canonical?: string;
32
- };
33
- openGraph?: {
34
- title?: string;
35
- description?: string;
36
- url?: string;
37
- siteName?: string;
38
- type?: string;
39
- images?: Array<{
40
- url: string;
41
- alt?: string;
42
- }>;
43
- };
44
- twitter?: {
45
- card?: string;
46
- title?: string;
47
- description?: string;
48
- images?: string[];
49
- };
50
- robots?: {
51
- index?: boolean;
52
- follow?: boolean;
53
- };
54
- verification?: {
55
- google?: string;
56
- };
57
- };
58
- type PageMetadataInput = {
59
- /**
60
- * Page data from loadPage() or custom page object
61
- */
62
- page: LoadPageResult['page'] | {
63
- name: string;
64
- purpose?: string;
65
- };
66
- /**
67
- * Site data from client.getSite()
68
- */
69
- site: SiteResponse['site'];
70
- /**
71
- * Current URL path (e.g., '/about', '/blog/post-1')
72
- */
73
- path: string;
74
- /**
75
- * Full site URL for canonical and OG URLs
76
- * Example: 'https://example.com'
77
- */
78
- siteUrl: string;
79
- /**
80
- * Optional custom metadata overrides
81
- */
82
- overrides?: {
83
- title?: string;
84
- description?: string;
85
- ogImage?: string;
86
- canonicalUrl?: string;
87
- robots?: {
88
- index?: boolean;
89
- follow?: boolean;
90
- };
91
- };
92
- /**
93
- * Optional Google site verification token
94
- */
95
- googleSiteVerification?: string;
96
- };
97
- /**
98
- * Generate Next.js Metadata object from Builder page data
99
- *
100
- * @example
101
- * ```tsx
102
- * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';
103
- * import { loadPage } from '@riverbankcms/sdk';
104
- *
105
- * export async function generateMetadata({ params }) {
106
- * const pageData = await loadPage({ client, siteId, path: params.slug });
107
- * const siteData = await client.getSite({ id: siteId });
108
- *
109
- * return generatePageMetadata({
110
- * page: pageData.page,
111
- * site: siteData.site,
112
- * path: params.slug,
113
- * siteUrl: 'https://example.com',
114
- * });
115
- * }
116
- * ```
117
- */
118
- declare function generatePageMetadata(input: PageMetadataInput): Metadata;
119
- /**
120
- * Generate metadata for preview/staging environments
121
- *
122
- * This helper adds noindex/nofollow robots tags to prevent search engines
123
- * from indexing preview or staging URLs.
124
- *
125
- * @example
126
- * ```tsx
127
- * export async function generateMetadata({ params }) {
128
- * const pageData = await loadPage({ client, siteId, path: params.slug });
129
- * const isPreview = process.env.VERCEL_ENV !== 'production';
130
- *
131
- * return generatePreviewMetadata({
132
- * page: pageData.page,
133
- * site: siteData.site,
134
- * path: params.slug,
135
- * siteUrl: 'https://example.com',
136
- * });
137
- * }
138
- * ```
139
- */
140
- declare function generatePreviewMetadata(input: PageMetadataInput): Metadata;
141
-
142
- export { type PageMetadataInput, generatePageMetadata, generatePreviewMetadata };
@@ -1,142 +1,15 @@
1
- import { a as LoadPageResult } from './loadPage-DP3nrHBi.js';
2
- import { S as SiteResponse } from './types-BvcJU7zk.js';
3
- import 'react/jsx-runtime';
4
- import 'react';
5
- import './schema-Z6-afHJG.js';
6
- import 'zod';
7
- import './core-DsNWrl3o.js';
1
+ export { P as PageMetadataInput, g as generatePageMetadata, a as generatePreviewMetadata } from './index-CJk9iQQW.js';
2
+ import './loadPage-i2r-X5b9.js';
3
+ import './types-DnkRh0UL.js';
8
4
  import './types-CVykEqXN.js';
9
5
  import '@riverbankcms/ai';
6
+ import './schema-Z6-afHJG.js';
7
+ import 'zod';
10
8
  import './link-DjxLyC82.js';
11
9
  import '@riverbankcms/media-storage-supabase';
12
10
  import '@riverbankcms/db';
11
+ import 'react/jsx-runtime';
12
+ import 'react';
13
+ import './core-DsNWrl3o.js';
13
14
  import './types-DuQCNVV0.js';
14
15
  import './blockKinds-B6MWzNWp.js';
15
-
16
- /**
17
- * Metadata generation helper for Next.js pages
18
- *
19
- * Generates SEO-optimized metadata from Builder page data for use in
20
- * Next.js generateMetadata() functions.
21
- */
22
-
23
- /**
24
- * Next.js Metadata type
25
- * Simplified version to avoid requiring Next.js as a dependency
26
- */
27
- type Metadata = {
28
- title?: string;
29
- description?: string;
30
- alternates?: {
31
- canonical?: string;
32
- };
33
- openGraph?: {
34
- title?: string;
35
- description?: string;
36
- url?: string;
37
- siteName?: string;
38
- type?: string;
39
- images?: Array<{
40
- url: string;
41
- alt?: string;
42
- }>;
43
- };
44
- twitter?: {
45
- card?: string;
46
- title?: string;
47
- description?: string;
48
- images?: string[];
49
- };
50
- robots?: {
51
- index?: boolean;
52
- follow?: boolean;
53
- };
54
- verification?: {
55
- google?: string;
56
- };
57
- };
58
- type PageMetadataInput = {
59
- /**
60
- * Page data from loadPage() or custom page object
61
- */
62
- page: LoadPageResult['page'] | {
63
- name: string;
64
- purpose?: string;
65
- };
66
- /**
67
- * Site data from client.getSite()
68
- */
69
- site: SiteResponse['site'];
70
- /**
71
- * Current URL path (e.g., '/about', '/blog/post-1')
72
- */
73
- path: string;
74
- /**
75
- * Full site URL for canonical and OG URLs
76
- * Example: 'https://example.com'
77
- */
78
- siteUrl: string;
79
- /**
80
- * Optional custom metadata overrides
81
- */
82
- overrides?: {
83
- title?: string;
84
- description?: string;
85
- ogImage?: string;
86
- canonicalUrl?: string;
87
- robots?: {
88
- index?: boolean;
89
- follow?: boolean;
90
- };
91
- };
92
- /**
93
- * Optional Google site verification token
94
- */
95
- googleSiteVerification?: string;
96
- };
97
- /**
98
- * Generate Next.js Metadata object from Builder page data
99
- *
100
- * @example
101
- * ```tsx
102
- * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';
103
- * import { loadPage } from '@riverbankcms/sdk';
104
- *
105
- * export async function generateMetadata({ params }) {
106
- * const pageData = await loadPage({ client, siteId, path: params.slug });
107
- * const siteData = await client.getSite({ id: siteId });
108
- *
109
- * return generatePageMetadata({
110
- * page: pageData.page,
111
- * site: siteData.site,
112
- * path: params.slug,
113
- * siteUrl: 'https://example.com',
114
- * });
115
- * }
116
- * ```
117
- */
118
- declare function generatePageMetadata(input: PageMetadataInput): Metadata;
119
- /**
120
- * Generate metadata for preview/staging environments
121
- *
122
- * This helper adds noindex/nofollow robots tags to prevent search engines
123
- * from indexing preview or staging URLs.
124
- *
125
- * @example
126
- * ```tsx
127
- * export async function generateMetadata({ params }) {
128
- * const pageData = await loadPage({ client, siteId, path: params.slug });
129
- * const isPreview = process.env.VERCEL_ENV !== 'production';
130
- *
131
- * return generatePreviewMetadata({
132
- * page: pageData.page,
133
- * site: siteData.site,
134
- * path: params.slug,
135
- * siteUrl: 'https://example.com',
136
- * });
137
- * }
138
- * ```
139
- */
140
- declare function generatePreviewMetadata(input: PageMetadataInput): Metadata;
141
-
142
- export { type PageMetadataInput, generatePageMetadata, generatePreviewMetadata };
@@ -1,70 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-DGUM43GV.js');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- // src/metadata/generatePageMetadata.ts
4
- function generatePageMetadata(input) {
5
- const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
6
- const pageTitle = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _ => _.title]), () => ( page.name));
7
- const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;
8
- const description = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _2 => _2.description]), () => ( page.purpose));
9
- const canonicalUrl = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _3 => _3.canonicalUrl]), () => ( `${siteUrl}${path}`));
10
- const fullUrl = `${siteUrl}${path}`;
11
- const metadata = {
12
- title: fullTitle,
13
- description: _nullishCoalesce(description, () => ( void 0)),
14
- alternates: {
15
- canonical: canonicalUrl
16
- },
17
- openGraph: {
18
- title: pageTitle,
19
- description: _nullishCoalesce(description, () => ( void 0)),
20
- url: fullUrl,
21
- siteName: site.title,
22
- type: "website",
23
- ..._optionalChain([overrides, 'optionalAccess', _4 => _4.ogImage]) ? {
24
- images: [
25
- {
26
- url: overrides.ogImage,
27
- alt: pageTitle
28
- }
29
- ]
30
- } : {}
31
- },
32
- twitter: {
33
- card: "summary_large_image",
34
- title: pageTitle,
35
- description: _nullishCoalesce(description, () => ( void 0)),
36
- ..._optionalChain([overrides, 'optionalAccess', _5 => _5.ogImage]) ? {
37
- images: [overrides.ogImage]
38
- } : {}
39
- }
40
- };
41
- if (_optionalChain([overrides, 'optionalAccess', _6 => _6.robots])) {
42
- metadata.robots = {
43
- index: _nullishCoalesce(overrides.robots.index, () => ( true)),
44
- follow: _nullishCoalesce(overrides.robots.follow, () => ( true))
45
- };
46
- }
47
- if (googleSiteVerification) {
48
- metadata.verification = {
49
- google: googleSiteVerification
50
- };
51
- }
52
- return metadata;
53
- }
54
- function generatePreviewMetadata(input) {
55
- return generatePageMetadata({
56
- ...input,
57
- overrides: {
58
- ...input.overrides,
59
- robots: {
60
- index: false,
61
- follow: false
62
- }
63
- }
64
- });
65
- }
66
3
 
4
+ var _chunkBNQV3PXPjs = require('./chunk-BNQV3PXP.js');
67
5
 
68
6
 
69
- exports.generatePageMetadata = generatePageMetadata; exports.generatePreviewMetadata = generatePreviewMetadata;
7
+
8
+ exports.generatePageMetadata = _chunkBNQV3PXPjs.generatePageMetadata; exports.generatePreviewMetadata = _chunkBNQV3PXPjs.generatePreviewMetadata;
70
9
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","../../src/metadata/generatePageMetadata.ts"],"names":[],"mappings":"AAAA,gtBAA4B;AAC5B;AACA;AC8GO,SAAS,oBAAA,CAAqB,KAAA,EAAoC;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,uBAAuB,EAAA,EAAI,KAAA;AAGzE,EAAA,MAAM,UAAA,mCAAY,SAAA,2BAAW,OAAA,UAAS,IAAA,CAAK,MAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,UAAA,IAAc,IAAA,CAAK,MAAA,EAAQ,UAAA,EAAY,CAAA,EAAA;AAGN,EAAA;AAGO,EAAA;AACzB,EAAA;AAGN,EAAA;AAClB,IAAA;AACqB,IAAA;AAChB,IAAA;AACC,MAAA;AACb,IAAA;AACW,IAAA;AACF,MAAA;AACqB,MAAA;AACvB,MAAA;AACU,MAAA;AACT,MAAA;AAEF,MAAA;AACU,QAAA;AACN,UAAA;AACiB,YAAA;AACV,YAAA;AACP,UAAA;AACF,QAAA;AAED,MAAA;AACP,IAAA;AACS,IAAA;AACD,MAAA;AACC,MAAA;AACqB,MAAA;AAExB,MAAA;AAC4B,QAAA;AAE3B,MAAA;AACP,IAAA;AACF,EAAA;AAGuB,EAAA;AACH,IAAA;AACiB,MAAA;AACE,MAAA;AACrC,IAAA;AACF,EAAA;AAG4B,EAAA;AACF,IAAA;AACd,MAAA;AACV,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAuB4E;AAC9C,EAAA;AACvB,IAAA;AACQ,IAAA;AACA,MAAA;AACD,MAAA;AACC,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACD,EAAA;AACH;ADnJ4D;AACA;AACA;AACA","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","sourcesContent":[null,"/**\n * Metadata generation helper for Next.js pages\n *\n * Generates SEO-optimized metadata from Builder page data for use in\n * Next.js generateMetadata() functions.\n */\n\nimport type { LoadPageResult } from '../rendering/helpers/loadPage';\nimport type { SiteResponse } from '../client/types';\n\n/**\n * Next.js Metadata type\n * Simplified version to avoid requiring Next.js as a dependency\n */\nexport type Metadata = {\n title?: string;\n description?: string;\n alternates?: {\n canonical?: string;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string;\n siteName?: string;\n type?: string;\n images?: Array<{\n url: string;\n alt?: string;\n }>;\n };\n twitter?: {\n card?: string;\n title?: string;\n description?: string;\n images?: string[];\n };\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n verification?: {\n google?: string;\n };\n};\n\nexport type PageMetadataInput = {\n /**\n * Page data from loadPage() or custom page object\n */\n page: LoadPageResult['page'] | {\n name: string;\n purpose?: string;\n };\n\n /**\n * Site data from client.getSite()\n */\n site: SiteResponse['site'];\n\n /**\n * Current URL path (e.g., '/about', '/blog/post-1')\n */\n path: string;\n\n /**\n * Full site URL for canonical and OG URLs\n * Example: 'https://example.com'\n */\n siteUrl: string;\n\n /**\n * Optional custom metadata overrides\n */\n overrides?: {\n title?: string;\n description?: string;\n ogImage?: string;\n canonicalUrl?: string;\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n };\n\n /**\n * Optional Google site verification token\n */\n googleSiteVerification?: string;\n};\n\n/**\n * Generate Next.js Metadata object from Builder page data\n *\n * @example\n * ```tsx\n * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';\n * import { loadPage } from '@riverbankcms/sdk';\n *\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const siteData = await client.getSite({ id: siteId });\n *\n * return generatePageMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePageMetadata(input: PageMetadataInput): Metadata {\n const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;\n\n // Build page title\n const pageTitle = overrides?.title ?? page.name;\n const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;\n\n // Use page purpose as description fallback\n const description = overrides?.description ?? page.purpose;\n\n // Build full URLs\n const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;\n const fullUrl = `${siteUrl}${path}`;\n\n // Build metadata object\n const metadata: Metadata = {\n title: fullTitle,\n description: description ?? undefined,\n alternates: {\n canonical: canonicalUrl,\n },\n openGraph: {\n title: pageTitle,\n description: description ?? undefined,\n url: fullUrl,\n siteName: site.title,\n type: 'website',\n ...(overrides?.ogImage\n ? {\n images: [\n {\n url: overrides.ogImage,\n alt: pageTitle,\n },\n ],\n }\n : {}),\n },\n twitter: {\n card: 'summary_large_image',\n title: pageTitle,\n description: description ?? undefined,\n ...(overrides?.ogImage\n ? {\n images: [overrides.ogImage],\n }\n : {}),\n },\n };\n\n // Add robots meta if specified\n if (overrides?.robots) {\n metadata.robots = {\n index: overrides.robots.index ?? true,\n follow: overrides.robots.follow ?? true,\n };\n }\n\n // Add Google site verification if provided\n if (googleSiteVerification) {\n metadata.verification = {\n google: googleSiteVerification,\n };\n }\n\n return metadata;\n}\n\n/**\n * Generate metadata for preview/staging environments\n *\n * This helper adds noindex/nofollow robots tags to prevent search engines\n * from indexing preview or staging URLs.\n *\n * @example\n * ```tsx\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const isPreview = process.env.VERCEL_ENV !== 'production';\n *\n * return generatePreviewMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePreviewMetadata(input: PageMetadataInput): Metadata {\n return generatePageMetadata({\n ...input,\n overrides: {\n ...input.overrides,\n robots: {\n index: false,\n follow: false,\n },\n },\n });\n}\n"]}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,iJAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js"}
@@ -1,68 +1,7 @@
1
- import "./chunk-BJTO5JO5.mjs";
2
-
3
- // src/metadata/generatePageMetadata.ts
4
- function generatePageMetadata(input) {
5
- const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
6
- const pageTitle = overrides?.title ?? page.name;
7
- const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;
8
- const description = overrides?.description ?? page.purpose;
9
- const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;
10
- const fullUrl = `${siteUrl}${path}`;
11
- const metadata = {
12
- title: fullTitle,
13
- description: description ?? void 0,
14
- alternates: {
15
- canonical: canonicalUrl
16
- },
17
- openGraph: {
18
- title: pageTitle,
19
- description: description ?? void 0,
20
- url: fullUrl,
21
- siteName: site.title,
22
- type: "website",
23
- ...overrides?.ogImage ? {
24
- images: [
25
- {
26
- url: overrides.ogImage,
27
- alt: pageTitle
28
- }
29
- ]
30
- } : {}
31
- },
32
- twitter: {
33
- card: "summary_large_image",
34
- title: pageTitle,
35
- description: description ?? void 0,
36
- ...overrides?.ogImage ? {
37
- images: [overrides.ogImage]
38
- } : {}
39
- }
40
- };
41
- if (overrides?.robots) {
42
- metadata.robots = {
43
- index: overrides.robots.index ?? true,
44
- follow: overrides.robots.follow ?? true
45
- };
46
- }
47
- if (googleSiteVerification) {
48
- metadata.verification = {
49
- google: googleSiteVerification
50
- };
51
- }
52
- return metadata;
53
- }
54
- function generatePreviewMetadata(input) {
55
- return generatePageMetadata({
56
- ...input,
57
- overrides: {
58
- ...input.overrides,
59
- robots: {
60
- index: false,
61
- follow: false
62
- }
63
- }
64
- });
65
- }
1
+ import {
2
+ generatePageMetadata,
3
+ generatePreviewMetadata
4
+ } from "./chunk-SWYWZT3L.mjs";
66
5
  export {
67
6
  generatePageMetadata,
68
7
  generatePreviewMetadata
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/metadata/generatePageMetadata.ts"],"sourcesContent":["/**\n * Metadata generation helper for Next.js pages\n *\n * Generates SEO-optimized metadata from Builder page data for use in\n * Next.js generateMetadata() functions.\n */\n\nimport type { LoadPageResult } from '../rendering/helpers/loadPage';\nimport type { SiteResponse } from '../client/types';\n\n/**\n * Next.js Metadata type\n * Simplified version to avoid requiring Next.js as a dependency\n */\nexport type Metadata = {\n title?: string;\n description?: string;\n alternates?: {\n canonical?: string;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string;\n siteName?: string;\n type?: string;\n images?: Array<{\n url: string;\n alt?: string;\n }>;\n };\n twitter?: {\n card?: string;\n title?: string;\n description?: string;\n images?: string[];\n };\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n verification?: {\n google?: string;\n };\n};\n\nexport type PageMetadataInput = {\n /**\n * Page data from loadPage() or custom page object\n */\n page: LoadPageResult['page'] | {\n name: string;\n purpose?: string;\n };\n\n /**\n * Site data from client.getSite()\n */\n site: SiteResponse['site'];\n\n /**\n * Current URL path (e.g., '/about', '/blog/post-1')\n */\n path: string;\n\n /**\n * Full site URL for canonical and OG URLs\n * Example: 'https://example.com'\n */\n siteUrl: string;\n\n /**\n * Optional custom metadata overrides\n */\n overrides?: {\n title?: string;\n description?: string;\n ogImage?: string;\n canonicalUrl?: string;\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n };\n\n /**\n * Optional Google site verification token\n */\n googleSiteVerification?: string;\n};\n\n/**\n * Generate Next.js Metadata object from Builder page data\n *\n * @example\n * ```tsx\n * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';\n * import { loadPage } from '@riverbankcms/sdk';\n *\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const siteData = await client.getSite({ id: siteId });\n *\n * return generatePageMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePageMetadata(input: PageMetadataInput): Metadata {\n const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;\n\n // Build page title\n const pageTitle = overrides?.title ?? page.name;\n const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;\n\n // Use page purpose as description fallback\n const description = overrides?.description ?? page.purpose;\n\n // Build full URLs\n const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;\n const fullUrl = `${siteUrl}${path}`;\n\n // Build metadata object\n const metadata: Metadata = {\n title: fullTitle,\n description: description ?? undefined,\n alternates: {\n canonical: canonicalUrl,\n },\n openGraph: {\n title: pageTitle,\n description: description ?? undefined,\n url: fullUrl,\n siteName: site.title,\n type: 'website',\n ...(overrides?.ogImage\n ? {\n images: [\n {\n url: overrides.ogImage,\n alt: pageTitle,\n },\n ],\n }\n : {}),\n },\n twitter: {\n card: 'summary_large_image',\n title: pageTitle,\n description: description ?? undefined,\n ...(overrides?.ogImage\n ? {\n images: [overrides.ogImage],\n }\n : {}),\n },\n };\n\n // Add robots meta if specified\n if (overrides?.robots) {\n metadata.robots = {\n index: overrides.robots.index ?? true,\n follow: overrides.robots.follow ?? true,\n };\n }\n\n // Add Google site verification if provided\n if (googleSiteVerification) {\n metadata.verification = {\n google: googleSiteVerification,\n };\n }\n\n return metadata;\n}\n\n/**\n * Generate metadata for preview/staging environments\n *\n * This helper adds noindex/nofollow robots tags to prevent search engines\n * from indexing preview or staging URLs.\n *\n * @example\n * ```tsx\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const isPreview = process.env.VERCEL_ENV !== 'production';\n *\n * return generatePreviewMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePreviewMetadata(input: PageMetadataInput): Metadata {\n return generatePageMetadata({\n ...input,\n overrides: {\n ...input.overrides,\n robots: {\n index: false,\n follow: false,\n },\n },\n });\n}\n"],"mappings":";;;AAgHO,SAAS,qBAAqB,OAAoC;AACvE,QAAM,EAAE,MAAM,MAAM,MAAM,SAAS,WAAW,uBAAuB,IAAI;AAGzE,QAAM,YAAY,WAAW,SAAS,KAAK;AAC3C,QAAM,YAAY,cAAc,KAAK,QAAQ,YAAY,GAAG,SAAS,MAAM,KAAK,KAAK;AAGrF,QAAM,cAAc,WAAW,eAAe,KAAK;AAGnD,QAAM,eAAe,WAAW,gBAAgB,GAAG,OAAO,GAAG,IAAI;AACjE,QAAM,UAAU,GAAG,OAAO,GAAG,IAAI;AAGjC,QAAM,WAAqB;AAAA,IACzB,OAAO;AAAA,IACP,aAAa,eAAe;AAAA,IAC5B,YAAY;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,aAAa,eAAe;AAAA,MAC5B,KAAK;AAAA,MACL,UAAU,KAAK;AAAA,MACf,MAAM;AAAA,MACN,GAAI,WAAW,UACX;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,KAAK,UAAU;AAAA,YACf,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa,eAAe;AAAA,MAC5B,GAAI,WAAW,UACX;AAAA,QACE,QAAQ,CAAC,UAAU,OAAO;AAAA,MAC5B,IACA,CAAC;AAAA,IACP;AAAA,EACF;AAGA,MAAI,WAAW,QAAQ;AACrB,aAAS,SAAS;AAAA,MAChB,OAAO,UAAU,OAAO,SAAS;AAAA,MACjC,QAAQ,UAAU,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AAGA,MAAI,wBAAwB;AAC1B,aAAS,eAAe;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;AAuBO,SAAS,wBAAwB,OAAoC;AAC1E,SAAO,qBAAqB;AAAA,IAC1B,GAAG;AAAA,IACH,WAAW;AAAA,MACT,GAAG,MAAM;AAAA,MACT,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -13,7 +13,6 @@
13
13
 
14
14
 
15
15
  var _chunkEIVISR62js = require('./chunk-EIVISR62.js');
16
- require('./chunk-DGUM43GV.js');
17
16
 
18
17
 
19
18
 
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,mxBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,mxBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"}
@@ -13,7 +13,6 @@ import {
13
13
  isNavLink,
14
14
  transformToNavItems
15
15
  } from "./chunk-YXA4GAAQ.mjs";
16
- import "./chunk-BJTO5JO5.mjs";
17
16
  export {
18
17
  buildLogo,
19
18
  buildLogoViewModel,
@@ -0,0 +1,66 @@
1
+ import { WebhookPayload } from '../webhooks.mjs';
2
+ import 'zod';
3
+
4
+ /**
5
+ * Next.js revalidation handler for webhook-based cache invalidation
6
+ *
7
+ * This module provides a pre-built API route handler for processing
8
+ * CMS webhooks and revalidating Next.js cache entries.
9
+ *
10
+ * @example One-line setup in consumer site
11
+ * ```ts
12
+ * // app/api/revalidate/route.ts
13
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
14
+ * export const POST = createRevalidateHandler();
15
+ * ```
16
+ *
17
+ * @example With custom options
18
+ * ```ts
19
+ * // app/api/revalidate/route.ts
20
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
21
+ *
22
+ * export const POST = createRevalidateHandler({
23
+ * onRevalidate: (payload, items) => {
24
+ * console.log(`Revalidated ${items.length} items for ${payload.event}`);
25
+ * },
26
+ * });
27
+ * ```
28
+ */
29
+
30
+ /**
31
+ * Options for the revalidation handler.
32
+ */
33
+ interface RevalidateHandlerOptions {
34
+ /**
35
+ * Override the webhook secret. Defaults to RIVERBANK_WEBHOOK_SECRET env var.
36
+ */
37
+ secret?: string;
38
+ /**
39
+ * Callback called after successful revalidation.
40
+ * Useful for logging or analytics.
41
+ */
42
+ onRevalidate?: (payload: WebhookPayload, revalidatedItems: string[]) => void;
43
+ }
44
+ /**
45
+ * Create a Next.js API route handler for webhook revalidation.
46
+ *
47
+ * The handler:
48
+ * 1. Verifies the webhook signature using HMAC-SHA256
49
+ * 2. Calls `revalidateTag()` for each tag in the payload
50
+ * 3. Calls `revalidatePath()` if a path is included in the data
51
+ * 4. Returns a JSON response with the revalidation results
52
+ *
53
+ * @param options - Configuration options
54
+ * @returns A Next.js Route Handler function
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * // app/api/revalidate/route.ts
59
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
60
+ *
61
+ * export const POST = createRevalidateHandler();
62
+ * ```
63
+ */
64
+ declare function createRevalidateHandler(options?: RevalidateHandlerOptions): (request: Request) => Promise<Response>;
65
+
66
+ export { type RevalidateHandlerOptions, createRevalidateHandler };
@@ -0,0 +1,66 @@
1
+ import { WebhookPayload } from '../webhooks.js';
2
+ import 'zod';
3
+
4
+ /**
5
+ * Next.js revalidation handler for webhook-based cache invalidation
6
+ *
7
+ * This module provides a pre-built API route handler for processing
8
+ * CMS webhooks and revalidating Next.js cache entries.
9
+ *
10
+ * @example One-line setup in consumer site
11
+ * ```ts
12
+ * // app/api/revalidate/route.ts
13
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
14
+ * export const POST = createRevalidateHandler();
15
+ * ```
16
+ *
17
+ * @example With custom options
18
+ * ```ts
19
+ * // app/api/revalidate/route.ts
20
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
21
+ *
22
+ * export const POST = createRevalidateHandler({
23
+ * onRevalidate: (payload, items) => {
24
+ * console.log(`Revalidated ${items.length} items for ${payload.event}`);
25
+ * },
26
+ * });
27
+ * ```
28
+ */
29
+
30
+ /**
31
+ * Options for the revalidation handler.
32
+ */
33
+ interface RevalidateHandlerOptions {
34
+ /**
35
+ * Override the webhook secret. Defaults to RIVERBANK_WEBHOOK_SECRET env var.
36
+ */
37
+ secret?: string;
38
+ /**
39
+ * Callback called after successful revalidation.
40
+ * Useful for logging or analytics.
41
+ */
42
+ onRevalidate?: (payload: WebhookPayload, revalidatedItems: string[]) => void;
43
+ }
44
+ /**
45
+ * Create a Next.js API route handler for webhook revalidation.
46
+ *
47
+ * The handler:
48
+ * 1. Verifies the webhook signature using HMAC-SHA256
49
+ * 2. Calls `revalidateTag()` for each tag in the payload
50
+ * 3. Calls `revalidatePath()` if a path is included in the data
51
+ * 4. Returns a JSON response with the revalidation results
52
+ *
53
+ * @param options - Configuration options
54
+ * @returns A Next.js Route Handler function
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * // app/api/revalidate/route.ts
59
+ * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
60
+ *
61
+ * export const POST = createRevalidateHandler();
62
+ * ```
63
+ */
64
+ declare function createRevalidateHandler(options?: RevalidateHandlerOptions): (request: Request) => Promise<Response>;
65
+
66
+ export { type RevalidateHandlerOptions, createRevalidateHandler };