@eyeballs/cms 0.1.0 → 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
@@ -15,9 +15,13 @@ in the Vercel project environment:
15
15
  ```txt
16
16
  EYEBALLS_CMS_URL=https://app.example.com
17
17
  EYEBALLS_CMS_TOKEN=eyb_...
18
+ EYEBALLS_CMS_VERCEL_BYPASS=...
18
19
  REVALIDATE_SECRET=eyb_reval_...
19
20
  ```
20
21
 
22
+ `EYEBALLS_CMS_VERCEL_BYPASS` is only needed when the CMS deployment uses Vercel Deployment
23
+ Protection. `VERCEL_AUTOMATION_BYPASS_SECRET` is also a useful fallback name in website projects.
24
+
21
25
  ## Basic Usage
22
26
 
23
27
  ```ts
@@ -31,6 +35,46 @@ const cms = createEyeballsCms({
31
35
  const videos: CmsVideo[] = await cms.videos.list();
32
36
  ```
33
37
 
38
+ `defaultRequestInit.headers` can supply any other deployment-specific request headers. The client
39
+ always adds the CMS bearer token and can add `x-vercel-protection-bypass` through the dedicated
40
+ `vercelProtectionBypass` option.
41
+
42
+ ## Recommended Next.js Adapter
43
+
44
+ Keep one small server-only adapter in each website. The Next client applies a one-hour default
45
+ revalidation window and the tag names used by Eyeballs revalidation webhooks:
46
+
47
+ ```ts
48
+ // src/lib/cms.ts
49
+ import type { CmsContentEntry, CmsVideo } from '@eyeballs/cms';
50
+ import { createEyeballsNextCms } from '@eyeballs/cms/next';
51
+ import { cache } from 'react';
52
+
53
+ type HomeFields = {
54
+ 'hero-title'?: string;
55
+ 'featured-work'?: CmsVideo[];
56
+ };
57
+
58
+ const cms = createEyeballsNextCms({
59
+ baseUrl: process.env.EYEBALLS_CMS_URL!,
60
+ token: process.env.EYEBALLS_CMS_TOKEN!,
61
+ revalidate: 3600,
62
+ vercelProtectionBypass:
63
+ process.env.EYEBALLS_CMS_VERCEL_BYPASS || process.env.VERCEL_AUTOMATION_BYPASS_SECRET,
64
+ });
65
+
66
+ export const getHome = cache(async () => {
67
+ return cms.content.getBySlug<HomeFields>('home');
68
+ });
69
+
70
+ export type HomeEntry = CmsContentEntry<HomeFields>;
71
+ ```
72
+
73
+ The helper assigns `work`, `work:{slug}`, `roster`, `roster-profile:{slug}`, `content`,
74
+ `content-type:{typeSlug}`, and `content:{entrySlug}` tags as appropriate. Use
75
+ `eyeballsCmsCacheTags` and a method's `tags` option when a site needs a route-specific override,
76
+ such as `roster:directors`.
77
+
34
78
  ## Next.js Revalidation Route
35
79
 
36
80
  ```ts
@@ -42,6 +86,9 @@ export const POST = createEyeballsRevalidateHandler({
42
86
  });
43
87
  ```
44
88
 
89
+ The handler preserves Next's default `revalidatePath(path)` behavior. Pass `pathType: 'page'` or
90
+ `pathType: 'layout'` only when a site intentionally needs that scope.
91
+
45
92
  ## Agent Instructions For Starter Sites
46
93
 
47
94
  Add this to the starter site's `AGENTS.md`:
package/dist/client.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import type { CmsContentEntry, CmsRosterProfile, CmsVideo } from './types.js';
2
1
  export type EyeballsCmsClientOptions = {
3
2
  baseUrl: string;
4
3
  token: string;
5
4
  fetch?: typeof fetch;
6
5
  defaultRequestInit?: RequestInit;
6
+ vercelProtectionBypass?: string | null;
7
7
  };
