@schmadev/client 1.0.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.
@@ -0,0 +1,260 @@
1
+ interface SchmaClientConfig {
2
+ /**
3
+ * The Schma API Key, or a function that returns the API key dynamically.
4
+ */
5
+ apiKey: string | (() => string | Promise<string>);
6
+ /**
7
+ * The base URL for the Schma API.
8
+ * @default "https://schma-cms-production.up.railway.app"
9
+ */
10
+ baseUrl?: string;
11
+ /**
12
+ * Optional tenant slug. Required for some management operations or multi-tenant scenarios.
13
+ */
14
+ tenantSlug?: string;
15
+ }
16
+ interface GetEntryOptions {
17
+ id: string;
18
+ }
19
+ interface ListEntriesOptions {
20
+ typeId?: string;
21
+ }
22
+ interface PaginatedResponse<T> {
23
+ data: T[];
24
+ }
25
+ declare class SchmaClient {
26
+ private apiKey;
27
+ private baseUrl;
28
+ private tenantSlug?;
29
+ constructor(config: SchmaClientConfig);
30
+ /**
31
+ * Perform an API request using the native `fetch` API.
32
+ */
33
+ private request;
34
+ readonly contentTypes: {
35
+ list: <T = any>() => Promise<{
36
+ data: T[];
37
+ }>;
38
+ get: <T = any>(id: string) => Promise<{
39
+ data: T;
40
+ }>;
41
+ create: <T = any>(payload: any) => Promise<{
42
+ data: T;
43
+ }>;
44
+ update: <T = any>(id: string, payload: any) => Promise<{
45
+ data: T;
46
+ }>;
47
+ delete: (id: string) => Promise<{
48
+ status: string;
49
+ }>;
50
+ };
51
+ readonly entries: {
52
+ get: <T = any>(options: GetEntryOptions) => Promise<{
53
+ data: T;
54
+ }>;
55
+ list: <T = any>(options?: ListEntriesOptions) => Promise<{
56
+ data: T[];
57
+ }>;
58
+ create: <T = any>(payload: any) => Promise<{
59
+ data: T;
60
+ }>;
61
+ update: <T = any>(id: string, payload: any) => Promise<{
62
+ data: T;
63
+ }>;
64
+ delete: (id: string) => Promise<{
65
+ status: string;
66
+ }>;
67
+ listVersions: (id: string) => Promise<{
68
+ data: any[];
69
+ }>;
70
+ getVersion: (id: string, versionId: string) => Promise<{
71
+ data: any;
72
+ }>;
73
+ restoreVersion: (id: string, versionId: string) => Promise<{
74
+ success: boolean;
75
+ data: any;
76
+ }>;
77
+ generatePreviewToken: (id: string) => Promise<{
78
+ token: string;
79
+ expiresAt: string;
80
+ }>;
81
+ };
82
+ readonly delivery: {
83
+ getEntry: <T = any>(options: GetEntryOptions) => Promise<T>;
84
+ listEntries: <T = any>(options?: {
85
+ type?: string;
86
+ limit?: number;
87
+ offset?: number;
88
+ locale?: string;
89
+ preview?: string;
90
+ }) => Promise<PaginatedResponse<T>>;
91
+ searchSimilar: <T = any>(options: {
92
+ text: string;
93
+ limit?: number;
94
+ preview?: string;
95
+ }) => Promise<PaginatedResponse<T>>;
96
+ };
97
+ readonly billing: {
98
+ getUsage: () => Promise<{
99
+ plan: string;
100
+ usage: number;
101
+ limit: number;
102
+ }>;
103
+ createCheckout: (returnUrl?: string) => Promise<{
104
+ url: string;
105
+ message?: string;
106
+ }>;
107
+ createPortalSession: (returnUrl?: string) => Promise<{
108
+ url: string;
109
+ message?: string;
110
+ }>;
111
+ };
112
+ readonly apiKeys: {
113
+ list: () => Promise<{
114
+ keys: any[];
115
+ }>;
116
+ create: (payload: {
117
+ name: string;
118
+ permissions: string;
119
+ }) => Promise<{
120
+ key: any;
121
+ rawToken: string;
122
+ }>;
123
+ revoke: (id: string) => Promise<{
124
+ success: boolean;
125
+ }>;
126
+ };
127
+ readonly webhooks: {
128
+ list: () => Promise<{
129
+ webhooks: any[];
130
+ }>;
131
+ create: (payload: {
132
+ url: string;
133
+ events: string[];
134
+ }) => Promise<{
135
+ webhook: any;
136
+ secret: string;
137
+ }>;
138
+ update: (id: string, payload: {
139
+ isActive?: boolean;
140
+ events?: string[];
141
+ }) => Promise<{
142
+ webhook: any;
143
+ }>;
144
+ rotateSecret: (id: string) => Promise<{
145
+ webhook: any;
146
+ secret: string;
147
+ }>;
148
+ delete: (id: string) => Promise<{
149
+ success: boolean;
150
+ }>;
151
+ listDeliveries: (id: string) => Promise<{
152
+ deliveries: any[];
153
+ }>;
154
+ };
155
+ readonly ai: {
156
+ translate: (payload: {
157
+ text: string;
158
+ targetLanguage: string;
159
+ }) => Promise<{
160
+ success: boolean;
161
+ translatedText: string;
162
+ }>;
163
+ rewrite: (payload: {
164
+ text: string;
165
+ instruction: string;
166
+ }) => Promise<{
167
+ success: boolean;
168
+ rewritten: string;
169
+ }>;
170
+ qualityCheck: (payload: {
171
+ dataJson: any;
172
+ schemaFields: any[];
173
+ }) => Promise<any>;
174
+ bulkGenerate: (payload: {
175
+ typeId: string;
176
+ schema: any;
177
+ prompts: string[];
178
+ }) => Promise<{
179
+ success: boolean;
180
+ data: any[];
181
+ }>;
182
+ };
183
+ readonly analytics: {
184
+ getSummary: () => Promise<{
185
+ totalEntries: number;
186
+ totalMediaCount: number;
187
+ totalMediaSizeMB: number;
188
+ aiUsageThisMonth: number;
189
+ aiUsageByProvider: {
190
+ provider: string;
191
+ calls: number;
192
+ }[];
193
+ contentDistribution: {
194
+ type: string;
195
+ count: number;
196
+ }[];
197
+ }>;
198
+ };
199
+ readonly audit: {
200
+ list: (options?: {
201
+ limit?: number;
202
+ }) => Promise<{
203
+ data: any[];
204
+ }>;
205
+ };
206
+ readonly team: {
207
+ listMembers: () => Promise<{
208
+ members: any[];
209
+ }>;
210
+ inviteMember: (payload: {
211
+ email: string;
212
+ role: "admin" | "editor";
213
+ }) => Promise<{
214
+ message: string;
215
+ membership: any;
216
+ }>;
217
+ updateRole: (userId: string, payload: {
218
+ role: "owner" | "admin" | "editor";
219
+ }) => Promise<{
220
+ message: string;
221
+ membership: any;
222
+ }>;
223
+ removeMember: (userId: string) => Promise<{
224
+ message: string;
225
+ }>;
226
+ };
227
+ readonly workspaces: {
228
+ list: () => Promise<{
229
+ workspaces: any[];
230
+ }>;
231
+ };
232
+ readonly onboarding: {
233
+ migrate: () => Promise<{
234
+ success: boolean;
235
+ error?: string;
236
+ }>;
237
+ };
238
+ readonly settings: {
239
+ updateDatabaseConnection: (payload: {
240
+ provider: "supabase" | "neon" | "postgres";
241
+ connectionUri: string;
242
+ }) => Promise<{
243
+ success: boolean;
244
+ error?: string;
245
+ }>;
246
+ testConnection: (payload: {
247
+ connectionUri: string;
248
+ }) => Promise<{
249
+ success: boolean;
250
+ message?: string;
251
+ error?: string;
252
+ }>;
253
+ };
254
+ }
255
+ /**
256
+ * Creates a new SchmaClient instance.
257
+ */
258
+ declare function createClient(config: SchmaClientConfig): SchmaClient;
259
+
260
+ export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient };
@@ -0,0 +1,260 @@
1
+ interface SchmaClientConfig {
2
+ /**
3
+ * The Schma API Key, or a function that returns the API key dynamically.
4
+ */
5
+ apiKey: string | (() => string | Promise<string>);
6
+ /**
7
+ * The base URL for the Schma API.
8
+ * @default "https://schma-cms-production.up.railway.app"
9
+ */
10
+ baseUrl?: string;
11
+ /**
12
+ * Optional tenant slug. Required for some management operations or multi-tenant scenarios.
13
+ */
14
+ tenantSlug?: string;
15
+ }
16
+ interface GetEntryOptions {
17
+ id: string;
18
+ }
19
+ interface ListEntriesOptions {
20
+ typeId?: string;
21
+ }
22
+ interface PaginatedResponse<T> {
23
+ data: T[];
24
+ }
25
+ declare class SchmaClient {
26
+ private apiKey;
27
+ private baseUrl;
28
+ private tenantSlug?;
29
+ constructor(config: SchmaClientConfig);
30
+ /**
31
+ * Perform an API request using the native `fetch` API.
32
+ */
33
+ private request;
34
+ readonly contentTypes: {
35
+ list: <T = any>() => Promise<{
36
+ data: T[];
37
+ }>;
38
+ get: <T = any>(id: string) => Promise<{
39
+ data: T;
40
+ }>;
41
+ create: <T = any>(payload: any) => Promise<{
42
+ data: T;
43
+ }>;
44
+ update: <T = any>(id: string, payload: any) => Promise<{
45
+ data: T;
46
+ }>;
47
+ delete: (id: string) => Promise<{
48
+ status: string;
49
+ }>;
50
+ };
51
+ readonly entries: {
52
+ get: <T = any>(options: GetEntryOptions) => Promise<{
53
+ data: T;
54
+ }>;
55
+ list: <T = any>(options?: ListEntriesOptions) => Promise<{
56
+ data: T[];
57
+ }>;
58
+ create: <T = any>(payload: any) => Promise<{
59
+ data: T;
60
+ }>;
61
+ update: <T = any>(id: string, payload: any) => Promise<{
62
+ data: T;
63
+ }>;
64
+ delete: (id: string) => Promise<{
65
+ status: string;
66
+ }>;
67
+ listVersions: (id: string) => Promise<{
68
+ data: any[];
69
+ }>;
70
+ getVersion: (id: string, versionId: string) => Promise<{
71
+ data: any;
72
+ }>;
73
+ restoreVersion: (id: string, versionId: string) => Promise<{
74
+ success: boolean;
75
+ data: any;
76
+ }>;
77
+ generatePreviewToken: (id: string) => Promise<{
78
+ token: string;
79
+ expiresAt: string;
80
+ }>;
81
+ };
82
+ readonly delivery: {
83
+ getEntry: <T = any>(options: GetEntryOptions) => Promise<T>;
84
+ listEntries: <T = any>(options?: {
85
+ type?: string;
86
+ limit?: number;
87
+ offset?: number;
88
+ locale?: string;
89
+ preview?: string;
90
+ }) => Promise<PaginatedResponse<T>>;
91
+ searchSimilar: <T = any>(options: {
92
+ text: string;
93
+ limit?: number;
94
+ preview?: string;
95
+ }) => Promise<PaginatedResponse<T>>;
96
+ };
97
+ readonly billing: {
98
+ getUsage: () => Promise<{
99
+ plan: string;
100
+ usage: number;
101
+ limit: number;
102
+ }>;
103
+ createCheckout: (returnUrl?: string) => Promise<{
104
+ url: string;
105
+ message?: string;
106
+ }>;
107
+ createPortalSession: (returnUrl?: string) => Promise<{
108
+ url: string;
109
+ message?: string;
110
+ }>;
111
+ };
112
+ readonly apiKeys: {
113
+ list: () => Promise<{
114
+ keys: any[];
115
+ }>;
116
+ create: (payload: {
117
+ name: string;
118
+ permissions: string;
119
+ }) => Promise<{
120
+ key: any;
121
+ rawToken: string;
122
+ }>;
123
+ revoke: (id: string) => Promise<{
124
+ success: boolean;
125
+ }>;
126
+ };
127
+ readonly webhooks: {
128
+ list: () => Promise<{
129
+ webhooks: any[];
130
+ }>;
131
+ create: (payload: {
132
+ url: string;
133
+ events: string[];
134
+ }) => Promise<{
135
+ webhook: any;
136
+ secret: string;
137
+ }>;
138
+ update: (id: string, payload: {
139
+ isActive?: boolean;
140
+ events?: string[];
141
+ }) => Promise<{
142
+ webhook: any;
143
+ }>;
144
+ rotateSecret: (id: string) => Promise<{
145
+ webhook: any;
146
+ secret: string;
147
+ }>;
148
+ delete: (id: string) => Promise<{
149
+ success: boolean;
150
+ }>;
151
+ listDeliveries: (id: string) => Promise<{
152
+ deliveries: any[];
153
+ }>;
154
+ };
155
+ readonly ai: {
156
+ translate: (payload: {
157
+ text: string;
158
+ targetLanguage: string;
159
+ }) => Promise<{
160
+ success: boolean;
161
+ translatedText: string;
162
+ }>;
163
+ rewrite: (payload: {
164
+ text: string;
165
+ instruction: string;
166
+ }) => Promise<{
167
+ success: boolean;
168
+ rewritten: string;
169
+ }>;
170
+ qualityCheck: (payload: {
171
+ dataJson: any;
172
+ schemaFields: any[];
173
+ }) => Promise<any>;
174
+ bulkGenerate: (payload: {
175
+ typeId: string;
176
+ schema: any;
177
+ prompts: string[];
178
+ }) => Promise<{
179
+ success: boolean;
180
+ data: any[];
181
+ }>;
182
+ };
183
+ readonly analytics: {
184
+ getSummary: () => Promise<{
185
+ totalEntries: number;
186
+ totalMediaCount: number;
187
+ totalMediaSizeMB: number;
188
+ aiUsageThisMonth: number;
189
+ aiUsageByProvider: {
190
+ provider: string;
191
+ calls: number;
192
+ }[];
193
+ contentDistribution: {
194
+ type: string;
195
+ count: number;
196
+ }[];
197
+ }>;
198
+ };
199
+ readonly audit: {
200
+ list: (options?: {
201
+ limit?: number;
202
+ }) => Promise<{
203
+ data: any[];
204
+ }>;
205
+ };
206
+ readonly team: {
207
+ listMembers: () => Promise<{
208
+ members: any[];
209
+ }>;
210
+ inviteMember: (payload: {
211
+ email: string;
212
+ role: "admin" | "editor";
213
+ }) => Promise<{
214
+ message: string;
215
+ membership: any;
216
+ }>;
217
+ updateRole: (userId: string, payload: {
218
+ role: "owner" | "admin" | "editor";
219
+ }) => Promise<{
220
+ message: string;
221
+ membership: any;
222
+ }>;
223
+ removeMember: (userId: string) => Promise<{
224
+ message: string;
225
+ }>;
226
+ };
227
+ readonly workspaces: {
228
+ list: () => Promise<{
229
+ workspaces: any[];
230
+ }>;
231
+ };
232
+ readonly onboarding: {
233
+ migrate: () => Promise<{
234
+ success: boolean;
235
+ error?: string;
236
+ }>;
237
+ };
238
+ readonly settings: {
239
+ updateDatabaseConnection: (payload: {
240
+ provider: "supabase" | "neon" | "postgres";
241
+ connectionUri: string;
242
+ }) => Promise<{
243
+ success: boolean;
244
+ error?: string;
245
+ }>;
246
+ testConnection: (payload: {
247
+ connectionUri: string;
248
+ }) => Promise<{
249
+ success: boolean;
250
+ message?: string;
251
+ error?: string;
252
+ }>;
253
+ };
254
+ }
255
+ /**
256
+ * Creates a new SchmaClient instance.
257
+ */
258
+ declare function createClient(config: SchmaClientConfig): SchmaClient;
259
+
260
+ export { type GetEntryOptions, type ListEntriesOptions, type PaginatedResponse, SchmaClient, type SchmaClientConfig, createClient };
package/dist/index.js ADDED
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ SchmaClient: () => SchmaClient,
24
+ createClient: () => createClient
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+ var SchmaClient = class {
28
+ apiKey;
29
+ baseUrl;
30
+ tenantSlug;
31
+ constructor(config) {
32
+ if (!config.apiKey) {
33
+ throw new Error("SchmaClient: apiKey is required.");
34
+ }
35
+ this.apiKey = config.apiKey;
36
+ this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-cms-production.up.railway.app";
37
+ let envTenantSlug = void 0;
38
+ if (typeof process !== "undefined" && process.env) {
39
+ envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;
40
+ }
41
+ this.tenantSlug = config.tenantSlug || envTenantSlug;
42
+ }
43
+ /**
44
+ * Perform an API request using the native `fetch` API.
45
+ */
46
+ async request(path, options) {
47
+ const url = `${this.baseUrl}${path}`;
48
+ const headers = new Headers(options?.headers);
49
+ const resolvedApiKey = typeof this.apiKey === "function" ? await this.apiKey() : this.apiKey;
50
+ headers.set("Authorization", `Bearer ${resolvedApiKey}`);
51
+ headers.set("Content-Type", "application/json");
52
+ if (this.tenantSlug) {
53
+ headers.set("x-tenant-slug", this.tenantSlug);
54
+ }
55
+ const response = await fetch(url, {
56
+ ...options,
57
+ headers
58
+ });
59
+ if (!response.ok) {
60
+ let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;
61
+ try {
62
+ const errorData = await response.json();
63
+ if (errorData.message || errorData.error) {
64
+ errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;
65
+ }
66
+ } catch (e) {
67
+ }
68
+ throw new Error(errorMsg);
69
+ }
70
+ if (response.status === 204) {
71
+ return void 0;
72
+ }
73
+ return response.json();
74
+ }
75
+ // ── Management APIs ────────────────────────────────────
76
+ contentTypes = {
77
+ list: async () => {
78
+ return this.request(`/content-types`);
79
+ },
80
+ get: async (id) => {
81
+ return this.request(`/content-types/${id}`);
82
+ },
83
+ create: async (payload) => {
84
+ return this.request(`/content-types`, {
85
+ method: "POST",
86
+ body: JSON.stringify(payload)
87
+ });
88
+ },
89
+ update: async (id, payload) => {
90
+ return this.request(`/content-types/${id}`, {
91
+ method: "PUT",
92
+ body: JSON.stringify(payload)
93
+ });
94
+ },
95
+ delete: async (id) => {
96
+ return this.request(`/content-types/${id}`, {
97
+ method: "DELETE"
98
+ });
99
+ }
100
+ };
101
+ entries = {
102
+ get: async (options) => {
103
+ if (!options.id) throw new Error("id is required to get an entry");
104
+ return this.request(`/entries/${options.id}`);
105
+ },
106
+ list: async (options) => {
107
+ const queryParams = new URLSearchParams();
108
+ if (options?.typeId) queryParams.set("typeId", options.typeId);
109
+ const queryString = queryParams.toString();
110
+ const path = `/entries${queryString ? `?${queryString}` : ""}`;
111
+ return this.request(path);
112
+ },
113
+ create: async (payload) => {
114
+ return this.request(`/entries`, {
115
+ method: "POST",
116
+ body: JSON.stringify(payload)
117
+ });
118
+ },
119
+ update: async (id, payload) => {
120
+ return this.request(`/entries/${id}`, {
121
+ method: "PUT",
122
+ body: JSON.stringify(payload)
123
+ });
124
+ },
125
+ delete: async (id) => {
126
+ return this.request(`/entries/${id}`, {
127
+ method: "DELETE"
128
+ });
129
+ },
130
+ // Versioning
131
+ listVersions: async (id) => {
132
+ return this.request(`/entries/${id}/versions`);
133
+ },
134
+ getVersion: async (id, versionId) => {
135
+ return this.request(`/entries/${id}/versions/${versionId}`);
136
+ },
137
+ restoreVersion: async (id, versionId) => {
138
+ return this.request(`/entries/${id}/versions/${versionId}/restore`, {
139
+ method: "POST"
140
+ });
141
+ },
142
+ // Preview Token
143
+ generatePreviewToken: async (id) => {
144
+ return this.request(`/entries/${id}/preview-token`, {
145
+ method: "POST"
146
+ });
147
+ }
148
+ };
149
+ // ── Delivery APIs (Read Only) ──────────────────────────
150
+ delivery = {
151
+ getEntry: async (options) => {
152
+ if (!options.id) throw new Error("id is required to get an entry");
153
+ return this.request(`/v1/delivery/entries/${options.id}`);
154
+ },
155
+ listEntries: async (options) => {
156
+ const queryParams = new URLSearchParams();
157
+ if (options?.type) queryParams.set("type", options.type);
158
+ if (options?.limit !== void 0) queryParams.set("limit", options.limit.toString());
159
+ if (options?.offset !== void 0) queryParams.set("offset", options.offset.toString());
160
+ if (options?.locale) queryParams.set("locale", options.locale);
161
+ if (options?.preview) queryParams.set("preview", options.preview);
162
+ const queryString = queryParams.toString();
163
+ const path = `/v1/delivery/entries${queryString ? `?${queryString}` : ""}`;
164
+ return this.request(path);
165
+ },
166
+ searchSimilar: async (options) => {
167
+ const queryParams = new URLSearchParams();
168
+ queryParams.set("text", options.text);
169
+ if (options.limit !== void 0) queryParams.set("limit", options.limit.toString());
170
+ if (options.preview) queryParams.set("preview", options.preview);
171
+ const queryString = queryParams.toString();
172
+ return this.request(`/v1/delivery/entries/similar?${queryString}`);
173
+ }
174
+ };
175
+ // ── Billing APIs ───────────────────────────────────────
176
+ billing = {
177
+ getUsage: async () => {
178
+ return this.request(`/billing/usage`);
179
+ },
180
+ createCheckout: async (returnUrl) => {
181
+ return this.request(`/billing/checkout`, {
182
+ method: "POST",
183
+ body: JSON.stringify({ returnUrl })
184
+ });
185
+ },
186
+ createPortalSession: async (returnUrl) => {
187
+ return this.request(`/billing/portal`, {
188
+ method: "POST",
189
+ body: JSON.stringify({ returnUrl })
190
+ });
191
+ }
192
+ };
193
+ // ── API Keys APIs ──────────────────────────────────────
194
+ apiKeys = {
195
+ list: async () => {
196
+ return this.request(`/api-keys`);
197
+ },
198
+ create: async (payload) => {
199
+ return this.request(`/api-keys`, {
200
+ method: "POST",
201
+ body: JSON.stringify(payload)
202
+ });
203
+ },
204
+ revoke: async (id) => {
205
+ return this.request(`/api-keys/${id}`, {
206
+ method: "DELETE"
207
+ });
208
+ }
209
+ };
210
+ // ── Webhooks APIs ───────────────────────────────────────
211
+ webhooks = {
212
+ list: async () => {
213
+ return this.request(`/webhooks`);
214
+ },
215
+ create: async (payload) => {
216
+ return this.request(`/webhooks`, {
217
+ method: "POST",
218
+ body: JSON.stringify(payload)
219
+ });
220
+ },
221
+ update: async (id, payload) => {
222
+ return this.request(`/webhooks/${id}`, {
223
+ method: "PATCH",
224
+ body: JSON.stringify(payload)
225
+ });
226
+ },
227
+ rotateSecret: async (id) => {
228
+ return this.request(`/webhooks/${id}/rotate-secret`, {
229
+ method: "POST"
230
+ });
231
+ },
232
+ delete: async (id) => {
233
+ return this.request(`/webhooks/${id}`, {
234
+ method: "DELETE"
235
+ });
236
+ },
237
+ listDeliveries: async (id) => {
238
+ return this.request(`/webhooks/${id}/deliveries`);
239
+ }
240
+ };
241
+ // ── AI APIs ───────────────────────────────────────────
242
+ ai = {
243
+ translate: async (payload) => {
244
+ return this.request(`/ai/features/translate`, {
245
+ method: "POST",
246
+ body: JSON.stringify(payload)
247
+ });
248
+ },
249
+ rewrite: async (payload) => {
250
+ return this.request(`/ai/features/rewrite`, {
251
+ method: "POST",
252
+ body: JSON.stringify(payload)
253
+ });
254
+ },
255
+ qualityCheck: async (payload) => {
256
+ return this.request(`/ai/features/quality-check`, {
257
+ method: "POST",
258
+ body: JSON.stringify(payload)
259
+ });
260
+ },
261
+ bulkGenerate: async (payload) => {
262
+ return this.request(`/ai/features/bulk-generate`, {
263
+ method: "POST",
264
+ body: JSON.stringify(payload)
265
+ });
266
+ }
267
+ };
268
+ // ── Analytics APIs ──────────────────────────────────────
269
+ analytics = {
270
+ getSummary: async () => {
271
+ return this.request(`/analytics/summary`);
272
+ }
273
+ };
274
+ // ── Audit Logs APIs ────────────────────────────────────
275
+ audit = {
276
+ list: async (options) => {
277
+ const queryParams = new URLSearchParams();
278
+ if (options?.limit !== void 0) queryParams.set("limit", options.limit.toString());
279
+ const queryString = queryParams.toString();
280
+ return this.request(`/audit${queryString ? `?${queryString}` : ""}`);
281
+ }
282
+ };
283
+ // ── Team Management APIs ───────────────────────────────
284
+ team = {
285
+ listMembers: async () => {
286
+ return this.request(`/team`);
287
+ },
288
+ inviteMember: async (payload) => {
289
+ return this.request(`/team/invite`, {
290
+ method: "POST",
291
+ body: JSON.stringify(payload)
292
+ });
293
+ },
294
+ updateRole: async (userId, payload) => {
295
+ return this.request(`/team/${userId}/role`, {
296
+ method: "PATCH",
297
+ body: JSON.stringify(payload)
298
+ });
299
+ },
300
+ removeMember: async (userId) => {
301
+ return this.request(`/team/${userId}`, {
302
+ method: "DELETE"
303
+ });
304
+ }
305
+ };
306
+ // ── Settings APIs ──────────────────────────────────────
307
+ workspaces = {
308
+ list: async () => {
309
+ return this.request(`/workspaces`);
310
+ }
311
+ };
312
+ onboarding = {
313
+ migrate: async () => {
314
+ return this.request(`/onboarding/migrate`, {
315
+ method: "POST"
316
+ });
317
+ }
318
+ };
319
+ settings = {
320
+ updateDatabaseConnection: async (payload) => {
321
+ return this.request(`/onboarding/connect`, {
322
+ method: "POST",
323
+ body: JSON.stringify(payload)
324
+ });
325
+ },
326
+ testConnection: async (payload) => {
327
+ return this.request(`/onboarding/test`, {
328
+ method: "POST",
329
+ body: JSON.stringify(payload)
330
+ });
331
+ }
332
+ };
333
+ };
334
+ function createClient(config) {
335
+ return new SchmaClient(config);
336
+ }
337
+ // Annotate the CommonJS export names for ESM import in node:
338
+ 0 && (module.exports = {
339
+ SchmaClient,
340
+ createClient
341
+ });
342
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BO,IAAM,cAAN,MAAkB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA2B;AACrC,QAAI,CAAC,OAAO,QAAQ;AAClB,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AACA,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO,SAAS,QAAQ,OAAO,EAAE,KAAK;AAErD,QAAI,gBAAoC;AACxC,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AACjD,sBAAgB,QAAQ,IAAI,qBAAqB,QAAQ,IAAI;AAAA,IAC/D;AAEA,SAAK,aAAa,OAAO,cAAc;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,QAAW,MAAc,SAAmC;AACxE,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,IAAI;AAElC,UAAM,UAAU,IAAI,QAAQ,SAAS,OAAO;AAC5C,UAAM,iBAAiB,OAAO,KAAK,WAAW,aAAa,MAAM,KAAK,OAAO,IAAI,KAAK;AACtF,YAAQ,IAAI,iBAAiB,UAAU,cAAc,EAAE;AACvD,YAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,QAAI,KAAK,YAAY;AACnB,cAAQ,IAAI,iBAAiB,KAAK,UAAU;AAAA,IAC9C;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,WAAW,oBAAoB,SAAS,MAAM,IAAI,SAAS,UAAU;AACzE,UAAI;AACF,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAI,UAAU,WAAW,UAAU,OAAO;AACxC,qBAAW,oBAAoB,UAAU,WAAW,UAAU,KAAK;AAAA,QACrE;AAAA,MACF,SAAS,GAAG;AAAA,MAAC;AACb,YAAM,IAAI,MAAM,QAAQ;AAAA,IAC1B;AAEA,QAAI,SAAS,WAAW,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA,EAIgB,eAAe;AAAA,IAC7B,MAAM,YAA6C;AACjD,aAAO,KAAK,QAAuB,gBAAgB;AAAA,IACrD;AAAA,IACA,KAAK,OAAgB,OAAqC;AACxD,aAAO,KAAK,QAAqB,kBAAkB,EAAE,EAAE;AAAA,IACzD;AAAA,IACA,QAAQ,OAAgB,YAAuC;AAC7D,aAAO,KAAK,QAAqB,kBAAkB;AAAA,QACjD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAgB,IAAY,YAAuC;AACzE,aAAO,KAAK,QAAqB,kBAAkB,EAAE,IAAI;AAAA,QACvD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,OAA4C;AACzD,aAAO,KAAK,QAA4B,kBAAkB,EAAE,IAAI;AAAA,QAC9D,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEgB,UAAU;AAAA,IACxB,KAAK,OAAgB,YAAmD;AACtE,UAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,gCAAgC;AACjE,aAAO,KAAK,QAAqB,YAAY,QAAQ,EAAE,EAAE;AAAA,IAC3D;AAAA,IACA,MAAM,OAAgB,YAAyD;AAC7E,YAAM,cAAc,IAAI,gBAAgB;AACxC,UAAI,SAAS,OAAQ,aAAY,IAAI,UAAU,QAAQ,MAAM;AAC7D,YAAM,cAAc,YAAY,SAAS;AACzC,YAAM,OAAO,WAAW,cAAc,IAAI,WAAW,KAAK,EAAE;AAC5D,aAAO,KAAK,QAAuB,IAAI;AAAA,IACzC;AAAA,IACA,QAAQ,OAAgB,YAAuC;AAC7D,aAAO,KAAK,QAAqB,YAAY;AAAA,QAC3C,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAgB,IAAY,YAAuC;AACzE,aAAO,KAAK,QAAqB,YAAY,EAAE,IAAI;AAAA,QACjD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,OAA4C;AACzD,aAAO,KAAK,QAA4B,YAAY,EAAE,IAAI;AAAA,QACxD,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA;AAAA,IAEA,cAAc,OAAO,OAAyC;AAC5D,aAAO,KAAK,QAAyB,YAAY,EAAE,WAAW;AAAA,IAChE;AAAA,IACA,YAAY,OAAO,IAAY,cAA8C;AAC3E,aAAO,KAAK,QAAuB,YAAY,EAAE,aAAa,SAAS,EAAE;AAAA,IAC3E;AAAA,IACA,gBAAgB,OAAO,IAAY,cAAgE;AACjG,aAAO,KAAK,QAAyC,YAAY,EAAE,aAAa,SAAS,YAAY;AAAA,QACnG,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA;AAAA,IAEA,sBAAsB,OAAO,OAA8D;AACzF,aAAO,KAAK,QAA8C,YAAY,EAAE,kBAAkB;AAAA,QACxF,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAIgB,WAAW;AAAA,IACzB,UAAU,OAAgB,YAAyC;AACjE,UAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,gCAAgC;AACjE,aAAO,KAAK,QAAW,wBAAwB,QAAQ,EAAE,EAAE;AAAA,IAC7D;AAAA,IACA,aAAa,OAAgB,YAAmI;AAC9J,YAAM,cAAc,IAAI,gBAAgB;AACxC,UAAI,SAAS,KAAM,aAAY,IAAI,QAAQ,QAAQ,IAAI;AACvD,UAAI,SAAS,UAAU,OAAW,aAAY,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;AACnF,UAAI,SAAS,WAAW,OAAW,aAAY,IAAI,UAAU,QAAQ,OAAO,SAAS,CAAC;AACtF,UAAI,SAAS,OAAQ,aAAY,IAAI,UAAU,QAAQ,MAAM;AAC7D,UAAI,SAAS,QAAS,aAAY,IAAI,WAAW,QAAQ,OAAO;AAChE,YAAM,cAAc,YAAY,SAAS;AACzC,YAAM,OAAO,uBAAuB,cAAc,IAAI,WAAW,KAAK,EAAE;AACxE,aAAO,KAAK,QAA8B,IAAI;AAAA,IAChD;AAAA,IACA,eAAe,OAAgB,YAA+F;AAC5H,YAAM,cAAc,IAAI,gBAAgB;AACxC,kBAAY,IAAI,QAAQ,QAAQ,IAAI;AACpC,UAAI,QAAQ,UAAU,OAAW,aAAY,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;AAClF,UAAI,QAAQ,QAAS,aAAY,IAAI,WAAW,QAAQ,OAAO;AAC/D,YAAM,cAAc,YAAY,SAAS;AACzC,aAAO,KAAK,QAA8B,gCAAgC,WAAW,EAAE;AAAA,IACzF;AAAA,EACF;AAAA;AAAA,EAIgB,UAAU;AAAA,IACxB,UAAU,YAAqE;AAC7E,aAAO,KAAK,QAAwD,gBAAgB;AAAA,IACtF;AAAA,IACA,gBAAgB,OAAO,cAAmE;AACxF,aAAO,KAAK,QAA2C,qBAAqB;AAAA,QAC1E,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAE,UAAU,CAAC;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,IACA,qBAAqB,OAAO,cAAmE;AAC7F,aAAO,KAAK,QAA2C,mBAAmB;AAAA,QACxE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAE,UAAU,CAAC;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAIgB,UAAU;AAAA,IACxB,MAAM,YAAsC;AAC1C,aAAO,KAAK,QAAyB,WAAW;AAAA,IAClD;AAAA,IACA,QAAQ,OAAO,YAA4F;AACzG,aAAO,KAAK,QAAwC,aAAa;AAAA,QAC/D,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,OAA8C;AAC3D,aAAO,KAAK,QAA8B,aAAa,EAAE,IAAI;AAAA,QAC3D,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAIgB,WAAW;AAAA,IACzB,MAAM,YAA0C;AAC9C,aAAO,KAAK,QAA6B,WAAW;AAAA,IACtD;AAAA,IACA,QAAQ,OAAO,YAA0F;AACvG,aAAO,KAAK,QAA0C,aAAa;AAAA,QACjE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,IAAY,YAAkF;AAC3G,aAAO,KAAK,QAA0B,aAAa,EAAE,IAAI;AAAA,QACvD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,cAAc,OAAO,OAA0D;AAC7E,aAAO,KAAK,QAA0C,aAAa,EAAE,kBAAkB;AAAA,QACrF,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,OAA8C;AAC3D,aAAO,KAAK,QAA8B,aAAa,EAAE,IAAI;AAAA,QAC3D,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IACA,gBAAgB,OAAO,OAA+C;AACpE,aAAO,KAAK,QAA+B,aAAa,EAAE,aAAa;AAAA,IACzE;AAAA,EACF;AAAA;AAAA,EAIgB,KAAK;AAAA,IACnB,WAAW,OAAO,YAA6G;AAC7H,aAAO,KAAK,QAAsD,0BAA0B;AAAA,QAC1F,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,SAAS,OAAO,YAAqG;AACnH,aAAO,KAAK,QAAiD,wBAAwB;AAAA,QACnF,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,cAAc,OAAO,YAAkE;AACrF,aAAO,KAAK,QAAa,8BAA8B;AAAA,QACrD,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,cAAc,OAAO,YAA4G;AAC/H,aAAO,KAAK,QAA2C,8BAA8B;AAAA,QACnF,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAIgB,YAAY;AAAA,IAC1B,YAAY,YAON;AACJ,aAAO,KAAK,QAAQ,oBAAoB;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA,EAIgB,QAAQ;AAAA,IACtB,MAAM,OAAO,YAA2D;AACtE,YAAM,cAAc,IAAI,gBAAgB;AACxC,UAAI,SAAS,UAAU,OAAW,aAAY,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;AACnF,YAAM,cAAc,YAAY,SAAS;AACzC,aAAO,KAAK,QAAyB,SAAS,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,IACtF;AAAA,EACF;AAAA;AAAA,EAIgB,OAAO;AAAA,IACrB,aAAa,YAAyC;AACpD,aAAO,KAAK,QAA4B,OAAO;AAAA,IACjD;AAAA,IACA,cAAc,OAAO,YAAwG;AAC3H,aAAO,KAAK,QAA8C,gBAAgB;AAAA,QACxE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,YAAY,OAAO,QAAgB,YAAmG;AACpI,aAAO,KAAK,QAA8C,SAAS,MAAM,SAAS;AAAA,QAChF,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,cAAc,OAAO,WAAiD;AACpE,aAAO,KAAK,QAA6B,SAAS,MAAM,IAAI;AAAA,QAC1D,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAIgB,aAAa;AAAA,IAC3B,MAAM,YAA4C;AAChD,aAAO,KAAK,QAA+B,aAAa;AAAA,IAC1D;AAAA,EACF;AAAA,EAEgB,aAAa;AAAA,IAC3B,SAAS,YAA2D;AAClE,aAAO,KAAK,QAA8C,uBAAuB;AAAA,QAC/E,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEgB,WAAW;AAAA,IACzB,0BAA0B,OAAO,YAAkI;AACjK,aAAO,KAAK,QAA8C,uBAAuB;AAAA,QAC/E,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,gBAAgB,OAAO,YAAwG;AAC7H,aAAO,KAAK,QAAgE,oBAAoB;AAAA,QAC9F,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAKO,SAAS,aAAa,QAAwC;AACnE,SAAO,IAAI,YAAY,MAAM;AAC/B;","names":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,316 @@
1
+ // src/index.ts
2
+ var SchmaClient = class {
3
+ apiKey;
4
+ baseUrl;
5
+ tenantSlug;
6
+ constructor(config) {
7
+ if (!config.apiKey) {
8
+ throw new Error("SchmaClient: apiKey is required.");
9
+ }
10
+ this.apiKey = config.apiKey;
11
+ this.baseUrl = config.baseUrl?.replace(/\/$/, "") || "https://schma-cms-production.up.railway.app";
12
+ let envTenantSlug = void 0;
13
+ if (typeof process !== "undefined" && process.env) {
14
+ envTenantSlug = process.env.SCHMA_TENANT_SLUG || process.env.NEXT_PUBLIC_SCHMA_TENANT_SLUG;
15
+ }
16
+ this.tenantSlug = config.tenantSlug || envTenantSlug;
17
+ }
18
+ /**
19
+ * Perform an API request using the native `fetch` API.
20
+ */
21
+ async request(path, options) {
22
+ const url = `${this.baseUrl}${path}`;
23
+ const headers = new Headers(options?.headers);
24
+ const resolvedApiKey = typeof this.apiKey === "function" ? await this.apiKey() : this.apiKey;
25
+ headers.set("Authorization", `Bearer ${resolvedApiKey}`);
26
+ headers.set("Content-Type", "application/json");
27
+ if (this.tenantSlug) {
28
+ headers.set("x-tenant-slug", this.tenantSlug);
29
+ }
30
+ const response = await fetch(url, {
31
+ ...options,
32
+ headers
33
+ });
34
+ if (!response.ok) {
35
+ let errorMsg = `Schma API Error: ${response.status} ${response.statusText}`;
36
+ try {
37
+ const errorData = await response.json();
38
+ if (errorData.message || errorData.error) {
39
+ errorMsg = `Schma API Error: ${errorData.message || errorData.error}`;
40
+ }
41
+ } catch (e) {
42
+ }
43
+ throw new Error(errorMsg);
44
+ }
45
+ if (response.status === 204) {
46
+ return void 0;
47
+ }
48
+ return response.json();
49
+ }
50
+ // ── Management APIs ────────────────────────────────────
51
+ contentTypes = {
52
+ list: async () => {
53
+ return this.request(`/content-types`);
54
+ },
55
+ get: async (id) => {
56
+ return this.request(`/content-types/${id}`);
57
+ },
58
+ create: async (payload) => {
59
+ return this.request(`/content-types`, {
60
+ method: "POST",
61
+ body: JSON.stringify(payload)
62
+ });
63
+ },
64
+ update: async (id, payload) => {
65
+ return this.request(`/content-types/${id}`, {
66
+ method: "PUT",
67
+ body: JSON.stringify(payload)
68
+ });
69
+ },
70
+ delete: async (id) => {
71
+ return this.request(`/content-types/${id}`, {
72
+ method: "DELETE"
73
+ });
74
+ }
75
+ };
76
+ entries = {
77
+ get: async (options) => {
78
+ if (!options.id) throw new Error("id is required to get an entry");
79
+ return this.request(`/entries/${options.id}`);
80
+ },
81
+ list: async (options) => {
82
+ const queryParams = new URLSearchParams();
83
+ if (options?.typeId) queryParams.set("typeId", options.typeId);
84
+ const queryString = queryParams.toString();
85
+ const path = `/entries${queryString ? `?${queryString}` : ""}`;
86
+ return this.request(path);
87
+ },
88
+ create: async (payload) => {
89
+ return this.request(`/entries`, {
90
+ method: "POST",
91
+ body: JSON.stringify(payload)
92
+ });
93
+ },
94
+ update: async (id, payload) => {
95
+ return this.request(`/entries/${id}`, {
96
+ method: "PUT",
97
+ body: JSON.stringify(payload)
98
+ });
99
+ },
100
+ delete: async (id) => {
101
+ return this.request(`/entries/${id}`, {
102
+ method: "DELETE"
103
+ });
104
+ },
105
+ // Versioning
106
+ listVersions: async (id) => {
107
+ return this.request(`/entries/${id}/versions`);
108
+ },
109
+ getVersion: async (id, versionId) => {
110
+ return this.request(`/entries/${id}/versions/${versionId}`);
111
+ },
112
+ restoreVersion: async (id, versionId) => {
113
+ return this.request(`/entries/${id}/versions/${versionId}/restore`, {
114
+ method: "POST"
115
+ });
116
+ },
117
+ // Preview Token
118
+ generatePreviewToken: async (id) => {
119
+ return this.request(`/entries/${id}/preview-token`, {
120
+ method: "POST"
121
+ });
122
+ }
123
+ };
124
+ // ── Delivery APIs (Read Only) ──────────────────────────
125
+ delivery = {
126
+ getEntry: async (options) => {
127
+ if (!options.id) throw new Error("id is required to get an entry");
128
+ return this.request(`/v1/delivery/entries/${options.id}`);
129
+ },
130
+ listEntries: async (options) => {
131
+ const queryParams = new URLSearchParams();
132
+ if (options?.type) queryParams.set("type", options.type);
133
+ if (options?.limit !== void 0) queryParams.set("limit", options.limit.toString());
134
+ if (options?.offset !== void 0) queryParams.set("offset", options.offset.toString());
135
+ if (options?.locale) queryParams.set("locale", options.locale);
136
+ if (options?.preview) queryParams.set("preview", options.preview);
137
+ const queryString = queryParams.toString();
138
+ const path = `/v1/delivery/entries${queryString ? `?${queryString}` : ""}`;
139
+ return this.request(path);
140
+ },
141
+ searchSimilar: async (options) => {
142
+ const queryParams = new URLSearchParams();
143
+ queryParams.set("text", options.text);
144
+ if (options.limit !== void 0) queryParams.set("limit", options.limit.toString());
145
+ if (options.preview) queryParams.set("preview", options.preview);
146
+ const queryString = queryParams.toString();
147
+ return this.request(`/v1/delivery/entries/similar?${queryString}`);
148
+ }
149
+ };
150
+ // ── Billing APIs ───────────────────────────────────────
151
+ billing = {
152
+ getUsage: async () => {
153
+ return this.request(`/billing/usage`);
154
+ },
155
+ createCheckout: async (returnUrl) => {
156
+ return this.request(`/billing/checkout`, {
157
+ method: "POST",
158
+ body: JSON.stringify({ returnUrl })
159
+ });
160
+ },
161
+ createPortalSession: async (returnUrl) => {
162
+ return this.request(`/billing/portal`, {
163
+ method: "POST",
164
+ body: JSON.stringify({ returnUrl })
165
+ });
166
+ }
167
+ };
168
+ // ── API Keys APIs ──────────────────────────────────────
169
+ apiKeys = {
170
+ list: async () => {
171
+ return this.request(`/api-keys`);
172
+ },
173
+ create: async (payload) => {
174
+ return this.request(`/api-keys`, {
175
+ method: "POST",
176
+ body: JSON.stringify(payload)
177
+ });
178
+ },
179
+ revoke: async (id) => {
180
+ return this.request(`/api-keys/${id}`, {
181
+ method: "DELETE"
182
+ });
183
+ }
184
+ };
185
+ // ── Webhooks APIs ───────────────────────────────────────
186
+ webhooks = {
187
+ list: async () => {
188
+ return this.request(`/webhooks`);
189
+ },
190
+ create: async (payload) => {
191
+ return this.request(`/webhooks`, {
192
+ method: "POST",
193
+ body: JSON.stringify(payload)
194
+ });
195
+ },
196
+ update: async (id, payload) => {
197
+ return this.request(`/webhooks/${id}`, {
198
+ method: "PATCH",
199
+ body: JSON.stringify(payload)
200
+ });
201
+ },
202
+ rotateSecret: async (id) => {
203
+ return this.request(`/webhooks/${id}/rotate-secret`, {
204
+ method: "POST"
205
+ });
206
+ },
207
+ delete: async (id) => {
208
+ return this.request(`/webhooks/${id}`, {
209
+ method: "DELETE"
210
+ });
211
+ },
212
+ listDeliveries: async (id) => {
213
+ return this.request(`/webhooks/${id}/deliveries`);
214
+ }
215
+ };
216
+ // ── AI APIs ───────────────────────────────────────────
217
+ ai = {
218
+ translate: async (payload) => {
219
+ return this.request(`/ai/features/translate`, {
220
+ method: "POST",
221
+ body: JSON.stringify(payload)
222
+ });
223
+ },
224
+ rewrite: async (payload) => {
225
+ return this.request(`/ai/features/rewrite`, {
226
+ method: "POST",
227
+ body: JSON.stringify(payload)
228
+ });
229
+ },
230
+ qualityCheck: async (payload) => {
231
+ return this.request(`/ai/features/quality-check`, {
232
+ method: "POST",
233
+ body: JSON.stringify(payload)
234
+ });
235
+ },
236
+ bulkGenerate: async (payload) => {
237
+ return this.request(`/ai/features/bulk-generate`, {
238
+ method: "POST",
239
+ body: JSON.stringify(payload)
240
+ });
241
+ }
242
+ };
243
+ // ── Analytics APIs ──────────────────────────────────────
244
+ analytics = {
245
+ getSummary: async () => {
246
+ return this.request(`/analytics/summary`);
247
+ }
248
+ };
249
+ // ── Audit Logs APIs ────────────────────────────────────
250
+ audit = {
251
+ list: async (options) => {
252
+ const queryParams = new URLSearchParams();
253
+ if (options?.limit !== void 0) queryParams.set("limit", options.limit.toString());
254
+ const queryString = queryParams.toString();
255
+ return this.request(`/audit${queryString ? `?${queryString}` : ""}`);
256
+ }
257
+ };
258
+ // ── Team Management APIs ───────────────────────────────
259
+ team = {
260
+ listMembers: async () => {
261
+ return this.request(`/team`);
262
+ },
263
+ inviteMember: async (payload) => {
264
+ return this.request(`/team/invite`, {
265
+ method: "POST",
266
+ body: JSON.stringify(payload)
267
+ });
268
+ },
269
+ updateRole: async (userId, payload) => {
270
+ return this.request(`/team/${userId}/role`, {
271
+ method: "PATCH",
272
+ body: JSON.stringify(payload)
273
+ });
274
+ },
275
+ removeMember: async (userId) => {
276
+ return this.request(`/team/${userId}`, {
277
+ method: "DELETE"
278
+ });
279
+ }
280
+ };
281
+ // ── Settings APIs ──────────────────────────────────────
282
+ workspaces = {
283
+ list: async () => {
284
+ return this.request(`/workspaces`);
285
+ }
286
+ };
287
+ onboarding = {
288
+ migrate: async () => {
289
+ return this.request(`/onboarding/migrate`, {
290
+ method: "POST"
291
+ });
292
+ }
293
+ };
294
+ settings = {
295
+ updateDatabaseConnection: async (payload) => {
296
+ return this.request(`/onboarding/connect`, {
297
+ method: "POST",
298
+ body: JSON.stringify(payload)
299
+ });
300
+ },
301
+ testConnection: async (payload) => {
302
+ return this.request(`/onboarding/test`, {
303
+ method: "POST",
304
+ body: JSON.stringify(payload)
305
+ });
306
+ }
307
+ };
308
+ };
309
+ function createClient(config) {
310
+ return new SchmaClient(config);
311
+ }
312
+ export {
313
+ SchmaClient,
314
+ createClient
315
+ };
316
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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":[]}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@schmadev/client",
3
+ "version": "1.0.0",
4
+ "description": "Isomorphic client for Schma CMS",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "devDependencies": {
19
+ "@schmadev/typescript-config": "0.0.0",
20
+ "@types/node": "^26.6.1",
21
+ "eslint": "10.9.1",
22
+ "tsup": "^8.3.0",
23
+ "typescript": "^5.6.2"
24
+ },
25
+ "dependencies": {
26
+ "zod": "4.6.5"
27
+ },
28
+ "scripts": {
29
+ "build": "tsup",
30
+ "dev": "tsup --watch",
31
+ "clean": "rm -rf dist"
32
+ }
33
+ }