@leadcms/sdk 3.3.12 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +2 -1
  2. package/dist/cli/bin/content-status-args.d.ts +7 -0
  3. package/dist/cli/bin/content-status-args.d.ts.map +1 -0
  4. package/dist/cli/bin/content-status-args.js +27 -0
  5. package/dist/cli/bin/content-status-args.js.map +1 -0
  6. package/dist/cli/bin/login.js +1 -1
  7. package/dist/cli/bin/login.js.map +1 -1
  8. package/dist/cli/bin/pull-all.js +4 -2
  9. package/dist/cli/bin/pull-all.js.map +1 -1
  10. package/dist/cli/bin/pull-comments.js +3 -1
  11. package/dist/cli/bin/pull-comments.js.map +1 -1
  12. package/dist/cli/bin/pull-content.js +6 -2
  13. package/dist/cli/bin/pull-content.js.map +1 -1
  14. package/dist/cli/bin/pull-email-templates.js +3 -1
  15. package/dist/cli/bin/pull-email-templates.js.map +1 -1
  16. package/dist/cli/bin/pull-media.js +3 -1
  17. package/dist/cli/bin/pull-media.js.map +1 -1
  18. package/dist/cli/bin/pull-settings.js +2 -0
  19. package/dist/cli/bin/pull-settings.js.map +1 -1
  20. package/dist/cli/bin/push-all.js +12 -1
  21. package/dist/cli/bin/push-all.js.map +1 -1
  22. package/dist/cli/bin/push-comments.d.ts +6 -0
  23. package/dist/cli/bin/push-comments.d.ts.map +1 -0
  24. package/dist/cli/bin/push-comments.js +35 -0
  25. package/dist/cli/bin/push-comments.js.map +1 -0
  26. package/dist/cli/bin/push-content.js +7 -4
  27. package/dist/cli/bin/push-content.js.map +1 -1
  28. package/dist/cli/bin/push-email-templates.js +3 -1
  29. package/dist/cli/bin/push-email-templates.js.map +1 -1
  30. package/dist/cli/bin/push-media.js +2 -0
  31. package/dist/cli/bin/push-media.js.map +1 -1
  32. package/dist/cli/bin/push-settings.js +2 -0
  33. package/dist/cli/bin/push-settings.js.map +1 -1
  34. package/dist/cli/bin/push.js +5 -3
  35. package/dist/cli/bin/push.js.map +1 -1
  36. package/dist/cli/bin/remote-flag.d.ts +17 -0
  37. package/dist/cli/bin/remote-flag.d.ts.map +1 -0
  38. package/dist/cli/bin/remote-flag.js +50 -0
  39. package/dist/cli/bin/remote-flag.js.map +1 -0
  40. package/dist/cli/bin/remote.d.ts +14 -0
  41. package/dist/cli/bin/remote.d.ts.map +1 -0
  42. package/dist/cli/bin/remote.js +291 -0
  43. package/dist/cli/bin/remote.js.map +1 -0
  44. package/dist/cli/bin/status-all.js +67 -4
  45. package/dist/cli/bin/status-all.js.map +1 -1
  46. package/dist/cli/bin/status-comments.d.ts +6 -0
  47. package/dist/cli/bin/status-comments.d.ts.map +1 -0
  48. package/dist/cli/bin/status-comments.js +30 -0
  49. package/dist/cli/bin/status-comments.js.map +1 -0
  50. package/dist/cli/bin/status-content.js +6 -2
  51. package/dist/cli/bin/status-content.js.map +1 -1
  52. package/dist/cli/bin/status-email-templates.js +3 -1
  53. package/dist/cli/bin/status-email-templates.js.map +1 -1
  54. package/dist/cli/bin/status-media.js +2 -0
  55. package/dist/cli/bin/status-media.js.map +1 -1
  56. package/dist/cli/bin/status-settings.js +2 -0
  57. package/dist/cli/bin/status-settings.js.map +1 -1
  58. package/dist/cli/bin/status.js +5 -2
  59. package/dist/cli/bin/status.js.map +1 -1
  60. package/dist/cli/bin/watch.js +6 -3
  61. package/dist/cli/bin/watch.js.map +1 -1
  62. package/dist/cli/index.js +65 -10
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/index.js +0 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/lib/auth.d.ts +1 -1
  67. package/dist/lib/auth.d.ts.map +1 -1
  68. package/dist/lib/auth.js +5 -5
  69. package/dist/lib/auth.js.map +1 -1
  70. package/dist/lib/cms.d.ts +7 -7
  71. package/dist/lib/cms.d.ts.map +1 -1
  72. package/dist/lib/cms.js +41 -7
  73. package/dist/lib/cms.js.map +1 -1
  74. package/dist/lib/comment-types.d.ts +4 -0
  75. package/dist/lib/comment-types.d.ts.map +1 -1
  76. package/dist/lib/config.d.ts +6 -1
  77. package/dist/lib/config.d.ts.map +1 -1
  78. package/dist/lib/config.js +37 -8
  79. package/dist/lib/config.js.map +1 -1
  80. package/dist/lib/content-merge.d.ts.map +1 -1
  81. package/dist/lib/content-merge.js +102 -19
  82. package/dist/lib/content-merge.js.map +1 -1
  83. package/dist/lib/content-transformation.d.ts +5 -0
  84. package/dist/lib/content-transformation.d.ts.map +1 -1
  85. package/dist/lib/content-transformation.js +49 -2
  86. package/dist/lib/content-transformation.js.map +1 -1
  87. package/dist/lib/data-service.d.ts +47 -1
  88. package/dist/lib/data-service.d.ts.map +1 -1
  89. package/dist/lib/data-service.js +143 -0
  90. package/dist/lib/data-service.js.map +1 -1
  91. package/dist/lib/remote-context.d.ts +98 -0
  92. package/dist/lib/remote-context.d.ts.map +1 -0
  93. package/dist/lib/remote-context.js +297 -0
  94. package/dist/lib/remote-context.js.map +1 -0
  95. package/dist/scripts/init-leadcms.d.ts.map +1 -1
  96. package/dist/scripts/init-leadcms.js +127 -15
  97. package/dist/scripts/init-leadcms.js.map +1 -1
  98. package/dist/scripts/leadcms-helpers.d.ts +16 -5
  99. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  100. package/dist/scripts/leadcms-helpers.js +31 -8
  101. package/dist/scripts/leadcms-helpers.js.map +1 -1
  102. package/dist/scripts/login-leadcms.d.ts +4 -1
  103. package/dist/scripts/login-leadcms.d.ts.map +1 -1
  104. package/dist/scripts/login-leadcms.js +45 -6
  105. package/dist/scripts/login-leadcms.js.map +1 -1
  106. package/dist/scripts/pull-all.d.ts +14 -6
  107. package/dist/scripts/pull-all.d.ts.map +1 -1
  108. package/dist/scripts/pull-all.js +86 -33
  109. package/dist/scripts/pull-all.js.map +1 -1
  110. package/dist/scripts/pull-comments.d.ts +3 -0
  111. package/dist/scripts/pull-comments.d.ts.map +1 -1
  112. package/dist/scripts/pull-comments.js +4 -4
  113. package/dist/scripts/pull-comments.js.map +1 -1
  114. package/dist/scripts/pull-content.d.ts +14 -0
  115. package/dist/scripts/pull-content.d.ts.map +1 -1
  116. package/dist/scripts/pull-content.js +85 -8
  117. package/dist/scripts/pull-content.js.map +1 -1
  118. package/dist/scripts/pull-email-templates.d.ts +3 -0
  119. package/dist/scripts/pull-email-templates.d.ts.map +1 -1
  120. package/dist/scripts/pull-email-templates.js +4 -4
  121. package/dist/scripts/pull-email-templates.js.map +1 -1
  122. package/dist/scripts/{fetch-leadcms-comments.d.ts → pull-leadcms-comments.d.ts} +10 -4
  123. package/dist/scripts/pull-leadcms-comments.d.ts.map +1 -0
  124. package/dist/scripts/{fetch-leadcms-comments.js → pull-leadcms-comments.js} +62 -32
  125. package/dist/scripts/pull-leadcms-comments.js.map +1 -0
  126. package/dist/scripts/{fetch-leadcms-content.d.ts → pull-leadcms-content.d.ts} +13 -19
  127. package/dist/scripts/pull-leadcms-content.d.ts.map +1 -0
  128. package/dist/scripts/{fetch-leadcms-content.js → pull-leadcms-content.js} +121 -250
  129. package/dist/scripts/pull-leadcms-content.js.map +1 -0
  130. package/dist/scripts/{fetch-leadcms-email-templates.d.ts → pull-leadcms-email-templates.d.ts} +5 -4
  131. package/dist/scripts/pull-leadcms-email-templates.d.ts.map +1 -0
  132. package/dist/scripts/{fetch-leadcms-email-templates.js → pull-leadcms-email-templates.js} +89 -11
  133. package/dist/scripts/pull-leadcms-email-templates.js.map +1 -0
  134. package/dist/scripts/pull-leadcms-media.d.ts +32 -0
  135. package/dist/scripts/pull-leadcms-media.d.ts.map +1 -0
  136. package/dist/scripts/pull-leadcms-media.js +229 -0
  137. package/dist/scripts/pull-leadcms-media.js.map +1 -0
  138. package/dist/scripts/pull-media.d.ts +4 -1
  139. package/dist/scripts/pull-media.d.ts.map +1 -1
  140. package/dist/scripts/pull-media.js +4 -4
  141. package/dist/scripts/pull-media.js.map +1 -1
  142. package/dist/scripts/push-comments.d.ts +48 -0
  143. package/dist/scripts/push-comments.d.ts.map +1 -0
  144. package/dist/scripts/push-comments.js +433 -0
  145. package/dist/scripts/push-comments.js.map +1 -0
  146. package/dist/scripts/push-email-templates.d.ts +6 -1
  147. package/dist/scripts/push-email-templates.d.ts.map +1 -1
  148. package/dist/scripts/push-email-templates.js +96 -21
  149. package/dist/scripts/push-email-templates.js.map +1 -1
  150. package/dist/scripts/push-leadcms-content.d.ts +24 -8
  151. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  152. package/dist/scripts/push-leadcms-content.js +192 -56
  153. package/dist/scripts/push-leadcms-content.js.map +1 -1
  154. package/dist/scripts/sse-watcher.d.ts +9 -8
  155. package/dist/scripts/sse-watcher.d.ts.map +1 -1
  156. package/dist/scripts/sse-watcher.js +59 -52
  157. package/dist/scripts/sse-watcher.js.map +1 -1
  158. package/leadcms.config.json.sample +12 -1
  159. package/package.json +2 -3
  160. package/dist/scripts/fetch-leadcms-comments.d.ts.map +0 -1
  161. package/dist/scripts/fetch-leadcms-comments.js.map +0 -1
  162. package/dist/scripts/fetch-leadcms-content.d.ts.map +0 -1
  163. package/dist/scripts/fetch-leadcms-content.js.map +0 -1
  164. package/dist/scripts/fetch-leadcms-email-templates.d.ts.map +0 -1
  165. package/dist/scripts/fetch-leadcms-email-templates.js.map +0 -1
