@leadcms/sdk 1.3.0-pre → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -3
- package/dist/cli/index.js +55 -62
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -18
- package/dist/index.js.map +1 -1
- package/dist/lib/cms.d.ts +1 -1
- package/dist/lib/cms.d.ts.map +1 -1
- package/dist/lib/cms.js +49 -72
- package/dist/lib/cms.js.map +1 -1
- package/dist/lib/config.d.ts +0 -8
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +13 -40
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/console-colors.d.ts +49 -0
- package/dist/lib/console-colors.d.ts.map +1 -0
- package/dist/lib/console-colors.js +121 -0
- package/dist/lib/console-colors.js.map +1 -0
- package/dist/lib/content-transformation.d.ts +90 -0
- package/dist/lib/content-transformation.d.ts.map +1 -0
- package/dist/lib/content-transformation.js +335 -0
- package/dist/lib/content-transformation.js.map +1 -0
- package/dist/lib/data-service.d.ts +97 -0
- package/dist/lib/data-service.d.ts.map +1 -0
- package/dist/lib/data-service.js +389 -0
- package/dist/lib/data-service.js.map +1 -0
- package/dist/scripts/fetch-leadcms-content.d.ts +19 -0
- package/dist/scripts/fetch-leadcms-content.d.ts.map +1 -0
- package/dist/scripts/fetch-leadcms-content.js +301 -0
- package/dist/scripts/fetch-leadcms-content.js.map +1 -0
- package/dist/scripts/generate-env-js.d.ts +2 -0
- package/dist/scripts/generate-env-js.d.ts.map +1 -0
- package/dist/scripts/generate-env-js.js +22 -0
- package/dist/scripts/generate-env-js.js.map +1 -0
- package/dist/scripts/leadcms-helpers.d.ts +25 -0
- package/dist/scripts/leadcms-helpers.d.ts.map +1 -0
- package/dist/scripts/leadcms-helpers.js +78 -0
- package/dist/scripts/leadcms-helpers.js.map +1 -0
- package/dist/scripts/push-leadcms-content.d.ts +50 -0
- package/dist/scripts/push-leadcms-content.d.ts.map +1 -0
- package/dist/scripts/push-leadcms-content.js +1022 -0
- package/dist/scripts/push-leadcms-content.js.map +1 -0
- package/dist/scripts/sse-watcher.d.ts +20 -0
- package/dist/scripts/sse-watcher.d.ts.map +1 -0
- package/dist/scripts/sse-watcher.js +268 -0
- package/dist/scripts/sse-watcher.js.map +1 -0
- package/dist/scripts/status-leadcms-content.d.ts +4 -0
- package/dist/scripts/status-leadcms-content.d.ts.map +1 -0
- package/dist/scripts/status-leadcms-content.js +36 -0
- package/dist/scripts/status-leadcms-content.js.map +1 -0
- package/package.json +14 -12
- package/dist/scripts/fetch-leadcms-content.mjs +0 -367
- package/dist/scripts/generate-env-js.mjs +0 -24
- package/dist/scripts/leadcms-helpers.mjs +0 -208
- package/dist/scripts/sse-watcher.mjs +0 -300
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LeadCMS Data Service - Unified interface for content operations
|
|
3
|
+
* Handles API calls vs mock data internally using dependency injection pattern
|
|
4
|
+
*/
|
|
5
|
+
interface ContentItem {
|
|
6
|
+
id?: number;
|
|
7
|
+
slug: string;
|
|
8
|
+
type: string;
|
|
9
|
+
title: string;
|
|
10
|
+
publishedAt?: string;
|
|
11
|
+
updatedAt?: string;
|
|
12
|
+
createdAt?: string;
|
|
13
|
+
body?: string;
|
|
14
|
+
language?: string;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
interface ContentType {
|
|
18
|
+
uid: string;
|
|
19
|
+
format: string;
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
interface MockScenario {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
remoteContent: ContentItem[];
|
|
26
|
+
contentTypes: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
interface MockData {
|
|
29
|
+
remoteContent: ContentItem[];
|
|
30
|
+
contentTypes: Record<string, string>;
|
|
31
|
+
scenario: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* LeadCMS Data Service - Unified interface that abstracts API vs mock data
|
|
35
|
+
*/
|
|
36
|
+
declare class LeadCMSDataService {
|
|
37
|
+
private initialized;
|
|
38
|
+
private useMock;
|
|
39
|
+
private mockScenario;
|
|
40
|
+
private baseURL?;
|
|
41
|
+
private apiKey?;
|
|
42
|
+
private currentScenario?;
|
|
43
|
+
private mockData?;
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the service lazily when first used
|
|
46
|
+
*/
|
|
47
|
+
private _initialize;
|
|
48
|
+
private initializeMockData;
|
|
49
|
+
/**
|
|
50
|
+
* Get HTTP headers for API calls
|
|
51
|
+
*/
|
|
52
|
+
private getApiHeaders;
|
|
53
|
+
/**
|
|
54
|
+
* Get all content from LeadCMS or mock data
|
|
55
|
+
*/
|
|
56
|
+
getAllContent(): Promise<ContentItem[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Get all content types from LeadCMS or mock data
|
|
59
|
+
*/
|
|
60
|
+
getContentTypes(): Promise<ContentType[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Create new content in LeadCMS or mock
|
|
63
|
+
*/
|
|
64
|
+
createContent(content: Partial<ContentItem>): Promise<ContentItem>;
|
|
65
|
+
/**
|
|
66
|
+
* Update existing content in LeadCMS or mock
|
|
67
|
+
*/
|
|
68
|
+
updateContent(id: number, content: Partial<ContentItem>): Promise<ContentItem>;
|
|
69
|
+
/**
|
|
70
|
+
* Create content type in LeadCMS or mock
|
|
71
|
+
*/
|
|
72
|
+
createContentType(contentType: Partial<ContentType>): Promise<ContentType>;
|
|
73
|
+
/**
|
|
74
|
+
* Check if we're using mock data
|
|
75
|
+
*/
|
|
76
|
+
isMockMode(): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get current mock scenario name
|
|
79
|
+
*/
|
|
80
|
+
getMockScenario(): string | null;
|
|
81
|
+
/**
|
|
82
|
+
* Switch mock scenario (only in mock mode)
|
|
83
|
+
*/
|
|
84
|
+
switchMockScenario(scenarioKey: string): MockData;
|
|
85
|
+
/**
|
|
86
|
+
* Get current mock state (for testing)
|
|
87
|
+
*/
|
|
88
|
+
getMockState(): MockData | null;
|
|
89
|
+
/**
|
|
90
|
+
* Reset mock data to original scenario state
|
|
91
|
+
*/
|
|
92
|
+
resetMockData(): void;
|
|
93
|
+
}
|
|
94
|
+
export declare const leadCMSDataService: LeadCMSDataService;
|
|
95
|
+
export { LeadCMSDataService };
|
|
96
|
+
export type { ContentItem, ContentType, MockScenario, MockData };
|
|
97
|
+
//# sourceMappingURL=data-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-service.d.ts","sourceRoot":"","sources":["../../src/lib/data-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,UAAU,QAAQ;IAChB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiHD;;GAEG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,eAAe,CAAC,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAE5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAwD7C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA+B/C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA+BxE;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAqCpF;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BhF;;OAEG;IACH,UAAU,IAAI,OAAO;IAKrB;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAuBjD;;OAEG;IACH,YAAY,IAAI,QAAQ,GAAG,IAAI;IAc/B;;OAEG;IACH,aAAa,IAAI,IAAI;CAOtB;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAG9B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LeadCMS Data Service - Unified interface for content operations
|
|
3
|
+
* Handles API calls vs mock data internally using dependency injection pattern
|
|
4
|
+
*/
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
// Import mock scenarios inline to avoid TypeScript issues
|
|
7
|
+
const MOCK_SCENARIOS = {
|
|
8
|
+
allNew: {
|
|
9
|
+
name: 'All Content New',
|
|
10
|
+
description: 'Local content that doesn\'t exist remotely',
|
|
11
|
+
remoteContent: [],
|
|
12
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
13
|
+
},
|
|
14
|
+
noChanges: {
|
|
15
|
+
name: 'No Changes',
|
|
16
|
+
description: 'All content is in sync',
|
|
17
|
+
remoteContent: [
|
|
18
|
+
{
|
|
19
|
+
id: 1,
|
|
20
|
+
slug: 'existing-article',
|
|
21
|
+
type: 'article',
|
|
22
|
+
title: 'Existing Article',
|
|
23
|
+
publishedAt: '2024-10-29T10:00:00Z',
|
|
24
|
+
updatedAt: '2024-10-29T10:00:00Z',
|
|
25
|
+
body: 'This article exists both locally and remotely.'
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
29
|
+
},
|
|
30
|
+
hasConflicts: {
|
|
31
|
+
name: 'Has Conflicts',
|
|
32
|
+
description: 'Remote content is newer than local',
|
|
33
|
+
remoteContent: [
|
|
34
|
+
{
|
|
35
|
+
id: 1,
|
|
36
|
+
slug: 'conflicted-post',
|
|
37
|
+
type: 'blog',
|
|
38
|
+
title: 'Conflicted Post',
|
|
39
|
+
publishedAt: '2024-10-29T10:00:00Z',
|
|
40
|
+
updatedAt: '2024-10-29T12:00:00Z',
|
|
41
|
+
body: 'This is the remote version that was updated after the local version.'
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
45
|
+
},
|
|
46
|
+
hasUpdates: {
|
|
47
|
+
name: 'Has Updates',
|
|
48
|
+
description: 'Local content is newer than remote',
|
|
49
|
+
remoteContent: [
|
|
50
|
+
{
|
|
51
|
+
id: 1,
|
|
52
|
+
slug: 'updated-post',
|
|
53
|
+
type: 'blog',
|
|
54
|
+
title: 'Updated Post',
|
|
55
|
+
publishedAt: '2024-10-29T10:00:00Z',
|
|
56
|
+
updatedAt: '2024-10-29T10:00:00Z',
|
|
57
|
+
body: 'This is the original content.'
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
61
|
+
},
|
|
62
|
+
mixedOperations: {
|
|
63
|
+
name: 'Mixed Operations',
|
|
64
|
+
description: 'Mix of new, updated, and conflicted content',
|
|
65
|
+
remoteContent: [
|
|
66
|
+
{
|
|
67
|
+
id: 1,
|
|
68
|
+
slug: 'existing-post',
|
|
69
|
+
type: 'blog',
|
|
70
|
+
title: 'Existing Post',
|
|
71
|
+
publishedAt: '2024-10-29T09:00:00Z',
|
|
72
|
+
updatedAt: '2024-10-29T09:00:00Z',
|
|
73
|
+
body: 'Original post content.'
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
77
|
+
},
|
|
78
|
+
missingContentTypes: {
|
|
79
|
+
name: 'Missing Content Types',
|
|
80
|
+
description: 'Content with unknown content types',
|
|
81
|
+
remoteContent: [],
|
|
82
|
+
contentTypes: { article: 'MDX', page: 'JSON', blog: 'MDX' }
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Determine if we should use mock mode based on environment
|
|
87
|
+
*/
|
|
88
|
+
function shouldUseMock() {
|
|
89
|
+
// Use mock in test environment
|
|
90
|
+
if (process.env.NODE_ENV === 'test') {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
// Use mock if explicitly requested
|
|
94
|
+
if (process.env.LEADCMS_USE_MOCK === 'true') {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
// Use mock if URL points to localhost (development server)
|
|
98
|
+
const url = process.env.LEADCMS_URL || process.env.NEXT_PUBLIC_LEADCMS_URL;
|
|
99
|
+
if (url?.includes('localhost')) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* LeadCMS Data Service - Unified interface that abstracts API vs mock data
|
|
106
|
+
*/
|
|
107
|
+
class LeadCMSDataService {
|
|
108
|
+
constructor() {
|
|
109
|
+
this.initialized = false;
|
|
110
|
+
this.useMock = false;
|
|
111
|
+
this.mockScenario = 'allNew';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Initialize the service lazily when first used
|
|
115
|
+
*/
|
|
116
|
+
_initialize() {
|
|
117
|
+
if (this.initialized)
|
|
118
|
+
return;
|
|
119
|
+
this.useMock = shouldUseMock();
|
|
120
|
+
this.mockScenario = process.env.LEADCMS_MOCK_SCENARIO || 'allNew';
|
|
121
|
+
// Use same fallback logic as helpers: LEADCMS_URL or NEXT_PUBLIC_LEADCMS_URL
|
|
122
|
+
this.baseURL = process.env.LEADCMS_URL || process.env.NEXT_PUBLIC_LEADCMS_URL;
|
|
123
|
+
this.apiKey = process.env.LEADCMS_API_KEY;
|
|
124
|
+
// Initialize mock data if needed
|
|
125
|
+
if (this.useMock) {
|
|
126
|
+
this.initializeMockData();
|
|
127
|
+
console.log(`[DATA SERVICE] Using mock mode with scenario: ${this.currentScenario?.name}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(`[DATA SERVICE] Using real API mode: ${this.baseURL}`);
|
|
131
|
+
}
|
|
132
|
+
this.initialized = true;
|
|
133
|
+
}
|
|
134
|
+
initializeMockData() {
|
|
135
|
+
const scenario = MOCK_SCENARIOS[this.mockScenario];
|
|
136
|
+
if (!scenario) {
|
|
137
|
+
throw new Error(`Unknown mock scenario: ${this.mockScenario}`);
|
|
138
|
+
}
|
|
139
|
+
this.currentScenario = scenario;
|
|
140
|
+
// Deep clone to avoid mutations
|
|
141
|
+
this.mockData = {
|
|
142
|
+
remoteContent: JSON.parse(JSON.stringify(scenario.remoteContent)),
|
|
143
|
+
contentTypes: { ...scenario.contentTypes },
|
|
144
|
+
scenario: scenario.name
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get HTTP headers for API calls
|
|
149
|
+
*/
|
|
150
|
+
getApiHeaders() {
|
|
151
|
+
const headers = {
|
|
152
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
153
|
+
'Content-Type': 'application/json'
|
|
154
|
+
};
|
|
155
|
+
return headers;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get all content from LeadCMS or mock data
|
|
159
|
+
*/
|
|
160
|
+
async getAllContent() {
|
|
161
|
+
this._initialize();
|
|
162
|
+
if (this.useMock && this.mockData) {
|
|
163
|
+
console.log('[MOCK] Returning mock content data');
|
|
164
|
+
// Simulate network delay
|
|
165
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
166
|
+
return [...this.mockData.remoteContent];
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
console.log('[API] Fetching content from LeadCMS...');
|
|
170
|
+
if (!this.baseURL) {
|
|
171
|
+
throw new Error('LeadCMS URL is not configured. Please set LEADCMS_URL or NEXT_PUBLIC_LEADCMS_URL in your .env file.');
|
|
172
|
+
}
|
|
173
|
+
const fullUrl = `${this.baseURL}/api/content/sync`;
|
|
174
|
+
const response = await axios.get(fullUrl, {
|
|
175
|
+
headers: this.getApiHeaders()
|
|
176
|
+
});
|
|
177
|
+
// Ensure we always return an array
|
|
178
|
+
if (response.status === 204) {
|
|
179
|
+
console.log('[API DEBUG] Status 204 - No Content');
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
const data = response.data;
|
|
183
|
+
if (!data) {
|
|
184
|
+
console.log('[API DEBUG] No content data returned from API (data is falsy)');
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
// Check if response has 'items' property (API wrapper format)
|
|
188
|
+
let items;
|
|
189
|
+
if (data.items && Array.isArray(data.items)) {
|
|
190
|
+
console.log(`[API] Found items array in response wrapper with ${data.items.length} items`);
|
|
191
|
+
items = data.items;
|
|
192
|
+
}
|
|
193
|
+
else if (Array.isArray(data)) {
|
|
194
|
+
console.log(`[API] Response data is direct array with ${data.length} items`);
|
|
195
|
+
items = data;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
console.warn('[API] API returned unexpected data format:', typeof data, data);
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
console.log(`[API DEBUG] Successfully parsed ${items.length} content items`);
|
|
202
|
+
return items;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
console.error('[API] Failed to fetch content:', error.message);
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get all content types from LeadCMS or mock data
|
|
211
|
+
*/
|
|
212
|
+
async getContentTypes() {
|
|
213
|
+
this._initialize();
|
|
214
|
+
if (this.useMock && this.mockData) {
|
|
215
|
+
console.log('[MOCK] Returning mock content types');
|
|
216
|
+
await new Promise(resolve => setTimeout(resolve, 30));
|
|
217
|
+
return Object.entries(this.mockData.contentTypes).map(([uid, format]) => ({
|
|
218
|
+
uid,
|
|
219
|
+
format,
|
|
220
|
+
name: uid.charAt(0).toUpperCase() + uid.slice(1)
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
console.log('[API] Fetching content types from LeadCMS...');
|
|
225
|
+
if (!this.baseURL) {
|
|
226
|
+
throw new Error('LeadCMS URL is not configured. Please set LEADCMS_URL or NEXT_PUBLIC_LEADCMS_URL in your .env file.');
|
|
227
|
+
}
|
|
228
|
+
const response = await axios.get(`${this.baseURL}/api/content-types`, {
|
|
229
|
+
headers: this.getApiHeaders()
|
|
230
|
+
});
|
|
231
|
+
return response.data;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error('[API] Failed to fetch content types:', error.message);
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Create new content in LeadCMS or mock
|
|
240
|
+
*/
|
|
241
|
+
async createContent(content) {
|
|
242
|
+
this._initialize();
|
|
243
|
+
if (this.useMock && this.mockData) {
|
|
244
|
+
console.log(`[MOCK] Creating content: ${content.title}`);
|
|
245
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
246
|
+
const newContent = {
|
|
247
|
+
...content,
|
|
248
|
+
id: Math.floor(Math.random() * 1000) + 100,
|
|
249
|
+
createdAt: new Date().toISOString(),
|
|
250
|
+
updatedAt: new Date().toISOString()
|
|
251
|
+
};
|
|
252
|
+
this.mockData.remoteContent.push(newContent);
|
|
253
|
+
return newContent;
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
console.log(`[API] Creating content: ${content.title}`);
|
|
257
|
+
const response = await axios.post(`${this.baseURL}/api/content`, content, {
|
|
258
|
+
headers: this.getApiHeaders()
|
|
259
|
+
});
|
|
260
|
+
return response.data;
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
console.error(`[API] Failed to create content:`, error.message);
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Update existing content in LeadCMS or mock
|
|
269
|
+
*/
|
|
270
|
+
async updateContent(id, content) {
|
|
271
|
+
this._initialize();
|
|
272
|
+
if (this.useMock && this.mockData) {
|
|
273
|
+
console.log(`[MOCK] Updating content ID ${id}: ${content.title}`);
|
|
274
|
+
await new Promise(resolve => setTimeout(resolve, 80));
|
|
275
|
+
const existingIndex = this.mockData.remoteContent.findIndex(c => c.id === id);
|
|
276
|
+
if (existingIndex === -1) {
|
|
277
|
+
throw new Error(`Content with id ${id} not found`);
|
|
278
|
+
}
|
|
279
|
+
const updatedContent = {
|
|
280
|
+
...this.mockData.remoteContent[existingIndex],
|
|
281
|
+
...content,
|
|
282
|
+
updatedAt: new Date().toISOString()
|
|
283
|
+
};
|
|
284
|
+
this.mockData.remoteContent[existingIndex] = updatedContent;
|
|
285
|
+
return updatedContent;
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
console.log(`[API] Updating content ID ${id}: ${content.title}`);
|
|
289
|
+
const response = await axios.put(`${this.baseURL}/api/content/${id}`, content, {
|
|
290
|
+
headers: this.getApiHeaders()
|
|
291
|
+
});
|
|
292
|
+
return response.data;
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
console.error(`[API] Failed to update content:`, error.message);
|
|
296
|
+
throw error;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Create content type in LeadCMS or mock
|
|
301
|
+
*/
|
|
302
|
+
async createContentType(contentType) {
|
|
303
|
+
this._initialize();
|
|
304
|
+
if (this.useMock && this.mockData && contentType.uid && contentType.format) {
|
|
305
|
+
console.log(`[MOCK] Creating content type: ${contentType.uid}`);
|
|
306
|
+
await new Promise(resolve => setTimeout(resolve, 60));
|
|
307
|
+
this.mockData.contentTypes[contentType.uid] = contentType.format;
|
|
308
|
+
return {
|
|
309
|
+
uid: contentType.uid,
|
|
310
|
+
format: contentType.format,
|
|
311
|
+
name: contentType.name || contentType.uid.charAt(0).toUpperCase() + contentType.uid.slice(1)
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
console.log(`[API] Creating content type: ${contentType.uid}`);
|
|
316
|
+
const response = await axios.post(`${this.baseURL}/api/content-types`, contentType, {
|
|
317
|
+
headers: this.getApiHeaders()
|
|
318
|
+
});
|
|
319
|
+
return response.data;
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
console.error(`[API] Failed to create content type:`, error.message);
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Check if we're using mock data
|
|
328
|
+
*/
|
|
329
|
+
isMockMode() {
|
|
330
|
+
this._initialize();
|
|
331
|
+
return this.useMock;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get current mock scenario name
|
|
335
|
+
*/
|
|
336
|
+
getMockScenario() {
|
|
337
|
+
this._initialize();
|
|
338
|
+
return this.useMock ? this.currentScenario?.name || null : null;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Switch mock scenario (only in mock mode)
|
|
342
|
+
*/
|
|
343
|
+
switchMockScenario(scenarioKey) {
|
|
344
|
+
this._initialize();
|
|
345
|
+
if (!this.useMock) {
|
|
346
|
+
throw new Error('Cannot switch scenario: not in mock mode');
|
|
347
|
+
}
|
|
348
|
+
const scenario = MOCK_SCENARIOS[scenarioKey];
|
|
349
|
+
if (!scenario) {
|
|
350
|
+
throw new Error(`Unknown scenario: ${scenarioKey}`);
|
|
351
|
+
}
|
|
352
|
+
this.currentScenario = scenario;
|
|
353
|
+
this.mockData = {
|
|
354
|
+
remoteContent: JSON.parse(JSON.stringify(scenario.remoteContent)),
|
|
355
|
+
contentTypes: { ...scenario.contentTypes },
|
|
356
|
+
scenario: scenario.name
|
|
357
|
+
};
|
|
358
|
+
console.log(`[MOCK] Switched to scenario: ${scenario.name}`);
|
|
359
|
+
return this.mockData;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Get current mock state (for testing)
|
|
363
|
+
*/
|
|
364
|
+
getMockState() {
|
|
365
|
+
this._initialize();
|
|
366
|
+
if (!this.useMock || !this.mockData) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
remoteContent: [...this.mockData.remoteContent],
|
|
371
|
+
contentTypes: { ...this.mockData.contentTypes },
|
|
372
|
+
scenario: this.currentScenario?.name || ''
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Reset mock data to original scenario state
|
|
377
|
+
*/
|
|
378
|
+
resetMockData() {
|
|
379
|
+
this._initialize();
|
|
380
|
+
if (this.useMock) {
|
|
381
|
+
this.initializeMockData();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// Create and export singleton instance
|
|
386
|
+
export const leadCMSDataService = new LeadCMSDataService();
|
|
387
|
+
// Export class for testing
|
|
388
|
+
export { LeadCMSDataService };
|
|
389
|
+
//# sourceMappingURL=data-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-service.js","sourceRoot":"","sources":["../../src/lib/data-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { ContentItem } from "./leadcms-helpers.js";
|
|
3
|
+
interface MediaItem {
|
|
4
|
+
location?: string;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
interface ContentSyncResult {
|
|
8
|
+
items: ContentItem[];
|
|
9
|
+
deleted: number[];
|
|
10
|
+
nextSyncToken: string;
|
|
11
|
+
}
|
|
12
|
+
interface MediaSyncResult {
|
|
13
|
+
items: MediaItem[];
|
|
14
|
+
nextSyncToken: string;
|
|
15
|
+
}
|
|
16
|
+
declare function main(): Promise<void>;
|
|
17
|
+
export { main as fetchLeadCMSContent };
|
|
18
|
+
export type { ContentSyncResult, MediaSyncResult, MediaItem };
|
|
19
|
+
//# sourceMappingURL=fetch-leadcms-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-leadcms-content.d.ts","sourceRoot":"","sources":["../../src/scripts/fetch-leadcms-content.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAIvB,OAAO,EASL,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAU9B,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAOD,UAAU,iBAAiB;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAmMD,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoJnC;AAGD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAYvC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC"}
|