@leadcms/sdk 2.1.5 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +246 -126
  2. package/dist/cli/index.js +97 -68
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +22 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/auth.d.ts +55 -0
  9. package/dist/lib/auth.d.ts.map +1 -0
  10. package/dist/lib/auth.js +204 -0
  11. package/dist/lib/auth.js.map +1 -0
  12. package/dist/lib/cms-config-types.d.ts +57 -0
  13. package/dist/lib/cms-config-types.d.ts.map +1 -0
  14. package/dist/lib/cms-config-types.js +64 -0
  15. package/dist/lib/cms-config-types.js.map +1 -0
  16. package/dist/lib/cms.d.ts +52 -0
  17. package/dist/lib/cms.d.ts.map +1 -1
  18. package/dist/lib/cms.js +113 -0
  19. package/dist/lib/cms.js.map +1 -1
  20. package/dist/lib/comment-types.d.ts +73 -0
  21. package/dist/lib/comment-types.d.ts.map +1 -0
  22. package/dist/lib/comment-types.js +6 -0
  23. package/dist/lib/comment-types.js.map +1 -0
  24. package/dist/lib/comment-utils.d.ts +173 -0
  25. package/dist/lib/comment-utils.d.ts.map +1 -0
  26. package/dist/lib/comment-utils.js +338 -0
  27. package/dist/lib/comment-utils.js.map +1 -0
  28. package/dist/lib/config.d.ts +4 -2
  29. package/dist/lib/config.d.ts.map +1 -1
  30. package/dist/lib/config.js +10 -4
  31. package/dist/lib/config.js.map +1 -1
  32. package/dist/lib/data-service.d.ts.map +1 -1
  33. package/dist/lib/data-service.js +22 -6
  34. package/dist/lib/data-service.js.map +1 -1
  35. package/dist/scripts/fetch-leadcms-comments.d.ts +26 -0
  36. package/dist/scripts/fetch-leadcms-comments.d.ts.map +1 -0
  37. package/dist/scripts/fetch-leadcms-comments.js +352 -0
  38. package/dist/scripts/fetch-leadcms-comments.js.map +1 -0
  39. package/dist/scripts/fetch-leadcms-content.d.ts.map +1 -1
  40. package/dist/scripts/fetch-leadcms-content.js +86 -39
  41. package/dist/scripts/fetch-leadcms-content.js.map +1 -1
  42. package/dist/scripts/init-leadcms.d.ts +7 -0
  43. package/dist/scripts/init-leadcms.d.ts.map +1 -0
  44. package/dist/scripts/init-leadcms.js +397 -0
  45. package/dist/scripts/init-leadcms.js.map +1 -0
  46. package/dist/scripts/leadcms-helpers.d.ts +2 -2
  47. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  48. package/dist/scripts/leadcms-helpers.js +12 -7
  49. package/dist/scripts/leadcms-helpers.js.map +1 -1
  50. package/dist/scripts/login-leadcms.d.ts +10 -0
  51. package/dist/scripts/login-leadcms.d.ts.map +1 -0
  52. package/dist/scripts/login-leadcms.js +90 -0
  53. package/dist/scripts/login-leadcms.js.map +1 -0
  54. package/dist/scripts/pull-all.d.ts +12 -0
  55. package/dist/scripts/pull-all.d.ts.map +1 -0
  56. package/dist/scripts/pull-all.js +81 -0
  57. package/dist/scripts/pull-all.js.map +1 -0
  58. package/dist/scripts/pull-comments.d.ts +11 -0
  59. package/dist/scripts/pull-comments.d.ts.map +1 -0
  60. package/dist/scripts/pull-comments.js +45 -0
  61. package/dist/scripts/pull-comments.js.map +1 -0
  62. package/dist/scripts/pull-content.d.ts +11 -0
  63. package/dist/scripts/pull-content.d.ts.map +1 -0
  64. package/dist/scripts/pull-content.js +45 -0
  65. package/dist/scripts/pull-content.js.map +1 -0
  66. package/dist/scripts/pull-media.d.ts +12 -0
  67. package/dist/scripts/pull-media.d.ts.map +1 -0
  68. package/dist/scripts/pull-media.js +46 -0
  69. package/dist/scripts/pull-media.js.map +1 -0
  70. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  71. package/dist/scripts/push-leadcms-content.js +12 -0
  72. package/dist/scripts/push-leadcms-content.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,397 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Interactive LeadCMS initialization script