8
8
  export declare class EyeballsCmsError extends Error {
9
9
  status: number;
@@ -13,20 +13,20 @@ export declare class EyeballsCmsError extends Error {
13
13
  export declare function createEyeballsCms(options: EyeballsCmsClientOptions): {
14
14
  request: <T>(path: string, init?: RequestInit) => Promise<T>;
15
15
  videos: {
16
- list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<CmsVideo<Fields>[]>;
17
- get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsVideo<Fields>>;
16
+ list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<import("./types.js").CmsVideo<Fields>[]>;
17
+ get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsVideo<Fields>>;
18
18
  };
19
19
  roster: {
20
- list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<CmsRosterProfile<Fields>[]>;
21
- get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsRosterProfile<Fields>>;
20
+ list<Fields extends Record<string, unknown> = Record<string, unknown>>(): Promise<import("./types.js").CmsRosterProfile<Fields>[]>;
21
+ get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsRosterProfile<Fields>>;
22
22
  };
23
23
  content: {
24
24
  list<Fields extends Record<string, unknown> = Record<string, unknown>>(options?: {
25
25
  type?: string;
26
26
  slug?: string;
27
- }): Promise<CmsContentEntry<Fields>[]>;
28
- getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<CmsContentEntry<Fields>>;
29
- getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string): Promise<CmsContentEntry<Fields>>;
27
+ }): Promise<import("./types.js").CmsContentEntry<Fields>[]>;
28
+ getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string): Promise<import("./types.js").CmsContentEntry<Fields>>;
29
+ getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string): Promise<import("./types.js").CmsContentEntry<Fields>>;
30
30
  };
31
31
  };
32
32
  export type EyeballsCmsClient = ReturnType<typeof createEyeballsCms>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,kBAAkB,CAAC,EAAE,WAAW,CAAC;CACjC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAM7D;AAsBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;cAO3C,CAAC,QAAQ,MAAM,SAAQ,WAAW,KAAQ,OAAO,CAAC,CAAC,CAAC;;aA2B9D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAIvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAMvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC;YACtF,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;SACd;kBASe,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/C,MAAM;yBAQZ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/B,MAAM,QAAQ,MAAM;;EAQ9B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAM7D;AAsBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;cAO3C,CAAC,QAAQ,MAAM,SAAQ,WAAW,KAAQ,OAAO,CAAC,CAAC,CAAC;;aAgD9D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAIvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAIvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM;;;aASF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC;YACtF,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;SACd;kBASe,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/C,MAAM;yBAQZ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAC/B,MAAM,QAAQ,MAAM;;EAQ9B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