@@ -3,9 +3,12 @@
3
3
  * Pull only comments from LeadCMS (no content, no media)
4
4
  */
5
5
  import "dotenv/config";
6
+ import type { RemoteContext } from "../lib/remote-context.js";
6
7
  interface PullCommentsOptions {
7
8
  /** When true, delete all local comment files and sync tokens before pulling, effectively doing a fresh pull. */
8
9
  reset?: boolean;
10
+ /** Optional remote context for multi-remote sync token isolation. */
11
+ remoteContext?: RemoteContext;
9
12
  }
10
13
  /**
11
14
  * Main function
@@ -1 +1 @@
1
- {"version":3,"file":"pull-comments.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-comments.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAQvB,UAAU,mBAAmB;IAC3B,gHAAgH;IAChH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCpE;AAKD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"pull-comments.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-comments.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,UAAU,mBAAmB;IAC3B,gHAAgH;IAChH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCpE;AAKD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC"}
@@ -6,19 +6,19 @@ import "dotenv/config";
6
6
  import axios from "axios";
7
7
  import { leadCMSUrl } from "./leadcms-helpers.js";
8
8
  import { setCMSConfig, isCommentsSupported } from "../lib/cms-config-types.js";
9
- import { fetchLeadCMSComments } from "./fetch-leadcms-comments.js";
9
+ import { pullLeadCMSComments } from "./pull-leadcms-comments.js";
10
10
  import { resetCommentsState } from "./pull-all.js";
11
11
  import { logger } from "../lib/logger.js";
12
12
  /**
13
13
  * Main function
14
14
  */
