@mhbdev/unicms 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.
Files changed (45) hide show
  1. package/README.md +137 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +17 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/http.d.ts +6 -10
  6. package/dist/http.d.ts.map +1 -1
  7. package/dist/http.js +69 -10
  8. package/dist/http.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/methods/externalUsersLogin.d.ts +35 -0
  12. package/dist/methods/externalUsersLogin.d.ts.map +1 -0
  13. package/dist/methods/externalUsersLogin.js +38 -0
  14. package/dist/methods/externalUsersLogin.js.map +1 -0
  15. package/dist/next/index.d.ts +3 -0
  16. package/dist/next/index.d.ts.map +1 -0
  17. package/dist/next/index.js +2 -0
  18. package/dist/next/index.js.map +1 -0
  19. package/dist/next/serverClient.d.ts +6 -0
  20. package/dist/next/serverClient.d.ts.map +1 -0
  21. package/dist/next/serverClient.js +133 -0
  22. package/dist/next/serverClient.js.map +1 -0
  23. package/dist/next/types.d.ts +16 -0
  24. package/dist/next/types.d.ts.map +1 -0
  25. package/dist/next/types.js +2 -0
  26. package/dist/next/types.js.map +1 -0
  27. package/dist/react/hooks.d.ts +33 -0
  28. package/dist/react/hooks.d.ts.map +1 -0
  29. package/dist/react/hooks.js +260 -0
  30. package/dist/react/hooks.js.map +1 -0
  31. package/dist/react/index.d.ts +6 -0
  32. package/dist/react/index.d.ts.map +1 -0
  33. package/dist/react/index.js +5 -0
  34. package/dist/react/index.js.map +1 -0
  35. package/dist/react/provider.d.ts +5 -0
  36. package/dist/react/provider.d.ts.map +1 -0
  37. package/dist/react/provider.js +133 -0
  38. package/dist/react/provider.js.map +1 -0
  39. package/dist/react/types.d.ts +95 -0
  40. package/dist/react/types.d.ts.map +1 -0
  41. package/dist/react/types.js +2 -0
  42. package/dist/react/types.js.map +1 -0
  43. package/dist/types.d.ts +38 -5
  44. package/dist/types.d.ts.map +1 -1
  45. package/package.json +20 -1
package/README.md CHANGED
@@ -56,6 +56,143 @@ await cms.listFaqs({ includeRawContent: true })
56
56
 
57
57
  await cms.listCategories()
58
58
  await cms.listTags()
