@riverbankcms/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +1892 -0
  2. package/dist/cli/index.js +327 -0
  3. package/dist/cli/index.js.map +1 -0
  4. package/dist/client/analytics.d.mts +103 -0
  5. package/dist/client/analytics.d.ts +103 -0
  6. package/dist/client/analytics.js +197 -0
  7. package/dist/client/analytics.js.map +1 -0
  8. package/dist/client/analytics.mjs +169 -0
  9. package/dist/client/analytics.mjs.map +1 -0
  10. package/dist/client/bookings.d.mts +89 -0
  11. package/dist/client/bookings.d.ts +89 -0
  12. package/dist/client/bookings.js +34 -0
  13. package/dist/client/bookings.js.map +1 -0
  14. package/dist/client/bookings.mjs +11 -0
  15. package/dist/client/bookings.mjs.map +1 -0
  16. package/dist/client/client.d.mts +195 -0
  17. package/dist/client/client.d.ts +195 -0
  18. package/dist/client/client.js +606 -0
  19. package/dist/client/client.js.map +1 -0
  20. package/dist/client/client.mjs +572 -0
  21. package/dist/client/client.mjs.map +1 -0
  22. package/dist/client/hooks.d.mts +71 -0
  23. package/dist/client/hooks.d.ts +71 -0
  24. package/dist/client/hooks.js +264 -0
  25. package/dist/client/hooks.js.map +1 -0
  26. package/dist/client/hooks.mjs +235 -0
  27. package/dist/client/hooks.mjs.map +1 -0
  28. package/dist/client/rendering/client.d.mts +1 -0
  29. package/dist/client/rendering/client.d.ts +1 -0
  30. package/dist/client/rendering/client.js +33 -0
  31. package/dist/client/rendering/client.js.map +1 -0
  32. package/dist/client/rendering/client.mjs +8 -0
  33. package/dist/client/rendering/client.mjs.map +1 -0
  34. package/dist/client/usePage-BvKAa3Zw.d.mts +366 -0
  35. package/dist/client/usePage-BvKAa3Zw.d.ts +366 -0
  36. package/dist/server/chunk-2RW5HAQQ.mjs +86 -0
  37. package/dist/server/chunk-2RW5HAQQ.mjs.map +1 -0
  38. package/dist/server/chunk-3KKZVGH4.mjs +179 -0
  39. package/dist/server/chunk-3KKZVGH4.mjs.map +1 -0
  40. package/dist/server/chunk-4Z3GPTCS.js +179 -0
  41. package/dist/server/chunk-4Z3GPTCS.js.map +1 -0
  42. package/dist/server/chunk-4Z5FBFRL.mjs +211 -0
  43. package/dist/server/chunk-4Z5FBFRL.mjs.map +1 -0
  44. package/dist/server/chunk-ADREPXFU.js +86 -0
  45. package/dist/server/chunk-ADREPXFU.js.map +1 -0
  46. package/dist/server/chunk-F472SMKX.js +140 -0
  47. package/dist/server/chunk-F472SMKX.js.map +1 -0
  48. package/dist/server/chunk-GWBMJPLH.mjs +57 -0
  49. package/dist/server/chunk-GWBMJPLH.mjs.map +1 -0
  50. package/dist/server/chunk-JB4LIEFS.js +85 -0
  51. package/dist/server/chunk-JB4LIEFS.js.map +1 -0
  52. package/dist/server/chunk-PEAXKTDU.mjs +140 -0
  53. package/dist/server/chunk-PEAXKTDU.mjs.map +1 -0
  54. package/dist/server/chunk-QQ6U4QX6.js +120 -0
  55. package/dist/server/chunk-QQ6U4QX6.js.map +1 -0
  56. package/dist/server/chunk-R5YGLRUG.mjs +122 -0
  57. package/dist/server/chunk-R5YGLRUG.mjs.map +1 -0
  58. package/dist/server/chunk-SW7LE4M3.js +211 -0
  59. package/dist/server/chunk-SW7LE4M3.js.map +1 -0
  60. package/dist/server/chunk-W3K7LVPS.mjs +120 -0
  61. package/dist/server/chunk-W3K7LVPS.mjs.map +1 -0
  62. package/dist/server/chunk-WKG57P2H.mjs +85 -0
  63. package/dist/server/chunk-WKG57P2H.mjs.map +1 -0
  64. package/dist/server/chunk-YHEZMVTS.js +122 -0
  65. package/dist/server/chunk-YHEZMVTS.js.map +1 -0
  66. package/dist/server/chunk-YXDDFG3N.js +57 -0
  67. package/dist/server/chunk-YXDDFG3N.js.map +1 -0
  68. package/dist/server/components.d.mts +49 -0
  69. package/dist/server/components.d.ts +49 -0
  70. package/dist/server/components.js +22 -0
  71. package/dist/server/components.js.map +1 -0
  72. package/dist/server/components.mjs +22 -0
  73. package/dist/server/components.mjs.map +1 -0
  74. package/dist/server/config-validation.d.mts +300 -0
  75. package/dist/server/config-validation.d.ts +300 -0
  76. package/dist/server/config-validation.js +50 -0
  77. package/dist/server/config-validation.js.map +1 -0
  78. package/dist/server/config-validation.mjs +50 -0
  79. package/dist/server/config-validation.mjs.map +1 -0
  80. package/dist/server/config.d.mts +38 -0
  81. package/dist/server/config.d.ts +38 -0
  82. package/dist/server/config.js +44 -0
  83. package/dist/server/config.js.map +1 -0
  84. package/dist/server/config.mjs +44 -0
  85. package/dist/server/config.mjs.map +1 -0
  86. package/dist/server/data.d.mts +108 -0
  87. package/dist/server/data.d.ts +108 -0
  88. package/dist/server/data.js +15 -0
  89. package/dist/server/data.js.map +1 -0
  90. package/dist/server/data.mjs +15 -0
  91. package/dist/server/data.mjs.map +1 -0
  92. package/dist/server/index-B0yI_V6Z.d.mts +18 -0
  93. package/dist/server/index-C6M0Wfjq.d.ts +18 -0
  94. package/dist/server/index.d.mts +5 -0
  95. package/dist/server/index.d.ts +5 -0
  96. package/dist/server/index.js +12 -0
  97. package/dist/server/index.js.map +1 -0
  98. package/dist/server/index.mjs +12 -0
  99. package/dist/server/index.mjs.map +1 -0
  100. package/dist/server/loadContent-CJcbYF3J.d.ts +152 -0
  101. package/dist/server/loadContent-zhlL4YSE.d.mts +152 -0
  102. package/dist/server/loadPage-BYmVMk0V.d.ts +216 -0
  103. package/dist/server/loadPage-CCf15nt8.d.mts +216 -0
  104. package/dist/server/loadPage-DVH3DW6E.js +9 -0
  105. package/dist/server/loadPage-DVH3DW6E.js.map +1 -0
  106. package/dist/server/loadPage-PHQZ6XQZ.mjs +9 -0
  107. package/dist/server/loadPage-PHQZ6XQZ.mjs.map +1 -0
  108. package/dist/server/metadata.d.mts +135 -0
  109. package/dist/server/metadata.d.ts +135 -0
  110. package/dist/server/metadata.js +68 -0
  111. package/dist/server/metadata.js.map +1 -0
  112. package/dist/server/metadata.mjs +68 -0
  113. package/dist/server/metadata.mjs.map +1 -0
  114. package/dist/server/rendering/server.d.mts +83 -0
  115. package/dist/server/rendering/server.d.ts +83 -0
  116. package/dist/server/rendering/server.js +14 -0
  117. package/dist/server/rendering/server.js.map +1 -0
  118. package/dist/server/rendering/server.mjs +14 -0
  119. package/dist/server/rendering/server.mjs.map +1 -0
  120. package/dist/server/rendering.d.mts +12 -0
  121. package/dist/server/rendering.d.ts +12 -0
  122. package/dist/server/rendering.js +40 -0
  123. package/dist/server/rendering.js.map +1 -0
  124. package/dist/server/rendering.mjs +40 -0
  125. package/dist/server/rendering.mjs.map +1 -0
  126. package/dist/server/routing.d.mts +115 -0
  127. package/dist/server/routing.d.ts +115 -0
  128. package/dist/server/routing.js +57 -0
  129. package/dist/server/routing.js.map +1 -0
  130. package/dist/server/routing.mjs +57 -0
  131. package/dist/server/routing.mjs.map +1 -0
  132. package/dist/server/server.d.mts +9 -0
  133. package/dist/server/server.d.ts +9 -0
  134. package/dist/server/server.js +21 -0
  135. package/dist/server/server.js.map +1 -0
  136. package/dist/server/server.mjs +21 -0
  137. package/dist/server/server.mjs.map +1 -0
  138. package/dist/server/theme-bridge.d.mts +232 -0
  139. package/dist/server/theme-bridge.d.ts +232 -0
  140. package/dist/server/theme-bridge.js +231 -0
  141. package/dist/server/theme-bridge.js.map +1 -0
  142. package/dist/server/theme-bridge.mjs +231 -0
  143. package/dist/server/theme-bridge.mjs.map +1 -0
  144. package/dist/server/theme.d.mts +40 -0
  145. package/dist/server/theme.d.ts +40 -0
  146. package/dist/server/theme.js +17 -0
  147. package/dist/server/theme.js.map +1 -0
  148. package/dist/server/theme.mjs +17 -0
  149. package/dist/server/theme.mjs.map +1 -0
  150. package/dist/server/types-BCeqWtI2.d.mts +333 -0
  151. package/dist/server/types-BCeqWtI2.d.ts +333 -0
  152. package/dist/server/types-Bbo01M7P.d.mts +76 -0
  153. package/dist/server/types-Bbo01M7P.d.ts +76 -0
  154. package/dist/server/types-C6gmRHLe.d.mts +150 -0
  155. package/dist/server/types-C6gmRHLe.d.ts +150 -0
  156. package/package.json +147 -0
  157. package/src/styles/index.css +10 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Code-based data loader types for SDK custom blocks.
