@leadcms/sdk 3.3.5 → 3.3.8

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 (131) hide show
  1. package/README.md +3 -0
  2. package/dist/cli/bin/pull-all.js +10 -2
  3. package/dist/cli/bin/pull-all.js.map +1 -1
  4. package/dist/cli/bin/pull-comments.js +9 -2
  5. package/dist/cli/bin/pull-comments.js.map +1 -1
  6. package/dist/cli/bin/pull-content.js +10 -2
  7. package/dist/cli/bin/pull-content.js.map +1 -1
  8. package/dist/cli/bin/pull-email-templates.d.ts +6 -0
  9. package/dist/cli/bin/pull-email-templates.d.ts.map +1 -0
  10. package/dist/cli/bin/pull-email-templates.js +24 -0
  11. package/dist/cli/bin/pull-email-templates.js.map +1 -0
  12. package/dist/cli/bin/pull-media.js +9 -2
  13. package/dist/cli/bin/pull-media.js.map +1 -1
  14. package/dist/cli/bin/push-all.js +17 -4
  15. package/dist/cli/bin/push-all.js.map +1 -1
  16. package/dist/cli/bin/push-content.js +9 -2
  17. package/dist/cli/bin/push-content.js.map +1 -1
  18. package/dist/cli/bin/push-email-templates.d.ts +6 -0
  19. package/dist/cli/bin/push-email-templates.d.ts.map +1 -0
  20. package/dist/cli/bin/push-email-templates.js +21 -0
  21. package/dist/cli/bin/push-email-templates.js.map +1 -0
  22. package/dist/cli/bin/push-media.js +9 -2
  23. package/dist/cli/bin/push-media.js.map +1 -1
  24. package/dist/cli/bin/push.js +2 -0
  25. package/dist/cli/bin/push.js.map +1 -1
  26. package/dist/cli/bin/status-all.d.ts +1 -1
  27. package/dist/cli/bin/status-all.js +255 -31
  28. package/dist/cli/bin/status-all.js.map +1 -1
  29. package/dist/cli/bin/status-content.js +9 -2
  30. package/dist/cli/bin/status-content.js.map +1 -1
  31. package/dist/cli/bin/status-email-templates.d.ts +6 -0
  32. package/dist/cli/bin/status-email-templates.d.ts.map +1 -0
  33. package/dist/cli/bin/status-email-templates.js +29 -0
  34. package/dist/cli/bin/status-email-templates.js.map +1 -0
  35. package/dist/cli/bin/status-media.js +9 -2
  36. package/dist/cli/bin/status-media.js.map +1 -1
  37. package/dist/cli/bin/status.js +2 -0
  38. package/dist/cli/bin/status.js.map +1 -1
  39. package/dist/cli/bin/watch.js +2 -0
  40. package/dist/cli/bin/watch.js.map +1 -1
  41. package/dist/cli/index.js +29 -2
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/lib/cms-config-types.d.ts +4 -0
  44. package/dist/lib/cms-config-types.d.ts.map +1 -1
  45. package/dist/lib/cms-config-types.js +6 -0
  46. package/dist/lib/cms-config-types.js.map +1 -1
  47. package/dist/lib/cms.d.ts.map +1 -1
  48. package/dist/lib/cms.js +1 -0
  49. package/dist/lib/cms.js.map +1 -1
  50. package/dist/lib/config.d.ts +2 -0
  51. package/dist/lib/config.d.ts.map +1 -1
  52. package/dist/lib/config.js +5 -0
  53. package/dist/lib/config.js.map +1 -1
  54. package/dist/lib/content-merge.d.ts +2 -2
  55. package/dist/lib/content-merge.d.ts.map +1 -1
  56. package/dist/lib/content-merge.js +39 -35
  57. package/dist/lib/content-merge.js.map +1 -1
  58. package/dist/lib/content-transformation.d.ts +1 -1
  59. package/dist/lib/content-transformation.d.ts.map +1 -1
  60. package/dist/lib/content-transformation.js +8 -2
  61. package/dist/lib/content-transformation.js.map +1 -1
  62. package/dist/lib/data-service.d.ts +56 -0
  63. package/dist/lib/data-service.d.ts.map +1 -1
  64. package/dist/lib/data-service.js +246 -36
  65. package/dist/lib/data-service.js.map +1 -1
  66. package/dist/lib/email-template-transformation.d.ts +36 -0
  67. package/dist/lib/email-template-transformation.d.ts.map +1 -0
  68. package/dist/lib/email-template-transformation.js +88 -0
  69. package/dist/lib/email-template-transformation.js.map +1 -0
  70. package/dist/lib/logger.d.ts +63 -0
  71. package/dist/lib/logger.d.ts.map +1 -0
  72. package/dist/lib/logger.js +87 -0
  73. package/dist/lib/logger.js.map +1 -0
  74. package/dist/lib/spinner.d.ts +25 -0
  75. package/dist/lib/spinner.d.ts.map +1 -0
  76. package/dist/lib/spinner.js +80 -0
  77. package/dist/lib/spinner.js.map +1 -0
  78. package/dist/scripts/fetch-leadcms-comments.d.ts.map +1 -1
  79. package/dist/scripts/fetch-leadcms-comments.js +22 -21
  80. package/dist/scripts/fetch-leadcms-comments.js.map +1 -1
  81. package/dist/scripts/fetch-leadcms-content.d.ts +12 -1
  82. package/dist/scripts/fetch-leadcms-content.d.ts.map +1 -1
  83. package/dist/scripts/fetch-leadcms-content.js +51 -48
  84. package/dist/scripts/fetch-leadcms-content.js.map +1 -1
  85. package/dist/scripts/fetch-leadcms-email-templates.d.ts +15 -0
  86. package/dist/scripts/fetch-leadcms-email-templates.d.ts.map +1 -0
  87. package/dist/scripts/fetch-leadcms-email-templates.js +272 -0
  88. package/dist/scripts/fetch-leadcms-email-templates.js.map +1 -0
  89. package/dist/scripts/init-leadcms.d.ts.map +1 -1
  90. package/dist/scripts/init-leadcms.js +22 -3
  91. package/dist/scripts/init-leadcms.js.map +1 -1
  92. package/dist/scripts/leadcms-helpers.d.ts +1 -0
  93. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  94. package/dist/scripts/leadcms-helpers.js +7 -5
  95. package/dist/scripts/leadcms-helpers.js.map +1 -1
  96. package/dist/scripts/pull-all.d.ts +7 -1
  97. package/dist/scripts/pull-all.d.ts.map +1 -1
  98. package/dist/scripts/pull-all.js +40 -19
  99. package/dist/scripts/pull-all.js.map +1 -1
  100. package/dist/scripts/pull-comments.d.ts.map +1 -1
  101. package/dist/scripts/pull-comments.js +3 -2
  102. package/dist/scripts/pull-comments.js.map +1 -1
  103. package/dist/scripts/pull-content.d.ts +2 -0
  104. package/dist/scripts/pull-content.d.ts.map +1 -1
  105. package/dist/scripts/pull-content.js +5 -4
  106. package/dist/scripts/pull-content.js.map +1 -1
  107. package/dist/scripts/pull-email-templates.d.ts +13 -0
  108. package/dist/scripts/pull-email-templates.d.ts.map +1 -0
  109. package/dist/scripts/pull-email-templates.js +79 -0
  110. package/dist/scripts/pull-email-templates.js.map +1 -0
  111. package/dist/scripts/pull-media.d.ts.map +1 -1
  112. package/dist/scripts/pull-media.js +3 -2
  113. package/dist/scripts/pull-media.js.map +1 -1
  114. package/dist/scripts/push-email-templates.d.ts +50 -0
  115. package/dist/scripts/push-email-templates.d.ts.map +1 -0
  116. package/dist/scripts/push-email-templates.js +687 -0
  117. package/dist/scripts/push-email-templates.js.map +1 -0
  118. package/dist/scripts/push-leadcms-content.d.ts +18 -1
  119. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  120. package/dist/scripts/push-leadcms-content.js +39 -13
  121. package/dist/scripts/push-leadcms-content.js.map +1 -1
  122. package/dist/scripts/push-media.d.ts +2 -0
  123. package/dist/scripts/push-media.d.ts.map +1 -1
  124. package/dist/scripts/push-media.js +8 -5
  125. package/dist/scripts/push-media.js.map +1 -1
  126. package/dist/scripts/sse-watcher.d.ts +16 -0
  127. package/dist/scripts/sse-watcher.d.ts.map +1 -1
  128. package/dist/scripts/sse-watcher.js +134 -74
  129. package/dist/scripts/sse-watcher.js.map +1 -1
  130. package/leadcms.config.json.sample +2 -0
  131. package/package.json +1 -1