15
15
  async function main(options = {}) {
16
- const { reset } = options;
16
+ const { reset, remoteContext } = options;
17
17
  console.log(`\nšŸ’¬ LeadCMS Pull Comments\n`);
18
18
  // Handle --reset flag: clear comments before pulling
19
19
  if (reset) {
20
20
  console.log(`šŸ”„ Resetting comments state...\n`);
21
- await resetCommentsState();
21
+ await resetCommentsState(remoteContext);
22
22
  }
23
23
  // Check if comments are supported
24
24
  try {
@@ -39,7 +39,7 @@ async function main(options = {}) {
39
39
  console.warn(`āš ļø Assuming comments are supported (backward compatibility)\n`);
40
40
  }
41
41
  // Fetch comments
42
- await fetchLeadCMSComments();
42
+ await pullLeadCMSComments(remoteContext);
43
43
  console.log(`\n✨ Comments pull completed!\n`);
44
44
  }
45
45
  // Note: CLI execution moved to src/cli/bin/pull-comments.ts
@@ -1 +1 @@
1
- {"version":3,"file":"pull-comments.js","sourceRoot":"","sources":["../../src/scripts/pull-comments.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAO1C;;GAEG;AACH,KAAK,UAAU,IAAI,CAAC,UAA+B,EAAE;IACnD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,qDAAqD;IACrD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,kBAAkB,EAAE,CAAC;IAC7B,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACjF,CAAC;IAED,iBAAiB;IACjB,MAAM,oBAAoB,EAAE,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC;AAED,4DAA4D;AAC5D,+DAA+D;AAE/D,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"pull-comments.js","sourceRoot":"","sources":["../../src/scripts/pull-comments.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAU1C;;GAEG;AACH,KAAK,UAAU,IAAI,CAAC,UAA+B,EAAE;IACnD,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,qDAAqD;IACrD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACjF,CAAC;IAED,iBAAiB;IACjB,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC;AAED,4DAA4D;AAC5D,+DAA+D;AAE/D,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAC"}
@@ -3,14 +3,28 @@
3
3
  * Pull only content from LeadCMS (no media, no comments)
4
4
  */
5
5
  import "dotenv/config";
6
+ import { type ContentOperations, type MatchOperation } from "./push-leadcms-content.js";
7
+ import type { RemoteContext } from "../lib/remote-context.js";
6
8
  interface PullContentOptions {
7
9
  targetId?: string;
8
10
  targetSlug?: string;
11
+ statusFilter?: string[];
9
12
  /** When true, delete all local content files and sync tokens before pulling, effectively doing a fresh pull. */
10
13
  reset?: boolean;
11
14
  /** When true, skip three-way merge and always overwrite local files with remote content. */
12
15
  force?: boolean;
16
+ /** Remote context for multi-remote support. */
17
+ remoteContext?: RemoteContext;
13
18
  }
19
+ interface PullTargetItem {
20
+ id: number;
21
+ slug?: string;
22
+ }
23
+ interface PullTargetResult {
24
+ items: PullTargetItem[];
25
+ skipped: MatchOperation[];
26
+ }
27
+ export declare function getPullTargetsFromOperations(operations: ContentOperations): PullTargetResult;
14
28
  /**
15
29
  * Main function
16
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pull-content.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAWvB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gHAAgH;IAChH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFnE;AAKD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"pull-content.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAUvB,OAAO,EAAiD,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACvI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gHAAgH;IAChH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,iBAAiB,GAAG,gBAAgB,CAiC5F;AAoDD;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FnE;AAKD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC"}
@@ -6,25 +6,102 @@ import "dotenv/config";
6
6
  import axios from "axios";
7
7
  import { leadCMSUrl } from "./leadcms-helpers.js";
8
8
  import { setCMSConfig, isContentSupported } from "../lib/cms-config-types.js";
9
- import { fetchLeadCMSContent } from "./fetch-leadcms-content.js";
9
+ import { pullLeadCMSContent } from "./pull-leadcms-content.js";
10
10
  import { leadCMSDataService } from "../lib/data-service.js";
11
11
  import { saveContentFile } from "../lib/content-transformation.js";
12
12
  import { CONTENT_DIR, fetchContentTypes } from "./leadcms-helpers.js";
13
13
  import { resetContentState } from "./pull-all.js";
14
14
  import { logger } from "../lib/logger.js";
15
+ import { filterContentOperations, getContentStatusData } from "./push-leadcms-content.js";
16
+ export function getPullTargetsFromOperations(operations) {
17
+ const items = [];
18
+ const skipped = [];
19
+ const seenIds = new Set();
20
+ for (const operation of operations.create) {
21
+ skipped.push(operation);
22
+ }
23
+ const remoteBackedOperations = [
24
+ ...operations.update,
25
+ ...operations.rename,
26
+ ...operations.typeChange,
27
+ ...operations.conflict,
28
+ ...operations.delete,
29
+ ];
30
+ for (const operation of remoteBackedOperations) {
31
+ const id = operation.remote?.id;
32
+ if (typeof id !== 'number') {
33
+ skipped.push(operation);
34
+ continue;
35
+ }
36
+ if (seenIds.has(id)) {
37
+ continue;
38
+ }
39
+ seenIds.add(id);
40
+ items.push({ id, slug: operation.remote?.slug || operation.local.slug });
41
+ }
42
+ return { items, skipped };
43
+ }
44
+ async function pullFilteredContent(targetId, targetSlug, statusFilter) {
45
+ const hasFilter = !!(targetId || targetSlug || (statusFilter && statusFilter.length > 0));
46
+ if (!hasFilter) {
47
+ return false;
48
+ }
49
+ const { operations } = await getContentStatusData({ showDelete: true });
50
+ const filteredOperations = filterContentOperations(operations, targetId, targetSlug, statusFilter);
51
+ const { items, skipped } = getPullTargetsFromOperations(filteredOperations);
52
+ if (items.length === 0) {
53
+ if (skipped.length > 0) {
54
+ console.log(`āš ļø ${skipped.length} matching local-only file(s) have no remote content to pull.`);
55
+ for (const operation of skipped) {
56
+ console.log(` - ${operation.local.slug}`);
57
+ }
58
+ }
59
+ else {
60
+ console.log(`āœ… No remote-backed content matched the requested filter.`);
61
+ }
62
+ return true;
63
+ }
64
+ console.log(`šŸŽÆ Pulling ${items.length} content item(s) from LeadCMS...`);
65
+ if (skipped.length > 0) {
66
+ console.log(`āš ļø Skipping ${skipped.length} local-only file(s) with no remote content to pull.`);
67
+ }
68
+ const typeMap = await fetchContentTypes();
69
+ for (const item of items) {
70
+ const content = await leadCMSDataService.getContentById(item.id);
71
+ if (!content) {
72
+ console.warn(`āš ļø Content not found for ID ${item.id}`);
73
+ continue;
74
+ }
75
+ await saveContentFile({
76
+ content,
77
+ typeMap,
78
+ contentDir: CONTENT_DIR,
79
+ });
80
+ console.log(`āœ… Pulled: ${content.slug} (${content.type})`);
81
+ }
82
+ console.log(`\n✨ Content pull completed!\n`);
83
+ return true;
84
+ }
15
85
  /**
16
86
  * Main function
17
87
  */
18
88
  async function main(options = {}) {
19
- const { targetId, targetSlug, reset, force } = options;
89
+ const { targetId, targetSlug, statusFilter, reset, force, remoteContext: remoteCtx } = options;
90
+ const effectiveUrl = remoteCtx?.url || leadCMSUrl;
20
91
  console.log(`\nšŸ“„ LeadCMS Pull Content\n`);
21
92
  // Handle --reset flag: clear content before pulling
22
93
  if (reset) {
23
94
  console.log(`šŸ”„ Resetting content state...\n`);
24
- await resetContentState();
95
+ await resetContentState(remoteCtx);
25
96
  }
26
- // If pulling specific content by ID or slug
27
- if (targetId || targetSlug) {
97
+ // If pulling targeted or filtered content
98
+ if (targetId || targetSlug || (statusFilter && statusFilter.length > 0)) {
99
+ if (statusFilter && statusFilter.length > 0) {
100
+ const handled = await pullFilteredContent(targetId, targetSlug, statusFilter);
101
+ if (handled) {
102
+ return;
103
+ }
104
+ }
28
105
  console.log(`šŸŽÆ Pulling specific content: ${targetId ? `ID ${targetId}` : `slug "${targetSlug}"`}`);
29
106
  try {
30
107
  let content = null;
@@ -69,7 +146,7 @@ async function main(options = {}) {
69
146
  // Check if content is supported
70
147
  try {
71
148
  logger.verbose(`šŸ” Checking CMS configuration...`);
72
- const configUrl = new URL('/api/config', leadCMSUrl).toString();
149
+ const configUrl = new URL('/api/config', effectiveUrl).toString();
73
150
  const response = await axios.get(configUrl, { timeout: 10000 });
74
151
  if (response.data) {
75
152
  setCMSConfig(response.data);
@@ -84,8 +161,8 @@ async function main(options = {}) {
84
161
  console.warn(`āš ļø Could not fetch CMS config: ${error.message}`);
85
162
  console.warn(`āš ļø Assuming content is supported (backward compatibility)\n`);
86
163
  }
87
- // Fetch content and media
88
- await fetchLeadCMSContent({ forceOverwrite: force });
164
+ // Fetch content only (no media)
165
+ await pullLeadCMSContent({ forceOverwrite: force, remoteContext: remoteCtx });
89
166
  console.log(`\n✨ Content pull completed!\n`);
90
167
  }
91
168
  // Note: CLI execution moved to src/cli/bin/pull-content.ts
@@ -1 +1 @@
1
- {"version":3,"file":"pull-content.js","sourceRoot":"","sources":["../../src/scripts/pull-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-content.js","sourceRoot":"","sources":["../../src/scripts/pull-content.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,13 @@
3
3
  * Pull email templates from LeadCMS
4
4
  */
5
5
  import "dotenv/config";
6
+ import type { RemoteContext } from "../lib/remote-context.js";
6
7
  interface PullEmailTemplatesOptions {
7
8
  targetId?: string;
8
9
  /** When true, delete all local email template files and sync token before pulling. */
9
10
  reset?: boolean;
11
+ /** Optional remote context for multi-remote sync token isolation. */
12
+ remoteContext?: RemoteContext;
10
13
  }
11
14
  declare function main(options?: PullEmailTemplatesOptions): Promise<void>;
12
15
  export { main as pullEmailTemplates };
@@ -1 +1 @@
1
- {"version":3,"file":"pull-email-templates.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-email-templates.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAQvB,UAAU,yBAAyB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,iBAAe,IAAI,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E1E;AAED,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"pull-email-templates.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-email-templates.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,UAAU,yBAAyB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,iBAAe,IAAI,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E1E;AAED,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,CAAC"}
@@ -6,15 +6,15 @@ import "dotenv/config";
6
6
  import axios from "axios";
7
7
  import { leadCMSUrl, leadCMSApiKey, EMAIL_TEMPLATES_DIR } from "./leadcms-helpers.js";
8
8
  import { setCMSConfig, isEmailTemplatesSupported } from "../lib/cms-config-types.js";
9
- import { fetchLeadCMSEmailTemplates, buildEmailTemplateIdIndex, deleteEmailTemplateFilesById, saveEmailTemplateFile } from "./fetch-leadcms-email-templates.js";
9
+ import { pullLeadCMSEmailTemplates, buildEmailTemplateIdIndex, deleteEmailTemplateFilesById, saveEmailTemplateFile } from "./pull-leadcms-email-templates.js";
10
10
  import { resetEmailTemplatesState } from "./pull-all.js";
11
11
  import { logger } from "../lib/logger.js";
12
12
  async function main(options = {}) {
13
- const { targetId, reset } = options;
13
+ const { targetId, reset, remoteContext } = options;
14
14
  console.log(`\nšŸ“§ LeadCMS Pull Email Templates\n`);
15
15
  if (reset) {
16
16
  console.log(`šŸ”„ Resetting email templates state...\n`);
17
- await resetEmailTemplatesState();
17
+ await resetEmailTemplatesState(remoteContext);
18
18
  }
19
19
  if (targetId) {
20
20
  const id = parseInt(targetId, 10);
@@ -72,7 +72,7 @@ async function main(options = {}) {
72
72
  console.warn(`āš ļø Could not fetch CMS config: ${error.message}`);
73
73
  console.warn(`āš ļø Assuming email templates are supported (backward compatibility)\n`);
74
74
  }
75
- await fetchLeadCMSEmailTemplates();
75
+ await pullLeadCMSEmailTemplates(remoteContext);
76
76
  console.log(`\n✨ Email templates pull completed!\n`);
77
77
  }
78
78
  export { main as pullEmailTemplates };
@@ -1 +1 @@
1
- {"version":3,"file":"pull-email-templates.js","sourceRoot":"","sources":["../../src/scripts/pull-email-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-email-templates.js","sourceRoot":"","sources":["../../src/scripts/pull-email-templates.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import "dotenv/config";
2
2
  import type { Comment, CommentSyncResult, StoredComment } from "../lib/comment-types.js";
3
+ import { type RemoteContext } from "../lib/remote-context.js";
4
+ /**
5
+ * Pull comments from LeadCMS sync endpoint
6
+ * Handles pagination automatically
7
+ */
8
+ declare function pullCommentSync(syncToken?: string): Promise<CommentSyncResult>;
3
9
  /**
4
10
  * Convert Comment to StoredComment by removing nested objects
5
11
  */
@@ -24,8 +30,8 @@ declare function groupCommentsByEntityAndLanguage(comments: Comment[]): Map<stri
24
30
  /**
25
31
  * Main function to sync comments from LeadCMS
26
32
  */
27
- export declare function main(): Promise<void>;
28
- export { main as fetchLeadCMSComments };
29
- export { loadCommentsForEntity, saveCommentsForEntity, groupCommentsByEntityAndLanguage, toStoredComment, deleteComment, };
33
+ export declare function main(remoteCtx?: RemoteContext): Promise<void>;
34
+ export { main as pullLeadCMSComments };
35
+ export { pullCommentSync, loadCommentsForEntity, saveCommentsForEntity, groupCommentsByEntityAndLanguage, toStoredComment, deleteComment, };
30
36
  export type { CommentSyncResult };
31
- //# sourceMappingURL=fetch-leadcms-comments.d.ts.map
37
+ //# sourceMappingURL=pull-leadcms-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-leadcms-comments.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-leadcms-comments.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAQvB,OAAO,KAAK,EACV,OAAO,EAEP,iBAAiB,EACjB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA4E7E;;;GAGG;AACH,iBAAe,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoF7E;AAED;;GAEG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAGxD;AAqBD;;GAEG;AACH,iBAAe,qBAAqB,CAClC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAS1B;AAED;;GAEG;AACH,iBAAe,qBAAqB,CAClC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,iBAAe,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC7D;AAgCD;;GAEG;AACH,iBAAS,gCAAgC,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAYrF;AA0BD;;GAEG;AACH,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGnE;AAGD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAMvC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,eAAe,EACf,aAAa,GACd,CAAC;AAGF,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -6,6 +6,7 @@ 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
8
  import { logger } from "../lib/logger.js";
9
+ import { syncTokenPath } from "../lib/remote-context.js";
9
10
  // Load config to get commentsDir
10
11
  const config = getConfig();
11
12
  const COMMENTS_DIR = path.resolve(config.commentsDir);
@@ -17,8 +18,28 @@ const LEGACY_COMMENT_SYNC_TOKEN_PATH = path.join(path.dirname(COMMENTS_DIR), "co
17
18
  /**
18
19
  * Read the last comment sync token from disk.
19
20
  * Checks new location first, then falls back to legacy for migration.
21
+ * When remoteCtx is provided, reads from the remote-specific state directory.
20
22
  */
21
- async function readCommentSyncToken() {
23
+ async function readCommentSyncToken(remoteCtx) {
24
+ if (remoteCtx) {
25
+ const tokenPath = syncTokenPath(remoteCtx, "comments");
26
+ try {
27
+ const token = (await fs.readFile(tokenPath, "utf8")).trim();
28
+ if (token)
29
+ return { token, migrated: false };
30
+ }
31
+ catch { /* not found */ }
32
+ // Migration: check old single-remote path and move to per-remote path
33
+ try {
34
+ const legacyToken = (await fs.readFile(COMMENT_SYNC_TOKEN_PATH, "utf8")).trim();
35
+ if (legacyToken) {
36
+ logger.verbose(`[SYNC] Migrating comment sync token to remote "${remoteCtx.name}"`);
37
+ return { token: legacyToken, migrated: true };
38
+ }
39
+ }
40
+ catch { /* not found */ }
41
+ return { token: undefined, migrated: false };
42
+ }
22
43
  try {
23
44
  const token = (await fs.readFile(COMMENT_SYNC_TOKEN_PATH, "utf8")).trim();
24
45
  if (token)
@@ -36,9 +57,16 @@ async function readCommentSyncToken() {
36
57
  return { token: undefined, migrated: false };
37
58
  }
38
59
  /**
39
- * Write the comment sync token to disk (new location inside commentsDir)
60
+ * Write the comment sync token to disk.
61
+ * When remoteCtx is provided, writes to the remote-specific state directory.
40
62
  */
41
- async function writeCommentSyncToken(token) {
63
+ async function writeCommentSyncToken(token, remoteCtx) {
64
+ if (remoteCtx) {
65
+ const tokenPath = syncTokenPath(remoteCtx, "comments");
66
+ await fs.mkdir(path.dirname(tokenPath), { recursive: true });
67
+ await fs.writeFile(tokenPath, token, "utf8");
68
+ return;
69
+ }
42
70
  await fs.mkdir(path.dirname(COMMENT_SYNC_TOKEN_PATH), { recursive: true });
43
71
  await fs.writeFile(COMMENT_SYNC_TOKEN_PATH, token, "utf8");
44
72
  }
@@ -52,12 +80,12 @@ async function cleanupLegacyCommentSyncToken() {
52
80
  catch { /* not found — ok */ }
53
81
  }
54
82
  /**
55
- * Fetch comments from LeadCMS sync endpoint
83
+ * Pull comments from LeadCMS sync endpoint
56
84
  * Handles pagination automatically
57
85
  */
58
- async function fetchCommentSync(syncToken) {
59
- logger.verbose(`[FETCH_COMMENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
60
- logger.verbose(`[FETCH_COMMENT_SYNC] Fetching public comments (no authentication)`);
86
+ async function pullCommentSync(syncToken) {
87
+ logger.verbose(`[PULL_COMMENT_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
88
+ logger.verbose(`[PULL_COMMENT_SYNC] Pulling public comments (no authentication)`);
61
89
  let allItems = [];
62
90
  let allDeleted = [];
63
91
  let token = syncToken || "";
@@ -67,27 +95,29 @@ async function fetchCommentSync(syncToken) {
67
95
  const url = new URL("/api/comments/sync", leadCMSUrl);
68
96
  url.searchParams.set("filter[limit]", "100");
69
97
  url.searchParams.set("syncToken", token);
70
- logger.verbose(`[FETCH_COMMENT_SYNC] Page ${page}, URL: ${url.toString()}`);
98
+ logger.verbose(`[PULL_COMMENT_SYNC] Page ${page}, URL: ${url.toString()}`);
71
99
  try {
72
100
  // SECURITY: Never send API key for read operations
73
101
  // Comments sync should only return public comments
74
- const res = await axios.get(url.toString());
102
+ const res = await axios.get(url.toString(), {
103
+ headers: {},
104
+ });
75
105
  if (res.status === 204) {
76
- logger.verbose(`[FETCH_COMMENT_SYNC] Got 204 No Content - ending sync`);
106
+ logger.verbose(`[PULL_COMMENT_SYNC] Got 204 No Content - ending sync`);
77
107
  break;
78
108
  }
79
109
  const data = res.data;
80
- logger.verbose(`[FETCH_COMMENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
110
+ logger.verbose(`[PULL_COMMENT_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
81
111
  if (data.items && Array.isArray(data.items))
82
112
  allItems.push(...data.items);
83
113
  if (data.deleted && Array.isArray(data.deleted)) {
84
114
  allDeleted.push(...data.deleted);
85
115
  }
86
116
  const newSyncToken = res.headers["x-next-sync-token"] || token;
87
- logger.verbose(`[FETCH_COMMENT_SYNC] Next sync token: ${newSyncToken}`);
117
+ logger.verbose(`[PULL_COMMENT_SYNC] Next sync token: ${newSyncToken}`);
88
118
  if (!newSyncToken || newSyncToken === token) {
89
119
  nextSyncToken = newSyncToken || token;
90
- logger.verbose(`[FETCH_COMMENT_SYNC] No new sync token - ending sync`);
120
+ logger.verbose(`[PULL_COMMENT_SYNC] No new sync token - ending sync`);
91
121
  break;
92
122
  }
93
123
  nextSyncToken = newSyncToken;
@@ -95,7 +125,7 @@ async function fetchCommentSync(syncToken) {
95
125
  page++;
96
126
  }
97
127
  catch (error) {
98
- console.error(`[FETCH_COMMENT_SYNC] Failed on page ${page}:`, error.message);
128
+ console.error(`[PULL_COMMENT_SYNC] Failed on page ${page}:`, error.message);
99
129
  // Provide helpful error messages based on status code
100
130
  if (error.response?.status === 403) {
101
131
  console.error(`\nā›” Access Denied (403 Forbidden)`);
@@ -118,7 +148,7 @@ async function fetchCommentSync(syncToken) {
118
148
  throw error;
119
149
  }
120
150
  }
121
- logger.verbose(`[FETCH_COMMENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
151
+ logger.verbose(`[PULL_COMMENT_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
122
152
  return {
123
153
  items: allItems,
124
154
  deleted: allDeleted,
@@ -129,7 +159,7 @@ async function fetchCommentSync(syncToken) {
129
159
  * Convert Comment to StoredComment by removing nested objects
130
160
  */
131
161
  function toStoredComment(comment) {
132
- const { content, parent, contact, ...stored } = comment;
162
+ const { content, parent, contact, authorEmail, ...stored } = comment;
133
163
  return stored;
134
164
  }
135
165
  /**
@@ -183,7 +213,7 @@ async function saveCommentsForEntity(commentableType, commentableId, language, c
183
213
  const dateCompare = new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
184
214
  if (dateCompare !== 0)
185
215
  return dateCompare;
186
- return a.id - b.id;
216
+ return (a.id || 0) - (b.id || 0);
187
217
  });
188
218
  await fs.writeFile(filePath, JSON.stringify(sortedComments, null, 2), "utf8");
189
219
  logger.verbose(`Saved ${sortedComments.length} comments to ${filePath}`);
@@ -268,7 +298,7 @@ function groupCommentsByEntityAndLanguage(comments) {
268
298
  return grouped;
269
299
  }
270
300
  /**
271
- * Fetch CMS config to check if comments are supported
301
+ * Check CMS config to check if comments are supported
272
302
  */
273
303
  async function fetchCMSConfigForEntity() {
274
304
  try {
@@ -282,17 +312,17 @@ async function fetchCMSConfigForEntity() {
282
312
  }
283
313
  }
284
314
  catch (error) {
285
- console.warn(`[FETCH_COMMENT_SYNC] Could not fetch CMS config: ${error.message}`);
286
- console.warn(`[FETCH_COMMENT_SYNC] Assuming comments are supported (backward compatibility)`);
315
+ console.warn(`[PULL_COMMENT_SYNC] Could not fetch CMS config: ${error.message}`);
316
+ console.warn(`[PULL_COMMENT_SYNC] Assuming comments are supported (backward compatibility)`);
287
317
  }
288
318
  return false;
289
319
  }
290
320
  /**
291
321
  * Main function to sync comments from LeadCMS
292
322
  */
293
- export async function main() {
323
+ export async function main(remoteCtx) {
294
324
  logger.verbose(`[ENV] LeadCMS URL: ${leadCMSUrl}`);
295
- logger.verbose(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? `${leadCMSApiKey.substring(0, 8)}...` : "NOT_SET"}`);
325
+ logger.verbose(`[ENV] LeadCMS API Key: ${leadCMSApiKey ? 'CONFIGURED (ignored for anonymous comment pull)' : 'NOT_SET'}`);
296
326
  logger.verbose(`[ENV] Comments Dir: ${COMMENTS_DIR}`);
297
327
  // Check if comments are supported
298
328
  logger.verbose(`\nšŸ” Checking CMS configuration...`);
@@ -303,22 +333,22 @@ export async function main() {
303
333
  }
304
334
  logger.verbose(`āœ… Comments supported - proceeding with sync\n`);
305
335
  await fs.mkdir(COMMENTS_DIR, { recursive: true });
306
- const { token: lastSyncToken, migrated: commentTokenMigrated } = await readCommentSyncToken();
336
+ const { token: lastSyncToken, migrated: commentTokenMigrated } = await readCommentSyncToken(remoteCtx);
307
337
  let items = [], deleted = [], nextSyncToken = "";
308
338
  try {
309
339
  if (lastSyncToken) {
310
340
  logger.verbose(`Syncing comments from LeadCMS using sync token: ${lastSyncToken}`);
311
- ({ items, deleted, nextSyncToken } = await fetchCommentSync(lastSyncToken));
341
+ ({ items, deleted, nextSyncToken } = await pullCommentSync(lastSyncToken));
312
342
  }
313
343
  else {
314
- logger.verbose("No comment sync token found. Doing full fetch from LeadCMS...");
315
- ({ items, deleted, nextSyncToken } = await fetchCommentSync(undefined));
344
+ logger.verbose("No comment sync token found. Doing full pull from LeadCMS...");
345
+ ({ items, deleted, nextSyncToken } = await pullCommentSync(undefined));
316
346
  }
317
347
  }
318
348
  catch (error) {
319
349
  console.error(`\nāŒ Failed to sync comments from LeadCMS`);
320
350
  console.error(` Error: ${error.message}`);
321
- // Error details are already logged by fetchCommentSync
351
+ // Error details are already logged by pullCommentSync
322
352
  // Just provide a summary here
323
353
  if (error.response?.status === 403 || error.response?.status === 401) {
324
354
  console.error(`\nšŸ’” This may be a LeadCMS configuration issue.`);
@@ -326,7 +356,7 @@ export async function main() {
326
356
  }
327
357
  throw error;
328
358
  }
329
- console.log(`\x1b[32mFetched ${items.length} comment items, ${deleted.length} deleted.\x1b[0m`);
359
+ console.log(`\x1b[32mPulled ${items.length} comment items, ${deleted.length} deleted.\x1b[0m`);
330
360
  // Process updated/new comments
331
361
  if (items.length > 0) {
332
362
  const groupedComments = groupCommentsByEntityAndLanguage(items);
@@ -356,7 +386,7 @@ export async function main() {
356
386
  }
357
387
  // Save new sync token
358
388
  if (nextSyncToken) {
359
- await writeCommentSyncToken(nextSyncToken);
389
+ await writeCommentSyncToken(nextSyncToken, remoteCtx);
360
390
  logger.verbose(`Comment sync token updated: ${nextSyncToken}`);
361
391
  }
362
392
  // Clean up legacy sync token after successful migration
@@ -367,9 +397,9 @@ export async function main() {
367
397
  console.log(`\nComment sync completed successfully.`);
368
398
  }
369
399
  // Export the main function so it can be imported by other modules
370
- export { main as fetchLeadCMSComments };
400
+ export { main as pullLeadCMSComments };
371
401
  // Note: CLI execution moved to CLI entry points
372
402
  // This file now only exports the function for programmatic use
373
403
  // Export helper functions for testing
374
- export { loadCommentsForEntity, saveCommentsForEntity, groupCommentsByEntityAndLanguage, toStoredComment, deleteComment, };
375
- //# sourceMappingURL=fetch-leadcms-comments.js.map
404
+ export { pullCommentSync, loadCommentsForEntity, saveCommentsForEntity, groupCommentsByEntityAndLanguage, toStoredComment, deleteComment, };
405
+ //# sourceMappingURL=pull-leadcms-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-leadcms-comments.js","sourceRoot":"","sources":["../../src/scripts/pull-leadcms-comments.ts"],"names":[],"mappings":"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"}