@towa-digital/storyblok-nuxt-cv 0.1.3 → 0.2.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 CHANGED
@@ -60,7 +60,7 @@ built-in webhook route are on by default.
60
60
 
61
61
  Then create a **story publish webhook** in Storyblok
62
62
  (Settings → Webhooks, story events) pointing at
63
- `https://<site>/api/storyblokCvWebhook`, set a secret, and provide it as
63
+ `https://<site>/api/storyblok-cv-webhook`, set a secret, and provide it as
64
64
  `NUXT_STORYBLOK_CV_WEBHOOK_SECRET`.
65
65
 
66
66
  ## Configuration
@@ -69,10 +69,11 @@ Then create a **story publish webhook** in Storyblok
69
69
  export default defineNuxtConfig({
70
70
  storyblokCv: {
71
71
  token: undefined, // default: auto-detected from @storyblok/nuxt config; env NUXT_STORYBLOK_CV_TOKEN
72
- region: 'eu', // eu | us | ap | ca | cn — or apiHost: 'https://...'
72
+ region: 'eu', // eu | us | ap | ca | cn
73
+ endpoint: undefined, // full API endpoint incl. /v2 (like @storyblok/nuxt); overrides region — for proxied spaces
73
74
  storage: 'storyblok-cv', // nitro storage mount name
74
- endpoint: '/api/storyblokCv', // GET current cv; false to disable
75
- webhook: true, // built-in route /api/storyblokCvWebhook; string = custom route; false = use refreshStoryblokCv() yourself
75
+ statusRoute: '/api/storyblok-cv', // GET current cv; false to disable
76
+ webhook: true, // built-in route /api/storyblok-cv-webhook; string = custom route; false = use refreshStoryblokCv() yourself
76
77
  ttl: false, // e.g. 60_000 — background refresh when the stored cv is older (serverless/multi-instance)
77
78
  onStartup: true, // populate the store once at boot
78
79
  },
@@ -146,7 +147,7 @@ Prefer throttling over hard filtering if you reach for this.
146
147
  Don't trust a single "looks fresh" check. Use the lab method from the audit
147
148
  playbook (`docs/detection.md` Step 7): instrumented production build, publish
148
149
  via **form mode** (not the visual editor), sample repeatedly, test the warmed
149
- URL shape. Quick sanity check in production: `GET /api/storyblokCv` before and
150
+ URL shape. Quick sanity check in production: `GET /api/storyblok-cv` before and
150
151
  after a publish — the value must change without a restart.
151
152
 
152
153
  ## Development
package/dist/module.d.mts CHANGED
@@ -11,21 +11,27 @@ interface ModuleOptions {
11
11
  * Overridable at runtime via `NUXT_STORYBLOK_CV_TOKEN`.
12
12
  */
13
13
  token?: string;
14
- /** Storyblok API region. Ignored when `apiHost` is set. */
14
+ /** Storyblok API region. Ignored when `endpoint` is set. */
15
15
  region?: 'eu' | 'us' | 'ap' | 'ca' | 'cn';
16
- /** Full API host override, e.g. for proxies. */
17
- apiHost?: string;
16
+ /**
17
+ * Full Storyblok API endpoint **including the version segment**, exactly as
18
+ * `@storyblok/nuxt` / storyblok-js-client expect it (e.g.
19
+ * `https://api.storyblok.com/v2`). Set this for proxied spaces — pass the
20
+ * same value as the render client's `apiOptions.endpoint`, no surgery. When
21
+ * unset, derived from `region`.
22
+ */
23
+ endpoint?: string;
18
24
  /**
19
25
  * Nitro storage mount the `cv` is stored under. The default (unmounted) is
20
26
  * per-process memory — fine for a single Node process. For PM2 cluster mount
21
27
  * an `fs` driver, for multi-node mount Redis, in the host's `nitro.storage`.
22
28
  */
23
29
  storage?: string;
24
- /** GET endpoint exposing the current `cv` (client re-pins, debugging). `false` disables. */
25
- endpoint?: string | false;
30
+ /** GET route exposing the current `cv` (client re-pins, debugging). `false` disables. */
31
+ statusRoute?: string | false;
26
32
  /**
27
33
  * Built-in Storyblok publish webhook. `true` registers it at
28
- * `/api/storyblokCvWebhook`, a string sets the route, `false` disables it —
34
+ * `/api/storyblok-cv-webhook`, a string sets the route, `false` disables it —
29
35
  * then call the auto-imported `refreshStoryblokCv()` from your own webhook
30
36
  * handler instead. Requires `NUXT_STORYBLOK_CV_WEBHOOK_SECRET`.
31
37
  */
@@ -46,7 +52,7 @@ declare module '@nuxt/schema' {
46
52
  interface RuntimeConfig {
47
53
  storyblokCv: {
48
54
  token: string;
49
- apiHost: string;
55
+ endpoint: string;
50
56
  storage: string;
51
57
  ttl: number;
52
58
  onStartup: boolean;
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.10.0"
6
6
  },
7
- "version": "0.1.3",
7
+ "version": "0.2.0",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import { defineNuxtModule, createResolver, useLogger, addServerHandler, addServerPlugin, addServerImports, addPlugin, addTypeTemplate } from '@nuxt/kit';
2
2
  import { defu } from 'defu';
3
3
 
4
- const API_HOSTS = {
5
- eu: "https://api.storyblok.com",
6
- us: "https://api-us.storyblok.com",
7
- ap: "https://api-ap.storyblok.com",
8
- ca: "https://api-ca.storyblok.com",
9
- cn: "https://api.storyblokchina.cn"
4
+ const API_ENDPOINTS = {
5
+ eu: "https://api.storyblok.com/v2",
6
+ us: "https://api-us.storyblok.com/v2",
7
+ ap: "https://api-ap.storyblok.com/v2",
8
+ ca: "https://api-ca.storyblok.com/v2",
9
+ cn: "https://api.storyblokchina.cn/v2"
10
10
  };
11
11
  const module$1 = defineNuxtModule({
12
12
  meta: {
@@ -19,7 +19,7 @@ const module$1 = defineNuxtModule({
19
19
  debug: false,
20
20
  region: "eu",
21
21
  storage: "storyblok-cv",
22
- endpoint: "/api/storyblokCv",
22
+ statusRoute: "/api/storyblok-cv",
23
23
  webhook: true,
24
24
  ttl: false,
25
25
  onStartup: true
@@ -42,7 +42,7 @@ const module$1 = defineNuxtModule({
42
42
  nuxt.options.runtimeConfig.storyblokCv,
43
43
  {
44
44
  token: token ?? "",
45
- apiHost: options.apiHost || API_HOSTS[options.region] || API_HOSTS.eu,
45
+ endpoint: options.endpoint || API_ENDPOINTS[options.region] || API_ENDPOINTS.eu,
46
46
  storage: options.storage,
47
47
  ttl: options.ttl === false ? 0 : options.ttl ?? 0,
48
48
  onStartup: options.onStartup !== false,
@@ -53,16 +53,16 @@ const module$1 = defineNuxtModule({
53
53
  middleware: true,
54
54
  handler: resolver.resolve("./runtime/server/middleware/cv")
55
55
  });
56
- if (options.endpoint) {
56
+ if (options.statusRoute) {
57
57
  addServerHandler({
58
- route: options.endpoint,
58
+ route: options.statusRoute,
59
59
  method: "get",
60
60
  handler: resolver.resolve("./runtime/server/api/cv.get")
61
61
  });
62
62
  }
63
63
  if (options.webhook) {
64
64
  addServerHandler({
65
- route: typeof options.webhook === "string" ? options.webhook : "/api/storyblokCvWebhook",
65
+ route: typeof options.webhook === "string" ? options.webhook : "/api/storyblok-cv-webhook",
66
66
  method: "post",
67
67
  handler: resolver.resolve("./runtime/server/api/webhook.post")
68
68
  });
@@ -3,12 +3,12 @@ import { useRuntimeConfig, useStorage } from "#imports";
3
3
  const KEY = "current";
4
4
  const store = () => useStorage(useRuntimeConfig().storyblokCv.storage);
5
5
  export async function getLiveStoryblokCv() {
6
- const { token, apiHost } = useRuntimeConfig().storyblokCv;
6
+ const { token, endpoint } = useRuntimeConfig().storyblokCv;
7
7
  if (!token) {
8
8
  throw new Error("[storyblok-cv] no access token configured");
9
9
  }
10
- const response = await $fetch("/v2/cdn/spaces/me", {
11
- baseURL: apiHost,
10
+ const response = await $fetch("cdn/spaces/me", {
11
+ baseURL: endpoint,
12
12
  query: { token }
13
13
  });
14
14
  return response?.space?.version ?? 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@towa-digital/storyblok-nuxt-cv",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Keeps Storyblok published content fresh on long-running Nuxt servers by bridging the live cache version (cv) to the render client — no redeploy after publish.",
5
5
  "repository": "github:towa-digital/storyblok-nuxt-cv",
6
6
  "author": {