@riverbankcms/sdk 0.7.5 → 0.8.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 (72) hide show
  1. package/README.md +88 -1
  2. package/dist/cli/index.js +3693 -39
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/client.d.mts +2 -2
  5. package/dist/client/client.d.ts +2 -2
  6. package/dist/client/client.js +105 -2
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/client.mjs +105 -2
  9. package/dist/client/client.mjs.map +1 -1
  10. package/dist/client/hooks.d.mts +2 -2
  11. package/dist/client/hooks.d.ts +2 -2
  12. package/dist/client/usePage-CdnO2CP5.d.mts +6875 -0
  13. package/dist/client/usePage-_ksKXlUF.d.ts +6875 -0
  14. package/dist/server/{Layout-qWLdVm5-.d.mts → Layout-D4J009eS.d.mts} +1 -1
  15. package/dist/server/{Layout-Yluyb6sK.d.ts → Layout-l2v4Qa6E.d.ts} +1 -1
  16. package/dist/server/{chunk-2NBNOY3C.mjs → chunk-65A5HAUZ.mjs} +106 -3
  17. package/dist/server/chunk-65A5HAUZ.mjs.map +1 -0
  18. package/dist/server/{chunk-KH3EXBJM.js → chunk-WM646WI3.js} +106 -3
  19. package/dist/server/chunk-WM646WI3.js.map +1 -0
  20. package/dist/server/{components-Di5ME6He.d.ts → components-D2uCKCj7.d.ts} +3 -3
  21. package/dist/server/{components-DNHfSCML.d.mts → components-vtYEmmPF.d.mts} +3 -3
  22. package/dist/server/components.d.mts +5 -5
  23. package/dist/server/components.d.ts +5 -5
  24. package/dist/server/config-validation.d.mts +2 -2
  25. package/dist/server/config-validation.d.ts +2 -2
  26. package/dist/server/config.d.mts +3 -3
  27. package/dist/server/config.d.ts +3 -3
  28. package/dist/server/data.d.mts +2 -2
  29. package/dist/server/data.d.ts +2 -2
  30. package/dist/server/{index-Clm3skz_.d.mts → index-2qnY7VH_.d.mts} +1 -1
  31. package/dist/server/{index-DLvNddi-.d.ts → index-BxrAuL9K.d.ts} +1 -1
  32. package/dist/server/{index-C9Ra8dza.d.ts → index-CH_dvF6n.d.ts} +2 -2
  33. package/dist/server/{index--Oyunk_B.d.mts → index-DfWg1Qle.d.mts} +2 -2
  34. package/dist/server/index.d.mts +13 -5
  35. package/dist/server/index.d.ts +13 -5
  36. package/dist/server/index.js +10 -10
  37. package/dist/server/index.mjs +1 -1
  38. package/dist/server/{loadContent-D7LQwI0o.d.ts → loadContent-DECnsp4k.d.ts} +3 -3
  39. package/dist/server/{loadContent-DVfuBLiZ.d.mts → loadContent-Du5kS8UM.d.mts} +3 -3
  40. package/dist/server/{loadPage-BmYJCe_V.d.ts → loadPage-BZohBxxf.d.ts} +2 -2
  41. package/dist/server/{loadPage-BucnLHmE.d.mts → loadPage-VBorKlWv.d.mts} +2 -2
  42. package/dist/server/metadata.d.mts +4 -4
  43. package/dist/server/metadata.d.ts +4 -4
  44. package/dist/server/navigation.d.mts +2 -2
  45. package/dist/server/navigation.d.ts +2 -2
  46. package/dist/server/next.d.mts +38 -7
  47. package/dist/server/next.d.ts +38 -7
  48. package/dist/server/next.js +29 -11
  49. package/dist/server/next.js.map +1 -1
  50. package/dist/server/next.mjs +29 -11
  51. package/dist/server/next.mjs.map +1 -1
  52. package/dist/server/rendering/server.d.mts +4 -4
  53. package/dist/server/rendering/server.d.ts +4 -4
  54. package/dist/server/rendering.d.mts +7 -7
  55. package/dist/server/rendering.d.ts +7 -7
  56. package/dist/server/routing.d.mts +4 -4
  57. package/dist/server/routing.d.ts +4 -4
  58. package/dist/server/server.d.mts +5 -5
  59. package/dist/server/server.d.ts +5 -5
  60. package/dist/server/server.js +2 -2
  61. package/dist/server/server.mjs +1 -1
  62. package/dist/server/{types-C-LShyIg.d.mts → types-BRQ_6yOc.d.mts} +43 -1
  63. package/dist/server/{types-BjgZt8xJ.d.mts → types-CJfJwcuL.d.mts} +37 -0
  64. package/dist/server/{types-Dt98DeYa.d.ts → types-CgSO0yxg.d.ts} +8 -0
  65. package/dist/server/{types-BRQyLrQU.d.ts → types-D0rPF8l5.d.ts} +43 -1
  66. package/dist/server/{types-DLBhEPSt.d.ts → types-D8XqwoVd.d.ts} +37 -0
  67. package/dist/server/{types-BSV6Vc-P.d.mts → types-DT30Qy7x.d.mts} +8 -0
  68. package/dist/server/{validation-DU2YE7u5.d.ts → validation-D1LaY1kQ.d.ts} +1 -1
  69. package/dist/server/{validation-BGuRo8P1.d.mts → validation-Pv3Zs6dP.d.mts} +1 -1
  70. package/package.json +2 -1
  71. package/dist/server/chunk-2NBNOY3C.mjs.map +0 -1
  72. package/dist/server/chunk-KH3EXBJM.js.map +0 -1
