@leadcms/sdk 2.1.5 ā 2.2.1
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 +331 -6
- package/dist/cli/index.js +97 -68
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.d.ts +55 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +204 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cms-config-types.d.ts +57 -0
- package/dist/lib/cms-config-types.d.ts.map +1 -0
- package/dist/lib/cms-config-types.js +64 -0
- package/dist/lib/cms-config-types.js.map +1 -0
- package/dist/lib/cms.d.ts +52 -0
- package/dist/lib/cms.d.ts.map +1 -1
- package/dist/lib/cms.js +113 -0
- package/dist/lib/cms.js.map +1 -1
- package/dist/lib/comment-types.d.ts +73 -0
- package/dist/lib/comment-types.d.ts.map +1 -0
- package/dist/lib/comment-types.js +6 -0
- package/dist/lib/comment-types.js.map +1 -0
- package/dist/lib/comment-utils.d.ts +173 -0
- package/dist/lib/comment-utils.d.ts.map +1 -0
- package/dist/lib/comment-utils.js +338 -0
- package/dist/lib/comment-utils.js.map +1 -0
- package/dist/lib/config.d.ts +4 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +10 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/data-service.d.ts.map +1 -1
- package/dist/lib/data-service.js +22 -6
- package/dist/lib/data-service.js.map +1 -1
- package/dist/scripts/fetch-leadcms-comments.d.ts +26 -0
- package/dist/scripts/fetch-leadcms-comments.d.ts.map +1 -0
- package/dist/scripts/fetch-leadcms-comments.js +352 -0
- package/dist/scripts/fetch-leadcms-comments.js.map +1 -0
- package/dist/scripts/fetch-leadcms-content.d.ts.map +1 -1
- package/dist/scripts/fetch-leadcms-content.js +86 -39
- package/dist/scripts/fetch-leadcms-content.js.map +1 -1
- package/dist/scripts/init-leadcms.d.ts +7 -0
- package/dist/scripts/init-leadcms.d.ts.map +1 -0
- package/dist/scripts/init-leadcms.js +397 -0
- package/dist/scripts/init-leadcms.js.map +1 -0
- package/dist/scripts/leadcms-helpers.d.ts +2 -2
- package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
- package/dist/scripts/leadcms-helpers.js +12 -7
- package/dist/scripts/leadcms-helpers.js.map +1 -1
- package/dist/scripts/login-leadcms.d.ts +10 -0
- package/dist/scripts/login-leadcms.d.ts.map +1 -0
- package/dist/scripts/login-leadcms.js +90 -0
- package/dist/scripts/login-leadcms.js.map +1 -0
- package/dist/scripts/pull-all.d.ts +12 -0
- package/dist/scripts/pull-all.d.ts.map +1 -0
- package/dist/scripts/pull-all.js +81 -0
- package/dist/scripts/pull-all.js.map +1 -0
- package/dist/scripts/pull-comments.d.ts +11 -0
- package/dist/scripts/pull-comments.d.ts.map +1 -0
- package/dist/scripts/pull-comments.js +45 -0
- package/dist/scripts/pull-comments.js.map +1 -0
- package/dist/scripts/pull-content.d.ts +11 -0
- package/dist/scripts/pull-content.d.ts.map +1 -0
- package/dist/scripts/pull-content.js +45 -0
- package/dist/scripts/pull-content.js.map +1 -0
- package/dist/scripts/pull-media.d.ts +12 -0
- package/dist/scripts/pull-media.d.ts.map +1 -0
- package/dist/scripts/pull-media.js +46 -0
- package/dist/scripts/pull-media.js.map +1 -0
- package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
- package/dist/scripts/push-leadcms-content.js +12 -0
- package/dist/scripts/push-leadcms-content.js.map +1 -1
- 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.io): ';
|
|
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":";AACA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAA0B,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9D,iBAAiB;AACjB,MAAM,QAAQ,GAAG;IACf,UAAU,EAAE,kBAAkB;IAC9B,WAAW,EAAE,mBAAmB;IAChC,QAAQ,EAAE,cAAc;CACzB,CAAC;AAWF,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEtD,qEAAqE;QACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAoB,MAAM,EAAE;YAC1D,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAkB;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAE5D,0BAA0B;IAC1B,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAE3E,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,uCAAuC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,4DAA4D;QAC5D,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAEhE,oBAAoB;IACpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC9E,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAClF,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAEnE,oDAAoD;IACpD,MAAM,WAAW,GACf,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;QACzC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;QACrC,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC;IAE9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAQ,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC9C,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1C,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;QAChD,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,EAAE,CAAC,aAAa,CACd,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC1C,OAAO,CACR,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB;IACzB,MAAM,cAAc,GAAwB,EAAE,CAAC;IAE/C,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAE3E,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3D,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE1C,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,aAAa,IAAI,KAAK,EAAE,CAAC;oBAC1C,cAAc,CAAC,GAAG,GAAG,KAAK,CAAC;gBAC7B,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,iBAAiB,IAAI,KAAK,EAAE,CAAC;oBACrD,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC;gBAChC,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,0BAA0B,IAAI,KAAK,EAAE,CAAC;oBAC9D,cAAc,CAAC,eAAe,GAAG,KAAK,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE7C,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC1B,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;YACpD,CAAC;YACD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,cAAc,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YAChD,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC3B,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAE5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7G,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAErE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,2DAA2D,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAe;QACzB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,cAAc,CAAC,MAAM,IAAI,EAAE;QACnC,eAAe,EAAE,cAAc,CAAC,eAAe,IAAI,IAAI;QACvD,UAAU,EAAE,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU;QAC5D,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QACtD,WAAW,EAAE,cAAc,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;KAChE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,oBAAoB,GAAG,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,oBAAoB;QACpC,CAAC,CAAC,2BAA2B,oBAAoB,KAAK;QACtD,CAAC,CAAC,mEAAmE,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;QAE/E,4CAA4C;QAC5C,IAAI,CAAC,UAAU,IAAI,oBAAoB,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,GAAG,oBAAoB,CAAC;YAClC,MAAM;QACR,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC;IAC1B,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,+DAA+D;IAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,sDAAsD;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC;QACxG,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAElF,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,6CAA6C,CAAC,CAAC;QAEtF,IAAI,eAAe,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YACpF,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAEjE,eAAe;gBACf,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBAEtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,IAAI,SAAS,GAA6B,IAAI,CAAC;IAC/C,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE7C,qCAAqC;IACrC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAE1F,gCAAgC;QAChC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,0BAA0B,MAAM,CAAC,eAAe,KAAK,CAAC,CAAC;QACxF,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,oDAAoD;QACpD,eAAe,GAAG,aAAa,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAoC,EAAE,GAAW,EAAE,EAAE;YAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,wCAAwC;QACxC,MAAM,iBAAiB,GAAG,SAAS,CAAC,eAAe,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,0BAA0B,iBAAiB,KAAK,CAAC,CAAC;QACnF,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,GAAG,iBAAiB,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QAErE,qCAAqC;QACrC,IAAI,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3E,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClD,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9C,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEvF,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,IAAI,eAAe;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,aAAa;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,gBAAgB;gBAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEnD,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;gBAClF,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,sBAAsB,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC;QACrF,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,oBAAoB,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,uBAAuB,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC;QACxF,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,mBAAmB;IACnB,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,+BAA+B;IAC/B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,iBAAiB;AACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -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
|
|
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,
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAsB,MAAM,kBAAkB,CAAC;AAmBjE,iEAAiE;AACjE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B,wDAAwD;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEvD,oEAAoE;AACpE,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAiC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"leadcms-helpers.js","sourceRoot":"","sources":["../../src/scripts/leadcms-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|