@riverbankcms/sdk 0.7.4 → 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.
- package/README.md +88 -1
- package/dist/cli/index.js +3693 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.mts +2 -2
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.js +167 -4
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +167 -4
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +2 -2
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/usePage-CdnO2CP5.d.mts +6875 -0
- package/dist/client/usePage-_ksKXlUF.d.ts +6875 -0
- package/dist/server/{Layout-qWLdVm5-.d.mts → Layout-D4J009eS.d.mts} +1 -1
- package/dist/server/{Layout-Yluyb6sK.d.ts → Layout-l2v4Qa6E.d.ts} +1 -1
- package/dist/server/{chunk-74XUVNOO.mjs → chunk-4YQJUL5W.mjs} +4 -2
- package/dist/server/{chunk-74XUVNOO.mjs.map → chunk-4YQJUL5W.mjs.map} +1 -1
- package/dist/server/{chunk-JNU7ZS2V.mjs → chunk-65A5HAUZ.mjs} +168 -5
- package/dist/server/chunk-65A5HAUZ.mjs.map +1 -0
- package/dist/server/{chunk-JWRNMNWI.js → chunk-EIJ27EZQ.js} +4 -2
- package/dist/server/chunk-EIJ27EZQ.js.map +1 -0
- package/dist/server/{chunk-6Z4MQG47.js → chunk-WM646WI3.js} +168 -5
- package/dist/server/chunk-WM646WI3.js.map +1 -0
- package/dist/server/{components-Di5ME6He.d.ts → components-D2uCKCj7.d.ts} +3 -3
- package/dist/server/{components-DNHfSCML.d.mts → components-vtYEmmPF.d.mts} +3 -3
- package/dist/server/components.d.mts +5 -5
- package/dist/server/components.d.ts +5 -5
- package/dist/server/config-validation.d.mts +2 -2
- package/dist/server/config-validation.d.ts +2 -2
- package/dist/server/config.d.mts +3 -3
- package/dist/server/config.d.ts +3 -3
- package/dist/server/data.d.mts +2 -2
- package/dist/server/data.d.ts +2 -2
- package/dist/server/{index-Clm3skz_.d.mts → index-2qnY7VH_.d.mts} +1 -1
- package/dist/server/{index-DLvNddi-.d.ts → index-BxrAuL9K.d.ts} +1 -1
- package/dist/server/{index-C9Ra8dza.d.ts → index-CH_dvF6n.d.ts} +2 -2
- package/dist/server/{index--Oyunk_B.d.mts → index-DfWg1Qle.d.mts} +2 -2
- package/dist/server/index.d.mts +13 -5
- package/dist/server/index.d.ts +13 -5
- package/dist/server/index.js +10 -10
- package/dist/server/index.mjs +1 -1
- package/dist/server/{loadContent-D7LQwI0o.d.ts → loadContent-DECnsp4k.d.ts} +3 -3
- package/dist/server/{loadContent-DVfuBLiZ.d.mts → loadContent-Du5kS8UM.d.mts} +3 -3
- package/dist/server/{loadPage-BmYJCe_V.d.ts → loadPage-BZohBxxf.d.ts} +2 -2
- package/dist/server/{loadPage-BucnLHmE.d.mts → loadPage-VBorKlWv.d.mts} +2 -2
- package/dist/server/metadata.d.mts +4 -4
- package/dist/server/metadata.d.ts +4 -4
- package/dist/server/navigation.d.mts +2 -2
- package/dist/server/navigation.d.ts +2 -2
- package/dist/server/next.d.mts +38 -7
- package/dist/server/next.d.ts +38 -7
- package/dist/server/next.js +35 -17
- package/dist/server/next.js.map +1 -1
- package/dist/server/next.mjs +30 -12
- package/dist/server/next.mjs.map +1 -1
- package/dist/server/rendering/server.d.mts +4 -4
- package/dist/server/rendering/server.d.ts +4 -4
- package/dist/server/rendering.d.mts +7 -7
- package/dist/server/rendering.d.ts +7 -7
- package/dist/server/rendering.js +2 -2
- package/dist/server/rendering.mjs +1 -1
- package/dist/server/routing.d.mts +4 -4
- package/dist/server/routing.d.ts +4 -4
- package/dist/server/server.d.mts +5 -5
- package/dist/server/server.d.ts +5 -5
- package/dist/server/server.js +3 -3
- package/dist/server/server.mjs +2 -2
- package/dist/server/{types-C-LShyIg.d.mts → types-BRQ_6yOc.d.mts} +43 -1
- package/dist/server/{types-BjgZt8xJ.d.mts → types-CJfJwcuL.d.mts} +37 -0
- package/dist/server/{types-Dt98DeYa.d.ts → types-CgSO0yxg.d.ts} +8 -0
- package/dist/server/{types-BRQyLrQU.d.ts → types-D0rPF8l5.d.ts} +43 -1
- package/dist/server/{types-DLBhEPSt.d.ts → types-D8XqwoVd.d.ts} +37 -0
- package/dist/server/{types-BSV6Vc-P.d.mts → types-DT30Qy7x.d.mts} +8 -0
- package/dist/server/{validation-DU2YE7u5.d.ts → validation-D1LaY1kQ.d.ts} +1 -1
- package/dist/server/{validation-BGuRo8P1.d.mts → validation-Pv3Zs6dP.d.mts} +1 -1
- package/package.json +2 -1
- package/dist/server/chunk-6Z4MQG47.js.map +0 -1
- package/dist/server/chunk-JNU7ZS2V.mjs.map +0 -1
- package/dist/server/chunk-JWRNMNWI.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`)
|