@schmadev/client 1.0.0 → 1.0.3
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 +63 -0
- package/dist/index.d.mts +59 -2
- package/dist/index.d.ts +59 -2
- package/dist/index.js +36 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# @schmadev/client
|
|
2
|
+
|
|
3
|
+
The official TypeScript/JavaScript SDK for [Schma](https://schma.dev).
|
|
4
|
+
|
|
5
|
+
This isomorphic client provides a beautifully typed, fluent interface for fetching and manipulating content from your Schma workspaces. It is designed to work seamlessly in the browser, Node.js, Next.js (App & Pages routers), Astro, and anywhere else JavaScript runs.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @schmadev/client
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
Initialize the client with your workspace configuration. If you used `npm create schma`, this is already set up for you.
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { createClient } from "@schmadev/client";
|
|
19
|
+
|
|
20
|
+
export const client = createClient({
|
|
21
|
+
workspaceId: process.env.NEXT_PUBLIC_SCHMA_WORKSPACE_ID!,
|
|
22
|
+
apiKey: process.env.SCHMA_API_KEY!,
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Fetching Content
|
|
27
|
+
|
|
28
|
+
The client provides a generic, type-safe query builder.
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// Fetch multiple entries
|
|
32
|
+
const articles = await client.entries.getMany({
|
|
33
|
+
contentType: 'blogPost',
|
|
34
|
+
limit: 10,
|
|
35
|
+
orderBy: {
|
|
36
|
+
field: 'publishedAt',
|
|
37
|
+
direction: 'desc'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Fetch a single entry by ID
|
|
42
|
+
const page = await client.entries.getOne({
|
|
43
|
+
entryId: 'ent_123abc'
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Advanced Queries
|
|
48
|
+
|
|
49
|
+
You can build complex queries using the filtering engine:
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
const featuredProducts = await client.entries.getMany({
|
|
53
|
+
contentType: 'product',
|
|
54
|
+
filters: [
|
|
55
|
+
{ field: 'price', operator: 'lt', value: 100 },
|
|
56
|
+
{ field: 'isFeatured', operator: 'eq', value: true }
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
For the full SDK API reference and guides on how to generate local types for your schema, visit [docs.schma.dev](https://docs.schma.dev).
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
declare function createMockClient(mockData?: any): {
|
|
2
|
+
contentTypes: {
|
|
3
|
+
list: () => Promise<{
|
|
4
|
+
data: any;
|
|
5
|
+
}>;
|
|
6
|
+
get: (id: string) => Promise<{
|
|
7
|
+
data: any;
|
|
8
|
+
}>;
|
|
9
|
+
create: (payload: any) => Promise<{
|
|
10
|
+
data: any;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
entries: {
|
|
14
|
+
list: () => Promise<{
|
|
15
|
+
data: any;
|
|
16
|
+
}>;
|
|
17
|
+
get: ({ id }: {
|
|
18
|
+
id: string;
|
|
19
|
+
}) => Promise<{
|
|
20
|
+
data: any;
|
|
21
|
+
}>;
|
|
22
|
+
create: (payload: any) => Promise<{
|
|
23
|
+
data: any;
|
|
24
|
+
}>;
|
|
25
|
+
update: (id: string, payload: any) => Promise<{
|
|
26
|
+
data: any;
|
|
27
|
+
}>;
|
|
28
|
+
delete: () => Promise<{
|
|
29
|
+
data: {
|
|
30
|
+
success: boolean;
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
delivery: {
|
|
35
|
+
getEntry: ({ id }: {
|
|
36
|
+
id: string;
|
|
37
|
+
}) => Promise<any>;
|
|
38
|
+
listEntries: () => Promise<{
|
|
39
|
+
data: any;
|
|
40
|
+
total: any;
|
|
41
|
+
}>;
|
|
42
|
+
searchSimilar: () => Promise<{
|
|
43
|
+
data: any;
|
|
44
|
+
total: any;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
analytics: {
|
|
48
|
+
getSummary: () => Promise<{
|
|
49
|
+
data: {
|
|
50
|
+
storage: number;
|
|
51
|
+
bandwidth: number;
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
1
57
|
interface SchmaClientConfig {
|
|
2
58
|
/**
|
|
3
59
|
* The Schma API Key, or a function that returns the API key dynamically.
|
|
@@ -5,7 +61,7 @@ interface SchmaClientConfig {
|
|
|
5
61
|
apiKey: string | (() => string | Promise<string>);
|
|
6
62
|
/**
|
|
7
63
|
* The base URL for the Schma API.
|
|
8
|
-
* @default "https://schma-
|
|
64
|
+
* @default "https://schma-api-production.up.railway.app"
|
|
9
65
|
*/
|
|
10
66
|
baseUrl?: string;
|
|
11
67
|
/**
|
|
@@ -27,6 +83,7 @@ declare class SchmaClient {
|
|
|
27
83
|
private baseUrl;
|
|
28
84
|
private tenantSlug?;
|
|
29
85
|
constructor(config: SchmaClientConfig);
|
|
86
|
+
setTenantSlug(slug: string): void;
|
|
30
87
|
/**
|
|
31
88
|
* Perform an API request using the native `fetch` API.
|
|
32
89
|
*/
|
|
@@ -257,4 +314,4 @@ declare class SchmaClient {
|
|
|
257
314
|
*/
|
|
258
315
|
declare function createClient(config: SchmaClientConfig): SchmaClient;
|
|
259
316
|
|
|
260
|
-
export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient };
|
|
317
|
+
export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient, createMockClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
declare function createMockClient(mockData?: any): {
|
|
2
|
+
contentTypes: {
|
|
3
|
+
list: () => Promise<{
|
|
4
|
+
data: any;
|
|
5
|
+
}>;
|
|
6
|
+
get: (id: string) => Promise<{
|
|
7
|
+
data: any;
|
|
8
|
+
}>;
|
|
9
|
+
create: (payload: any) => Promise<{
|
|
10
|
+
data: any;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
entries: {
|
|
14
|
+
list: () => Promise<{
|
|
15
|
+
data: any;
|
|
16
|
+
}>;
|
|
17
|
+
get: ({ id }: {
|
|
18
|
+
id: string;
|
|
19
|
+
}) => Promise<{
|
|
20
|
+
data: any;
|
|
21
|
+
}>;
|
|
22
|
+
create: (payload: any) => Promise<{
|
|
23
|
+
data: any;
|
|
24
|
+
}>;
|
|
25
|
+
update: (id: string, payload: any) => Promise<{
|
|
26
|
+
data: any;
|
|
27
|
+
}>;
|
|
28
|
+
delete: () => Promise<{
|
|
29
|
+
data: {
|
|
30
|
+
success: boolean;
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
delivery: {
|
|
35
|
+
getEntry: ({ id }: {
|
|
36
|
+
id: string;
|
|
37
|
+
}) => Promise<any>;
|
|
38
|
+
listEntries: () => Promise<{
|
|
39
|
+
data: any;
|
|
40
|
+
total: any;
|
|
41
|
+
}>;
|
|
42
|
+
searchSimilar: () => Promise<{
|
|
43
|
+
data: any;
|
|
44
|
+
total: any;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
analytics: {
|
|
48
|
+
getSummary: () => Promise<{
|
|
49
|
+
data: {
|
|
50
|
+
storage: number;
|
|
51
|
+
bandwidth: number;
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
1
57
|
interface SchmaClientConfig {
|
|
2
58
|
/**
|
|
3
59
|
* The Schma API Key, or a function that returns the API key dynamically.
|
|
@@ -5,7 +61,7 @@ interface SchmaClientConfig {
|
|
|
5
61
|
apiKey: string | (() => string | Promise<string>);
|
|
6
62
|
/**
|
|
7
63
|
* The base URL for the Schma API.
|
|
8
|
-
* @default "https://schma-
|
|
64
|
+
* @default "https://schma-api-production.up.railway.app"
|
|
9
65
|
*/
|
|
10
66
|
baseUrl?: string;
|
|
11
67
|
/**
|
|
@@ -27,6 +83,7 @@ declare class SchmaClient {
|
|
|
27
83
|
private baseUrl;
|
|
28
84
|
private tenantSlug?;
|
|
29
85
|
constructor(config: SchmaClientConfig);
|
|
86
|
+
setTenantSlug(slug: string): void;
|
|
30
87
|
/**
|
|
31
88
|
* Perform an API request using the native `fetch` API.
|
|
32
89
|
*/
|
|
@@ -257,4 +314,4 @@ declare class SchmaClient {
|
|
|
257
314
|
*/
|
|
258
315
|
declare function createClient(config: SchmaClientConfig): SchmaClient;
|
|
259
316
|
|
|
260
|
-
export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient };
|
|
317
|
+
export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient, createMockClient };
|
package/dist/index.js
CHANGED
|
@@ -21,9 +21,38 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
SchmaClient: () => SchmaClient,
|
|
24
|
-
createClient: () => createClient
|
|
24
|
+
createClient: () => createClient,
|
|
25
|
+
createMockClient: () => createMockClient
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(index_exports);
|
|
28
|
+
|
|
29
|
+
// src/mock.ts
|
|
30
|
+
function createMockClient(mockData = {}) {
|
|
31
|
+
return {
|
|
32
|
+
contentTypes: {
|
|
33
|
+
list: async () => ({ data: mockData.contentTypes || [] }),
|
|
34
|
+
get: async (id) => ({ data: mockData.contentTypes?.find((c) => c.id === id) || null }),
|
|
35
|
+
create: async (payload) => ({ data: { id: "mock-ct-id", ...payload } })
|
|
36
|
+
},
|
|
37
|
+
entries: {
|
|
38
|
+
list: async () => ({ data: mockData.entries || [] }),
|
|
39
|
+
get: async ({ id }) => ({ data: mockData.entries?.find((e) => e.id === id) || null }),
|
|
40
|
+
create: async (payload) => ({ data: { id: "mock-entry-id", ...payload } }),
|
|
41
|
+
update: async (id, payload) => ({ data: { id, ...payload } }),
|
|
42
|
+
delete: async () => ({ data: { success: true } })
|
|
43
|
+
},
|
|
44
|
+
delivery: {
|
|
45
|
+
getEntry: async ({ id }) => mockData.entries?.find((e) => e.id === id) || null,
|
|
46
|
+
listEntries: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length }),
|
|
47
|
+
searchSimilar: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length })
|
|
48
|
+
},
|
|
49
|
+
analytics: {
|
|
50
|
+
getSummary: async () => ({ data: { storage: 0, bandwidth: 0 } })
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/index.ts
|
|
27
56
|
var SchmaClient = class {
|
|
28
57
|
apiKey;
|
|
29
58
|
baseUrl;
|
|
@@ -33,13 +62,16 @@ var SchmaClient = class {
|
|
|
33
62
|
throw new Error("SchmaClient: apiKey is required.");
|
|
34
63
|
}
|
|
35
64
|
this.apiKey = config.apiKey;
|
|
36
|
-
this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-
|
|
65
|
+
this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-api-production.up.railway.app";
|
|
37
66
|
let envTenantSlug = void 0;
|
|
38
67
|
if (typeof process !== "undefined" && process.env) {
|
|
39
68
|
envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;
|
|
40
69
|
}
|
|
41
70
|
this.tenantSlug = config.tenantSlug || envTenantSlug;
|
|
42
71
|
}
|
|
72
|
+
setTenantSlug(slug) {
|
|
73
|
+
this.tenantSlug = slug;
|
|
74
|
+
}
|
|
43
75
|
/**
|
|
44
76
|
* Perform an API request using the native `fetch` API.
|
|
45
77
|
*/
|
|
@@ -337,6 +369,7 @@ function createClient(config) {
|
|
|
337
369
|
// Annotate the CommonJS export names for ESM import in node:
|
|
338
370
|
0 && (module.exports = {
|
|
339
371
|
SchmaClient,
|
|
340
|
-
createClient
|
|
372
|
+
createClient,
|
|
373
|
+
createMockClient
|
|
341
374
|
});
|
|
342
375
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface SchmaClientConfig {\n /**\n * The Schma API Key, or a function that returns the API key dynamically.\n */\n apiKey: string | (() => string | Promise<string>);\n /**\n * The base URL for the Schma API.\n * @default \"https://schma-cms-production.up.railway.app\"\n */\n baseUrl?: string;\n /**\n * Optional tenant slug. Required for some management operations or multi-tenant scenarios.\n */\n tenantSlug?: string;\n}\n\nexport interface GetEntryOptions {\n id: string;\n}\n\nexport interface ListEntriesOptions {\n typeId?: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n}\n\nexport class SchmaClient {\n private apiKey: string | (() => string | Promise<string>);\n private baseUrl: string;\n private tenantSlug?: string;\n\n constructor(config: SchmaClientConfig) {\n if (!config.apiKey) {\n throw new Error(\"SchmaClient: apiKey is required.\");\n }\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") || \"https://schma-cms-production.up.railway.app\";\n \n let envTenantSlug: string | undefined = undefined;\n if (typeof process !== 'undefined' && process.env) {\n envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;\n }\n \n this.tenantSlug = config.tenantSlug || envTenantSlug;\n }\n\n /**\n * Perform an API request using the native `fetch` API.\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n \n const headers = new Headers(options?.headers);\n const resolvedApiKey = typeof this.apiKey === 'function' ? await this.apiKey() : this.apiKey;\n headers.set(\"Authorization\", `Bearer ${resolvedApiKey}`);\n headers.set(\"Content-Type\", \"application/json\");\n if (this.tenantSlug) {\n headers.set(\"x-tenant-slug\", this.tenantSlug);\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.message || errorData.error) {\n errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;\n }\n } catch (e) {}\n throw new Error(errorMsg);\n }\n\n if (response.status === 204) {\n return undefined as any;\n }\n\n return response.json();\n }\n\n // ── Management APIs ────────────────────────────────────\n\n public readonly contentTypes = {\n list: async <T = any>(): Promise<{ data: T[] }> => {\n return this.request<{ data: T[] }>(`/content-types`);\n },\n get: async <T = any>(id: string): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/content-types/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n public readonly entries = {\n get: async <T = any>(options: GetEntryOptions): Promise<{ data: T }> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<{ data: T }>(`/entries/${options.id}`);\n },\n list: async <T = any>(options?: ListEntriesOptions): Promise<{ data: T[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.typeId) queryParams.set(\"typeId\", options.typeId);\n const queryString = queryParams.toString();\n const path = `/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<{ data: T[] }>(path);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/entries/${id}`, {\n method: \"DELETE\",\n });\n },\n // Versioning\n listVersions: async (id: string): Promise<{ data: any[] }> => {\n return this.request<{ data: any[] }>(`/entries/${id}/versions`);\n },\n getVersion: async (id: string, versionId: string): Promise<{ data: any }> => {\n return this.request<{ data: any }>(`/entries/${id}/versions/${versionId}`);\n },\n restoreVersion: async (id: string, versionId: string): Promise<{ success: boolean; data: any }> => {\n return this.request<{ success: boolean; data: any }>(`/entries/${id}/versions/${versionId}/restore`, {\n method: \"POST\"\n });\n },\n // Preview Token\n generatePreviewToken: async (id: string): Promise<{ token: string; expiresAt: string }> => {\n return this.request<{ token: string; expiresAt: string }>(`/entries/${id}/preview-token`, {\n method: \"POST\"\n });\n }\n };\n\n // ── Delivery APIs (Read Only) ──────────────────────────\n\n public readonly delivery = {\n getEntry: async <T = any>(options: GetEntryOptions): Promise<T> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<T>(`/v1/delivery/entries/${options.id}`);\n },\n listEntries: async <T = any>(options?: { type?: string; limit?: number; offset?: number; locale?: string; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n if (options?.type) queryParams.set(\"type\", options.type);\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options?.offset !== undefined) queryParams.set(\"offset\", options.offset.toString());\n if (options?.locale) queryParams.set(\"locale\", options.locale);\n if (options?.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n const path = `/v1/delivery/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<PaginatedResponse<T>>(path);\n },\n searchSimilar: async <T = any>(options: { text: string; limit?: number; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n queryParams.set(\"text\", options.text);\n if (options.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n return this.request<PaginatedResponse<T>>(`/v1/delivery/entries/similar?${queryString}`);\n }\n };\n\n // ── Billing APIs ───────────────────────────────────────\n\n public readonly billing = {\n getUsage: async (): Promise<{ plan: string; usage: number; limit: number }> => {\n return this.request<{ plan: string; usage: number; limit: number }>(`/billing/usage`);\n },\n createCheckout: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/checkout`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n },\n createPortalSession: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/portal`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n }\n };\n\n // ── API Keys APIs ──────────────────────────────────────\n\n public readonly apiKeys = {\n list: async (): Promise<{ keys: any[] }> => {\n return this.request<{ keys: any[] }>(`/api-keys`);\n },\n create: async (payload: { name: string; permissions: string }): Promise<{ key: any; rawToken: string }> => {\n return this.request<{ key: any; rawToken: string }>(`/api-keys`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n revoke: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/api-keys/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Webhooks APIs ───────────────────────────────────────\n\n public readonly webhooks = {\n list: async (): Promise<{ webhooks: any[] }> => {\n return this.request<{ webhooks: any[] }>(`/webhooks`);\n },\n create: async (payload: { url: string; events: string[] }): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async (id: string, payload: { isActive?: boolean; events?: string[] }): Promise<{ webhook: any }> => {\n return this.request<{ webhook: any }>(`/webhooks/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n rotateSecret: async (id: string): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks/${id}/rotate-secret`, {\n method: \"POST\",\n });\n },\n delete: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/webhooks/${id}`, {\n method: \"DELETE\",\n });\n },\n listDeliveries: async (id: string): Promise<{ deliveries: any[] }> => {\n return this.request<{ deliveries: any[] }>(`/webhooks/${id}/deliveries`);\n }\n };\n\n // ── AI APIs ───────────────────────────────────────────\n\n public readonly ai = {\n translate: async (payload: { text: string; targetLanguage: string }): Promise<{ success: boolean; translatedText: string }> => {\n return this.request<{ success: boolean; translatedText: string }>(`/ai/features/translate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n rewrite: async (payload: { text: string; instruction: string }): Promise<{ success: boolean; rewritten: string }> => {\n return this.request<{ success: boolean; rewritten: string }>(`/ai/features/rewrite`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n qualityCheck: async (payload: { dataJson: any; schemaFields: any[] }): Promise<any> => {\n return this.request<any>(`/ai/features/quality-check`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n bulkGenerate: async (payload: { typeId: string; schema: any; prompts: string[] }): Promise<{ success: boolean; data: any[] }> => {\n return this.request<{ success: boolean; data: any[] }>(`/ai/features/bulk-generate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n }\n };\n\n // ── Analytics APIs ──────────────────────────────────────\n\n public readonly analytics = {\n getSummary: async (): Promise<{ \n totalEntries: number; \n totalMediaCount: number; \n totalMediaSizeMB: number; \n aiUsageThisMonth: number; \n aiUsageByProvider: { provider: string; calls: number }[]; \n contentDistribution: { type: string; count: number }[]; \n }> => {\n return this.request(`/analytics/summary`);\n }\n };\n\n // ── Audit Logs APIs ────────────────────────────────────\n\n public readonly audit = {\n list: async (options?: { limit?: number }): Promise<{ data: any[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n const queryString = queryParams.toString();\n return this.request<{ data: any[] }>(`/audit${queryString ? `?${queryString}` : \"\"}`);\n }\n };\n\n // ── Team Management APIs ───────────────────────────────\n\n public readonly team = {\n listMembers: async (): Promise<{ members: any[] }> => {\n return this.request<{ members: any[] }>(`/team`);\n },\n inviteMember: async (payload: { email: string; role: \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/invite`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n updateRole: async (userId: string, payload: { role: \"owner\" | \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/${userId}/role`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n removeMember: async (userId: string): Promise<{ message: string }> => {\n return this.request<{ message: string }>(`/team/${userId}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Settings APIs ──────────────────────────────────────\n \n public readonly workspaces = {\n list: async (): Promise<{ workspaces: any[] }> => {\n return this.request<{ workspaces: any[] }>(`/workspaces`);\n }\n };\n\n public readonly onboarding = {\n migrate: async (): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/migrate`, {\n method: \"POST\"\n });\n }\n };\n\n public readonly settings = {\n updateDatabaseConnection: async (payload: { provider: \"supabase\" | \"neon\" | \"postgres\"; connectionUri: string }): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/connect`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n testConnection: async (payload: { connectionUri: string }): Promise<{ success: boolean; message?: string; error?: string }> => {\n return this.request<{ success: boolean; message?: string; error?: string }>(`/onboarding/test`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n }\n };\n}\n\n/**\n * Creates a new SchmaClient instance.\n */\nexport function createClient(config: SchmaClientConfig): SchmaClient {\n return new SchmaClient(config);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/mock.ts"],"sourcesContent":["export interface SchmaClientConfig {\n /**\n * The Schma API Key, or a function that returns the API key dynamically.\n */\n apiKey: string | (() => string | Promise<string>);\n /**\n * The base URL for the Schma API.\n * @default \"https://schma-api-production.up.railway.app\"\n */\n baseUrl?: string;\n /**\n * Optional tenant slug. Required for some management operations or multi-tenant scenarios.\n */\n tenantSlug?: string;\n}\n\nexport interface GetEntryOptions {\n id: string;\n}\n\nexport interface ListEntriesOptions {\n typeId?: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n}\n\nexport class SchmaClient {\n private apiKey: string | (() => string | Promise<string>);\n private baseUrl: string;\n private tenantSlug?: string;\n\n constructor(config: SchmaClientConfig) {\n if (!config.apiKey) {\n throw new Error(\"SchmaClient: apiKey is required.\");\n }\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") || \"https://schma-api-production.up.railway.app\";\n \n let envTenantSlug: string | undefined = undefined;\n if (typeof process !== 'undefined' && process.env) {\n envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;\n }\n \n this.tenantSlug = config.tenantSlug || envTenantSlug;\n }\n\n public setTenantSlug(slug: string) {\n this.tenantSlug = slug;\n }\n\n /**\n * Perform an API request using the native `fetch` API.\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n \n const headers = new Headers(options?.headers);\n const resolvedApiKey = typeof this.apiKey === 'function' ? await this.apiKey() : this.apiKey;\n headers.set(\"Authorization\", `Bearer ${resolvedApiKey}`);\n headers.set(\"Content-Type\", \"application/json\");\n if (this.tenantSlug) {\n headers.set(\"x-tenant-slug\", this.tenantSlug);\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.message || errorData.error) {\n errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;\n }\n } catch (e) {}\n throw new Error(errorMsg);\n }\n\n if (response.status === 204) {\n return undefined as any;\n }\n\n return response.json();\n }\n\n // ── Management APIs ────────────────────────────────────\n\n public readonly contentTypes = {\n list: async <T = any>(): Promise<{ data: T[] }> => {\n return this.request<{ data: T[] }>(`/content-types`);\n },\n get: async <T = any>(id: string): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/content-types/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n public readonly entries = {\n get: async <T = any>(options: GetEntryOptions): Promise<{ data: T }> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<{ data: T }>(`/entries/${options.id}`);\n },\n list: async <T = any>(options?: ListEntriesOptions): Promise<{ data: T[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.typeId) queryParams.set(\"typeId\", options.typeId);\n const queryString = queryParams.toString();\n const path = `/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<{ data: T[] }>(path);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/entries/${id}`, {\n method: \"DELETE\",\n });\n },\n // Versioning\n listVersions: async (id: string): Promise<{ data: any[] }> => {\n return this.request<{ data: any[] }>(`/entries/${id}/versions`);\n },\n getVersion: async (id: string, versionId: string): Promise<{ data: any }> => {\n return this.request<{ data: any }>(`/entries/${id}/versions/${versionId}`);\n },\n restoreVersion: async (id: string, versionId: string): Promise<{ success: boolean; data: any }> => {\n return this.request<{ success: boolean; data: any }>(`/entries/${id}/versions/${versionId}/restore`, {\n method: \"POST\"\n });\n },\n // Preview Token\n generatePreviewToken: async (id: string): Promise<{ token: string; expiresAt: string }> => {\n return this.request<{ token: string; expiresAt: string }>(`/entries/${id}/preview-token`, {\n method: \"POST\"\n });\n }\n };\n\n // ── Delivery APIs (Read Only) ──────────────────────────\n\n public readonly delivery = {\n getEntry: async <T = any>(options: GetEntryOptions): Promise<T> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<T>(`/v1/delivery/entries/${options.id}`);\n },\n listEntries: async <T = any>(options?: { type?: string; limit?: number; offset?: number; locale?: string; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n if (options?.type) queryParams.set(\"type\", options.type);\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options?.offset !== undefined) queryParams.set(\"offset\", options.offset.toString());\n if (options?.locale) queryParams.set(\"locale\", options.locale);\n if (options?.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n const path = `/v1/delivery/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<PaginatedResponse<T>>(path);\n },\n searchSimilar: async <T = any>(options: { text: string; limit?: number; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n queryParams.set(\"text\", options.text);\n if (options.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n return this.request<PaginatedResponse<T>>(`/v1/delivery/entries/similar?${queryString}`);\n }\n };\n\n // ── Billing APIs ───────────────────────────────────────\n\n public readonly billing = {\n getUsage: async (): Promise<{ plan: string; usage: number; limit: number }> => {\n return this.request<{ plan: string; usage: number; limit: number }>(`/billing/usage`);\n },\n createCheckout: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/checkout`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n },\n createPortalSession: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/portal`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n }\n };\n\n // ── API Keys APIs ──────────────────────────────────────\n\n public readonly apiKeys = {\n list: async (): Promise<{ keys: any[] }> => {\n return this.request<{ keys: any[] }>(`/api-keys`);\n },\n create: async (payload: { name: string; permissions: string }): Promise<{ key: any; rawToken: string }> => {\n return this.request<{ key: any; rawToken: string }>(`/api-keys`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n revoke: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/api-keys/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Webhooks APIs ───────────────────────────────────────\n\n public readonly webhooks = {\n list: async (): Promise<{ webhooks: any[] }> => {\n return this.request<{ webhooks: any[] }>(`/webhooks`);\n },\n create: async (payload: { url: string; events: string[] }): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async (id: string, payload: { isActive?: boolean; events?: string[] }): Promise<{ webhook: any }> => {\n return this.request<{ webhook: any }>(`/webhooks/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n rotateSecret: async (id: string): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks/${id}/rotate-secret`, {\n method: \"POST\",\n });\n },\n delete: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/webhooks/${id}`, {\n method: \"DELETE\",\n });\n },\n listDeliveries: async (id: string): Promise<{ deliveries: any[] }> => {\n return this.request<{ deliveries: any[] }>(`/webhooks/${id}/deliveries`);\n }\n };\n\n // ── AI APIs ───────────────────────────────────────────\n\n public readonly ai = {\n translate: async (payload: { text: string; targetLanguage: string }): Promise<{ success: boolean; translatedText: string }> => {\n return this.request<{ success: boolean; translatedText: string }>(`/ai/features/translate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n rewrite: async (payload: { text: string; instruction: string }): Promise<{ success: boolean; rewritten: string }> => {\n return this.request<{ success: boolean; rewritten: string }>(`/ai/features/rewrite`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n qualityCheck: async (payload: { dataJson: any; schemaFields: any[] }): Promise<any> => {\n return this.request<any>(`/ai/features/quality-check`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n bulkGenerate: async (payload: { typeId: string; schema: any; prompts: string[] }): Promise<{ success: boolean; data: any[] }> => {\n return this.request<{ success: boolean; data: any[] }>(`/ai/features/bulk-generate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n }\n };\n\n // ── Analytics APIs ──────────────────────────────────────\n\n public readonly analytics = {\n getSummary: async (): Promise<{ \n totalEntries: number; \n totalMediaCount: number; \n totalMediaSizeMB: number; \n aiUsageThisMonth: number; \n aiUsageByProvider: { provider: string; calls: number }[]; \n contentDistribution: { type: string; count: number }[]; \n }> => {\n return this.request(`/analytics/summary`);\n }\n };\n\n // ── Audit Logs APIs ────────────────────────────────────\n\n public readonly audit = {\n list: async (options?: { limit?: number }): Promise<{ data: any[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n const queryString = queryParams.toString();\n return this.request<{ data: any[] }>(`/audit${queryString ? `?${queryString}` : \"\"}`);\n }\n };\n\n // ── Team Management APIs ───────────────────────────────\n\n public readonly team = {\n listMembers: async (): Promise<{ members: any[] }> => {\n return this.request<{ members: any[] }>(`/team`);\n },\n inviteMember: async (payload: { email: string; role: \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/invite`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n updateRole: async (userId: string, payload: { role: \"owner\" | \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/${userId}/role`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n removeMember: async (userId: string): Promise<{ message: string }> => {\n return this.request<{ message: string }>(`/team/${userId}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Settings APIs ──────────────────────────────────────\n \n public readonly workspaces = {\n list: async (): Promise<{ workspaces: any[] }> => {\n return this.request<{ workspaces: any[] }>(`/workspaces`);\n }\n };\n\n public readonly onboarding = {\n migrate: async (): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/migrate`, {\n method: \"POST\"\n });\n }\n };\n\n public readonly settings = {\n updateDatabaseConnection: async (payload: { provider: \"supabase\" | \"neon\" | \"postgres\"; connectionUri: string }): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/connect`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n testConnection: async (payload: { connectionUri: string }): Promise<{ success: boolean; message?: string; error?: string }> => {\n return this.request<{ success: boolean; message?: string; error?: string }>(`/onboarding/test`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n }\n };\n}\n\n/**\n * Creates a new SchmaClient instance.\n */\nexport function createClient(config: SchmaClientConfig): SchmaClient {\n return new SchmaClient(config);\n}\nexport * from \"./mock\";\n","export function createMockClient(mockData: any = {}) {\n return {\n contentTypes: {\n list: async () => ({ data: mockData.contentTypes || [] }),\n get: async (id: string) => ({ data: mockData.contentTypes?.find((c: any) => c.id === id) || null }),\n create: async (payload: any) => ({ data: { id: \"mock-ct-id\", ...payload } })\n },\n entries: {\n list: async () => ({ data: mockData.entries || [] }),\n get: async ({ id }: { id: string }) => ({ data: mockData.entries?.find((e: any) => e.id === id) || null }),\n create: async (payload: any) => ({ data: { id: \"mock-entry-id\", ...payload } }),\n update: async (id: string, payload: any) => ({ data: { id, ...payload } }),\n delete: async () => ({ data: { success: true } })\n },\n delivery: {\n getEntry: async ({ id }: { id: string }) => mockData.entries?.find((e: any) => e.id === id) || null,\n listEntries: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length }),\n searchSimilar: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length })\n },\n analytics: {\n getSummary: async () => ({ data: { storage: 0, bandwidth: 0 } })\n }\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
// src/mock.ts
|
|
2
|
+
function createMockClient(mockData = {}) {
|
|
3
|
+
return {
|
|
4
|
+
contentTypes: {
|
|
5
|
+
list: async () => ({ data: mockData.contentTypes || [] }),
|
|
6
|
+
get: async (id) => ({ data: mockData.contentTypes?.find((c) => c.id === id) || null }),
|
|
7
|
+
create: async (payload) => ({ data: { id: "mock-ct-id", ...payload } })
|
|
8
|
+
},
|
|
9
|
+
entries: {
|
|
10
|
+
list: async () => ({ data: mockData.entries || [] }),
|
|
11
|
+
get: async ({ id }) => ({ data: mockData.entries?.find((e) => e.id === id) || null }),
|
|
12
|
+
create: async (payload) => ({ data: { id: "mock-entry-id", ...payload } }),
|
|
13
|
+
update: async (id, payload) => ({ data: { id, ...payload } }),
|
|
14
|
+
delete: async () => ({ data: { success: true } })
|
|
15
|
+
},
|
|
16
|
+
delivery: {
|
|
17
|
+
getEntry: async ({ id }) => mockData.entries?.find((e) => e.id === id) || null,
|
|
18
|
+
listEntries: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length }),
|
|
19
|
+
searchSimilar: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length })
|
|
20
|
+
},
|
|
21
|
+
analytics: {
|
|
22
|
+
getSummary: async () => ({ data: { storage: 0, bandwidth: 0 } })
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
1
27
|
// src/index.ts
|
|
2
28
|
var SchmaClient = class {
|
|
3
29
|
apiKey;
|
|
@@ -8,13 +34,16 @@ var SchmaClient = class {
|
|
|
8
34
|
throw new Error("SchmaClient: apiKey is required.");
|
|
9
35
|
}
|
|
10
36
|
this.apiKey = config.apiKey;
|
|
11
|
-
this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-
|
|
37
|
+
this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-api-production.up.railway.app";
|
|
12
38
|
let envTenantSlug = void 0;
|
|
13
39
|
if (typeof process !== "undefined" && process.env) {
|
|
14
40
|
envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;
|
|
15
41
|
}
|
|
16
42
|
this.tenantSlug = config.tenantSlug || envTenantSlug;
|
|
17
43
|
}
|
|
44
|
+
setTenantSlug(slug) {
|
|
45
|
+
this.tenantSlug = slug;
|
|
46
|
+
}
|
|
18
47
|
/**
|
|
19
48
|
* Perform an API request using the native `fetch` API.
|
|
20
49
|
*/
|
|
@@ -311,6 +340,7 @@ function createClient(config) {
|
|
|
311
340
|
}
|
|
312
341
|
export {
|
|
313
342
|
SchmaClient,
|
|
314
|
-
createClient
|
|
343
|
+
createClient,
|
|
344
|
+
createMockClient
|
|
315
345
|
};
|
|
316
346
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface SchmaClientConfig {\n /**\n * The Schma API Key, or a function that returns the API key dynamically.\n */\n apiKey: string | (() => string | Promise<string>);\n /**\n * The base URL for the Schma API.\n * @default \"https://schma-cms-production.up.railway.app\"\n */\n baseUrl?: string;\n /**\n * Optional tenant slug. Required for some management operations or multi-tenant scenarios.\n */\n tenantSlug?: string;\n}\n\nexport interface GetEntryOptions {\n id: string;\n}\n\nexport interface ListEntriesOptions {\n typeId?: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n}\n\nexport class SchmaClient {\n private apiKey: string | (() => string | Promise<string>);\n private baseUrl: string;\n private tenantSlug?: string;\n\n constructor(config: SchmaClientConfig) {\n if (!config.apiKey) {\n throw new Error(\"SchmaClient: apiKey is required.\");\n }\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") || \"https://schma-cms-production.up.railway.app\";\n \n let envTenantSlug: string | undefined = undefined;\n if (typeof process !== 'undefined' && process.env) {\n envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;\n }\n \n this.tenantSlug = config.tenantSlug || envTenantSlug;\n }\n\n /**\n * Perform an API request using the native `fetch` API.\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n \n const headers = new Headers(options?.headers);\n const resolvedApiKey = typeof this.apiKey === 'function' ? await this.apiKey() : this.apiKey;\n headers.set(\"Authorization\", `Bearer ${resolvedApiKey}`);\n headers.set(\"Content-Type\", \"application/json\");\n if (this.tenantSlug) {\n headers.set(\"x-tenant-slug\", this.tenantSlug);\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.message || errorData.error) {\n errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;\n }\n } catch (e) {}\n throw new Error(errorMsg);\n }\n\n if (response.status === 204) {\n return undefined as any;\n }\n\n return response.json();\n }\n\n // ── Management APIs ────────────────────────────────────\n\n public readonly contentTypes = {\n list: async <T = any>(): Promise<{ data: T[] }> => {\n return this.request<{ data: T[] }>(`/content-types`);\n },\n get: async <T = any>(id: string): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/content-types/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n public readonly entries = {\n get: async <T = any>(options: GetEntryOptions): Promise<{ data: T }> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<{ data: T }>(`/entries/${options.id}`);\n },\n list: async <T = any>(options?: ListEntriesOptions): Promise<{ data: T[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.typeId) queryParams.set(\"typeId\", options.typeId);\n const queryString = queryParams.toString();\n const path = `/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<{ data: T[] }>(path);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/entries/${id}`, {\n method: \"DELETE\",\n });\n },\n // Versioning\n listVersions: async (id: string): Promise<{ data: any[] }> => {\n return this.request<{ data: any[] }>(`/entries/${id}/versions`);\n },\n getVersion: async (id: string, versionId: string): Promise<{ data: any }> => {\n return this.request<{ data: any }>(`/entries/${id}/versions/${versionId}`);\n },\n restoreVersion: async (id: string, versionId: string): Promise<{ success: boolean; data: any }> => {\n return this.request<{ success: boolean; data: any }>(`/entries/${id}/versions/${versionId}/restore`, {\n method: \"POST\"\n });\n },\n // Preview Token\n generatePreviewToken: async (id: string): Promise<{ token: string; expiresAt: string }> => {\n return this.request<{ token: string; expiresAt: string }>(`/entries/${id}/preview-token`, {\n method: \"POST\"\n });\n }\n };\n\n // ── Delivery APIs (Read Only) ──────────────────────────\n\n public readonly delivery = {\n getEntry: async <T = any>(options: GetEntryOptions): Promise<T> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<T>(`/v1/delivery/entries/${options.id}`);\n },\n listEntries: async <T = any>(options?: { type?: string; limit?: number; offset?: number; locale?: string; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n if (options?.type) queryParams.set(\"type\", options.type);\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options?.offset !== undefined) queryParams.set(\"offset\", options.offset.toString());\n if (options?.locale) queryParams.set(\"locale\", options.locale);\n if (options?.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n const path = `/v1/delivery/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<PaginatedResponse<T>>(path);\n },\n searchSimilar: async <T = any>(options: { text: string; limit?: number; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n queryParams.set(\"text\", options.text);\n if (options.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n return this.request<PaginatedResponse<T>>(`/v1/delivery/entries/similar?${queryString}`);\n }\n };\n\n // ── Billing APIs ───────────────────────────────────────\n\n public readonly billing = {\n getUsage: async (): Promise<{ plan: string; usage: number; limit: number }> => {\n return this.request<{ plan: string; usage: number; limit: number }>(`/billing/usage`);\n },\n createCheckout: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/checkout`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n },\n createPortalSession: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/portal`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n }\n };\n\n // ── API Keys APIs ──────────────────────────────────────\n\n public readonly apiKeys = {\n list: async (): Promise<{ keys: any[] }> => {\n return this.request<{ keys: any[] }>(`/api-keys`);\n },\n create: async (payload: { name: string; permissions: string }): Promise<{ key: any; rawToken: string }> => {\n return this.request<{ key: any; rawToken: string }>(`/api-keys`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n revoke: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/api-keys/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Webhooks APIs ───────────────────────────────────────\n\n public readonly webhooks = {\n list: async (): Promise<{ webhooks: any[] }> => {\n return this.request<{ webhooks: any[] }>(`/webhooks`);\n },\n create: async (payload: { url: string; events: string[] }): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async (id: string, payload: { isActive?: boolean; events?: string[] }): Promise<{ webhook: any }> => {\n return this.request<{ webhook: any }>(`/webhooks/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n rotateSecret: async (id: string): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks/${id}/rotate-secret`, {\n method: \"POST\",\n });\n },\n delete: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/webhooks/${id}`, {\n method: \"DELETE\",\n });\n },\n listDeliveries: async (id: string): Promise<{ deliveries: any[] }> => {\n return this.request<{ deliveries: any[] }>(`/webhooks/${id}/deliveries`);\n }\n };\n\n // ── AI APIs ───────────────────────────────────────────\n\n public readonly ai = {\n translate: async (payload: { text: string; targetLanguage: string }): Promise<{ success: boolean; translatedText: string }> => {\n return this.request<{ success: boolean; translatedText: string }>(`/ai/features/translate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n rewrite: async (payload: { text: string; instruction: string }): Promise<{ success: boolean; rewritten: string }> => {\n return this.request<{ success: boolean; rewritten: string }>(`/ai/features/rewrite`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n qualityCheck: async (payload: { dataJson: any; schemaFields: any[] }): Promise<any> => {\n return this.request<any>(`/ai/features/quality-check`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n bulkGenerate: async (payload: { typeId: string; schema: any; prompts: string[] }): Promise<{ success: boolean; data: any[] }> => {\n return this.request<{ success: boolean; data: any[] }>(`/ai/features/bulk-generate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n }\n };\n\n // ── Analytics APIs ──────────────────────────────────────\n\n public readonly analytics = {\n getSummary: async (): Promise<{ \n totalEntries: number; \n totalMediaCount: number; \n totalMediaSizeMB: number; \n aiUsageThisMonth: number; \n aiUsageByProvider: { provider: string; calls: number }[]; \n contentDistribution: { type: string; count: number }[]; \n }> => {\n return this.request(`/analytics/summary`);\n }\n };\n\n // ── Audit Logs APIs ────────────────────────────────────\n\n public readonly audit = {\n list: async (options?: { limit?: number }): Promise<{ data: any[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n const queryString = queryParams.toString();\n return this.request<{ data: any[] }>(`/audit${queryString ? `?${queryString}` : \"\"}`);\n }\n };\n\n // ── Team Management APIs ───────────────────────────────\n\n public readonly team = {\n listMembers: async (): Promise<{ members: any[] }> => {\n return this.request<{ members: any[] }>(`/team`);\n },\n inviteMember: async (payload: { email: string; role: \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/invite`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n updateRole: async (userId: string, payload: { role: \"owner\" | \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/${userId}/role`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n removeMember: async (userId: string): Promise<{ message: string }> => {\n return this.request<{ message: string }>(`/team/${userId}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Settings APIs ──────────────────────────────────────\n \n public readonly workspaces = {\n list: async (): Promise<{ workspaces: any[] }> => {\n return this.request<{ workspaces: any[] }>(`/workspaces`);\n }\n };\n\n public readonly onboarding = {\n migrate: async (): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/migrate`, {\n method: \"POST\"\n });\n }\n };\n\n public readonly settings = {\n updateDatabaseConnection: async (payload: { provider: \"supabase\" | \"neon\" | \"postgres\"; connectionUri: string }): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/connect`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n testConnection: async (payload: { connectionUri: string }): Promise<{ success: boolean; message?: string; error?: string }> => {\n return this.request<{ success: boolean; message?: string; error?: string }>(`/onboarding/test`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n }\n };\n}\n\n/**\n * Creates a new SchmaClient instance.\n */\nexport function createClient(config: SchmaClientConfig): SchmaClient {\n return new SchmaClient(config);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/mock.ts","../src/index.ts"],"sourcesContent":["export function createMockClient(mockData: any = {}) {\n return {\n contentTypes: {\n list: async () => ({ data: mockData.contentTypes || [] }),\n get: async (id: string) => ({ data: mockData.contentTypes?.find((c: any) => c.id === id) || null }),\n create: async (payload: any) => ({ data: { id: \"mock-ct-id\", ...payload } })\n },\n entries: {\n list: async () => ({ data: mockData.entries || [] }),\n get: async ({ id }: { id: string }) => ({ data: mockData.entries?.find((e: any) => e.id === id) || null }),\n create: async (payload: any) => ({ data: { id: \"mock-entry-id\", ...payload } }),\n update: async (id: string, payload: any) => ({ data: { id, ...payload } }),\n delete: async () => ({ data: { success: true } })\n },\n delivery: {\n getEntry: async ({ id }: { id: string }) => mockData.entries?.find((e: any) => e.id === id) || null,\n listEntries: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length }),\n searchSimilar: async () => ({ data: mockData.entries || [], total: (mockData.entries || []).length })\n },\n analytics: {\n getSummary: async () => ({ data: { storage: 0, bandwidth: 0 } })\n }\n };\n}\n","export interface SchmaClientConfig {\n /**\n * The Schma API Key, or a function that returns the API key dynamically.\n */\n apiKey: string | (() => string | Promise<string>);\n /**\n * The base URL for the Schma API.\n * @default \"https://schma-api-production.up.railway.app\"\n */\n baseUrl?: string;\n /**\n * Optional tenant slug. Required for some management operations or multi-tenant scenarios.\n */\n tenantSlug?: string;\n}\n\nexport interface GetEntryOptions {\n id: string;\n}\n\nexport interface ListEntriesOptions {\n typeId?: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n}\n\nexport class SchmaClient {\n private apiKey: string | (() => string | Promise<string>);\n private baseUrl: string;\n private tenantSlug?: string;\n\n constructor(config: SchmaClientConfig) {\n if (!config.apiKey) {\n throw new Error(\"SchmaClient: apiKey is required.\");\n }\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") || \"https://schma-api-production.up.railway.app\";\n \n let envTenantSlug: string | undefined = undefined;\n if (typeof process !== 'undefined' && process.env) {\n envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;\n }\n \n this.tenantSlug = config.tenantSlug || envTenantSlug;\n }\n\n public setTenantSlug(slug: string) {\n this.tenantSlug = slug;\n }\n\n /**\n * Perform an API request using the native `fetch` API.\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n \n const headers = new Headers(options?.headers);\n const resolvedApiKey = typeof this.apiKey === 'function' ? await this.apiKey() : this.apiKey;\n headers.set(\"Authorization\", `Bearer ${resolvedApiKey}`);\n headers.set(\"Content-Type\", \"application/json\");\n if (this.tenantSlug) {\n headers.set(\"x-tenant-slug\", this.tenantSlug);\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.message || errorData.error) {\n errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;\n }\n } catch (e) {}\n throw new Error(errorMsg);\n }\n\n if (response.status === 204) {\n return undefined as any;\n }\n\n return response.json();\n }\n\n // ── Management APIs ────────────────────────────────────\n\n public readonly contentTypes = {\n list: async <T = any>(): Promise<{ data: T[] }> => {\n return this.request<{ data: T[] }>(`/content-types`);\n },\n get: async <T = any>(id: string): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/content-types/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/content-types/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n public readonly entries = {\n get: async <T = any>(options: GetEntryOptions): Promise<{ data: T }> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<{ data: T }>(`/entries/${options.id}`);\n },\n list: async <T = any>(options?: ListEntriesOptions): Promise<{ data: T[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.typeId) queryParams.set(\"typeId\", options.typeId);\n const queryString = queryParams.toString();\n const path = `/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<{ data: T[] }>(path);\n },\n create: async <T = any>(payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async <T = any>(id: string, payload: any): Promise<{ data: T }> => {\n return this.request<{ data: T }>(`/entries/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n });\n },\n delete: async (id: string): Promise<{ status: string }> => {\n return this.request<{ status: string }>(`/entries/${id}`, {\n method: \"DELETE\",\n });\n },\n // Versioning\n listVersions: async (id: string): Promise<{ data: any[] }> => {\n return this.request<{ data: any[] }>(`/entries/${id}/versions`);\n },\n getVersion: async (id: string, versionId: string): Promise<{ data: any }> => {\n return this.request<{ data: any }>(`/entries/${id}/versions/${versionId}`);\n },\n restoreVersion: async (id: string, versionId: string): Promise<{ success: boolean; data: any }> => {\n return this.request<{ success: boolean; data: any }>(`/entries/${id}/versions/${versionId}/restore`, {\n method: \"POST\"\n });\n },\n // Preview Token\n generatePreviewToken: async (id: string): Promise<{ token: string; expiresAt: string }> => {\n return this.request<{ token: string; expiresAt: string }>(`/entries/${id}/preview-token`, {\n method: \"POST\"\n });\n }\n };\n\n // ── Delivery APIs (Read Only) ──────────────────────────\n\n public readonly delivery = {\n getEntry: async <T = any>(options: GetEntryOptions): Promise<T> => {\n if (!options.id) throw new Error(\"id is required to get an entry\");\n return this.request<T>(`/v1/delivery/entries/${options.id}`);\n },\n listEntries: async <T = any>(options?: { type?: string; limit?: number; offset?: number; locale?: string; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n if (options?.type) queryParams.set(\"type\", options.type);\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options?.offset !== undefined) queryParams.set(\"offset\", options.offset.toString());\n if (options?.locale) queryParams.set(\"locale\", options.locale);\n if (options?.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n const path = `/v1/delivery/entries${queryString ? `?${queryString}` : \"\"}`;\n return this.request<PaginatedResponse<T>>(path);\n },\n searchSimilar: async <T = any>(options: { text: string; limit?: number; preview?: string }): Promise<PaginatedResponse<T>> => {\n const queryParams = new URLSearchParams();\n queryParams.set(\"text\", options.text);\n if (options.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n if (options.preview) queryParams.set(\"preview\", options.preview);\n const queryString = queryParams.toString();\n return this.request<PaginatedResponse<T>>(`/v1/delivery/entries/similar?${queryString}`);\n }\n };\n\n // ── Billing APIs ───────────────────────────────────────\n\n public readonly billing = {\n getUsage: async (): Promise<{ plan: string; usage: number; limit: number }> => {\n return this.request<{ plan: string; usage: number; limit: number }>(`/billing/usage`);\n },\n createCheckout: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/checkout`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n },\n createPortalSession: async (returnUrl?: string): Promise<{ url: string; message?: string }> => {\n return this.request<{ url: string; message?: string }>(`/billing/portal`, {\n method: \"POST\",\n body: JSON.stringify({ returnUrl }),\n });\n }\n };\n\n // ── API Keys APIs ──────────────────────────────────────\n\n public readonly apiKeys = {\n list: async (): Promise<{ keys: any[] }> => {\n return this.request<{ keys: any[] }>(`/api-keys`);\n },\n create: async (payload: { name: string; permissions: string }): Promise<{ key: any; rawToken: string }> => {\n return this.request<{ key: any; rawToken: string }>(`/api-keys`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n revoke: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/api-keys/${id}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Webhooks APIs ───────────────────────────────────────\n\n public readonly webhooks = {\n list: async (): Promise<{ webhooks: any[] }> => {\n return this.request<{ webhooks: any[] }>(`/webhooks`);\n },\n create: async (payload: { url: string; events: string[] }): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n update: async (id: string, payload: { isActive?: boolean; events?: string[] }): Promise<{ webhook: any }> => {\n return this.request<{ webhook: any }>(`/webhooks/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n rotateSecret: async (id: string): Promise<{ webhook: any; secret: string }> => {\n return this.request<{ webhook: any; secret: string }>(`/webhooks/${id}/rotate-secret`, {\n method: \"POST\",\n });\n },\n delete: async (id: string): Promise<{ success: boolean }> => {\n return this.request<{ success: boolean }>(`/webhooks/${id}`, {\n method: \"DELETE\",\n });\n },\n listDeliveries: async (id: string): Promise<{ deliveries: any[] }> => {\n return this.request<{ deliveries: any[] }>(`/webhooks/${id}/deliveries`);\n }\n };\n\n // ── AI APIs ───────────────────────────────────────────\n\n public readonly ai = {\n translate: async (payload: { text: string; targetLanguage: string }): Promise<{ success: boolean; translatedText: string }> => {\n return this.request<{ success: boolean; translatedText: string }>(`/ai/features/translate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n rewrite: async (payload: { text: string; instruction: string }): Promise<{ success: boolean; rewritten: string }> => {\n return this.request<{ success: boolean; rewritten: string }>(`/ai/features/rewrite`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n qualityCheck: async (payload: { dataJson: any; schemaFields: any[] }): Promise<any> => {\n return this.request<any>(`/ai/features/quality-check`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n },\n bulkGenerate: async (payload: { typeId: string; schema: any; prompts: string[] }): Promise<{ success: boolean; data: any[] }> => {\n return this.request<{ success: boolean; data: any[] }>(`/ai/features/bulk-generate`, {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n }\n };\n\n // ── Analytics APIs ──────────────────────────────────────\n\n public readonly analytics = {\n getSummary: async (): Promise<{ \n totalEntries: number; \n totalMediaCount: number; \n totalMediaSizeMB: number; \n aiUsageThisMonth: number; \n aiUsageByProvider: { provider: string; calls: number }[]; \n contentDistribution: { type: string; count: number }[]; \n }> => {\n return this.request(`/analytics/summary`);\n }\n };\n\n // ── Audit Logs APIs ────────────────────────────────────\n\n public readonly audit = {\n list: async (options?: { limit?: number }): Promise<{ data: any[] }> => {\n const queryParams = new URLSearchParams();\n if (options?.limit !== undefined) queryParams.set(\"limit\", options.limit.toString());\n const queryString = queryParams.toString();\n return this.request<{ data: any[] }>(`/audit${queryString ? `?${queryString}` : \"\"}`);\n }\n };\n\n // ── Team Management APIs ───────────────────────────────\n\n public readonly team = {\n listMembers: async (): Promise<{ members: any[] }> => {\n return this.request<{ members: any[] }>(`/team`);\n },\n inviteMember: async (payload: { email: string; role: \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/invite`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n updateRole: async (userId: string, payload: { role: \"owner\" | \"admin\" | \"editor\" }): Promise<{ message: string; membership: any }> => {\n return this.request<{ message: string; membership: any }>(`/team/${userId}/role`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n },\n removeMember: async (userId: string): Promise<{ message: string }> => {\n return this.request<{ message: string }>(`/team/${userId}`, {\n method: \"DELETE\",\n });\n }\n };\n\n // ── Settings APIs ──────────────────────────────────────\n \n public readonly workspaces = {\n list: async (): Promise<{ workspaces: any[] }> => {\n return this.request<{ workspaces: any[] }>(`/workspaces`);\n }\n };\n\n public readonly onboarding = {\n migrate: async (): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/migrate`, {\n method: \"POST\"\n });\n }\n };\n\n public readonly settings = {\n updateDatabaseConnection: async (payload: { provider: \"supabase\" | \"neon\" | \"postgres\"; connectionUri: string }): Promise<{ success: boolean; error?: string }> => {\n return this.request<{ success: boolean; error?: string }>(`/onboarding/connect`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n },\n testConnection: async (payload: { connectionUri: string }): Promise<{ success: boolean; message?: string; error?: string }> => {\n return this.request<{ success: boolean; message?: string; error?: string }>(`/onboarding/test`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n }\n };\n}\n\n/**\n * Creates a new SchmaClient instance.\n */\nexport function createClient(config: SchmaClientConfig): SchmaClient {\n return new SchmaClient(config);\n}\nexport * from \"./mock\";\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schmadev/client",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Isomorphic client for Schma CMS",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -15,8 +15,13 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"dev": "tsup --watch",
|
|
21
|
+
"clean": "rm -rf dist"
|
|
22
|
+
},
|
|
18
23
|
"devDependencies": {
|
|
19
|
-
"@schmadev/typescript-config": "
|
|
24
|
+
"@schmadev/typescript-config": "workspace:*",
|
|
20
25
|
"@types/node": "^26.6.1",
|
|
21
26
|
"eslint": "10.9.1",
|
|
22
27
|
"tsup": "^8.3.0",
|
|
@@ -24,10 +29,5 @@
|
|
|
24
29
|
},
|
|
25
30
|
"dependencies": {
|
|
26
31
|
"zod": "4.6.5"
|
|
27
|
-
},
|
|
28
|
-
"scripts": {
|
|
29
|
-
"build": "tsup",
|
|
30
|
-
"dev": "tsup --watch",
|
|
31
|
-
"clean": "rm -rf dist"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|