package/README.md CHANGED
@@ -90,9 +90,95 @@ const client = createRiverbankClient({
90
90
  ttl?: number; // Default: 300 (seconds)
91
91
  maxSize?: number; // Default: 100
92
92
  };
93
+ resilience?: ResilienceConfig; // See "Resilience & Caching" section
93
94
  });
94
95
  ```
95
96
 
97
+ ### Resilience & Caching
98
+
99
+ The SDK provides a multi-layer resilience strategy to keep your site running even during CMS outages:
100
+
101
+ 1. **In-Memory Cache** - Fast cache with configurable TTL
102
+ 2. **Stale-If-Error** - Serves stale cached data when live fetch fails
103
+ 3. **Circuit Breaker** - Fail-fast after repeated failures (5 by default)
104
+ 4. **Prebuild Fallback** - Static build artifacts as last resort
105
+ 5. **Retry with Backoff** - Automatic retry for transient errors
106
+
107
+ **Basic Configuration:**
108
+
109
+ ```ts
110
+ const client = createRiverbankClient({
111
+ apiKey: process.env.RIVERBANK_API_KEY!,
112
+ baseUrl: process.env.RIVERBANK_BASE_URL!,
113
+ cache: {
114
+ enabled: true,
115
+ ttl: 300, // 5 minutes fresh cache
116
+ maxSize: 100,
117
+ },
118
+ resilience: {
119
+ enabled: true,
120
+ staleIfError: true,
121
+ staleTtlSec: 300, // Additional 5 minutes for stale data
122
+ prebuildDir: '.riverbank-cache', // Enable prebuild fallback
123
+ maxPrebuildAgeSec: 86400, // 24 hours max prebuild age
124
+ },
125
+ });
126
+ ```
127
+
128
+ **Monitoring Callbacks:**
129
+
130
+ ```ts
131
+ resilience: {
132
+ // Called on every request with status information
133
+ onStatusChange: (status) => {
134
+ console.log('SDK request:', {
135
+ source: status.source, // 'live' | 'cache' | 'stale' | 'prebuild' | 'error'
136
+ circuit: status.circuit.state, // 'closed' | 'open' | 'half-open'
137
+ staleAgeSec: status.staleAgeSec,
138
+ prebuildAgeSec: status.prebuildAgeSec,
139
+ error: status.error?.message,
140
+ });
141
+ },
142
+
143
+ // Called only when entering/exiting degraded mode
144
+ onDegradedMode: (degraded, status) => {
145
+ if (degraded) {
146
+ console.warn('CMS degraded mode:', status.source);
147
+ // Alert monitoring system
148
+ }
149
+ },
150
+ }
151
+ ```
152
+
153
+ **Programmatic State Access:**
154
+
155
+ ```ts
156
+ // Get the last request status
157
+ const lastStatus = client.getLastEmittedStatus();
158
+
159
+ // Get current circuit breaker state
160
+ const circuitState = client.getCircuitState();
161
+ // { state: 'closed', failureCount: 0 }
162
+ ```
163
+
164
+ **Full Configuration Options:**
165
+
166
+ | Option | Default | Description |
167
+ |--------|---------|-------------|
168
+ | `resilience.enabled` | `true` | Enable resilience features |
169
+ | `resilience.staleIfError` | `true` | Serve stale data on failure |
170
+ | `resilience.staleTtlSec` | `300` | Additional stale window after cache TTL |
171
+ | `resilience.requestTimeoutMs` | `8000` | Request timeout (5000 in browser) |
172
+ | `resilience.prebuildDir` | - | Path to prebuild cache (enables fallback) |
173
+ | `resilience.maxPrebuildAgeSec` | `86400` | Maximum prebuild age (24h) |
174
+ | `resilience.retry.maxAttempts` | `3` | Total attempts including initial |
175
+ | `resilience.retry.baseDelayMs` | `200` | Base delay between retries |
176
+ | `resilience.retry.maxDelayMs` | `2000` | Maximum retry delay |
177
+ | `resilience.circuitBreaker.failureThreshold` | `5` | Failures before circuit opens |
178
+ | `resilience.circuitBreaker.resetTimeoutMs` | `30000` | Time before half-open |
179
+
180
+ For detailed testing and verification steps, see [`docs/resilience-verification.md`](./docs/resilience-verification.md).
181
+
96
182
  ### Server-Side API
97
183
 
98
184
  ```tsx
@@ -2768,5 +2854,6 @@ import {
2768
2854
  - `@riverbankcms/sdk/navigation` - Navigation helpers and types
2769
2855
  - `@riverbankcms/sdk/analytics` - Analytics tracking helpers
2770
2856
  - `@riverbankcms/sdk/config` - Site configuration utilities (includes `defineConfig`, `defineContentConfig`, `RiverbankSiteConfig`, `ContentConfig`, etc.)
2771
- - `@riverbankcms/sdk/next` - Next.js integration utilities (`createCatchAllPage`)
2857
+ - `@riverbankcms/sdk/next` - Next.js integration utilities (`createCatchAllPage`, ISR helpers, `generateStaticParams`)
2858
+ - `@riverbankcms/sdk/prebuild` - Prebuild cache generation (`generatePrebuildCache`, `PrebuildLoader`)
2772
2859
  - `@riverbankcms/sdk/spam-protection` - ALTCHA spam protection (`useSpamProtection`, `getChallengeUrl`, `AltchaWidget`)