@@ -5,6 +5,7 @@ import axios from "axios";
5
5
  import { leadCMSUrl, leadCMSApiKey, } from "./leadcms-helpers.js";
6
6
  import { getConfig } from "../lib/config.js";
7
7
  import { isValidLocaleCode } from "../lib/locale-utils.js";
8
+ import { logger } from "../lib/logger.js";
8
9
  // Load config to get commentsDir
9
10
  const config = getConfig();
10
11
  const COMMENTS_DIR = path.resolve(config.commentsDir);
@@ -27,7 +28,7 @@ async function readCommentSyncToken() {
27
28
  try {
28
29
  const legacy = (await fs.readFile(LEGACY_COMMENT_SYNC_TOKEN_PATH, "utf8")).trim();
29
30
  if (legacy) {
30
- console.log(`[SYNC] Migrating comment sync token from legacy location`);
31
+ logger.verbose(`[SYNC] Migrating comment sync token from legacy location`);
31
32
  return { token: legacy, migrated: true };
32
33
  }
33
34
  }
@@ -55,8 +56,8 @@ async function cleanupLegacyCommentSyncToken() {
55
56
  * Handles pagination automatically
56
57
  */
57
58
  async function fetchCommentSync(syncToken) {
58
- console.log(`[FETCH_COMMENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
59
- console.log(`[FETCH_COMMENT_SYNC] Fetching public comments (no authentication)`);
59
+ logger.verbose(`[FETCH_COMMENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
60
+ logger.verbose(`[FETCH_COMMENT_SYNC] Fetching public comments (no authentication)`);
60
61
  let allItems = [];
61
62
  let allDeleted = [];
62
63
  let token = syncToken || "";
@@ -66,27 +67,27 @@ async function fetchCommentSync(syncToken) {
66
67
  const url = new URL("/api/comments/sync", leadCMSUrl);
67
68
  url.searchParams.set("filter[limit]", "100");
68
69
  url.searchParams.set("syncToken", token);
69
- console.log(`[FETCH_COMMENT_SYNC] Page ${page}, URL: ${url.toString()}`);
70
+ logger.verbose(`[FETCH_COMMENT_SYNC] Page ${page}, URL: ${url.toString()}`);
70
71
  try {
71
72
  // SECURITY: Never send API key for read operations
72
73
  // Comments sync should only return public comments
73
74
  const res = await axios.get(url.toString());
74
75
  if (res.status === 204) {
75
- console.log(`[FETCH_COMMENT_SYNC] Got 204 No Content - ending sync`);
76
+ logger.verbose(`[FETCH_COMMENT_SYNC] Got 204 No Content - ending sync`);
76
77
  break;
77
78
  }
78
79
  const data = res.data;
79
- console.log(`[FETCH_COMMENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
80
+ logger.verbose(`[FETCH_COMMENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
80
81
  if (data.items && Array.isArray(data.items))
81
82
  allItems.push(...data.items);
82
83
  if (data.deleted && Array.isArray(data.deleted)) {
83
84
  allDeleted.push(...data.deleted);
84
85
  }
85
86
  const newSyncToken = res.headers["x-next-sync-token"] || token;
86
- console.log(`[FETCH_COMMENT_SYNC] Next sync token: ${newSyncToken}`);
87
+ logger.verbose(`[FETCH_COMMENT_SYNC] Next sync token: ${newSyncToken}`);
87
88
  if (!newSyncToken || newSyncToken === token) {
88
89
  nextSyncToken = newSyncToken || token;
89
- console.log(`[FETCH_COMMENT_SYNC] No new sync token - ending sync`);
90
+ logger.verbose(`[FETCH_COMMENT_SYNC] No new sync token - ending sync`);
90
91
  break;
91
92
  }
92
93
  nextSyncToken = newSyncToken;
@@ -117,7 +118,7 @@ async function fetchCommentSync(syncToken) {
117
118
  throw error;
118
119
  }
119
120
  }
120
- console.log(`[FETCH_COMMENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
121
+ logger.verbose(`[FETCH_COMMENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
121
122
  return {
122
123
  items: allItems,
123
124
  deleted: allDeleted,
@@ -170,7 +171,7 @@ async function saveCommentsForEntity(commentableType, commentableId, language, c
170
171
  // If no comments, remove the file
171
172
  try {
172
173
  await fs.unlink(filePath);
173
- console.log(`Removed empty comment file: ${filePath}`);
174
+ logger.verbose(`Removed empty comment file: ${filePath}`);
174
175
  }
175
176
  catch {
176
177
  // File might not exist, that's okay
@@ -185,7 +186,7 @@ async function saveCommentsForEntity(commentableType, commentableId, language, c
185
186
  return a.id - b.id;
186
187
  });
187
188
  await fs.writeFile(filePath, JSON.stringify(sortedComments, null, 2), "utf8");
188
- console.log(`Saved ${sortedComments.length} comments to ${filePath}`);
189
+ logger.verbose(`Saved ${sortedComments.length} comments to ${filePath}`);
189
190
  }
190
191
  }
191
192
  /**
@@ -247,7 +248,7 @@ async function searchAndDeleteInTypeDirectory(typePath, commentableType, languag
247
248
  if (filtered.length < originalLength) {
248
249
  // Found and removed the comment
249
250
  await saveCommentsForEntity(commentableType, commentableId, language, filtered);
250
- console.log(`Deleted comment ${commentId} from ${commentableType}/${commentableId} (${language})`);
251
+ logger.verbose(`Deleted comment ${commentId} from ${commentableType}/${commentableId} (${language})`);
251
252
  return; // Comment found and deleted, we're done
252
253
  }
253
254
  }
@@ -290,27 +291,27 @@ async function fetchCMSConfigForEntity() {
290
291
  * Main function to sync comments from LeadCMS
291
292
  */
292
293
  export async function main() {
293
- console.log(`[ENV] LeadCMS URL: ${leadCMSUrl}`);
294
- console.log(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? `${leadCMSApiKey.substring(0, 8)}...` : "NOT_SET"}`);
295
- console.log(`[ENV] Comments Dir: ${COMMENTS_DIR}`);
294
+ logger.verbose(`[ENV] LeadCMS URL: ${leadCMSUrl}`);
295
+ logger.verbose(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? `${leadCMSApiKey.substring(0, 8)}...` : "NOT_SET"}`);
296
+ logger.verbose(`[ENV] Comments Dir: ${COMMENTS_DIR}`);
296
297
  // Check if comments are supported
297
- console.log(`\n🔍 Checking CMS configuration...`);
298
+ logger.verbose(`\n🔍 Checking CMS configuration...`);
298
299
  const commentsSupported = await fetchCMSConfigForEntity();
299
300
  if (!commentsSupported) {
300
301
  console.log(`⏭️ Comments entity not supported by this LeadCMS instance - skipping comment sync`);
301
302
  return;
302
303
  }
303
- console.log(`✅ Comments supported - proceeding with sync\n`);
304
+ logger.verbose(`✅ Comments supported - proceeding with sync\n`);
304
305
  await fs.mkdir(COMMENTS_DIR, { recursive: true });
305
306
  const { token: lastSyncToken, migrated: commentTokenMigrated } = await readCommentSyncToken();
306
307
  let items = [], deleted = [], nextSyncToken = "";
307
308
  try {
308
309
  if (lastSyncToken) {
309
- console.log(`Syncing comments from LeadCMS using sync token: ${lastSyncToken}`);
310
+ logger.verbose(`Syncing comments from LeadCMS using sync token: ${lastSyncToken}`);
310
311
  ({ items, deleted, nextSyncToken } = await fetchCommentSync(lastSyncToken));
311
312
  }
312
313
  else {
313
- console.log("No comment sync token found. Doing full fetch from LeadCMS...");
314
+ logger.verbose("No comment sync token found. Doing full fetch from LeadCMS...");
314
315
  ({ items, deleted, nextSyncToken } = await fetchCommentSync(undefined));
315
316
  }
316
317
  }
@@ -356,12 +357,12 @@ export async function main() {
356
357
  // Save new sync token
357
358
  if (nextSyncToken) {
358
359
  await writeCommentSyncToken(nextSyncToken);
359
- console.log(`Comment sync token updated: ${nextSyncToken}`);
360
+ logger.verbose(`Comment sync token updated: ${nextSyncToken}`);
360
361
  }
361
362
  // Clean up legacy sync token after successful migration
362
363
  if (commentTokenMigrated) {
363
364
  await cleanupLegacyCommentSyncToken();
364
- console.log(`[SYNC] Removed legacy comment sync token`);
365
+ logger.verbose(`[SYNC] Removed legacy comment sync token`);
365
366
  }
366
367
  console.log(`\nComment sync completed successfully.`);
367
368
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-leadcms-comments.js","sourceRoot":"","sources":["../../src/scripts/fetch-leadcms-comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-leadcms-comments.js","sourceRoot":"","sources":["../../src/scripts/fetch-leadcms-comments.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,16 @@
1
1
  import "dotenv/config";
2
2
  import { ContentItem } from "./leadcms-helpers.js";
3
+ /**
4
+ * Options for fetchLeadCMSContent.
5
+ */
6
+ export interface FetchContentOptions {
7
+ /**
8
+ * When true, skip three-way merge logic and always overwrite local files
9
+ * with remote content. This is used in watch mode (SSE watcher) to prevent
10
+ * merge conflicts caused by rapid sequential/concurrent syncs.
11
+ */
12
+ forceOverwrite?: boolean;
13
+ }
3
14
  interface MediaItem {
4
15
  location?: string;
5
16
  [key: string]: any;
@@ -48,7 +59,7 @@ declare function deleteContentFilesById(index: ContentIdIndex, idStr: string): P
48
59
  * to avoid repeated filesystem walks.
49
60
  */
50
61
  declare function findAndDeleteContentFile(dir: string, idStr: string): Promise<void>;
51
- declare function main(): Promise<void>;
62
+ declare function main(options?: FetchContentOptions): Promise<void>;
52
63
  export { main as fetchLeadCMSContent };
53
64
  export { findAndDeleteContentFile };
54
65
  export { buildContentIdIndex, deleteContentFilesById, extractContentId };
@@ -1 +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,EAQL,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAa9B,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,iBAAiB;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAuSD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEnD;;;;GAIG;AACH,iBAAe,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqCvE;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU7D;AAED;;;GAGG;AACH,iBAAe,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezF;AAED;;;;;;GAMG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjF;AAED,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA4QnC;AAGD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAGvC,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;AAMzE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC"}
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,EAQL,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAUD,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,iBAAiB;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAuSD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEnD;;;;GAIG;AACH,iBAAe,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqCvE;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU7D;AAED;;;GAGG;AACH,iBAAe,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezF;AAED;;;;;;GAMG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjF;AAED,iBAAe,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+QpE;AAGD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAGvC,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;AAMzE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC"}
@@ -6,9 +6,10 @@ import { downloadMediaFileDirect, leadCMSUrl, leadCMSApiKey, defaultLanguage, CO
6
6
  import { saveContentFile, transformRemoteToLocalFormat } from "../lib/content-transformation.js";
7
7
  import { threeWayMerge, threeWayMergeJson, isLocallyModified } from "../lib/content-merge.js";
8
8
  import { getConfig } from "../lib/config.js";
9
+ import { logger } from "../lib/logger.js";
9
10
  // Add axios request/response interceptors for debugging
10
11
  axios.interceptors.request.use((config) => {
11
- console.log(`[AXIOS REQUEST] ${config.method?.toUpperCase()} ${config.url}`);
12
+ logger.verbose(`[AXIOS REQUEST] ${config.method?.toUpperCase()} ${config.url}`);
12
13
  // Mask the Authorization header for security
13
14
  const maskedHeaders = { ...config.headers };
14
15
  if (maskedHeaders.Authorization && typeof maskedHeaders.Authorization === "string") {
@@ -70,7 +71,7 @@ async function readSyncToken() {
70
71
  return { token, migrated: false };
71
72
  const legacy = await readFileOrUndefined(LEGACY_SYNC_TOKEN_PATH);
72
73
  if (legacy) {
73
- console.log(`[SYNC] Migrating content sync token from legacy location`);
74
+ logger.verbose(`[SYNC] Migrating content sync token from legacy location`);
74
75
  return { token: legacy, migrated: true };
75
76
  }
76
77
  return { token: undefined, migrated: false };
@@ -94,7 +95,7 @@ async function readMediaSyncToken() {
94
95
  return { token, migrated: false };
95
96
  const legacy = await readFileOrUndefined(LEGACY_MEDIA_SYNC_TOKEN_PATH);
96
97
  if (legacy) {
97
- console.log(`[SYNC] Migrating media sync token from legacy location`);
98
+ logger.verbose(`[SYNC] Migrating media sync token from legacy location`);
98
99
  return { token: legacy, migrated: true };
99
100
  }
100
101
  return { token: undefined, migrated: false };
@@ -110,8 +111,8 @@ async function cleanupLegacyMediaSyncToken() {
110
111
  await unlinkSafe(LEGACY_MEDIA_SYNC_TOKEN_PATH);
111
112
  }
112
113
  async function fetchContentSync(syncToken) {
113
- console.log(`[FETCH_CONTENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
114
- console.log(`[FETCH_CONTENT_SYNC] Fetching public content (no authentication)`);
114
+ logger.verbose(`[FETCH_CONTENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
115
+ logger.verbose(`[FETCH_CONTENT_SYNC] Fetching public content (no authentication)`);
115
116
  let allItems = [];
116
117
  let allDeleted = [];
117
118
  let allBaseItems = {};
@@ -126,17 +127,17 @@ async function fetchContentSync(syncToken) {
126
127
  if (syncToken) {
127
128
  url.searchParams.set("includeBase", "true");
128
129
  }
129
- console.log(`[FETCH_CONTENT_SYNC] Page ${page}, URL: ${url.toString()}`);
130
+ logger.verbose(`[FETCH_CONTENT_SYNC] Page ${page}, URL: ${url.toString()}`);
130
131
  try {
131
132
  // SECURITY: Never send API key for read operations
132
133
  // Content sync should only return public data
133
134
  const res = await axios.get(url.toString());
134
135
  if (res.status === 204) {
135
- console.log(`[FETCH_CONTENT_SYNC] Got 204 No Content - ending sync`);
136
+ logger.verbose(`[FETCH_CONTENT_SYNC] Got 204 No Content - ending sync`);
136
137
  break;
137
138
  }
138
139
  const data = res.data;
139
- console.log(`[FETCH_CONTENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
140
+ logger.verbose(`[FETCH_CONTENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
140
141
  if (data.items && Array.isArray(data.items))
141
142
  allItems.push(...data.items);
142
143
  if (data.deleted && Array.isArray(data.deleted)) {
@@ -145,13 +146,13 @@ async function fetchContentSync(syncToken) {
145
146
  // Collect base items for three-way merge support
146
147
  if (data.baseItems && typeof data.baseItems === 'object') {
147
148
  Object.assign(allBaseItems, data.baseItems);
148
- console.log(`[FETCH_CONTENT_SYNC] Page ${page} - Got ${Object.keys(data.baseItems).length} base items for merge`);
149
+ logger.verbose(`[FETCH_CONTENT_SYNC] Page ${page} - Got ${Object.keys(data.baseItems).length} base items for merge`);
149
150
  }
150
151
  const newSyncToken = res.headers["x-next-sync-token"] || token;
151
- console.log(`[FETCH_CONTENT_SYNC] Next sync token: ${newSyncToken}`);
152
+ logger.verbose(`[FETCH_CONTENT_SYNC] Next sync token: ${newSyncToken}`);
152
153
  if (!newSyncToken || newSyncToken === token) {
153
154
  nextSyncToken = newSyncToken || token;
154
- console.log(`[FETCH_CONTENT_SYNC] No new sync token - ending sync`);
155
+ logger.verbose(`[FETCH_CONTENT_SYNC] No new sync token - ending sync`);
155
156
  break;
156
157
  }
157
158
  nextSyncToken = newSyncToken;
@@ -163,7 +164,7 @@ async function fetchContentSync(syncToken) {
163
164
  throw error;
164
165
  }
165
166
  }
166
- console.log(`[FETCH_CONTENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}, base items: ${Object.keys(allBaseItems).length}`);
167
+ logger.verbose(`[FETCH_CONTENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}, base items: ${Object.keys(allBaseItems).length}`);
167
168
  return {
168
169
  items: allItems,
169
170
  deleted: allDeleted,
@@ -172,8 +173,8 @@ async function fetchContentSync(syncToken) {
172
173
  };
173
174
  }
174
175
  async function fetchMediaSync(syncToken) {
175
- console.log(`[FETCH_MEDIA_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
176
- console.log(`[FETCH_MEDIA_SYNC] Fetching public media (no authentication)`);
176
+ logger.verbose(`[FETCH_MEDIA_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
177
+ logger.verbose(`[FETCH_MEDIA_SYNC] Fetching public media (no authentication)`);
177
178
  let allItems = [];
178
179
  let allDeleted = [];
179
180
  let token = syncToken || "";
@@ -183,27 +184,27 @@ async function fetchMediaSync(syncToken) {
183
184
  const url = new URL("/api/media/sync", leadCMSUrl);
184
185
  url.searchParams.set("filter[limit]", "100");
185
186
  url.searchParams.set("syncToken", token);
186
- console.log(`[FETCH_MEDIA_SYNC] Page ${page}, URL: ${url.toString()}`);
187
+ logger.verbose(`[FETCH_MEDIA_SYNC] Page ${page}, URL: ${url.toString()}`);
187
188
  try {
188
189
  // SECURITY: Never send API key for read operations
189
190
  // Media sync should only return public files
190
191
  const res = await axios.get(url.toString());
191
192
  if (res.status === 204) {
192
- console.log(`[FETCH_MEDIA_SYNC] Got 204 No Content - ending sync`);
193
+ logger.verbose(`[FETCH_MEDIA_SYNC] Got 204 No Content - ending sync`);
193
194
  break;
194
195
  }
195
196
  const data = res.data;
196
- console.log(`[FETCH_MEDIA_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
197
+ logger.verbose(`[FETCH_MEDIA_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
197
198
  if (data.items && Array.isArray(data.items))
198
199
  allItems.push(...data.items);
199
200
  if (data.deleted && Array.isArray(data.deleted)) {
200
201
  allDeleted.push(...data.deleted);
201
202
  }
202
203
  const newSyncToken = res.headers["x-next-sync-token"] || token;
203
- console.log(`[FETCH_MEDIA_SYNC] Next sync token: ${newSyncToken}`);
204
+ logger.verbose(`[FETCH_MEDIA_SYNC] Next sync token: ${newSyncToken}`);
204
205
  if (!newSyncToken || newSyncToken === token) {
205
206
  nextSyncToken = newSyncToken || token;
206
- console.log(`[FETCH_MEDIA_SYNC] No new sync token - ending sync`);
207
+ logger.verbose(`[FETCH_MEDIA_SYNC] No new sync token - ending sync`);
207
208
  break;
208
209
  }
209
210
  nextSyncToken = newSyncToken;
@@ -215,7 +216,7 @@ async function fetchMediaSync(syncToken) {
215
216
  throw error;
216
217
  }
217
218
  }
218
- console.log(`[FETCH_MEDIA_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
219
+ logger.verbose(`[FETCH_MEDIA_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
219
220
  return {
220
221
  items: allItems,
221
222
  deleted: allDeleted,
@@ -315,7 +316,7 @@ async function deleteContentFilesById(index, idStr) {
315
316
  for (const filePath of paths) {
316
317
  try {
317
318
  await fs.unlink(filePath);
318
- console.log(`Deleted: ${filePath}`);
319
+ logger.verbose(`Deleted: ${filePath}`);
319
320
  }
320
321
  catch (err) {
321
322
  if (err.code !== 'ENOENT') {
@@ -349,7 +350,7 @@ async function findAndDeleteContentFile(dir, idStr) {
349
350
  const jsonRegex = new RegExp(`\\"id\\"\\s*:\\s*['\"]?${idStr}['\"]?\\s*(,|\\}|\\n|$)`);
350
351
  if (yamlRegex.test(content) || jsonRegex.test(content)) {
351
352
  await fs.unlink(fullPath);
352
- console.log(`Deleted: ${fullPath}`);
353
+ logger.verbose(`Deleted: ${fullPath}`);
353
354
  }
354
355
  }
355
356
  catch { }
@@ -362,27 +363,28 @@ async function findAndDeleteContentFile(dir, idStr) {
362
363
  }
363
364
  }
364
365
  }
365
- async function main() {
366
+ async function main(options = {}) {
367
+ const { forceOverwrite = false } = options;
366
368
  // Log environment configuration for debugging
367
- console.log(`[ENV] LeadCMS URL: ${leadCMSUrl}`);
368
- console.log(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? `${leadCMSApiKey.substring(0, 8)}...` : "NOT_SET"}`);
369
- console.log(`[ENV] Default Language: ${defaultLanguage}`);
370
- console.log(`[ENV] Content Dir: ${CONTENT_DIR}`);
371
- console.log(`[ENV] Media Dir: ${MEDIA_DIR}`);
369
+ logger.verbose(`[ENV] LeadCMS URL: ${leadCMSUrl}`);
370
+ logger.verbose(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? `${leadCMSApiKey.substring(0, 8)}...` : "NOT_SET"}`);
371
+ logger.verbose(`[ENV] Default Language: ${defaultLanguage}`);
372
+ logger.verbose(`[ENV] Content Dir: ${CONTENT_DIR}`);
373
+ logger.verbose(`[ENV] Media Dir: ${MEDIA_DIR}`);
372
374
  // Check supported entities
373
- console.log(`\n🔍 Checking CMS configuration...`);
375
+ logger.verbose(`\n🔍 Checking CMS configuration...`);
374
376
  const { content: contentSupported, media: mediaSupported } = await fetchCMSConfigForEntities();
375
377
  if (!contentSupported && !mediaSupported) {
376
- console.log(`⏭️ Neither Content nor Media entities are supported by this LeadCMS instance - skipping sync`);
378
+ logger.verbose(`⏭️ Neither Content nor Media entities are supported by this LeadCMS instance - skipping sync`);
377
379
  return;
378
380
  }
379
381
  if (!contentSupported) {
380
- console.log(`⏭️ Content entity not supported - skipping content sync`);
382
+ logger.verbose(`⏭️ Content entity not supported - skipping content sync`);
381
383
  }
382
384
  if (!mediaSupported) {
383
- console.log(`⏭️ Media entity not supported - skipping media sync`);
385
+ logger.verbose(`⏭️ Media entity not supported - skipping media sync`);
384
386
  }
385
- console.log(`✅ Proceeding with sync\n`);
387
+ logger.verbose(`✅ Proceeding with sync\n`);
386
388
  // Only create directories for supported entity types
387
389
  if (contentSupported) {
388
390
  await fs.mkdir(CONTENT_DIR, { recursive: true });
@@ -399,11 +401,11 @@ async function main() {
399
401
  if (contentSupported) {
400
402
  try {
401
403
  if (lastSyncToken) {
402
- console.log(`Syncing content from LeadCMS using sync token: ${lastSyncToken}`);
404
+ logger.verbose(`Syncing content from LeadCMS using sync token: ${lastSyncToken}`);
403
405
  ({ items, deleted, baseItems, nextSyncToken } = await fetchContentSync(lastSyncToken));
404
406
  }
405
407
  else {
406
- console.log("No content sync token found. Doing full fetch from LeadCMS...");
408
+ logger.verbose("No content sync token found. Doing full fetch from LeadCMS...");
407
409
  ({ items, deleted, baseItems, nextSyncToken } = await fetchContentSync(undefined));
408
410
  }
409
411
  }
@@ -419,11 +421,11 @@ async function main() {
419
421
  if (mediaSupported) {
420
422
  try {
421
423
  if (lastMediaSyncToken) {
422
- console.log(`Syncing media from LeadCMS using sync token: ${lastMediaSyncToken}`);
424
+ logger.verbose(`Syncing media from LeadCMS using sync token: ${lastMediaSyncToken}`);
423
425
  ({ items: mediaItems, deleted: mediaDeleted, nextSyncToken: nextMediaSyncToken } = await fetchMediaSync(lastMediaSyncToken));
424
426
  }
425
427
  else {
426
- console.log("No media sync token found. Doing full fetch from LeadCMS...");
428
+ logger.verbose("No media sync token found. Doing full fetch from LeadCMS...");
427
429
  ({ items: mediaItems, deleted: mediaDeleted, nextSyncToken: nextMediaSyncToken } = await fetchMediaSync(undefined));
428
430
  }
429
431
  }
@@ -436,8 +438,8 @@ async function main() {
436
438
  console.warn(`[MAIN] Continuing without media sync...`);
437
439
  }
438
440
  }
439
- console.log(`\x1b[32mFetched ${items.length} content items, ${deleted.length} deleted.\x1b[0m`);
440
- console.log(`\x1b[32mFetched ${mediaItems.length} media items, ${mediaDeleted.length} deleted.\x1b[0m`);
441
+ logger.verbose(`Fetched ${items.length} content items, ${deleted.length} deleted.\x1b[0m`);
442
+ logger.verbose(`Fetched ${mediaItems.length} media items, ${mediaDeleted.length} deleted.\x1b[0m`);
441
443
  // Build an ID→filepath index once instead of walking the tree per item.
442
444
  // This turns O(items × files) disk reads into O(files + items).
443
445
  const contentIdIndex = (items.length > 0 || deleted.length > 0)
@@ -483,8 +485,9 @@ async function main() {
483
485
  await deleteContentFilesById(contentIdIndex, idStr);
484
486
  }
485
487
  // Try three-way merge if we have a base version and local file exists
488
+ // In forceOverwrite mode (watch/SSE), skip merge entirely to avoid conflicts
486
489
  const baseContent = idStr ? baseItems[idStr] : undefined;
487
- if (localContent && baseContent && hasBaseItems) {
490
+ if (!forceOverwrite && localContent && baseContent && hasBaseItems) {
488
491
  // Transform both base and remote to local file format for comparison
489
492
  const baseTransformed = await transformRemoteToLocalFormat(baseContent, contentTypeMap);
490
493
  const remoteTransformed = await transformRemoteToLocalFormat(content, contentTypeMap);
@@ -517,7 +520,7 @@ async function main() {
517
520
  }
518
521
  }
519
522
  else {
520
- // No base available or file is new — overwrite (current behavior)
523
+ // No base available, file is new, or forceOverwrite — overwrite with remote
521
524
  await saveContentFile({ content, typeMap, contentDir: CONTENT_DIR });
522
525
  if (localContent) {
523
526
  overwrittenCount++;
@@ -546,7 +549,7 @@ async function main() {
546
549
  }
547
550
  // Handle media sync results
548
551
  if (mediaItems.length > 0) {
549
- console.log(`\nProcessing media changes...`);
552
+ logger.verbose(`\nProcessing media changes...`);
550
553
  // Download new/updated media files
551
554
  let downloaded = 0;
552
555
  for (const mediaItem of mediaItems) {
@@ -555,7 +558,7 @@ async function main() {
555
558
  const destPath = path.join(MEDIA_DIR, relPath);
556
559
  const didDownload = await downloadMediaFileDirect(mediaItem.location, destPath, leadCMSUrl || "", leadCMSApiKey || "");
557
560
  if (didDownload) {
558
- console.log(`Downloaded: ${mediaItem.location} -> ${destPath}`);
561
+ logger.verbose(`Downloaded: ${mediaItem.location} -> ${destPath}`);
559
562
  downloaded++;
560
563
  }
561
564
  }
@@ -576,7 +579,7 @@ async function main() {
576
579
  const fullPath = path.join(MEDIA_DIR, relPath);
577
580
  try {
578
581
  await fs.unlink(fullPath);
579
- console.log(`Deleted media: ${fullPath}`);
582
+ logger.verbose(`Deleted media: ${fullPath}`);
580
583
  removedCount++;
581
584
  }
582
585
  catch (err) {
@@ -590,20 +593,20 @@ async function main() {
590
593
  // Save new sync tokens
591
594
  if (nextSyncToken) {
592
595
  await writeSyncToken(nextSyncToken);
593
- console.log(`Content sync token updated: ${nextSyncToken}`);
596
+ logger.verbose(`Content sync token updated: ${nextSyncToken}`);
594
597
  }
595
598
  if (nextMediaSyncToken) {
596
599
  await writeMediaSyncToken(nextMediaSyncToken);
597
- console.log(`Media sync token updated: ${nextMediaSyncToken}`);
600
+ logger.verbose(`Media sync token updated: ${nextMediaSyncToken}`);
598
601
  }
599
602
  // Clean up legacy sync tokens after a successful pull
600
603
  if (contentTokenMigrated) {
601
604
  await cleanupLegacySyncToken();
602
- console.log(`[SYNC] Removed legacy content sync token`);
605
+ logger.verbose(`[SYNC] Removed legacy content sync token`);
603
606
  }
604
607
  if (mediaTokenMigrated) {
605
608
  await cleanupLegacyMediaSyncToken();
606
- console.log(`[SYNC] Removed legacy media sync token`);
609
+ logger.verbose(`[SYNC] Removed legacy media sync token`);
607
610
  }
608
611
  }
609
612
  // Export the main function so it can be imported by other modules