package/dist/client.js CHANGED
@@ -35,21 +35,43 @@ export function createEyeballsCms(options) {
35
35
  const requestFetch = options.fetch ?? fetch;
36
36
  async function request(path, init = {}) {
37
37
  const headers = new Headers(options.defaultRequestInit?.headers);
38
+ const vercelProtectionBypass = options.vercelProtectionBypass?.trim();
39
+ if (vercelProtectionBypass) {
40
+ headers.set('x-vercel-protection-bypass', vercelProtectionBypass);
41
+ }
38
42
  new Headers(init.headers).forEach((value, key) => headers.set(key, value));
39
43
  headers.set('authorization', `Bearer ${token}`);
40
- const res = await requestFetch(joinPath(baseUrl, path), {
44
+ const url = joinPath(baseUrl, path);
45
+ const res = await requestFetch(url, {
41
46
  ...options.defaultRequestInit,
42
47
  ...init,
43
48
  headers,
44
49
  });
45
50
  const text = await res.text();
46
- const payload = text ? JSON.parse(text) : null;
51
+ let payload = null;
52
+ if (text) {
53
+ try {
54
+ payload = JSON.parse(text);
55
+ }
56
+ catch {
57
+ payload = text;
58
+ }
59
+ }
47
60
  if (!res.ok) {
48
- const message = payload && typeof payload === 'object' && 'error' in payload
49
- ? String(payload.error)
50
- : `Eyeballs CMS request failed: ${res.status}`;
61
+ const isVercelProtectionPage = res.status === 401 &&
62
+ typeof payload === 'string' &&
63
+ (payload.includes('Vercel Authentication') ||
64
+ payload.includes('x-vercel-protection-bypass'));
65
+ const message = isVercelProtectionPage
66
+ ? `Eyeballs CMS request failed: ${res.status}. Vercel Deployment Protection blocked ${url}; configure vercelProtectionBypass with the CMS project's Protection Bypass for Automation secret.`
67
+ : payload && typeof payload === 'object' && 'error' in payload
68
+ ? String(payload.error)
69
+ : `Eyeballs CMS request failed: ${res.status}${typeof payload === 'string' ? ` ${payload.slice(0, 1000)}` : ''}`;
51
70
  throw new EyeballsCmsError(message, res.status, payload);
52
71
  }
72
+ if (typeof payload === 'string') {
73
+ throw new EyeballsCmsError('Eyeballs CMS returned invalid JSON', res.status, payload);
74
+ }
53
75
  return payload;
54
76
  }
55
77
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/helpers.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { CmsContentEntry, CmsRosterProfile, CmsVideo } from './types.js';
2
2
  export declare function trimSlashes(value: string): string;
3
+ export declare function normalizeWebsitePath(path: string): string;
3
4
  export declare function getContentEntryPath(entry: CmsContentEntry): string | null;
4
5
  export declare function getContentTypePath(typeSlug: string): string | null;
5
6
  export declare function getRosterProfilePath(profile: Pick<CmsRosterProfile, 'slug' | 'type'>, pathPrefix?: string | null): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAExC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,iBAWzD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAGlD;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC,EAChD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,iBAM1B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAO/E"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAExC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAIhD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,iBAWzD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAGlD;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC,EAChD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,iBAM1B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAO/E"}
package/dist/helpers.js CHANGED
@@ -1,12 +1,18 @@
1
1
  export function trimSlashes(value) {
2
2
  return value.trim().replace(/^\/+|\/+$/g, '');
3
3
  }
4
+ export function normalizeWebsitePath(path) {
5
+ const normalized = path.trim();
6
+ if (!normalized || normalized === '/')
7
+ return '/';
8
+ return `/${trimSlashes(normalized)}`;
9
+ }
4
10
  export function getContentEntryPath(entry) {
5
11
  if (entry.type?.kind === 'pages') {
6
12
  const websitePath = entry.website_path?.trim();
7
13
  if (!websitePath || websitePath === '/')
8
14
  return '/';
9
- return websitePath.startsWith('/') ? websitePath : `/${websitePath}`;
15
+ return normalizeWebsitePath(websitePath);
10
16
  }
11
17
  const typeSlug = entry.type?.slug ? trimSlashes(entry.type.slug) : '';
12
18
  const entrySlug = trimSlashes(entry.slug);
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACzD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACpD,OAAO,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,OAAgD,EAChD,UAA0B;IAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,UAA6B,EAAE;IAC/E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,yBAAyB,UAAU,iBAAiB,KAAK,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAClD,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACzD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACpD,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,OAAgD,EAChD,UAA0B;IAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,UAA6B,EAAE;IAC/E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,yBAAyB,UAAU,iBAAiB,KAAK,EAAE,CAAC;AACpE,CAAC"}
package/dist/next.d.ts CHANGED
@@ -1,9 +1,58 @@
1
+ import { type EyeballsCmsClientOptions } from './client.js';
2
+ import type { CmsContentEntry } from './types.js';
3
+ export declare const eyeballsCmsCacheTags: {
4
+ readonly all: "eyeballs-cms";
5
+ readonly work: "work";
6
+ readonly workItem: (slug: string) => string;
7
+ readonly roster: "roster";
8
+ readonly rosterType: (typeRouteSlug: string) => string;
9
+ readonly rosterProfile: (slug: string) => string;
10
+ readonly content: "content";
11
+ readonly contentType: (typeSlug: string) => string;
12
+ readonly contentEntry: (slug: string) => string;
13
+ };
14
+ type NextFetchRequestInit = RequestInit & {
15
+ next?: {
16
+ revalidate?: number | false;
17
+ tags?: string[];
18
+ };
19
+ };
20
+ export type EyeballsNextCmsOptions = Omit<EyeballsCmsClientOptions, 'defaultRequestInit'> & {
21
+ revalidate?: number | false;
22
+ defaultRequestInit?: NextFetchRequestInit;
23
+ };
24
+ export type EyeballsNextRequestOptions = {
25
+ tags?: string[];
26
+ };
27
+ export declare function createEyeballsNextCms(options: EyeballsNextCmsOptions): {
28
+ request<T>(path: string, init?: RequestInit, request?: EyeballsNextRequestOptions): Promise<T>;
29
+ videos: {
30
+ list<Fields extends Record<string, unknown> = Record<string, unknown>>(request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsVideo<Fields>[]>;
31
+ get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsVideo<Fields>>;
32
+ };
33
+ roster: {
34
+ list<Fields extends Record<string, unknown> = Record<string, unknown>>(request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsRosterProfile<Fields>[]>;
35
+ get<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<import("./types.js").CmsRosterProfile<Fields>>;
36
+ };
37
+ content: {
38
+ list<Fields extends Record<string, unknown> = Record<string, unknown>>(options?: {
39
+ type?: string;
40
+ slug?: string;
41
+ tags?: string[];
42
+ }): Promise<CmsContentEntry<Fields>[]>;
43
+ getBySlug<Fields extends Record<string, unknown> = Record<string, unknown>>(slug: string, request?: EyeballsNextRequestOptions): Promise<CmsContentEntry<Fields>>;
44
+ getByTypeAndSlug<Fields extends Record<string, unknown> = Record<string, unknown>>(type: string, slug: string, request?: EyeballsNextRequestOptions): Promise<CmsContentEntry<Fields>>;
45
+ };
46
+ };
47
+ export type EyeballsNextCmsClient = ReturnType<typeof createEyeballsNextCms>;
1
48
  export type EyeballsRevalidationPayload = {
2
49
  tags?: string[];
3
50
  paths?: string[];
4
51
  };
5
52
  export type EyeballsRevalidateHandlerOptions = {
6
53
  secret: string | null | undefined;
54
+ pathType?: 'layout' | 'page';
7
55
  };
8
56
  export declare function createEyeballsRevalidateHandler(options: EyeballsRevalidateHandlerOptions): (req: Request) => Promise<Response>;
57
+ export {};
9
58
  //# sourceMappingURL=next.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAClC,CAAC;AA6BF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,IAG7D,KAAK,OAAO,uBA2BvC"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,oBAAoB;;;8BAGf,MAAM;;yCAEK,MAAM;mCACZ,MAAM;;qCAEJ,MAAM;kCACT,MAAM;CAClB,CAAC;AAEX,KAAK,oBAAoB,GAAG,WAAW,GAAG;IACzC,IAAI,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,GAAG;IAC3F,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB;YAuB3D,CAAC,QAAQ,MAAM,SAAS,WAAW,YAAY,0BAA0B;;aAO3E,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAChC,0BAA0B;YAMjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACnC,MAAM,YACF,0BAA0B;;;aAWhC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAChC,0BAA0B;YAMjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACnC,MAAM,YACF,0BAA0B;;;aAQhC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC;YAChF,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;SAChB,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;kBAS5B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCACzC,MAAM,YACF,0BAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;yBAKlB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kCAChD,MAAM,QACN,MAAM,YACF,0BAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;EAUrC;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE7E,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B,CAAC;AASF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,IAG7D,KAAK,OAAO,uBA6BvC"}
package/dist/next.js CHANGED
@@ -1,53 +1,116 @@
1
1
  import { revalidatePath, revalidateTag } from 'next/cache';
2
+ import { createEyeballsCms } from './client.js';
3
+ export const eyeballsCmsCacheTags = {
4
+ all: 'eyeballs-cms',
5
+ work: 'work',
6
+ workItem: (slug) => `work:${slug}`,
7
+ roster: 'roster',
8
+ rosterType: (typeRouteSlug) => `roster:${typeRouteSlug}`,
9
+ rosterProfile: (slug) => `roster-profile:${slug}`,
10
+ content: 'content',
11
+ contentType: (typeSlug) => `content-type:${typeSlug}`,
12
+ contentEntry: (slug) => `content:${slug}`,
13
+ };
14
+ function trimCacheValues(values) {
15
+ return values.map(value => value.trim()).filter(Boolean);
16
+ }
17
+ export function createEyeballsNextCms(options) {
18
+ const { defaultRequestInit, revalidate = 3600, ...clientOptions } = options;
19
+ function client(tags) {
20
+ const defaultNext = defaultRequestInit?.next;
21
+ return createEyeballsCms({
22
+ ...clientOptions,
23
+ defaultRequestInit: {
24
+ ...defaultRequestInit,
25
+ next: {
26
+ ...defaultNext,
27
+ revalidate,
28
+ tags: trimCacheValues(tags),
29
+ },
30
+ },
31
+ });
32
+ }
33
+ function tagsOrDefault(request, tags) {
34
+ return request?.tags ?? tags;
35
+ }
36
+ return {
37
+ request(path, init, request) {
38
+ return client(tagsOrDefault(request, [eyeballsCmsCacheTags.all])).request(path, init);
39
+ },
40
+ videos: {
41
+ list(request) {
42
+ return client(tagsOrDefault(request, [eyeballsCmsCacheTags.work])).videos.list();
43
+ },
44
+ get(slug, request) {
45
+ return client(tagsOrDefault(request, [
46
+ eyeballsCmsCacheTags.work,
47
+ eyeballsCmsCacheTags.workItem(slug),
48
+ ])).videos.get(slug);
49
+ },
50
+ },
51
+ roster: {
52
+ list(request) {
53
+ return client(tagsOrDefault(request, [eyeballsCmsCacheTags.roster])).roster.list();
54
+ },
55
+ get(slug, request) {
56
+ return client(tagsOrDefault(request, [eyeballsCmsCacheTags.rosterProfile(slug)])).roster.get(slug);
57
+ },
58
+ },
59
+ content: {
60
+ list(options) {
61
+ const tags = options?.type
62
+ ? [eyeballsCmsCacheTags.contentType(options.type)]
63
+ : [eyeballsCmsCacheTags.content];
64
+ return client(tagsOrDefault(options, tags)).content.list({
65
+ type: options?.type,
66
+ slug: options?.slug,
67
+ });
68
+ },
69
+ getBySlug(slug, request) {
70
+ return client(tagsOrDefault(request, [eyeballsCmsCacheTags.contentEntry(slug)])).content.getBySlug(slug);
71
+ },
72
+ getByTypeAndSlug(type, slug, request) {
73
+ return client(tagsOrDefault(request, [
74
+ eyeballsCmsCacheTags.contentType(type),
75
+ eyeballsCmsCacheTags.contentEntry(slug),
76
+ ])).content.getByTypeAndSlug(type, slug);
77
+ },
78
+ },
79
+ };
80
+ }
2
81
  function json(payload, status = 200) {
3
82
  return new Response(JSON.stringify(payload), {
4
83
  status,
5
84
  headers: { 'content-type': 'application/json' },
6
85
  });
7
86
  }
8
- function getHeader(req, name) {
9
- return req.headers.get(name)?.trim() || '';
10
- }
11
- function normalizePath(path) {
12
- if (typeof path !== 'string')
13
- return null;
14
- const trimmed = path.trim();
15
- return trimmed.startsWith('/') ? trimmed : null;
16
- }
17
- function normalizeTag(tag) {
18
- if (typeof tag !== 'string')
19
- return null;
20
- const trimmed = tag.trim();
21
- return trimmed || null;
22
- }
23
- function isString(value) {
24
- return typeof value === 'string';
25
- }
26
87
  export function createEyeballsRevalidateHandler(options) {
27
- const expectedSecret = options.secret?.trim() || '';
88
+ const expectedSecret = options.secret || '';
28
89
  return async function POST(req) {
29
- if (!expectedSecret) {
30
- return json({ ok: false, error: 'Missing revalidation secret' }, 500);
31
- }
32
- const providedSecret = getHeader(req, 'x-revalidate-secret');
33
- if (providedSecret !== expectedSecret) {
34
- return json({ ok: false, error: 'Unauthorized' }, 401);
90
+ if (!expectedSecret || req.headers.get('x-revalidate-secret') !== expectedSecret) {
91
+ return json({ error: 'Unauthorized' }, 401);
35
92
  }
36
93
  let body = {};
37
94
  try {
38
95
  body = (await req.json());
39
96
  }
40
97
  catch {
41
- return json({ ok: false, error: 'Invalid JSON body' }, 400);
98
+ return json({ error: 'Invalid JSON body' }, 400);
42
99
  }
43
- const tags = Array.isArray(body.tags) ? body.tags.map(normalizeTag).filter(isString) : [];
100
+ const tags = Array.isArray(body.tags)
101
+ ? body.tags.filter((tag) => typeof tag === 'string')
102
+ : [];
44
103
  const paths = Array.isArray(body.paths)
45
- ? body.paths.map(normalizePath).filter(isString)
104
+ ? body.paths.filter((path) => typeof path === 'string' && path.startsWith('/'))
46
105
  : [];
47
106
  for (const tag of tags)
48
107
  revalidateTag(tag, 'max');
49
- for (const path of paths)
50
- revalidatePath(path, 'page');
108
+ for (const path of paths) {
109
+ if (options.pathType)
110
+ revalidatePath(path, options.pathType);
111
+ else
112
+ revalidatePath(path);
113
+ }
51
114
  return json({ ok: true, tags, paths });
52
115
  };
53
116
  }
package/dist/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -135,4 +135,22 @@ export type CmsContentEntry<Fields extends Record<string, unknown> = Record<stri
135
135
  export type EyeballsCmsErrorPayload = {
136
136
  error: string;
137
137
  };
138
+ export type CmsVideosResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
139
+ videos: CmsVideo<Fields>[];
140
+ };
141
+ export type CmsVideoResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
142
+ video: CmsVideo<Fields>;
143
+ };
144
+ export type CmsRosterResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
145
+ roster: CmsRosterProfile<Fields>[];
146
+ };
147
+ export type CmsRosterProfileResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
148
+ roster: CmsRosterProfile<Fields>;
149
+ };
150
+ export type CmsContentResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
151
+ content: CmsContentEntry<Fields>[];
152
+ };
153
+ export type CmsContentEntryResponse<Fields extends Record<string, unknown> = Record<string, unknown>> = {
154
+ content: CmsContentEntry<Fields>;
155
+ };
138
156
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -19,18 +19,27 @@ EYEBALLS_CMS_URL=https://app.example.com
19
19
  EYEBALLS_CMS_TOKEN=eyb_...
20
20
  ```
21
21
 
22
- Starter sites should use the shared package when available:
22
+ Next.js starter sites should configure the shared package in one server-only adapter:
23
23
 
24
24
  ```ts
25
- import { createEyeballsCms } from '@eyeballs/cms';
25
+ import { createEyeballsNextCms } from '@eyeballs/cms/next';
26
26
 
27
- const cms = createEyeballsCms({
27
+ const cms = createEyeballsNextCms({
28
28
  baseUrl: process.env.EYEBALLS_CMS_URL!,
29
29
  token: process.env.EYEBALLS_CMS_TOKEN!,
30
+ revalidate: 3600,
31
+ vercelProtectionBypass:
32
+ process.env.EYEBALLS_CMS_VERCEL_BYPASS || process.env.VERCEL_AUTOMATION_BYPASS_SECRET,
30
33
  });
31
34
  ```
32
35
 
33
- Every request must include either a bearer token or an `x-api-key` header:
36
+ `createEyeballsNextCms` adds the bearer token, applies the configured Next.js revalidation period,
37
+ and uses the same cache tags sent by Eyeballs frontend revalidation webhooks. It accepts custom
38
+ request headers through `defaultRequestInit.headers` and sends
39
+ `x-vercel-protection-bypass` when `vercelProtectionBypass` is configured.
40
+
41
+ For non-Next.js integrations, use `createEyeballsCms`. Every direct request must include either a
42
+ bearer token or an `x-api-key` header:
34
43
 
35
44
  ```ts
36
45
  async function cmsFetch(path: string) {
@@ -316,14 +325,14 @@ Use the Content API docs to build /journal and /journal/[slug].
316
325
  Values are returned in `entry.fields`, `video.fields`, or `roster.fields` by field ID.
317
326
 
318
327
  | Field type | API value |
319
- | ------------------------------------- | ------------------------------------------------ | ----- |
328
+ | ------------------------------------- | ------------------------------------------------ |
320
329
  | `text` | `string` |
321
330
  | `textarea` | `string` |
322
331
  | `richtext` | `string` containing HTML |
323
332
  | `boolean` | `boolean` |
324
333
  | `image` | image URL string |
325
334
  | `date` | date string |
326
- | `library_work` with `multiple: false` | `CmsVideo | null` |
335
+ | `library_work` with `multiple: false` | `CmsVideo \| null` |
327
336
  | `library_work` with multiple/default | `CmsVideo[]` |
328
337
  | `content_blocks` | `ContentBlock[]` |
329
338
  | `array` | array of objects with `_key` plus item field IDs |
@@ -464,36 +473,68 @@ roster:{typeRouteSlug}
464
473
  Library work changes can also revalidate work pages, roster profiles, and content entries that
465
474
  reference the changed video through `library_work` fields.
466
475
 
476
+ Next.js sites should use the packaged route handler:
477
+
478
+ ```ts
479
+ // app/api/revalidate/route.ts
480
+ import { createEyeballsRevalidateHandler } from '@eyeballs/cms/next';
481
+
482
+ export const POST = createEyeballsRevalidateHandler({
483
+ secret: process.env.REVALIDATE_SECRET,
484
+ });
485
+ ```
486
+
487
+ The handler authenticates `x-revalidate-secret`, ignores non-string tags and invalid paths, calls
488
+ `revalidateTag(tag, 'max')`, and calls `revalidatePath(path)`. A site can opt into a specific Next
489
+ path scope with `pathType: 'page'` or `pathType: 'layout'`.
490
+
491
+ ### Cache Tags Used By The Next Client
492
+
493
+ | Request | Default tags |
494
+ | ------------------------------- | ------------------------------------------------ |
495
+ | Video list | `work` |
496
+ | Video detail | `work`, `work:{slug}` |
497
+ | Roster list | `roster` |
498
+ | Roster profile | `roster-profile:{slug}` |
499
+ | Content list | `content` |
500
+ | Content type list | `content-type:{typeSlug}` |
501
+ | Content detail by slug | `content:{entrySlug}` |
502
+ | Content detail by type and slug | `content-type:{typeSlug}`, `content:{entrySlug}` |
503
+
504
+ Methods accept a `tags` override for site-specific routing conventions. For example, a directors
505
+ listing can use `eyeballsCmsCacheTags.rosterType('directors')`. React's `cache()` remains a thin
506
+ site-adapter concern because memoization boundaries depend on each site's routing and render tree.
507
+
467
508
  ## Starter Site Recipes
468
509
 
469
510
  ### List Published Work
470
511
 
471
512
  ```ts
472
- const { videos } = await cmsFetch('/api/cms/videos');
513
+ const videos = await cms.videos.list();
473
514
  ```
474
515
 
475
516
  ### Work Detail Page
476
517
 
477
518
  ```ts
478
- const { video } = await cmsFetch(`/api/cms/videos/${params.slug}`);
519
+ const video = await cms.videos.get(params.slug);
479
520
  ```
480
521
 
481
522
  ### Collection List
482
523
 
483
524
  ```ts
484
- const { content } = await cmsFetch('/api/cms/content?type=journal');
525
+ const content = await cms.content.list({ type: 'journal' });
485
526
  ```
486
527
 
487
528
  ### Collection Detail
488
529
 
489
530
  ```ts
490
- const { content: entry } = await cmsFetch(`/api/cms/content?type=journal&slug=${params.slug}`);
531
+ const entry = await cms.content.getByTypeAndSlug('journal', params.slug);
491
532
  ```
492
533
 
493
534
  ### Page By Slug
494
535
 
495
536
  ```ts
496
- const { content: page } = await cmsFetch('/api/cms/content/home');
537
+ const page = await cms.content.getBySlug('home');
497
538
  ```
498
539
 
499
540
  For page routing, prefer matching by `website_path` from the content list when the route is not
@@ -502,8 +543,8 @@ the same as the entry slug.
502
543
  ### Roster List And Profile
503
544
 
504
545
  ```ts
505
- const { roster } = await cmsFetch('/api/cms/roster');
506
- const { roster: profile } = await cmsFetch(`/api/cms/roster/${params.slug}`);
546
+ const roster = await cms.roster.list();
547
+ const profile = await cms.roster.get(params.slug);
507
548
  ```
508
549
 
509
550
  ## Maintenance Checklist
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eyeballs/cms",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Shared Eyeballs CMS API types, client helpers, and documentation.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",