4
+ * Guides users through setting up their LeadCMS configuration
5
+ */
6
+ import readline from 'readline';
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import axios from 'axios';
10
+ import { setCMSConfig } from '../lib/cms-config-types.js';
11
+ import { authenticate, saveTokenToEnv } from '../lib/auth.js';
12
+ // Default values
13
+ const DEFAULTS = {
14
+ contentDir: '.leadcms/content',
15
+ commentsDir: '.leadcms/comments',
16
+ mediaDir: 'public/media',
17
+ };
18
+ const rl = readline.createInterface({
19
+ input: process.stdin,
20
+ output: process.stdout,
21
+ });
22
+ /**
23
+ * Promisified question function
24
+ */
25
+ function question(query) {
26
+ return new Promise((resolve) => {
27
+ rl.question(query, resolve);
28
+ });
29
+ }
30
+ /**
31
+ * Fetch CMS configuration from API
32
+ * This is a public endpoint that does not require authentication
33
+ */
34
+ async function fetchCMSConfig(url) {
35
+ try {
36
+ const apiUrl = new URL('/api/config', url).toString();
37
+ // /api/config is a public endpoint - never send Authorization header
38
+ const response = await axios.get(apiUrl, {
39
+ timeout: 10000,
40
+ });
41
+ // Cache the config for use by other operations
42
+ if (response.data) {
43
+ setCMSConfig(response.data);
44
+ }
45
+ return response.data;
46
+ }
47
+ catch (error) {
48
+ if (error.code === 'ECONNREFUSED') {
49
+ console.error('āŒ Could not connect to LeadCMS. Please check the URL.');
50
+ }
51
+ else {
52
+ console.error(`āŒ Failed to fetch CMS config: ${error.message}`);
53
+ }
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * Validate URL format
59
+ */
60
+ function isValidUrl(url) {
61
+ try {
62
+ new URL(url);
63
+ return url.startsWith('http://') || url.startsWith('https://');
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Create or update .env file
71
+ */
72
+ function updateEnvFile(config) {
73
+ const envPath = path.join(process.cwd(), '.env');
74
+ const envLocalPath = path.join(process.cwd(), '.env.local');
75
+ // Check which file to use
76
+ const targetEnvFile = fs.existsSync(envLocalPath) ? envLocalPath : envPath;
77
+ let envContent = '';
78
+ // Read existing content if file exists
79
+ if (fs.existsSync(targetEnvFile)) {
80
+ envContent = fs.readFileSync(targetEnvFile, 'utf-8');
81
+ }
82
+ // Parse existing env vars
83
+ const envVars = new Map();
84
+ envContent.split('\n').forEach(line => {
85
+ const trimmed = line.trim();
86
+ if (trimmed && !trimmed.startsWith('#')) {
87
+ const [key, ...valueParts] = trimmed.split('=');
88
+ if (key) {
89
+ envVars.set(key.trim(), valueParts.join('=').trim());
90
+ }
91
+ }
92
+ });
93
+ // Update with new values
94
+ envVars.set('LEADCMS_URL', config.url);
95
+ if (config.apiKey) {
96
+ envVars.set('LEADCMS_API_KEY', config.apiKey);
97
+ }
98
+ else {
99
+ // Remove API key if it exists but user wants anonymous mode
100
+ envVars.delete('LEADCMS_API_KEY');
101
+ }
102
+ envVars.set('LEADCMS_DEFAULT_LANGUAGE', config.defaultLanguage);
103
+ // Build new content
104
+ const newLines = [];
105
+ newLines.push('# LeadCMS Configuration');
106
+ newLines.push('# Generated by leadcms init');
107
+ if (!config.apiKey) {
108
+ newLines.push('# Running in anonymous mode - only public content accessible');
109
+ newLines.push('# Add LEADCMS_API_KEY for write operations and private content');
110
+ }
111
+ newLines.push('');
112
+ envVars.forEach((value, key) => {
113
+ newLines.push(`${key}=${value}`);
114
+ });
115
+ fs.writeFileSync(targetEnvFile, newLines.join('\n') + '\n', 'utf-8');
116
+ console.log(`āœ… Updated ${path.basename(targetEnvFile)}`);
117
+ }
118
+ /**
119
+ * Create leadcms.config.json if needed
120
+ */
121
+ function createConfigFile(config) {
122
+ const configPath = path.join(process.cwd(), 'leadcms.config.json');
123
+ // Only create config if values differ from defaults
124
+ const needsConfig = config.contentDir !== DEFAULTS.contentDir ||
125
+ config.mediaDir !== DEFAULTS.mediaDir ||
126
+ config.commentsDir !== DEFAULTS.commentsDir;
127
+ if (!needsConfig) {
128
+ console.log('ā„¹ļø Using default directories, no leadcms.config.json needed.');
129
+ return;
130
+ }
131
+ const configData = {};
132
+ if (config.contentDir !== DEFAULTS.contentDir) {
133
+ configData.contentDir = config.contentDir;
134
+ }
135
+ if (config.mediaDir !== DEFAULTS.mediaDir) {
136
+ configData.mediaDir = config.mediaDir;
137
+ }
138
+ if (config.commentsDir !== DEFAULTS.commentsDir) {
139
+ configData.commentsDir = config.commentsDir;
140
+ }
141
+ fs.writeFileSync(configPath, JSON.stringify(configData, null, 2) + '\n', 'utf-8');
142
+ console.log(`āœ… Created leadcms.config.json`);
143
+ }
144
+ /**
145
+ * Read existing configuration values
146
+ */
147
+ function readExistingConfig() {
148
+ const existingConfig = {};
149
+ // Read from .env or .env.local
150
+ const envPath = path.join(process.cwd(), '.env');
151
+ const envLocalPath = path.join(process.cwd(), '.env.local');
152
+ const targetEnvFile = fs.existsSync(envLocalPath) ? envLocalPath : envPath;
153
+ if (fs.existsSync(targetEnvFile)) {
154
+ const envContent = fs.readFileSync(targetEnvFile, 'utf-8');
155
+ envContent.split('\n').forEach(line => {
156
+ const trimmed = line.trim();
157
+ if (trimmed && !trimmed.startsWith('#')) {
158
+ const [key, ...valueParts] = trimmed.split('=');
159
+ const value = valueParts.join('=').trim();
160
+ if (key.trim() === 'LEADCMS_URL' && value) {
161
+ existingConfig.url = value;
162
+ }
163
+ else if (key.trim() === 'LEADCMS_API_KEY' && value) {
164
+ existingConfig.apiKey = value;
165
+ }
166
+ else if (key.trim() === 'LEADCMS_DEFAULT_LANGUAGE' && value) {
167
+ existingConfig.defaultLanguage = value;
168
+ }
169
+ }
170
+ });
171
+ }
172
+ // Read from leadcms.config.json
173
+ const configPath = path.join(process.cwd(), 'leadcms.config.json');
174
+ if (fs.existsSync(configPath)) {
175
+ try {
176
+ const configContent = fs.readFileSync(configPath, 'utf-8');
177
+ const jsonConfig = JSON.parse(configContent);
178
+ if (jsonConfig.contentDir) {
179
+ existingConfig.contentDir = jsonConfig.contentDir;
180
+ }
181
+ if (jsonConfig.mediaDir) {
182
+ existingConfig.mediaDir = jsonConfig.mediaDir;
183
+ }
184
+ if (jsonConfig.commentsDir) {
185
+ existingConfig.commentsDir = jsonConfig.commentsDir;
186
+ }
187
+ }
188
+ catch (error) {
189
+ // Ignore parse errors, will use defaults
190
+ }
191
+ }
192
+ return existingConfig;
193
+ }
194
+ /**
195
+ * Main initialization flow
196
+ */
197
+ async function main() {
198
+ console.log('\nšŸš€ LeadCMS SDK Initialization\n');
199
+ // Check if config already exists
200
+ const configPath = path.join(process.cwd(), 'leadcms.config.json');
201
+ const envPath = path.join(process.cwd(), '.env');
202
+ const envLocalPath = path.join(process.cwd(), '.env.local');
203
+ const hasExistingConfig = fs.existsSync(configPath) || fs.existsSync(envPath) || fs.existsSync(envLocalPath);
204
+ const existingConfig = hasExistingConfig ? readExistingConfig() : {};
205
+ if (hasExistingConfig) {
206
+ const answer = await question('āš ļø Configuration files already exist. Overwrite? (y/N): ');
207
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
208
+ console.log('āœ… Initialization cancelled.');
209
+ rl.close();
210
+ return;
211
+ }
212
+ console.log('');
213
+ }
214
+ const config = {
215
+ url: '',
216
+ apiKey: existingConfig.apiKey || '',
217
+ defaultLanguage: existingConfig.defaultLanguage || 'en',
218
+ contentDir: existingConfig.contentDir || DEFAULTS.contentDir,
219
+ mediaDir: existingConfig.mediaDir || DEFAULTS.mediaDir,
220
+ commentsDir: existingConfig.commentsDir || DEFAULTS.commentsDir,
221
+ };
222
+ // Step 1: Get LeadCMS URL
223
+ const existingUrlForPrompt = existingConfig.url || '';
224
+ const urlPrompt = existingUrlForPrompt
225
+ ? `Enter your LeadCMS URL [${existingUrlForPrompt}]: `
226
+ : 'Enter your LeadCMS URL (e.g., https://your-instance.leadcms.ai): ';
227
+ while (!config.url) {
228
+ const urlInput = await question(urlPrompt);
229
+ const trimmedUrl = urlInput.trim().replace(/\/$/, ''); // Remove trailing slash
230
+ // If empty and we have existing URL, use it
231
+ if (!trimmedUrl && existingUrlForPrompt) {
232
+ config.url = existingUrlForPrompt;
233
+ break;
234
+ }
235
+ if (!trimmedUrl) {
236
+ console.log('āŒ URL is required.\n');
237
+ continue;
238
+ }
239
+ if (!isValidUrl(trimmedUrl)) {
240
+ console.log('āŒ Invalid URL format. Must start with http:// or https://\n');
241
+ continue;
242
+ }
243
+ config.url = trimmedUrl;
244
+ }
245
+ // Step 2: Authentication
246
+ console.log('');
247
+ // Check if API key already exists in environment or .env files
248
+ const existingApiKey = process.env.LEADCMS_API_KEY;
249
+ const envFilePath = path.join(process.cwd(), '.env');
250
+ const hasEnvFile = fs.existsSync(envFilePath);
251
+ if (existingApiKey) {
252
+ console.log('āœ“ API key found in environment');
253
+ config.apiKey = existingApiKey;
254
+ }
255
+ else {
256
+ // Only mention "No API key found" if .env file exists
257
+ if (hasEnvFile) {
258
+ console.log('ā„¹ļø No API key found in existing .env file.\n');
259
+ }
260
+ console.log('šŸ” Authentication Setup');
261
+ console.log(' Authentication is optional and can be skipped for most use cases.');
262
+ console.log(' • Without authentication: You can pull content and build your site (read-only access)');
263
+ console.log(' • With authentication: You can also push content changes back to LeadCMS');
264
+ console.log(' • You can always authenticate later by running: leadcms login\n');
265
+ const authenticateNow = await question('Would you like to authenticate now? (Y/n): ');
266
+ if (authenticateNow.toLowerCase() !== 'n' && authenticateNow.toLowerCase() !== 'no') {
267
+ try {
268
+ console.log('');
269
+ const { token, user } = await authenticate(config.url, question);
270
+ // Save to .env
271
+ saveTokenToEnv(token);
272
+ config.apiKey = token;
273
+ console.log('āœ… Authentication successful!');
274
+ console.log(` Logged in as: ${user.displayName || user.userName}\n`);
275
+ }
276
+ catch (error) {
277
+ console.log('\nāš ļø Authentication failed. Continuing in read-only mode.');
278
+ console.log(` Error: ${error.message}`);
279
+ console.log(' You can run "leadcms login" later to authenticate.\n');
280
+ }
281
+ }
282
+ else {
283
+ console.log('ā„¹ļø Skipping authentication. Continuing in read-only mode.');
284
+ console.log(' You can run "leadcms login" later to authenticate.\n');
285
+ }
286
+ }
287
+ // Step 3: Fetch CMS configuration (public endpoint, no authentication required)
288
+ console.log('\nšŸ” Connecting to LeadCMS...');
289
+ let cmsConfig = null;
290
+ cmsConfig = await fetchCMSConfig(config.url);
291
+ // Track which entities are supported
292
+ let supportsContent = false;
293
+ let supportsMedia = false;
294
+ let supportsComments = false;
295
+ if (!cmsConfig) {
296
+ console.log('\nāš ļø Could not fetch CMS configuration. Continuing with manual setup...\n');
297
+ // Manual default language input
298
+ const langInput = await question(`Default language code [${config.defaultLanguage}]: `);
299
+ if (langInput.trim()) {
300
+ config.defaultLanguage = langInput.trim();
301
+ }
302
+ // Default to all types when config is not available
303
+ supportsContent = supportsMedia = supportsComments = false;
304
+ }
305
+ else {
306
+ // Successfully fetched CMS config
307
+ console.log('āœ… Connected successfully!\n');
308
+ console.log('šŸ“‹ Available languages:');
309
+ cmsConfig.languages.forEach((lang, idx) => {
310
+ const marker = lang.code === cmsConfig.defaultLanguage ? '(default)' : '';
311
+ console.log(` ${idx + 1}. ${lang.name} [${lang.code}] ${marker}`);
312
+ });
313
+ console.log('');
314
+ // Ask for default language confirmation
315
+ const suggestedLanguage = cmsConfig.defaultLanguage;
316
+ const langInput = await question(`Default language code [${suggestedLanguage}]: `);
317
+ if (langInput.trim()) {
318
+ config.defaultLanguage = langInput.trim();
319
+ }
320
+ else {
321
+ config.defaultLanguage = suggestedLanguage;
322
+ }
323
+ console.log(`āœ“ Using default language: ${config.defaultLanguage}\n`);
324
+ // Check which entities are supported
325
+ if (cmsConfig.entities && Array.isArray(cmsConfig.entities) && cmsConfig.entities.length > 0) {
326
+ const entityNames = cmsConfig.entities.map((e) => e.toLowerCase());
327
+ supportsContent = entityNames.includes('content');
328
+ supportsMedia = entityNames.includes('media');
329
+ supportsComments = entityNames.includes('comment') || entityNames.includes('comments');
330
+ console.log('šŸ“¦ Supported entity types:');
331
+ if (supportsContent)
332
+ console.log(' āœ“ Content');
333
+ if (supportsMedia)
334
+ console.log(' āœ“ Media');
335
+ if (supportsComments)
336
+ console.log(' āœ“ Comments');
337
+ if (!supportsContent && !supportsMedia && !supportsComments) {
338
+ console.log(' āš ļø No matching entity types found');
339
+ console.log('\nšŸ’” This LeadCMS instance does not support standard entity types.');
340
+ console.log(' Configuration will be created without directory prompts.\n');
341
+ }
342
+ else {
343
+ console.log('');
344
+ }
345
+ }
346
+ else {
347
+ // Empty or missing entities array - don't assume anything
348
+ console.log('šŸ“¦ Supported entity types:');
349
+ console.log(' āš ļø No entities information available');
350
+ console.log('\nšŸ’” Cannot determine supported entity types from the API.');
351
+ console.log(' Configuration will be created without directory prompts.\n');
352
+ }
353
+ }
354
+ // Step 4: Ask for directories only for supported entity types
355
+ if (supportsContent) {
356
+ const contentDirInput = await question(`Content directory [${config.contentDir}]: `);
357
+ if (contentDirInput.trim()) {
358
+ config.contentDir = contentDirInput.trim();
359
+ }
360
+ }
361
+ if (supportsMedia) {
362
+ const mediaDirInput = await question(`Media directory [${config.mediaDir}]: `);
363
+ if (mediaDirInput.trim()) {
364
+ config.mediaDir = mediaDirInput.trim();
365
+ }
366
+ }
367
+ if (supportsComments) {
368
+ const commentsDirInput = await question(`Comments directory [${config.commentsDir}]: `);
369
+ if (commentsDirInput.trim()) {
370
+ config.commentsDir = commentsDirInput.trim();
371
+ }
372
+ }
373
+ console.log('\nšŸ“ Creating configuration files...\n');
374
+ // Create .env file
375
+ updateEnvFile(config);
376
+ // Create config file if needed
377
+ createConfigFile(config);
378
+ console.log('\n✨ Configuration complete!\n');
379
+ console.log('Next steps:');
380
+ if (!config.apiKey) {
381
+ console.log(' 1. Run: npx leadcms login (for write access and private content)');
382
+ console.log(' 2. Run: npx leadcms pull (to download content)');
383
+ console.log(' 3. Start using LeadCMS content in your project\n');
384
+ }
385
+ else {
386
+ console.log(' 1. Run: npx leadcms pull (to download content)');
387
+ console.log(' 2. Start using LeadCMS content in your project\n');
388
+ }
389
+ rl.close();
390
+ }
391
+ // Run the script
392
+ main().catch((error) => {
393
+ console.error('āŒ Initialization failed:', error.message);
394
+ rl.close();
395
+ process.exit(1);
396
+ });
397
+ //# sourceMappingURL=init-leadcms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-leadcms.js","sourceRoot":"","sources":["../../src/scripts/init-leadcms.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,12 @@ interface ContentItem {
14
14
  [key: string]: any;
15
15
  }
16
16
  export declare const leadCMSUrl: string;
17
- export declare const leadCMSApiKey: string;
17
+ export declare const leadCMSApiKey: string | undefined;
18
18
  export declare const defaultLanguage: string;
19
19
  export declare const CONTENT_DIR: string;
20
20
  export declare const MEDIA_DIR: string;
21
21
  export declare function fetchContentTypes(): Promise<Record<string, string>>;
22
22
  export declare function extractMediaUrlsFromContent(content: ContentItem): string[];
23
- export declare function downloadMediaFileDirect(mediaUrl: string, destPath: string, leadCMSUrl: string, leadCMSApiKey: string): Promise<boolean>;
23
+ export declare function downloadMediaFileDirect(mediaUrl: string, destPath: string, leadCMSUrl: string, leadCMSApiKey?: string): Promise<boolean>;
24
24
  export type { LeadCMSConfig, ContentType, ContentItem };
25
25
  //# sourceMappingURL=leadcms-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"leadcms-helpers.d.ts","sourceRoot":"","sources":["../../src/scripts/leadcms-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAMD,eAAO,MAAM,UAAU,QAAa,CAAC;AACrC,eAAO,MAAM,aAAa,QAAgB,CAAC;AAC3C,eAAO,MAAM,eAAe,QAAyB,CAAC;AACtD,eAAO,MAAM,WAAW,QAAkC,CAAC;AAC3D,eAAO,MAAM,SAAS,QAAgC,CAAC;AAIvD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBzE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAgB1E;AAGD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAYD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"leadcms-helpers.d.ts","sourceRoot":"","sources":["../../src/scripts/leadcms-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAMD,eAAO,MAAM,UAAU,QAAa,CAAC;AACrC,eAAO,MAAM,aAAa,oBAAgB,CAAC;AAC3C,eAAO,MAAM,eAAe,QAAyB,CAAC;AACtD,eAAO,MAAM,WAAW,QAAkC,CAAC;AAC3D,eAAO,MAAM,SAAS,QAAgC,CAAC;AAIvD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAuBzE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAoB1E;AAGD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAYD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -14,12 +14,13 @@ export const MEDIA_DIR = path.resolve(config.mediaDir);
14
14
  // Content types are automatically detected and don't need to be configured
15
15
  export async function fetchContentTypes() {
16
16
  console.log(`[LeadCMS] Fetching content types from API...`);
17
+ console.log(`[LeadCMS] Fetching public content types (no authentication)`);
17
18
  const url = new URL("/api/content-types", leadCMSUrl);
18
19
  url.searchParams.set("filter[limit]", "100");
19
20
  try {
20
- const res = await axios.get(url.toString(), {
21
- headers: { Authorization: `Bearer ${leadCMSApiKey}` },
22
- });
21
+ // SECURITY: Never send API key for read operations
22
+ // Content types should only return public types
23
+ const res = await axios.get(url.toString());
23
24
  const types = res.data;
24
25
  const typeMap = {};
25
26
  for (const t of types) {
@@ -34,7 +35,6 @@ export async function fetchContentTypes() {
34
35
  }
35
36
  }
36
37
  export function extractMediaUrlsFromContent(content) {
37
- console.log(`[LeadCMS] Extracting media URLs from content: ${content}`);
38
38
  const urls = new Set();
39
39
  const body = content.body || "";
40
40
  const regex = /["'\(](\/api\/media\/[^"'\)\s]+)/g;
@@ -45,17 +45,22 @@ export function extractMediaUrlsFromContent(content) {
45
45
  if (content.coverImageUrl && content.coverImageUrl.startsWith("/api/media/")) {
46
46
  urls.add(content.coverImageUrl);
47
47
  }
48
- return Array.from(urls);
48
+ const foundUrls = Array.from(urls);
49
+ if (foundUrls.length > 0) {
50
+ console.log(`[LeadCMS] Extracted ${foundUrls.length} media URL(s) from content: ${content.slug || content.id}`);
51
+ }
52
+ return foundUrls;
49
53
  }
50
54
  // Direct media download without meta.json dependency
51
55
  export async function downloadMediaFileDirect(mediaUrl, destPath, leadCMSUrl, leadCMSApiKey) {
52
56
  await fs.mkdir(path.dirname(destPath), { recursive: true });
53
57
  const fullUrl = mediaUrl.startsWith("http") ? mediaUrl : leadCMSUrl.replace(/\/$/, "") + mediaUrl;
54
- const headers = { Authorization: `Bearer ${leadCMSApiKey}` };
58
+ // SECURITY: Never send API key for media downloads
59
+ // Media files should be publicly accessible
60
+ // Note: leadCMSApiKey parameter kept for backward compatibility but not used
55
61
  try {
56
62
  const res = await axios.get(fullUrl, {
57
63
  responseType: "arraybuffer",
58
- headers,
59
64
  validateStatus: (status) => (status >= 200 && status < 300) || status === 404,
60
65
  });
61
66
  if (res.status === 404) {
@@ -1 +1 @@
1
- {"version":3,"file":"leadcms-helpers.js","sourceRoot":"","sources":["../../src/scripts/leadcms-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leadcms-helpers.js","sourceRoot":"","sources":["../../src/scripts/leadcms-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Login - Interactive token-based authentication
4
+ */
5
+ /**
6
+ * Interactive login flow
7
+ */
8
+ declare function main(): Promise<void>;
9
+ export { main as loginLeadCMS };
10
+ //# sourceMappingURL=login-leadcms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-leadcms.d.ts","sourceRoot":"","sources":["../../src/scripts/login-leadcms.ts"],"names":[],"mappings":";AACA;;GAEG;AA4BH;;GAEG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDnC;AAUD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Login - Interactive token-based authentication
4
+ */
5
+ import { config as dotenvConfig } from 'dotenv';
6
+ import { getConfig } from '../lib/config.js';
7
+ import { authenticate, saveTokenToEnv } from '../lib/auth.js';
8
+ import axios from 'axios';
9
+ import * as readline from 'readline';
10
+ // Load environment variables from .env file
11
+ dotenvConfig();
12
+ /**
13
+ * Prompt user for input
14
+ */
15
+ function prompt(question) {
16
+ const rl = readline.createInterface({
17
+ input: process.stdin,
18
+ output: process.stdout,
19
+ });
20
+ return new Promise((resolve) => {
21
+ rl.question(question, (answer) => {
22
+ rl.close();
23
+ resolve(answer.trim());
24
+ });
25
+ });
26
+ }
27
+ /**
28
+ * Interactive login flow
29
+ */
30
+ async function main() {
31
+ let leadCMSUrl;
32
+ // Try to get URL from config file first
33
+ try {
34
+ const config = getConfig();
35
+ leadCMSUrl = config.url;
36
+ }
37
+ catch (error) {
38
+ // Config file not found or invalid, try environment variable
39
+ leadCMSUrl = process.env.LEADCMS_URL;
40
+ }
41
+ if (!leadCMSUrl) {
42
+ console.log('\nāŒ LeadCMS URL is not configured.');
43
+ console.log('\nšŸ’” Options:');
44
+ console.log(' 1. Run: leadcms init (to create a config file)');
45
+ console.log(' 2. Or set LEADCMS_URL in your .env file\n');
46
+ return;
47
+ }
48
+ try {
49
+ // Use shared authentication function
50
+ const { token, user } = await authenticate(leadCMSUrl, prompt);
51
+ // Save to .env
52
+ saveTokenToEnv(token);
53
+ console.log('āœ… Token verified and saved to .env file!');
54
+ console.log(`\nšŸ‘¤ Successfully logged in as: ${user.displayName || user.userName}`);
55
+ console.log(` Email: ${user.email}`);
56
+ console.log('\nāœ… You can now use commands like:');
57
+ console.log(' • leadcms push - Push local changes to LeadCMS');
58
+ console.log(' • leadcms pull - Pull content from LeadCMS');
59
+ console.log(' • leadcms status - Check sync status\n');
60
+ }
61
+ catch (error) {
62
+ if (axios.isAxiosError(error)) {
63
+ if (error.response?.status === 401) {
64
+ console.log('\nāŒ Authentication failed: Invalid token');
65
+ console.log(' Please make sure you copied the token correctly.\n');
66
+ }
67
+ else if (error.response?.status === 404) {
68
+ console.log('\nāŒ User not found');
69
+ console.log(' The token is valid but the user account may not exist.\n');
70
+ }
71
+ else {
72
+ console.log(`\nāŒ Error: ${error.response?.statusText || error.message}`);
73
+ console.log(' Please try again or contact support.\n');
74
+ }
75
+ }
76
+ else {
77
+ console.log(`\nāŒ ${error.message}\n`);
78
+ }
79
+ process.exit(1);
80
+ }
81
+ }
82
+ // Handle direct script execution
83
+ if (typeof import.meta !== 'undefined' && process.argv[1] && import.meta.url === `file://${process.argv[1]}`) {
84
+ main().catch((error) => {
85
+ console.error('Error:', error.message);
86
+ process.exit(1);
87
+ });
88
+ }
89
+ export { main as loginLeadCMS };
90
+ //# sourceMappingURL=login-leadcms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-leadcms.js","sourceRoot":"","sources":["../../src/scripts/login-leadcms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Orchestrator for pulling all content from LeadCMS
4
+ * Checks entity support before fetching content, media, and comments
5
+ */
6
+ import "dotenv/config";
7
+ /**
8
+ * Main orchestrator function
9
+ */
10
+ declare function main(): Promise<void>;
11
+ export { main as pullAll };
12
+ //# sourceMappingURL=pull-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-all.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-all.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AA0CvB;;GAEG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCnC;AAGD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,CAAC"}