59
+
60
+ await cms.externalUsersLogin({
61
+ username: 'tenant-admin',
62
+ password: 'secret',
63
+ })
64
+ ```
65
+
66
+ ## Generic typed requests
67
+
68
+ Use `request` for advanced/custom endpoints with schema-validated responses:
69
+
70
+ ```ts
71
+ import { z } from 'zod'
72
+
73
+ const response = await cms.request({
74
+ path: '/api/public/v1/posts',
75
+ query: { page: 1, limit: 5 },
76
+ schema: z.object({
77
+ data: z.object({
78
+ docs: z.array(z.object({ id: z.number(), slug: z.string() })),
79
+ }),
80
+ }),
81
+ })
82
+ ```
83
+
84
+ ## React / Next.js integration
85
+
86
+ Install React peer deps if needed:
87
+
88
+ ```bash
89
+ pnpm add react react-dom
90
+ ```
91
+
92
+ Use the React entrypoint:
93
+
94
+ ```tsx
95
+ 'use client'
96
+
97
+ import { createUniCmsClient } from '@mhbdev/unicms'
98
+ import { UniCmsProvider, usePageBySlugQuery, useSiteSettingsQuery } from '@mhbdev/unicms/react'
99
+
100
+ const client = createUniCmsClient({
101
+ baseUrl: 'https://cms.example.com',
102
+ tenant: { slug: 'acme' },
103
+ })
104
+
105
+ function HomePage() {
106
+ const siteSettings = useSiteSettingsQuery()
107
+ const page = usePageBySlugQuery({ slug: 'home' })
108
+
109
+ if (siteSettings.isLoading || page.isLoading) return <p>Loading...</p>
110
+ if (siteSettings.error || page.error) return <p>Failed to load</p>
111
+
112
+ return <h1>{page.data?.title}</h1>
113
+ }
114
+
115
+ export default function App() {
116
+ return (
117
+ <UniCmsProvider
118
+ client={client}
119
+ defaultQueryOptions={{ staleTimeMs: 30_000 }}
120
+ namespace="acme-frontend"
121
+ >
122
+ <HomePage />
123
+ </UniCmsProvider>
124
+ )
125
+ }
126
+ ```
127
+
128
+ Available hooks:
129
+ - `useUniCmsClient`
130
+ - `useUniCmsQuery`
131
+ - `useUniCmsMutation`
132
+ - `useUniCmsInvalidate`
133
+ - `useSiteSettingsQuery`
134
+ - `usePageBySlugQuery`
135
+ - `usePostsQuery`
136
+ - `usePostBySlugQuery`
137
+ - `useFaqsQuery`
138
+ - `useCategoriesQuery`
139
+ - `useTagsQuery`
140
+ - `useExternalUsersLoginMutation`
141
+
142
+ ## Next App Router SSR helpers
143
+
144
+ Use `@mhbdev/unicms/next` inside Server Components, Route Handlers, and Server Actions:
145
+
146
+ ```ts
147
+ import { createNextAppRouterUniCmsClient } from '@mhbdev/unicms/next'
148
+
149
+ const cms = await createNextAppRouterUniCmsClient({
150
+ tenant: { slug: 'acme' },
151
+ // Optional. If omitted, it tries:
152
+ // UNICMS_BASE_URL -> NEXT_PUBLIC_SERVER_URL -> PAYLOAD_PUBLIC_SERVER_URL -> NEXT_PUBLIC_SITE_URL
153
+ baseUrl: 'https://cms.example.com',
154
+ })
155
+ ```
156
+
157
+ ### Server Component example
158
+
159
+ ```tsx
160
+ import { createNextAppRouterUniCmsClient } from '@mhbdev/unicms/next'
161
+
162
+ export default async function Page() {
163
+ const cms = await createNextAppRouterUniCmsClient({
164
+ tenant: { slug: 'acme' },
165
+ })
166
+
167
+ const settings = await cms.getSiteSettings()
168
+ return <h1>{settings.siteName}</h1>
169
+ }
170
+ ```
171
+
172
+ ### Route Handler example (request-scoped forwarding)
173
+
174
+ ```ts
175
+ import { createNextAppRouterUniCmsClient } from '@mhbdev/unicms/next'
176
+
177
+ export async function GET(request: Request) {
178
+ const cms = await createNextAppRouterUniCmsClient({
179
+ request, // forwards selected request headers + cookie header by default
180
+ tenant: { domain: 'acme.example.com' },
181
+ })
182
+
183
+ const posts = await cms.listPosts({ page: 1, limit: 10 })
184
+ return Response.json(posts)
185
+ }
186
+ ```
187
+
188
+ ### Custom forwarding
189
+
190
+ ```ts
191
+ const cms = await createNextAppRouterUniCmsClient({
192
+ tenant: { slug: 'acme' },
193
+ includeCookies: true,
194
+ requestHeaders: ['authorization', 'x-request-id'],
195
+ })
59
196
  ```
60
197
 
61
198
  ## Error handling
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAYnE,eAAO,MAAM,kBAAkB,GAAI,SAAS,mBAAmB,KAAG,YAcjE,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAe,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAYhF,eAAO,MAAM,kBAAkB,GAAI,SAAS,mBAAmB,KAAG,YAoCjE,CAAA"}
package/dist/client.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { createHttpClient } from './http.js';
2
+ import { externalUsersLogin } from './methods/externalUsersLogin.js';
2
3
  import { getPageBySlug } from './methods/getPageBySlug.js';
3
4
  import { getPostBySlug } from './methods/getPostBySlug.js';
4
5
  import { getSiteSettings } from './methods/getSiteSettings.js';
@@ -17,7 +18,22 @@ const assertTenantScope = (options) => {
17
18
  export const createUniCmsClient = (options) => {
18
19
  assertTenantScope(options);
19
20
  const http = createHttpClient(options);
21
+ const toTenantBody = (tenant) => 'slug' in tenant
22
+ ? {
23
+ tenantSlug: tenant.slug,
24
+ }
25
+ : {
26
+ tenantDomain: tenant.domain,
27
+ };
20
28
  return {
29
+ externalUsersLogin: (credentials, opts) => {
30
+ const tenant = credentials.tenant ?? options.tenant;
31
+ return externalUsersLogin(http, {
32
+ ...toTenantBody(tenant),
33
+ password: credentials.password,
34
+ username: credentials.username,
35
+ }, opts);
36
+ },
21
37
  getSiteSettings: () => getSiteSettings(http),
22
38
  getPageBySlug: (slug, opts) => getPageBySlug(http, slug, opts),
23
39
  listPosts: (params) => listPosts(http, params),
@@ -25,6 +41,7 @@ export const createUniCmsClient = (options) => {
25
41
  listFaqs: (opts) => listFaqs(http, opts),
26
42
  listCategories: () => listCategories(http),
27
43
  listTags: () => listTags(http),
44
+ request: (requestOptions) => http.request(requestOptions),
28
45
  };
29
46
  };
30
47
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,MAAM,iBAAiB,GAAG,CAAC,OAA4B,EAAE,EAAE;IACzD,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAA4B,EAAgB,EAAE;IAC/E,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAE1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAEtC,OAAO;QACL,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9D,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QAC9C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9D,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACxC,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;QAC1C,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC/B,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,MAAM,iBAAiB,GAAG,CAAC,OAA4B,EAAE,EAAE;IACzD,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAA4B,EAAgB,EAAE;IAC/E,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAE1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,EAAE,CAC3C,MAAM,IAAI,MAAM;QACd,CAAC,CAAC;YACE,UAAU,EAAE,MAAM,CAAC,IAAI;SACxB;QACH,CAAC,CAAC;YACE,YAAY,EAAE,MAAM,CAAC,MAAM;SAC5B,CAAA;IAEP,OAAO;QACL,kBAAkB,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAA;YAEnD,OAAO,kBAAkB,CACvB,IAAI,EACJ;gBACE,GAAG,YAAY,CAAC,MAAM,CAAC;gBACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;aAC/B,EACD,IAAI,CACL,CAAA;QACH,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9D,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QAC9C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9D,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACxC,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;QAC1C,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;KAC1D,CAAA;AACH,CAAC,CAAA"}
package/dist/http.d.ts CHANGED
@@ -1,14 +1,10 @@
1
- import { z } from 'zod';
2
- import type { UniCmsClientOptions } from './types.js';
3
- type QueryValue = boolean | null | number | string | undefined;
4
- type QueryRecord = Record<string, QueryValue>;
5
- interface RequestOptions<T> {
6
- path: string;
7
- query?: QueryRecord;
8
- schema: z.ZodType<T>;
9
- }
1
+ import type { UniCmsClientOptions, UniCmsRequestOptions } from './types.js';
2
+ type GetOptions<TResponse> = Omit<UniCmsRequestOptions<TResponse, never>, 'body' | 'method'>;
3
+ type PostOptions<TResponse, TBody> = Omit<UniCmsRequestOptions<TResponse, TBody>, 'method'>;
10
4
  export interface HttpClient {
11
- get<T>(options: RequestOptions<T>): Promise<T>;
5
+ get<TResponse>(options: GetOptions<TResponse>): Promise<TResponse>;
6
+ post<TResponse, TBody = unknown>(options: PostOptions<TResponse, TBody>): Promise<TResponse>;
7
+ request<TResponse, TBody = unknown>(options: UniCmsRequestOptions<TResponse, TBody>): Promise<TResponse>;
12
8
  }
13
9
  export declare const createHttpClient: (options: UniCmsClientOptions) => HttpClient;
14
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAElE,KAAK,UAAU,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE9D,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAE7C,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC/C;AA4ED,eAAO,MAAM,gBAAgB,GAAI,SAAS,mBAAmB,KAAG,UA6E/D,CAAA"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,mBAAmB,EAInB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAEnB,KAAK,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAA;AAC5F,KAAK,WAAW,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAA;AAE3F,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5F,OAAO,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,EAAE,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;CACzG;AA+HD,eAAO,MAAM,gBAAgB,GAAI,SAAS,mBAAmB,KAAG,UA2F/D,CAAA"}
package/dist/http.js CHANGED
@@ -30,15 +30,22 @@ const tenantToQuery = (tenant) => {
30
30
  tenantDomain: tenant.domain,
31
31
  };
32
32
  };
33
+ const appendQueryValue = (url, key, value) => {
34
+ if (value === undefined || value === null || value === '') {
35
+ return;
36
+ }
37
+ url.searchParams.append(key, String(value));
38
+ };
33
39
  const addQueryParams = (url, query) => {
34
40
  if (!query) {
35
41
  return;
36
42
  }
37
43
  Object.entries(query).forEach(([key, value]) => {
38
- if (value === undefined || value === null || value === '') {
44
+ if (Array.isArray(value)) {
45
+ value.forEach((entry) => appendQueryValue(url, key, entry));
39
46
  return;
40
47
  }
41
- url.searchParams.set(key, String(value));
48
+ appendQueryValue(url, key, value);
42
49
  });
43
50
  };
44
51
  const resolveHeaderInput = async (headers) => {
@@ -50,6 +57,18 @@ const resolveHeaderInput = async (headers) => {
50
57
  }
51
58
  return headers;
52
59
  };
60
+ const mergeHeaders = async (base, request) => {
61
+ const merged = new Headers(await resolveHeaderInput(base));
62
+ const requestHeaders = await resolveHeaderInput(request);
63
+ if (!requestHeaders) {
64
+ return merged;
65
+ }
66
+ const normalizedRequestHeaders = new Headers(requestHeaders);
67
+ normalizedRequestHeaders.forEach((value, key) => {
68
+ merged.set(key, value);
69
+ });
70
+ return merged;
71
+ };
53
72
  const parseResponseBody = async (response) => {
54
73
  const rawBody = await response.text();
55
74
  if (!rawBody) {
@@ -62,24 +81,62 @@ const parseResponseBody = async (response) => {
62
81
  return rawBody;
63
82
  }
64
83
  };
84
+ const isBodyInitLike = (value) => {
85
+ if (typeof value === 'string')
86
+ return true;
87
+ if (value instanceof URLSearchParams)
88
+ return true;
89
+ if (typeof Blob !== 'undefined' && value instanceof Blob)
90
+ return true;
91
+ if (typeof FormData !== 'undefined' && value instanceof FormData)
92
+ return true;
93
+ if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream)
94
+ return true;
95
+ if (value instanceof ArrayBuffer)
96
+ return true;
97
+ if (ArrayBuffer.isView(value))
98
+ return true;
99
+ return false;
100
+ };
101
+ const serializeBody = (method, body, headers) => {
102
+ if (body === undefined || method === 'GET') {
103
+ return undefined;
104
+ }
105
+ if (isBodyInitLike(body)) {
106
+ return body;
107
+ }
108
+ if (!headers.has('content-type')) {
109
+ headers.set('content-type', 'application/json');
110
+ }
111
+ return JSON.stringify(body);
112
+ };
65
113
  export const createHttpClient = (options) => {
66
114
  const fetchFn = options.fetch ?? globalThis.fetch;
67
115
  if (!fetchFn) {
68
116
  throw new Error('fetch implementation is required');
69
117
  }
70
118
  const baseUrl = normalizeBaseUrl(options.baseUrl);
71
- const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
119
+ const defaultTimeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
72
120
  const tenantQuery = tenantToQuery(options.tenant);
73
- const get = async ({ path, query, schema }) => {
74
- const mergedHeaders = new Headers(await resolveHeaderInput(options.headers));
75
- const url = new URL(path.replace(/^\//, ''), baseUrl);
76
- addQueryParams(url, { ...tenantQuery, ...query });
121
+ const request = async (requestOptions) => {
122
+ const method = requestOptions.method ?? 'GET';
123
+ const query = requestOptions.includeTenantScope === false
124
+ ? requestOptions.query
125
+ : { ...tenantQuery, ...(requestOptions.query ?? {}) };
126
+ const mergedHeaders = await mergeHeaders(options.headers, requestOptions.headers);
127
+ const url = new URL(requestOptions.path.replace(/^\//, ''), baseUrl);
128
+ addQueryParams(url, query);
77
129
  const controller = new AbortController();
130
+ const timeoutMs = requestOptions.timeoutMs ?? defaultTimeoutMs;
78
131
  const timeout = setTimeout(() => controller.abort(), timeoutMs);
132
+ const body = serializeBody(method, requestOptions.body, mergedHeaders);
79
133
  try {
80
134
  const response = await fetchFn(url, {
135
+ ...(options.requestInit ?? {}),
136
+ ...(requestOptions.requestInit ?? {}),
137
+ ...(body === undefined ? {} : { body }),
81
138
  headers: mergedHeaders,
82
- method: 'GET',
139
+ method,
83
140
  signal: controller.signal,
84
141
  });
85
142
  const responseBody = await parseResponseBody(response);
@@ -96,7 +153,7 @@ export const createHttpClient = (options) => {
96
153
  status: response.status,
97
154
  });
98
155
  }
99
- const parsedResponse = schema.safeParse(responseBody);
156
+ const parsedResponse = requestOptions.schema.safeParse(responseBody);
100
157
  if (!parsedResponse.success) {
101
158
  throw new UniCmsError('PARSE_ERROR', 'Response validation failed.', {
102
159
  details: parsedResponse.error.flatten(),
@@ -123,7 +180,9 @@ export const createHttpClient = (options) => {
123
180
  }
124
181
  };
125
182
  return {
126
- get,
183
+ get: (requestOptions) => request({ ...requestOptions, method: 'GET' }),
184
+ post: (requestOptions) => request({ ...requestOptions, method: 'POST' }),
185
+ request,
127
186
  };
128
187
  };
129
188
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { createUniCmsClient } from './client.js';
2
2
  export { UniCmsError } from './errors.js';
3
- export type { UniCmsClient, UniCmsClientOptions, TenantScope } from './types.js';
3
+ export type { ExternalUserLoginCredentials, ExternalUserLoginResult, ExternalUserRecord, HeaderResolver, TenantScope, UniCmsClient, UniCmsClientOptions, UniCmsQueryPrimitive, UniCmsQueryRecord, UniCmsQueryValue, UniCmsRequestMethod, UniCmsRequestOptions, } from './types.js';
4
4
  export type { ApiError, ApiErrorCode, CategoryDTO, FaqDTO, ListPostsParams, MediaDTO, PageDTO, Paginated, Pagination, PostDTO, PostSummaryDTO, SeoDTO, SiteSettingsDTO, TagDTO, TenantDTO, } from './contracts/v1.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEhF,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,cAAc,EACd,MAAM,EACN,eAAe,EACf,MAAM,EACN,SAAS,GACV,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,cAAc,EACd,MAAM,EACN,eAAe,EACf,MAAM,EACN,SAAS,GACV,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import type { HttpClient } from '../http.js';
3
+ import type { ExternalUserLoginResult, ExternalUserRecord } from '../types.js';
4
+ declare const externalUsersLoginBodySchema: z.ZodEffects<z.ZodObject<{
5
+ password: z.ZodString;
6
+ tenantDomain: z.ZodOptional<z.ZodString>;
7
+ tenantSlug: z.ZodOptional<z.ZodString>;
8
+ username: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ username: string;
11
+ password: string;
12
+ tenantDomain?: string | undefined;
13
+ tenantSlug?: string | undefined;
14
+ }, {
15
+ username: string;
16
+ password: string;
17
+ tenantDomain?: string | undefined;
18
+ tenantSlug?: string | undefined;
19
+ }>, {
20
+ username: string;
21
+ password: string;
22
+ tenantDomain?: string | undefined;
23
+ tenantSlug?: string | undefined;
24
+ }, {
25
+ username: string;
26
+ password: string;
27
+ tenantDomain?: string | undefined;
28
+ tenantSlug?: string | undefined;
29
+ }>;
30
+ type ExternalUsersLoginBody = z.infer<typeof externalUsersLoginBodySchema>;
31
+ export declare const externalUsersLogin: <TUser extends ExternalUserRecord = ExternalUserRecord>(http: HttpClient, body: ExternalUsersLoginBody, opts?: {
32
+ userSchema?: z.ZodType<TUser>;
33
+ }) => Promise<ExternalUserLoginResult<TUser>>;
34
+ export {};
35
+ //# sourceMappingURL=externalUsersLogin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalUsersLogin.d.ts","sourceRoot":"","sources":["../../src/methods/externalUsersLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAEnB,MAAM,aAAa,CAAA;AAIpB,QAAA,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;EAgB9B,CAAA;AAEJ,KAAK,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAa1E,eAAO,MAAM,kBAAkB,GAAU,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EAC5F,MAAM,UAAU,EAChB,MAAM,sBAAsB,EAC5B,OAAO;IAAE,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;CAAE,KACvC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAaxC,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ const nonEmptyStringSchema = z.string().trim().min(1);
3
+ const externalUsersLoginBodySchema = z
4
+ .object({
5
+ password: nonEmptyStringSchema,
6
+ tenantDomain: nonEmptyStringSchema.optional(),
7
+ tenantSlug: nonEmptyStringSchema.optional(),
8
+ username: nonEmptyStringSchema,
9
+ })
10
+ .superRefine((value, context) => {
11
+ const tenantCount = Number(Boolean(value.tenantSlug)) + Number(Boolean(value.tenantDomain));
12
+ if (tenantCount !== 1) {
13
+ context.addIssue({
14
+ code: z.ZodIssueCode.custom,
15
+ message: 'Provide exactly one of tenantSlug or tenantDomain.',
16
+ });
17
+ }
18
+ });
19
+ const buildExternalUsersLoginResponseSchema = (userSchema) => z
20
+ .object({
21
+ exp: z.number(),
22
+ token: nonEmptyStringSchema,
23
+ user: userSchema,
24
+ })
25
+ .passthrough();
26
+ export const externalUsersLogin = async (http, body, opts) => {
27
+ const parsedBody = externalUsersLoginBodySchema.parse(body);
28
+ const userSchema = opts?.userSchema ?? z.record(z.string(), z.unknown());
29
+ const schema = buildExternalUsersLoginResponseSchema(userSchema);
30
+ const requestOptions = {
31
+ body: parsedBody,
32
+ includeTenantScope: false,
33
+ path: '/api/users/external-users/login',
34
+ schema,
35
+ };
36
+ return http.post(requestOptions);
37
+ };
38
+ //# sourceMappingURL=externalUsersLogin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalUsersLogin.js","sourceRoot":"","sources":["../../src/methods/externalUsersLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAErD,MAAM,4BAA4B,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAC7C,UAAU,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,oBAAoB;CAC/B,CAAC;KACD,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;IAE3F,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA;AAIJ,MAAM,qCAAqC,GAAG,CAC5C,UAA4B,EAC5B,EAAE,CACF,CAAC;KACE,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,UAAU;CACjB,CAAC;KACD,WAAW,EAA+C,CAAA;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,IAAgB,EAChB,IAA4B,EAC5B,IAAwC,EACC,EAAE;IAC3C,MAAM,UAAU,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAsB,CAAA;IAC9F,MAAM,MAAM,GAAG,qCAAqC,CAAC,UAAU,CAAC,CAAA;IAChE,MAAM,cAAc,GAClB;QACE,IAAI,EAAE,UAAU;QAChB,kBAAkB,EAAE,KAAK;QACzB,IAAI,EAAE,iCAAiC;QACvC,MAAM;KACP,CAAA;IAEH,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;AAClC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { createNextAppRouterUniCmsClient, resolveNextAppRouterUniCmsBaseUrl, withNextAppRouterUniCmsClient, } from './serverClient.js';
2
+ export type { NextAppRouterUniCmsClientFactory, NextAppRouterUniCmsClientOptions, NextForwardHeadersRule, NextRequestLike, } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,gCAAgC,EAChC,gCAAgC,EAChC,sBAAsB,EACtB,eAAe,GAChB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { createNextAppRouterUniCmsClient, resolveNextAppRouterUniCmsBaseUrl, withNextAppRouterUniCmsClient, } from './serverClient.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { UniCmsClient } from '../types.js';
2
+ import type { NextAppRouterUniCmsClientFactory, NextAppRouterUniCmsClientOptions } from './types.js';
3
+ export declare const resolveNextAppRouterUniCmsBaseUrl: (options?: Pick<NextAppRouterUniCmsClientOptions, "baseUrl" | "resolveBaseUrl">) => string;
4
+ export declare const createNextAppRouterUniCmsClient: NextAppRouterUniCmsClientFactory;
5
+ export declare const withNextAppRouterUniCmsClient: <T>(options: NextAppRouterUniCmsClientOptions, run: (client: UniCmsClient) => Promise<T>) => Promise<T>;
6
+ //# sourceMappingURL=serverClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverClient.d.ts","sourceRoot":"","sources":["../../src/next/serverClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EACV,gCAAgC,EAChC,gCAAgC,EAGjC,MAAM,YAAY,CAAA;AAiJnB,eAAO,MAAM,iCAAiC,GAC5C,UAAU,IAAI,CAAC,gCAAgC,EAAE,SAAS,GAAG,gBAAgB,CAAC,KAC7E,MAGF,CAAA;AAED,eAAO,MAAM,+BAA+B,EAAE,gCAsB7C,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAU,CAAC,EACnD,SAAS,gCAAgC,EACzC,KAAK,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,KACxC,OAAO,CAAC,CAAC,CAGX,CAAA"}
@@ -0,0 +1,133 @@
1
+ import { cookies as nextCookies, headers as nextHeaders } from 'next/headers';
2
+ import { createUniCmsClient } from '../client.js';
3
+ const DEFAULT_BASE_URL_ENV_KEYS = [
4
+ 'UNICMS_BASE_URL',
5
+ 'NEXT_PUBLIC_SERVER_URL',
6
+ 'PAYLOAD_PUBLIC_SERVER_URL',
7
+ 'NEXT_PUBLIC_SITE_URL',
8
+ ];
9
+ const DEFAULT_FORWARDED_HEADERS = [
10
+ 'authorization',
11
+ 'accept-language',
12
+ 'user-agent',
13
+ 'x-forwarded-for',
14
+ 'x-forwarded-host',
15
+ 'x-forwarded-proto',
16
+ 'x-real-ip',
17
+ 'x-request-id',
18
+ ];
19
+ const resolveHeaderInput = async (headers) => {
20
+ if (!headers) {
21
+ return undefined;
22
+ }
23
+ if (typeof headers === 'function') {
24
+ return headers();
25
+ }
26
+ return headers;
27
+ };
28
+ const mergeHeaders = async (...sources) => {
29
+ const merged = new Headers();
30
+ for (const source of sources) {
31
+ const resolved = await resolveHeaderInput(source);
32
+ if (!resolved) {
33
+ continue;
34
+ }
35
+ const normalized = new Headers(resolved);
36
+ normalized.forEach((value, key) => {
37
+ merged.set(key, value);
38
+ });
39
+ }
40
+ return merged;
41
+ };
42
+ const resolveUniCmsBaseUrlFromEnv = () => {
43
+ for (const envKey of DEFAULT_BASE_URL_ENV_KEYS) {
44
+ const value = process.env[envKey];
45
+ if (value?.trim()) {
46
+ return value;
47
+ }
48
+ }
49
+ return undefined;
50
+ };
51
+ const normalizeBaseUrl = (baseUrl) => {
52
+ if (!baseUrl?.trim()) {
53
+ throw new Error(`UniCMS base URL is required. Provide options.baseUrl or set one of: ${DEFAULT_BASE_URL_ENV_KEYS.join(', ')}`);
54
+ }
55
+ return baseUrl;
56
+ };
57
+ const shouldForwardHeader = (rule, name, value) => {
58
+ if (!rule) {
59
+ return DEFAULT_FORWARDED_HEADERS.includes(name);
60
+ }
61
+ if (typeof rule === 'function') {
62
+ return rule(name, value);
63
+ }
64
+ const allowed = new Set(rule.map((entry) => entry.toLowerCase()));
65
+ return allowed.has(name);
66
+ };
67
+ const readNextHeaders = async () => {
68
+ const incoming = await Promise.resolve(nextHeaders());
69
+ const normalized = new Headers();
70
+ incoming.forEach((value, key) => {
71
+ normalized.set(key, value);
72
+ });
73
+ return normalized;
74
+ };
75
+ const readNextCookieHeader = async () => {
76
+ const cookieStore = await Promise.resolve(nextCookies());
77
+ const cookieHeader = cookieStore.toString();
78
+ return cookieHeader || null;
79
+ };
80
+ const readIncomingHeaders = async (request) => {
81
+ if (request) {
82
+ return new Headers(request.headers);
83
+ }
84
+ return readNextHeaders();
85
+ };
86
+ const collectRequestScopedHeaders = async (options) => {
87
+ const includeRequestHeaders = options.includeRequestHeaders ?? true;
88
+ const includeCookies = options.includeCookies ?? true;
89
+ if (!includeRequestHeaders && !includeCookies) {
90
+ return undefined;
91
+ }
92
+ const incomingHeaders = await readIncomingHeaders(options.request);
93
+ const scopedHeaders = new Headers();
94
+ if (includeRequestHeaders) {
95
+ incomingHeaders.forEach((value, rawName) => {
96
+ const name = rawName.toLowerCase();
97
+ if (name === 'cookie')
98
+ return;
99
+ if (shouldForwardHeader(options.requestHeaders, name, value)) {
100
+ scopedHeaders.set(name, value);
101
+ }
102
+ });
103
+ }
104
+ if (includeCookies) {
105
+ const cookieHeader = incomingHeaders.get('cookie') ?? (await readNextCookieHeader());
106
+ if (cookieHeader) {
107
+ scopedHeaders.set('cookie', cookieHeader);
108
+ }
109
+ }
110
+ return scopedHeaders;
111
+ };
112
+ export const resolveNextAppRouterUniCmsBaseUrl = (options) => {
113
+ const baseUrl = options?.baseUrl ?? options?.resolveBaseUrl?.() ?? resolveUniCmsBaseUrlFromEnv();
114
+ return normalizeBaseUrl(baseUrl);
115
+ };
116
+ export const createNextAppRouterUniCmsClient = async (options) => {
117
+ const { baseUrl, headers, includeCookies: _includeCookies, includeRequestHeaders: _includeRequestHeaders, request: _request, requestHeaders: _requestHeaders, resolveBaseUrl, ...clientOptions } = options;
118
+ const requestScopedHeaders = await collectRequestScopedHeaders(options);
119
+ const headerResolver = async () => mergeHeaders(requestScopedHeaders, headers);
120
+ return createUniCmsClient({
121
+ ...clientOptions,
122
+ baseUrl: resolveNextAppRouterUniCmsBaseUrl({
123
+ baseUrl,
124
+ resolveBaseUrl,
125
+ }),
126
+ headers: headerResolver,
127
+ });
128
+ };
129
+ export const withNextAppRouterUniCmsClient = async (options, run) => {
130
+ const client = await createNextAppRouterUniCmsClient(options);
131
+ return run(client);
132
+ };
133
+ //# sourceMappingURL=serverClient.js.map