3
+ *
4
+ * These types enable SDK sites to define loader functions that fetch
5
+ * data from external APIs (not just CMS endpoints).
6
+ */
7
+ /**
8
+ * Context provided to code-based data loaders.
9
+ *
10
+ * Contains block metadata and page context for making informed
11
+ * data fetching decisions.
12
+ */
13
+ interface DataLoaderContext {
14
+ /** Site ID from page context */
15
+ siteId: string;
16
+ /** Page ID from page context */
17
+ pageId: string;
18
+ /** Unique block instance ID */
19
+ blockId: string;
20
+ /** Block kind (e.g., 'custom.featured-products') */
21
+ blockKind: string;
22
+ /**
23
+ * The block's CMS content.
24
+ * Use this to access field values for parameterizing API calls.
25
+ */
26
+ content: Record<string, unknown>;
27
+ /** Whether fetching preview/draft content */
28
+ previewStage: 'published' | 'preview';
29
+ }
30
+ /**
31
+ * A code-based data loader function.
32
+ *
33
+ * Receives context about the block and returns fetched data.
34
+ * Runs server-side during `loadPage()`.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const productsLoader: DataLoaderFn = async (ctx) => {
39
+ * const categoryId = ctx.content.categoryId;
40
+ * const response = await fetch(`https://api.shop.com/products?category=${categoryId}`);
41
+ * return response.json();
42
+ * };
43
+ * ```
44
+ */
45
+ type DataLoaderFn = (context: DataLoaderContext) => Promise<unknown>;
46
+ /**
47
+ * Map of loader key to loader function for a block kind.
48
+ *
49
+ * Keys become the property names in the `data` prop passed to the component.
50
+ */
51
+ type BlockLoaderMap = Record<string, DataLoaderFn>;
52
+ /**
53
+ * Registry of code-based data loaders.
54
+ *
55
+ * Keys are block kinds (e.g., 'custom.featured-products').
56
+ * Values are maps of loader keys to loader functions.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const dataLoaderOverrides: DataLoaderOverrides = {
61
+ * 'custom.featured-products': {
62
+ * products: async (ctx) => {
63
+ * return fetchProducts(ctx.content.categoryId);
64
+ * },
65
+ * },
66
+ * 'custom.instagram-feed': {
67
+ * posts: async (ctx) => {
68
+ * return fetchInstagramPosts(ctx.content.accessToken);
69
+ * },
70
+ * },
71
+ * };
72
+ * ```
73
+ */
74
+ type DataLoaderOverrides = Record<string, BlockLoaderMap>;
75
+
76
+ export type { BlockLoaderMap as B, DataLoaderOverrides as D, DataLoaderContext as a, DataLoaderFn as b };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Code-based data loader types for SDK custom blocks.
3
+ *
4
+ * These types enable SDK sites to define loader functions that fetch
5
+ * data from external APIs (not just CMS endpoints).
6
+ */
7
+ /**
8
+ * Context provided to code-based data loaders.
9
+ *
10
+ * Contains block metadata and page context for making informed
11
+ * data fetching decisions.
12
+ */
13
+ interface DataLoaderContext {
14
+ /** Site ID from page context */
15
+ siteId: string;
16
+ /** Page ID from page context */
17
+ pageId: string;
18
+ /** Unique block instance ID */
19
+ blockId: string;
20
+ /** Block kind (e.g., 'custom.featured-products') */
21
+ blockKind: string;
22
+ /**
23
+ * The block's CMS content.
24
+ * Use this to access field values for parameterizing API calls.
25
+ */
26
+ content: Record<string, unknown>;
27
+ /** Whether fetching preview/draft content */
28
+ previewStage: 'published' | 'preview';
29
+ }
30
+ /**
31
+ * A code-based data loader function.
32
+ *
33
+ * Receives context about the block and returns fetched data.
34
+ * Runs server-side during `loadPage()`.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const productsLoader: DataLoaderFn = async (ctx) => {
39
+ * const categoryId = ctx.content.categoryId;
40
+ * const response = await fetch(`https://api.shop.com/products?category=${categoryId}`);
41
+ * return response.json();
42
+ * };
43
+ * ```
44
+ */
45
+ type DataLoaderFn = (context: DataLoaderContext) => Promise<unknown>;
46
+ /**
47
+ * Map of loader key to loader function for a block kind.
48
+ *
49
+ * Keys become the property names in the `data` prop passed to the component.
50
+ */
51
+ type BlockLoaderMap = Record<string, DataLoaderFn>;
52
+ /**
53
+ * Registry of code-based data loaders.
54
+ *
55
+ * Keys are block kinds (e.g., 'custom.featured-products').
56
+ * Values are maps of loader keys to loader functions.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const dataLoaderOverrides: DataLoaderOverrides = {
61
+ * 'custom.featured-products': {
62
+ * products: async (ctx) => {
63
+ * return fetchProducts(ctx.content.categoryId);
64
+ * },
65
+ * },
66
+ * 'custom.instagram-feed': {
67
+ * posts: async (ctx) => {
68
+ * return fetchInstagramPosts(ctx.content.accessToken);
69
+ * },
70
+ * },
71
+ * };
72
+ * ```
73
+ */
74
+ type DataLoaderOverrides = Record<string, BlockLoaderMap>;
75
+
76
+ export type { BlockLoaderMap as B, DataLoaderOverrides as D, DataLoaderContext as a, DataLoaderFn as b };
@@ -0,0 +1,150 @@
1
+ import { APIEndpoints } from '@riverbankcms/api';
2
+
3
+ type SiteResponse = NonNullable<APIEndpoints['getSite']['response']>;
4
+ type PageResponse = NonNullable<APIEndpoints['getContentByPath']['response']>;
5
+ type EntriesResponse = NonNullable<APIEndpoints['listPublishedEntries']['response']>;
6
+ type EntryResponse = NonNullable<APIEndpoints['getPublishedEntryPreview']['response']>;
7
+ type PublicFormResponse = NonNullable<APIEndpoints['getPublicFormById']['response']>;
8
+ type PublicBookingServicesResponse = NonNullable<APIEndpoints['getPublicBookingServices']['response']>;
9
+ type PublicEventsResponse = NonNullable<APIEndpoints['listPublicEvents']['response']>;
10
+ /**
11
+ * Configuration for creating a Riverbank CMS client
12
+ */
13
+ interface RiverbankClientConfig {
14
+ /**
15
+ * API key for authentication (format: bld_live_... or bld_test_...)
16
+ */
17
+ apiKey: string;
18
+ /**
19
+ * Base URL for the Riverbank CMS API (required; e.g. https://dashboard.example.com/api)
20
+ */
21
+ baseUrl: string;
22
+ /**
23
+ * Cache configuration
24
+ */
25
+ cache?: {
26
+ /**
27
+ * Enable caching (default: true)
28
+ */
29
+ enabled?: boolean;
30
+ /**
31
+ * Time-to-live for cached responses in seconds
32
+ * @default 300 (5 minutes)
33
+ */
34
+ ttl?: number;
35
+ /**
36
+ * Maximum number of cached responses
37
+ * @default 100
38
+ */
39
+ maxSize?: number;
40
+ };
41
+ }
42
+ /**
43
+ * Riverbank CMS client interface
44
+ */
45
+ interface RiverbankClient {
46
+ /**
47
+ * Fetch site data by slug, domain, or ID
48
+ */
49
+ getSite(params: {
50
+ slug?: string;
51
+ domain?: string;
52
+ id?: string;
53
+ }): Promise<SiteResponse>;
54
+ /**
55
+ * Fetch a specific page by path
56
+ *
57
+ * @param params.preview - If true, returns draft content instead of published content (requires API key with site access)
58
+ */
59
+ getPage(params: {
60
+ siteId: string;
61
+ path: string;
62
+ preview?: boolean;
63
+ }): Promise<PageResponse>;
64
+ /**
65
+ * Fetch published content entries with optional pagination, sorting, and preview mode
66
+ *
67
+ * @param params.siteId - The site ID
68
+ * @param params.contentType - The content type key (e.g., 'blog-post', 'product')
69
+ * @param params.limit - Maximum number of entries to return
70
+ * @param params.order - Sort order: 'newest' (published_at desc) or 'oldest' (published_at asc)
71
+ * @param params.preview - If true, includes draft entries (requires API key with site access)
72
+ * @param params.mode - 'query' for automatic fetching, 'manual' for specific entry IDs
73
+ * @param params.entryIds - Array of entry IDs to fetch (only used when mode is 'manual')
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * // Fetch latest 10 blog posts
78
+ * const entries = await client.getEntries({
79
+ * siteId: 'site-id',
80
+ * contentType: 'blog-post',
81
+ * limit: 10,
82
+ * order: 'newest',
83
+ * });
84
+ *
85
+ * // Fetch draft entries for preview
86
+ * const drafts = await client.getEntries({
87
+ * siteId: 'site-id',
88
+ * contentType: 'blog-post',
89
+ * preview: true,
90
+ * });
91
+ *
92
+ * // Fetch specific entries by ID (manual mode)
93
+ * const specific = await client.getEntries({
94
+ * siteId: 'site-id',
95
+ * contentType: 'blog-post',
96
+ * mode: 'manual',
97
+ * entryIds: ['uuid-1', 'uuid-2'],
98
+ * });
99
+ * ```
100
+ */
101
+ getEntries(params: {
102
+ siteId: string;
103
+ contentType: string;
104
+ limit?: number;
105
+ /** Sort order for entries. 'order' uses custom ordering (default behavior). */
106
+ order?: 'newest' | 'oldest' | 'title' | 'order';
107
+ preview?: boolean;
108
+ /** Selection mode: 'query' for automatic, 'manual' for specific entry IDs */
109
+ mode?: 'query' | 'manual';
110
+ /** Entry IDs to fetch when mode is 'manual' */
111
+ entryIds?: string[];
112
+ }): Promise<EntriesResponse>;
113
+ /**
114
+ * Fetch a specific content entry by slug
115
+ */
116
+ getEntry(params: {
117
+ siteId: string;
118
+ contentType: string;
119
+ slug: string;
120
+ }): Promise<EntryResponse>;
121
+ /**
122
+ * Fetch a public form definition by ID
123
+ */
124
+ getPublicFormById(params: {
125
+ formId: string;
126
+ }): Promise<PublicFormResponse>;
127
+ /**
128
+ * Fetch public booking services for a site
129
+ */
130
+ getPublicBookingServices(params: {
131
+ siteId: string;
132
+ ids?: string;
133
+ }): Promise<PublicBookingServicesResponse>;
134
+ /**
135
+ * List public events for a site (optionally time-filtered)
136
+ */
137
+ listPublicEvents(params: {
138
+ siteId: string;
139
+ limit?: number;
140
+ from?: string;
141
+ to?: string;
142
+ stage?: string;
143
+ }): Promise<PublicEventsResponse>;
144
+ /**
145
+ * Force clear the cache
146
+ */
147
+ clearCache(): void;
148
+ }
149
+
150
+ export type { EntriesResponse as E, PageResponse as P, RiverbankClient as R, SiteResponse as S, RiverbankClientConfig as a, EntryResponse as b };
@@ -0,0 +1,150 @@
1
+ import { APIEndpoints } from '@riverbankcms/api';
2
+
3
+ type SiteResponse = NonNullable<APIEndpoints['getSite']['response']>;
4
+ type PageResponse = NonNullable<APIEndpoints['getContentByPath']['response']>;
5
+ type EntriesResponse = NonNullable<APIEndpoints['listPublishedEntries']['response']>;
6
+ type EntryResponse = NonNullable<APIEndpoints['getPublishedEntryPreview']['response']>;
7
+ type PublicFormResponse = NonNullable<APIEndpoints['getPublicFormById']['response']>;
8
+ type PublicBookingServicesResponse = NonNullable<APIEndpoints['getPublicBookingServices']['response']>;
9
+ type PublicEventsResponse = NonNullable<APIEndpoints['listPublicEvents']['response']>;
10
+ /**
11
+ * Configuration for creating a Riverbank CMS client
12
+ */
13
+ interface RiverbankClientConfig {
14
+ /**
15
+ * API key for authentication (format: bld_live_... or bld_test_...)
16
+ */
17
+ apiKey: string;
18
+ /**
19
+ * Base URL for the Riverbank CMS API (required; e.g. https://dashboard.example.com/api)
20
+ */
21
+ baseUrl: string;
22
+ /**
23
+ * Cache configuration
24
+ */
25
+ cache?: {
26
+ /**
27
+ * Enable caching (default: true)
28
+ */
29
+ enabled?: boolean;
30
+ /**
31
+ * Time-to-live for cached responses in seconds
32
+ * @default 300 (5 minutes)
33
+ */
34
+ ttl?: number;
35
+ /**
36
+ * Maximum number of cached responses
37
+ * @default 100
38
+ */
39
+ maxSize?: number;
40
+ };
41
+ }
42
+ /**
43
+ * Riverbank CMS client interface
44
+ */
45
+ interface RiverbankClient {
46
+ /**
47
+ * Fetch site data by slug, domain, or ID
48
+ */
49
+ getSite(params: {
50
+ slug?: string;
51
+ domain?: string;
52
+ id?: string;
53
+ }): Promise<SiteResponse>;
54
+ /**
55
+ * Fetch a specific page by path
56
+ *
57
+ * @param params.preview - If true, returns draft content instead of published content (requires API key with site access)
58
+ */
59
+ getPage(params: {
60
+ siteId: string;
61
+ path: string;
62
+ preview?: boolean;
63
+ }): Promise<PageResponse>;
64
+ /**
65
+ * Fetch published content entries with optional pagination, sorting, and preview mode
66
+ *
67
+ * @param params.siteId - The site ID
68
+ * @param params.contentType - The content type key (e.g., 'blog-post', 'product')
69
+ * @param params.limit - Maximum number of entries to return
70
+ * @param params.order - Sort order: 'newest' (published_at desc) or 'oldest' (published_at asc)
71
+ * @param params.preview - If true, includes draft entries (requires API key with site access)
72
+ * @param params.mode - 'query' for automatic fetching, 'manual' for specific entry IDs
73
+ * @param params.entryIds - Array of entry IDs to fetch (only used when mode is 'manual')
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * // Fetch latest 10 blog posts
78
+ * const entries = await client.getEntries({
79
+ * siteId: 'site-id',
80
+ * contentType: 'blog-post',
81
+ * limit: 10,
82
+ * order: 'newest',
83
+ * });
84
+ *
85
+ * // Fetch draft entries for preview
86
+ * const drafts = await client.getEntries({
87
+ * siteId: 'site-id',
88
+ * contentType: 'blog-post',
89
+ * preview: true,
90
+ * });
91
+ *
92
+ * // Fetch specific entries by ID (manual mode)
93
+ * const specific = await client.getEntries({
94
+ * siteId: 'site-id',
95
+ * contentType: 'blog-post',
96
+ * mode: 'manual',
97
+ * entryIds: ['uuid-1', 'uuid-2'],
98
+ * });
99
+ * ```
100
+ */
101
+ getEntries(params: {
102
+ siteId: string;
103
+ contentType: string;
104
+ limit?: number;
105
+ /** Sort order for entries. 'order' uses custom ordering (default behavior). */
106
+ order?: 'newest' | 'oldest' | 'title' | 'order';
107
+ preview?: boolean;
108
+ /** Selection mode: 'query' for automatic, 'manual' for specific entry IDs */
109
+ mode?: 'query' | 'manual';
110
+ /** Entry IDs to fetch when mode is 'manual' */
111
+ entryIds?: string[];
112
+ }): Promise<EntriesResponse>;
113
+ /**
114
+ * Fetch a specific content entry by slug
115
+ */
116
+ getEntry(params: {
117
+ siteId: string;
118
+ contentType: string;
119
+ slug: string;
120
+ }): Promise<EntryResponse>;
121
+ /**
122
+ * Fetch a public form definition by ID
123
+ */
124
+ getPublicFormById(params: {
125
+ formId: string;
126
+ }): Promise<PublicFormResponse>;
127
+ /**
128
+ * Fetch public booking services for a site
129
+ */
130
+ getPublicBookingServices(params: {
131
+ siteId: string;
132
+ ids?: string;
133
+ }): Promise<PublicBookingServicesResponse>;
134
+ /**
135
+ * List public events for a site (optionally time-filtered)
136
+ */
137
+ listPublicEvents(params: {
138
+ siteId: string;
139
+ limit?: number;
140
+ from?: string;
141
+ to?: string;
142
+ stage?: string;
143
+ }): Promise<PublicEventsResponse>;
144
+ /**
145
+ * Force clear the cache
146
+ */
147
+ clearCache(): void;
148
+ }
149
+
150
+ export type { EntriesResponse as E, PageResponse as P, RiverbankClient as R, SiteResponse as S, RiverbankClientConfig as a, EntryResponse as b };
package/package.json ADDED
@@ -0,0 +1,147 @@
1
+ {
2
+ "name": "@riverbankcms/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Riverbank CMS SDK for headless content consumption",
5
+ "main": "./dist/server/index.js",
6
+ "module": "./dist/server/index.mjs",
7
+ "types": "./dist/server/index.d.ts",
8
+ "bin": {
9
+ "riverbankcms": "./dist/cli/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/server/index.d.ts",
14
+ "import": "./dist/server/index.mjs",
15
+ "require": "./dist/server/index.js"
16
+ },
17
+ "./client": {
18
+ "types": "./dist/client/client.d.ts",
19
+ "import": "./dist/client/client.mjs",
20
+ "require": "./dist/client/client.js"
21
+ },
22
+ "./server": {
23
+ "types": "./dist/server/server.d.ts",
24
+ "import": "./dist/server/server.mjs",
25
+ "require": "./dist/server/server.js"
26
+ },
27
+ "./components": {
28
+ "types": "./dist/server/components.d.ts",
29
+ "import": "./dist/server/components.mjs",
30
+ "require": "./dist/server/components.js"
31
+ },
32
+ "./rendering": {
33
+ "types": "./dist/server/rendering.d.ts",
34
+ "import": "./dist/server/rendering.mjs",
35
+ "require": "./dist/server/rendering.js"
36
+ },
37
+ "./rendering/client": {
38
+ "types": "./dist/client/rendering/client.d.ts",
39
+ "import": "./dist/client/rendering/client.mjs",
40
+ "require": "./dist/client/rendering/client.js"
41
+ },
42
+ "./rendering/server": {
43
+ "types": "./dist/server/rendering/server.d.ts",
44
+ "import": "./dist/server/rendering/server.mjs",
45
+ "require": "./dist/server/rendering/server.js"
46
+ },
47
+ "./theme": {
48
+ "types": "./dist/server/theme.d.ts",
49
+ "import": "./dist/server/theme.mjs",
50
+ "require": "./dist/server/theme.js"
51
+ },
52
+ "./hooks": {
53
+ "types": "./dist/client/hooks.d.ts",
54
+ "import": "./dist/client/hooks.mjs",
55
+ "require": "./dist/client/hooks.js"
56
+ },
57
+ "./data": {
58
+ "types": "./dist/server/data.d.ts",
59
+ "import": "./dist/server/data.mjs",
60
+ "require": "./dist/server/data.js"
61
+ },
62
+ "./metadata": {
63
+ "types": "./dist/server/metadata.d.ts",
64
+ "import": "./dist/server/metadata.mjs",
65
+ "require": "./dist/server/metadata.js"
66
+ },
67
+ "./routing": {
68
+ "types": "./dist/server/routing.d.ts",
69
+ "import": "./dist/server/routing.mjs",
70
+ "require": "./dist/server/routing.js"
71
+ },
72
+ "./analytics": {
73
+ "types": "./dist/client/analytics.d.ts",
74
+ "import": "./dist/client/analytics.mjs",
75
+ "require": "./dist/client/analytics.js"
76
+ },
77
+ "./config": {
78
+ "types": "./dist/server/config.d.ts",
79
+ "import": "./dist/server/config.mjs",
80
+ "require": "./dist/server/config.js"
81
+ },
82
+ "./config/validation": {
83
+ "types": "./dist/server/config-validation.d.ts",
84
+ "import": "./dist/server/config-validation.mjs",
85
+ "require": "./dist/server/config-validation.js"
86
+ },
87
+ "./bookings": {
88
+ "types": "./dist/client/bookings.d.ts",
89
+ "import": "./dist/client/bookings.mjs",
90
+ "require": "./dist/client/bookings.js"
91
+ },
92
+ "./theme-bridge": {
93
+ "types": "./dist/server/theme-bridge.d.ts",
94
+ "import": "./dist/server/theme-bridge.mjs",
95
+ "require": "./dist/server/theme-bridge.js"
96
+ },
97
+ "./styles.css": "./src/styles/index.css"
98
+ },
99
+ "files": [
100
+ "dist",
101
+ "src/styles",
102
+ "README.md"
103
+ ],
104
+ "scripts": {
105
+ "build": "tsup",
106
+ "dev": "tsup --watch",
107
+ "typecheck": "tsc --noEmit",
108
+ "lint": "eslint src",
109
+ "test": "vitest run",
110
+ "verify": "pnpm test"
111
+ },
112
+ "dependencies": {
113
+ "@riverbankcms/api": "workspace:*",
114
+ "@riverbankcms/blocks": "workspace:*",
115
+ "@riverbankcms/site-renderer": "workspace:*",
116
+ "commander": "^12.1.0",
117
+ "jiti": "^2.6.1",
118
+ "zod": "^4.1.1"
119
+ },
120
+ "peerDependencies": {
121
+ "react": "19.1.0",
122
+ "react-dom": "19.1.0"
123
+ },
124
+ "devDependencies": {
125
+ "@types/node": "^22.0.0",
126
+ "@types/react": "^19.1.0",
127
+ "@types/react-dom": "^19.1.0",
128
+ "eslint": "^9.15.0",
129
+ "tsup": "^8.3.5",
130
+ "typescript": "^5.6.3",
131
+ "vitest": "^1.6.1"
132
+ },
133
+ "repository": {
134
+ "type": "git",
135
+ "url": "https://github.com/riverbankcms/riverbankcms.git",
136
+ "directory": "packages/sdk"
137
+ },
138
+ "keywords": [
139
+ "headless-cms",
140
+ "riverbankcms",
141
+ "cms",
142
+ "content",
143
+ "sdk"
144
+ ],
145
+ "license": "MIT",
146
+ "private": false
147
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Builder SDK Base Styles
3
+ *
4
+ * These styles are required for Builder blocks to render correctly.
5
+ * Import this in your app's global CSS file:
6
+ *
7
+ * @import "@riverbankcms/sdk/styles.css";
8
+ */
9
+
10
+ @import '@riverbankcms/blocks/theme/index.css';