@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.
- package/README.md +2 -1
- package/dist/cli/bin/content-status-args.d.ts +7 -0
- package/dist/cli/bin/content-status-args.d.ts.map +1 -0
- package/dist/cli/bin/content-status-args.js +27 -0
- package/dist/cli/bin/content-status-args.js.map +1 -0
- package/dist/cli/bin/login.js +1 -1
- package/dist/cli/bin/login.js.map +1 -1
- package/dist/cli/bin/pull-all.js +4 -2
- package/dist/cli/bin/pull-all.js.map +1 -1
- package/dist/cli/bin/pull-comments.js +3 -1
- package/dist/cli/bin/pull-comments.js.map +1 -1
- package/dist/cli/bin/pull-content.js +6 -2
- package/dist/cli/bin/pull-content.js.map +1 -1
- package/dist/cli/bin/pull-email-templates.js +3 -1
- package/dist/cli/bin/pull-email-templates.js.map +1 -1
- package/dist/cli/bin/pull-media.js +3 -1
- package/dist/cli/bin/pull-media.js.map +1 -1
- package/dist/cli/bin/pull-settings.js +2 -0
- package/dist/cli/bin/pull-settings.js.map +1 -1
- package/dist/cli/bin/push-all.js +12 -1
- package/dist/cli/bin/push-all.js.map +1 -1
- package/dist/cli/bin/push-comments.d.ts +6 -0
- package/dist/cli/bin/push-comments.d.ts.map +1 -0
- package/dist/cli/bin/push-comments.js +35 -0
- package/dist/cli/bin/push-comments.js.map +1 -0
- package/dist/cli/bin/push-content.js +7 -4
- package/dist/cli/bin/push-content.js.map +1 -1
- package/dist/cli/bin/push-email-templates.js +3 -1
- package/dist/cli/bin/push-email-templates.js.map +1 -1
- package/dist/cli/bin/push-media.js +2 -0
- package/dist/cli/bin/push-media.js.map +1 -1
- package/dist/cli/bin/push-settings.js +2 -0
- package/dist/cli/bin/push-settings.js.map +1 -1
- package/dist/cli/bin/push.js +5 -3
- package/dist/cli/bin/push.js.map +1 -1
- package/dist/cli/bin/remote-flag.d.ts +17 -0
- package/dist/cli/bin/remote-flag.d.ts.map +1 -0
- package/dist/cli/bin/remote-flag.js +50 -0
- package/dist/cli/bin/remote-flag.js.map +1 -0
- package/dist/cli/bin/remote.d.ts +14 -0
- package/dist/cli/bin/remote.d.ts.map +1 -0
- package/dist/cli/bin/remote.js +291 -0
- package/dist/cli/bin/remote.js.map +1 -0
- package/dist/cli/bin/status-all.js +67 -4
- package/dist/cli/bin/status-all.js.map +1 -1
- package/dist/cli/bin/status-comments.d.ts +6 -0
- package/dist/cli/bin/status-comments.d.ts.map +1 -0
- package/dist/cli/bin/status-comments.js +30 -0
- package/dist/cli/bin/status-comments.js.map +1 -0
- package/dist/cli/bin/status-content.js +6 -2
- package/dist/cli/bin/status-content.js.map +1 -1
- package/dist/cli/bin/status-email-templates.js +3 -1
- package/dist/cli/bin/status-email-templates.js.map +1 -1
- package/dist/cli/bin/status-media.js +2 -0
- package/dist/cli/bin/status-media.js.map +1 -1
- package/dist/cli/bin/status-settings.js +2 -0
- package/dist/cli/bin/status-settings.js.map +1 -1
- package/dist/cli/bin/status.js +5 -2
- package/dist/cli/bin/status.js.map +1 -1
- package/dist/cli/bin/watch.js +6 -3
- package/dist/cli/bin/watch.js.map +1 -1
- package/dist/cli/index.js +65 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.d.ts +1 -1
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +5 -5
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/cms.d.ts +7 -7
- package/dist/lib/cms.d.ts.map +1 -1
- package/dist/lib/cms.js +41 -7
- package/dist/lib/cms.js.map +1 -1
- package/dist/lib/comment-types.d.ts +4 -0
- package/dist/lib/comment-types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +6 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +37 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/content-merge.d.ts.map +1 -1
- package/dist/lib/content-merge.js +102 -19
- package/dist/lib/content-merge.js.map +1 -1
- package/dist/lib/content-transformation.d.ts +5 -0
- package/dist/lib/content-transformation.d.ts.map +1 -1
- package/dist/lib/content-transformation.js +49 -2
- package/dist/lib/content-transformation.js.map +1 -1
- package/dist/lib/data-service.d.ts +47 -1
- package/dist/lib/data-service.d.ts.map +1 -1
- package/dist/lib/data-service.js +143 -0
- package/dist/lib/data-service.js.map +1 -1
- package/dist/lib/remote-context.d.ts +98 -0
- package/dist/lib/remote-context.d.ts.map +1 -0
- package/dist/lib/remote-context.js +297 -0
- package/dist/lib/remote-context.js.map +1 -0
- package/dist/scripts/init-leadcms.d.ts.map +1 -1
- package/dist/scripts/init-leadcms.js +127 -15
- package/dist/scripts/init-leadcms.js.map +1 -1
- package/dist/scripts/leadcms-helpers.d.ts +16 -5
- package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
- package/dist/scripts/leadcms-helpers.js +31 -8
- package/dist/scripts/leadcms-helpers.js.map +1 -1
- package/dist/scripts/login-leadcms.d.ts +4 -1
- package/dist/scripts/login-leadcms.d.ts.map +1 -1
- package/dist/scripts/login-leadcms.js +45 -6
- package/dist/scripts/login-leadcms.js.map +1 -1
- package/dist/scripts/pull-all.d.ts +14 -6
- package/dist/scripts/pull-all.d.ts.map +1 -1
- package/dist/scripts/pull-all.js +86 -33
- package/dist/scripts/pull-all.js.map +1 -1
- package/dist/scripts/pull-comments.d.ts +3 -0
- package/dist/scripts/pull-comments.d.ts.map +1 -1
- package/dist/scripts/pull-comments.js +4 -4
- package/dist/scripts/pull-comments.js.map +1 -1
- package/dist/scripts/pull-content.d.ts +14 -0
- package/dist/scripts/pull-content.d.ts.map +1 -1
- package/dist/scripts/pull-content.js +85 -8
- package/dist/scripts/pull-content.js.map +1 -1
- package/dist/scripts/pull-email-templates.d.ts +3 -0
- package/dist/scripts/pull-email-templates.d.ts.map +1 -1
- package/dist/scripts/pull-email-templates.js +4 -4
- package/dist/scripts/pull-email-templates.js.map +1 -1
- package/dist/scripts/{fetch-leadcms-comments.d.ts ā pull-leadcms-comments.d.ts} +10 -4
- package/dist/scripts/pull-leadcms-comments.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-comments.js ā pull-leadcms-comments.js} +62 -32
- package/dist/scripts/pull-leadcms-comments.js.map +1 -0
- package/dist/scripts/{fetch-leadcms-content.d.ts ā pull-leadcms-content.d.ts} +13 -19
- package/dist/scripts/pull-leadcms-content.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-content.js ā pull-leadcms-content.js} +121 -250
- package/dist/scripts/pull-leadcms-content.js.map +1 -0
- package/dist/scripts/{fetch-leadcms-email-templates.d.ts ā pull-leadcms-email-templates.d.ts} +5 -4
- package/dist/scripts/pull-leadcms-email-templates.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-email-templates.js ā pull-leadcms-email-templates.js} +89 -11
- package/dist/scripts/pull-leadcms-email-templates.js.map +1 -0
- package/dist/scripts/pull-leadcms-media.d.ts +32 -0
- package/dist/scripts/pull-leadcms-media.d.ts.map +1 -0
- package/dist/scripts/pull-leadcms-media.js +229 -0
- package/dist/scripts/pull-leadcms-media.js.map +1 -0
- package/dist/scripts/pull-media.d.ts +4 -1
- package/dist/scripts/pull-media.d.ts.map +1 -1
- package/dist/scripts/pull-media.js +4 -4
- package/dist/scripts/pull-media.js.map +1 -1
- package/dist/scripts/push-comments.d.ts +48 -0
- package/dist/scripts/push-comments.d.ts.map +1 -0
- package/dist/scripts/push-comments.js +433 -0
- package/dist/scripts/push-comments.js.map +1 -0
- package/dist/scripts/push-email-templates.d.ts +6 -1
- package/dist/scripts/push-email-templates.d.ts.map +1 -1
- package/dist/scripts/push-email-templates.js +96 -21
- package/dist/scripts/push-email-templates.js.map +1 -1
- package/dist/scripts/push-leadcms-content.d.ts +24 -8
- package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
- package/dist/scripts/push-leadcms-content.js +192 -56
- package/dist/scripts/push-leadcms-content.js.map +1 -1
- package/dist/scripts/sse-watcher.d.ts +9 -8
- package/dist/scripts/sse-watcher.d.ts.map +1 -1
- package/dist/scripts/sse-watcher.js +59 -52
- package/dist/scripts/sse-watcher.js.map +1 -1
- package/leadcms.config.json.sample +12 -1
- package/package.json +2 -3
- package/dist/scripts/fetch-leadcms-comments.d.ts.map +0 -1
- package/dist/scripts/fetch-leadcms-comments.js.map +0 -1
- package/dist/scripts/fetch-leadcms-content.d.ts.map +0 -1
- package/dist/scripts/fetch-leadcms-content.js.map +0 -1
- package/dist/scripts/fetch-leadcms-email-templates.d.ts.map +0 -1
- 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;
|
|
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 {
|
|
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
|
|
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,
|
|
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;
|
|
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 {
|
|
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
|
|
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',
|
|
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
|
|
88
|
-
await
|
|
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":";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,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,
|
|
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;
|
|
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 {
|
|
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
|
|
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":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,
|
|
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
|
|
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=
|
|
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
|
|
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
|
-
*
|
|
83
|
+
* Pull comments from LeadCMS sync endpoint
|
|
56
84
|
* Handles pagination automatically
|
|
57
85
|
*/
|
|
58
|
-
async function
|
|
59
|
-
logger.verbose(`[
|
|
60
|
-
logger.verbose(`[
|
|
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(`[
|
|
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(`[
|
|
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(`[
|
|
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(`[
|
|
117
|
+
logger.verbose(`[PULL_COMMENT_SYNC] Next sync token: ${newSyncToken}`);
|
|
88
118
|
if (!newSyncToken || newSyncToken === token) {
|
|
89
119
|
nextSyncToken = newSyncToken || token;
|
|
90
|
-
logger.verbose(`[
|
|
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(`[
|
|
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(`[
|
|
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
|
-
*
|
|
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(`[
|
|
286
|
-
console.warn(`[
|
|
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 ?
|
|
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
|
|
341
|
+
({ items, deleted, nextSyncToken } = await pullCommentSync(lastSyncToken));
|
|
312
342
|
}
|
|
313
343
|
else {
|
|
314
|
-
logger.verbose("No comment sync token found. Doing full
|
|
315
|
-
({ items, deleted, nextSyncToken } = await
|
|
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
|
|
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[
|
|
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
|
|
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=
|
|
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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"}
|