@leadcms/sdk 3.5.4 β†’ 3.5.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 (138) hide show
  1. package/dist/cli/bin/content-status-args.js +0 -0
  2. package/dist/cli/bin/generate-env.js +0 -0
  3. package/dist/cli/bin/init.js +0 -0
  4. package/dist/cli/bin/login.js +0 -0
  5. package/dist/cli/bin/pull-all.js +0 -0
  6. package/dist/cli/bin/pull-comments.js +0 -0
  7. package/dist/cli/bin/pull-content.js +0 -0
  8. package/dist/cli/bin/pull-email-templates.js +0 -0
  9. package/dist/cli/bin/pull-media.js +0 -0
  10. package/dist/cli/bin/pull-segments.d.ts +6 -0
  11. package/dist/cli/bin/pull-segments.d.ts.map +1 -0
  12. package/dist/cli/bin/pull-segments.js +26 -0
  13. package/dist/cli/bin/pull-segments.js.map +1 -0
  14. package/dist/cli/bin/pull-sequences.d.ts +6 -0
  15. package/dist/cli/bin/pull-sequences.d.ts.map +1 -0
  16. package/dist/cli/bin/pull-sequences.js +26 -0
  17. package/dist/cli/bin/pull-sequences.js.map +1 -0
  18. package/dist/cli/bin/pull-settings.js +0 -0
  19. package/dist/cli/bin/push-all.js +18 -0
  20. package/dist/cli/bin/push-all.js.map +1 -1
  21. package/dist/cli/bin/push-comments.js +0 -0
  22. package/dist/cli/bin/push-content.js +0 -0
  23. package/dist/cli/bin/push-email-templates.js +0 -0
  24. package/dist/cli/bin/push-media.js +0 -0
  25. package/dist/cli/bin/push-segments.d.ts +6 -0
  26. package/dist/cli/bin/push-segments.d.ts.map +1 -0
  27. package/dist/cli/bin/push-segments.js +30 -0
  28. package/dist/cli/bin/push-segments.js.map +1 -0
  29. package/dist/cli/bin/push-sequences.d.ts +6 -0
  30. package/dist/cli/bin/push-sequences.d.ts.map +1 -0
  31. package/dist/cli/bin/push-sequences.js +30 -0
  32. package/dist/cli/bin/push-sequences.js.map +1 -0
  33. package/dist/cli/bin/push-settings.js +0 -0
  34. package/dist/cli/bin/push.js +0 -0
  35. package/dist/cli/bin/remote-flag.js +0 -0
  36. package/dist/cli/bin/remote.js +0 -0
  37. package/dist/cli/bin/status-all.js +134 -6
  38. package/dist/cli/bin/status-all.js.map +1 -1
  39. package/dist/cli/bin/status-comments.js +0 -0
  40. package/dist/cli/bin/status-content.js +0 -0
  41. package/dist/cli/bin/status-email-templates.js +0 -0
  42. package/dist/cli/bin/status-media.js +0 -0
  43. package/dist/cli/bin/status-segments.d.ts +6 -0
  44. package/dist/cli/bin/status-segments.d.ts.map +1 -0
  45. package/dist/cli/bin/status-segments.js +25 -0
  46. package/dist/cli/bin/status-segments.js.map +1 -0
  47. package/dist/cli/bin/status-sequences.d.ts +6 -0
  48. package/dist/cli/bin/status-sequences.d.ts.map +1 -0
  49. package/dist/cli/bin/status-sequences.js +25 -0
  50. package/dist/cli/bin/status-sequences.js.map +1 -0
  51. package/dist/cli/bin/status-settings.js +0 -0
  52. package/dist/cli/bin/status.js +0 -0
  53. package/dist/cli/bin/watch.js +0 -0
  54. package/dist/cli/index.js +18 -0
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/index.d.ts +3 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/lib/automation-types.d.ts +235 -0
  61. package/dist/lib/automation-types.d.ts.map +1 -0
  62. package/dist/lib/automation-types.js +150 -0
  63. package/dist/lib/automation-types.js.map +1 -0
  64. package/dist/lib/cms-config-types.d.ts +8 -0
  65. package/dist/lib/cms-config-types.d.ts.map +1 -1
  66. package/dist/lib/cms-config-types.js +12 -0
  67. package/dist/lib/cms-config-types.js.map +1 -1
  68. package/dist/lib/cms.d.ts.map +1 -1
  69. package/dist/lib/cms.js +2 -0
  70. package/dist/lib/cms.js.map +1 -1
  71. package/dist/lib/config.d.ts +4 -0
  72. package/dist/lib/config.d.ts.map +1 -1
  73. package/dist/lib/config.js +10 -0
  74. package/dist/lib/config.js.map +1 -1
  75. package/dist/lib/data-service.d.ts +38 -1
  76. package/dist/lib/data-service.d.ts.map +1 -1
  77. package/dist/lib/data-service.js +312 -0
  78. package/dist/lib/data-service.js.map +1 -1
  79. package/dist/lib/email-template-transformation.d.ts.map +1 -1
  80. package/dist/lib/email-template-transformation.js +1 -0
  81. package/dist/lib/email-template-transformation.js.map +1 -1
  82. package/dist/lib/remote-context.d.ts +19 -1
  83. package/dist/lib/remote-context.d.ts.map +1 -1
  84. package/dist/lib/remote-context.js +99 -1
  85. package/dist/lib/remote-context.js.map +1 -1
  86. package/dist/lib/settings-types.d.ts +53 -1
  87. package/dist/lib/settings-types.d.ts.map +1 -1
  88. package/dist/lib/settings-types.js +115 -1
  89. package/dist/lib/settings-types.js.map +1 -1
  90. package/dist/lib/slugify.d.ts +9 -0
  91. package/dist/lib/slugify.d.ts.map +1 -0
  92. package/dist/lib/slugify.js +12 -0
  93. package/dist/lib/slugify.js.map +1 -0
  94. package/dist/scripts/leadcms-helpers.d.ts +2 -0
  95. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  96. package/dist/scripts/leadcms-helpers.js +2 -0
  97. package/dist/scripts/leadcms-helpers.js.map +1 -1
  98. package/dist/scripts/pull-all.d.ts +9 -1
  99. package/dist/scripts/pull-all.d.ts.map +1 -1
  100. package/dist/scripts/pull-all.js +59 -5
  101. package/dist/scripts/pull-all.js.map +1 -1
  102. package/dist/scripts/pull-leadcms-comments.d.ts.map +1 -1
  103. package/dist/scripts/pull-leadcms-comments.js +9 -1
  104. package/dist/scripts/pull-leadcms-comments.js.map +1 -1
  105. package/dist/scripts/pull-leadcms-content.d.ts.map +1 -1
  106. package/dist/scripts/pull-leadcms-content.js +9 -1
  107. package/dist/scripts/pull-leadcms-content.js.map +1 -1
  108. package/dist/scripts/pull-leadcms-email-templates.d.ts.map +1 -1
  109. package/dist/scripts/pull-leadcms-email-templates.js +12 -10
  110. package/dist/scripts/pull-leadcms-email-templates.js.map +1 -1
  111. package/dist/scripts/pull-segments.d.ts +32 -0
  112. package/dist/scripts/pull-segments.d.ts.map +1 -0
  113. package/dist/scripts/pull-segments.js +215 -0
  114. package/dist/scripts/pull-segments.js.map +1 -0
  115. package/dist/scripts/pull-sequences.d.ts +32 -0
  116. package/dist/scripts/pull-sequences.d.ts.map +1 -0
  117. package/dist/scripts/pull-sequences.js +236 -0
  118. package/dist/scripts/pull-sequences.js.map +1 -0
  119. package/dist/scripts/push-email-templates.d.ts.map +1 -1
  120. package/dist/scripts/push-email-templates.js +1 -8
  121. package/dist/scripts/push-email-templates.js.map +1 -1
  122. package/dist/scripts/push-leadcms-content.js +1 -1
  123. package/dist/scripts/push-segments.d.ts +35 -0
  124. package/dist/scripts/push-segments.d.ts.map +1 -0
  125. package/dist/scripts/push-segments.js +318 -0
  126. package/dist/scripts/push-segments.js.map +1 -0
  127. package/dist/scripts/push-sequences.d.ts +36 -0
  128. package/dist/scripts/push-sequences.d.ts.map +1 -0
  129. package/dist/scripts/push-sequences.js +351 -0
  130. package/dist/scripts/push-sequences.js.map +1 -0
  131. package/dist/scripts/push-settings.d.ts +3 -3
  132. package/dist/scripts/push-settings.js +8 -8
  133. package/dist/scripts/push-settings.js.map +1 -1
  134. package/dist/scripts/settings-manager.d.ts +5 -4
  135. package/dist/scripts/settings-manager.d.ts.map +1 -1
  136. package/dist/scripts/settings-manager.js +61 -55
  137. package/dist/scripts/settings-manager.js.map +1 -1
  138. package/package.json +21 -21
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Pull segments from LeadCMS.
3
+ * Only Dynamic segments are synced; Static segments are excluded.
4
+ */
5
+ import "dotenv/config";
6
+ import fs from "fs/promises";
7
+ import path from "path";
8
+ import axios from "axios";
9
+ import { leadCMSUrl, leadCMSApiKey, SEGMENTS_DIR, } from "./leadcms-helpers.js";
10
+ import { syncTokenPath } from "../lib/remote-context.js";
11
+ import { resetSegmentsState } from "./pull-all.js";
12
+ import { logger } from "../lib/logger.js";
13
+ import { slugify } from "../lib/slugify.js";
14
+ import { stripNullsAndEmptyArrays } from "../lib/automation-types.js";
15
+ async function readFileOrUndefined(filePath) {
16
+ try {
17
+ return (await fs.readFile(filePath, "utf8")).trim() || undefined;
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ async function readSyncToken(remoteCtx) {
24
+ if (remoteCtx) {
25
+ const tokenPath = syncTokenPath(remoteCtx, "segments");
26
+ return readFileOrUndefined(tokenPath);
27
+ }
28
+ return readFileOrUndefined(path.join(SEGMENTS_DIR, ".sync-token"));
29
+ }
30
+ async function writeSyncToken(token, remoteCtx) {
31
+ if (remoteCtx) {
32
+ const tokenPath = syncTokenPath(remoteCtx, "segments");
33
+ await fs.mkdir(path.dirname(tokenPath), { recursive: true });
34
+ await fs.writeFile(tokenPath, token, "utf8");
35
+ return;
36
+ }
37
+ await fs.mkdir(SEGMENTS_DIR, { recursive: true });
38
+ await fs.writeFile(path.join(SEGMENTS_DIR, ".sync-token"), token, "utf8");
39
+ }
40
+ async function pullSegmentSync(syncToken) {
41
+ if (!leadCMSUrl) {
42
+ throw new Error("LeadCMS URL is not configured.");
43
+ }
44
+ if (!leadCMSApiKey) {
45
+ throw new Error("LeadCMS API key is required to pull segments.");
46
+ }
47
+ let allItems = [];
48
+ let allDeleted = [];
49
+ let allBaseItems = {};
50
+ let token = syncToken || "";
51
+ let nextSyncToken = token;
52
+ while (true) {
53
+ const url = new URL("/api/segments/sync", leadCMSUrl);
54
+ url.searchParams.set("filter[limit]", "100");
55
+ url.searchParams.set("syncToken", token);
56
+ if (syncToken) {
57
+ url.searchParams.set("includeBase", "true");
58
+ }
59
+ const res = await axios.get(url.toString(), {
60
+ headers: { Authorization: `Bearer ${leadCMSApiKey}` },
61
+ });
62
+ if (res.status === 204)
63
+ break;
64
+ const data = res.data || {};
65
+ if (data.items && Array.isArray(data.items)) {
66
+ allItems.push(...data.items);
67
+ }
68
+ if (data.deleted && Array.isArray(data.deleted)) {
69
+ allDeleted.push(...data.deleted);
70
+ }
71
+ if (data.baseItems && typeof data.baseItems === "object") {
72
+ Object.assign(allBaseItems, data.baseItems);
73
+ }
74
+ const newSyncToken = res.headers["x-next-sync-token"] || token;
75
+ if (!newSyncToken || newSyncToken === token) {
76
+ nextSyncToken = newSyncToken || token;
77
+ break;
78
+ }
79
+ nextSyncToken = newSyncToken;
80
+ token = newSyncToken;
81
+ }
82
+ return { items: allItems, deleted: allDeleted, baseItems: allBaseItems, nextSyncToken };
83
+ }
84
+ /** Build a map of segment ID β†’ file path from existing local files. */
85
+ async function buildSegmentIdIndex(dir) {
86
+ const index = new Map();
87
+ let entries;
88
+ try {
89
+ entries = await fs.readdir(dir, { withFileTypes: true });
90
+ }
91
+ catch {
92
+ return index;
93
+ }
94
+ for (const entry of entries) {
95
+ if (!entry.isFile() || !entry.name.endsWith(".json"))
96
+ continue;
97
+ const fullPath = path.join(dir, entry.name);
98
+ try {
99
+ const content = JSON.parse(await fs.readFile(fullPath, "utf8"));
100
+ const id = content?._entityType === "segment" ? content?.data?.id : content?.id;
101
+ if (id != null) {
102
+ index.set(String(id), fullPath);
103
+ }
104
+ }
105
+ catch { /* skip unreadable */ }
106
+ }
107
+ return index;
108
+ }
109
+ function getSegmentFilePath(segment) {
110
+ const slug = slugify(segment.name) || `segment-${segment.id}`;
111
+ return path.join(SEGMENTS_DIR, `${slug}.json`);
112
+ }
113
+ /** Strip runtime-only fields from a segment DTO for local persistence. */
114
+ function toLocalSegment(segment) {
115
+ const { contactCount, createdById, updatedById, createdByIp, createdByUserAgent, updatedByIp, updatedByUserAgent, contactIds, ...rest } = segment;
116
+ return stripNullsAndEmptyArrays(rest);
117
+ }
118
+ function saveSegmentFile(segment) {
119
+ const filePath = getSegmentFilePath(segment);
120
+ const local = toLocalSegment(segment);
121
+ return { filePath, content: JSON.stringify(local, null, 2) + "\n" };
122
+ }
123
+ export async function pullLeadCMSSegments(optionsOrRemoteCtx) {
124
+ // Support both old signature (RemoteContext) and new options object
125
+ let reset;
126
+ let remoteCtx;
127
+ if (optionsOrRemoteCtx && 'name' in optionsOrRemoteCtx && 'url' in optionsOrRemoteCtx) {
128
+ remoteCtx = optionsOrRemoteCtx;
129
+ }
130
+ else if (optionsOrRemoteCtx) {
131
+ const opts = optionsOrRemoteCtx;
132
+ reset = opts.reset;
133
+ remoteCtx = opts.remoteContext;
134
+ }
135
+ if (reset) {
136
+ console.log(`πŸ”„ Resetting segments state...\n`);
137
+ await resetSegmentsState(remoteCtx);
138
+ }
139
+ const lastSyncToken = await readSyncToken(remoteCtx);
140
+ const { items, deleted, nextSyncToken } = await pullSegmentSync(lastSyncToken);
141
+ // Filter out Static segments
142
+ const dynamicItems = items.filter(s => s.type !== "Static");
143
+ let metadataMap;
144
+ const rcModule = remoteCtx ? await import("../lib/remote-context.js") : undefined;
145
+ if (remoteCtx && rcModule) {
146
+ metadataMap = await rcModule.readMetadataMap(remoteCtx);
147
+ }
148
+ const idIndex = (dynamicItems.length > 0 || deleted.length > 0)
149
+ ? await buildSegmentIdIndex(SEGMENTS_DIR)
150
+ : new Map();
151
+ let newCount = 0;
152
+ let updatedCount = 0;
153
+ for (const segment of dynamicItems) {
154
+ const idStr = segment.id != null ? String(segment.id) : undefined;
155
+ // Update per-remote metadata
156
+ if (remoteCtx && rcModule && metadataMap && segment.id != null) {
157
+ rcModule.setSegmentRemoteId(metadataMap, segment.name, segment.id);
158
+ rcModule.setMetadataForSegment(metadataMap, segment.name, {
159
+ id: segment.id,
160
+ createdAt: segment.createdAt,
161
+ updatedAt: segment.updatedAt ?? undefined,
162
+ });
163
+ }
164
+ // Remove old file if ID is already mapped to a different path
165
+ if (idStr && idIndex.has(idStr)) {
166
+ const oldPath = idIndex.get(idStr);
167
+ const newPath = getSegmentFilePath(segment);
168
+ if (oldPath !== newPath) {
169
+ try {
170
+ await fs.unlink(oldPath);
171
+ }
172
+ catch { /* ignore */ }
173
+ }
174
+ }
175
+ const { filePath, content } = saveSegmentFile(segment);
176
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
177
+ const existed = idStr ? idIndex.has(idStr) : false;
178
+ await fs.writeFile(filePath, content, "utf8");
179
+ if (existed) {
180
+ updatedCount++;
181
+ }
182
+ else {
183
+ newCount++;
184
+ }
185
+ }
186
+ // Handle deletions
187
+ for (const id of deleted) {
188
+ const filePath = idIndex.get(String(id));
189
+ if (filePath) {
190
+ try {
191
+ await fs.unlink(filePath);
192
+ }
193
+ catch { /* ignore */ }
194
+ }
195
+ }
196
+ // Persist metadata
197
+ if (remoteCtx && rcModule && metadataMap && dynamicItems.length > 0) {
198
+ await rcModule.writeMetadataMap(remoteCtx, metadataMap);
199
+ logger.verbose(`[PULL] Updated metadata-map for remote "${remoteCtx.name}"`);
200
+ }
201
+ if (nextSyncToken) {
202
+ await writeSyncToken(nextSyncToken, remoteCtx);
203
+ }
204
+ if (newCount > 0 || updatedCount > 0 || deleted.length > 0) {
205
+ console.log(`\nπŸ“Š Segments sync summary:`);
206
+ if (newCount > 0)
207
+ console.log(` ✨ New: ${newCount}`);
208
+ if (updatedCount > 0)
209
+ console.log(` πŸ“ Updated: ${updatedCount}`);
210
+ if (deleted.length > 0)
211
+ console.log(` πŸ—‘οΈ Deleted: ${deleted.length}`);
212
+ }
213
+ }
214
+ export { pullSegmentSync, buildSegmentIdIndex, getSegmentFilePath, toLocalSegment, saveSegmentFile };
215
+ //# sourceMappingURL=pull-segments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-segments.js","sourceRoot":"","sources":["../../src/scripts/pull-segments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pull sequences from LeadCMS.
3
+ * Transforms segment IDs β†’ names and emailTemplateId β†’ emailTemplateName
4
+ * for human-readable local files.
5
+ */
6
+ import "dotenv/config";
7
+ import { type RemoteContext } from "../lib/remote-context.js";
8
+ import type { SequenceDetailsDto, LocalSequenceDto, SegmentIdNameMap, EmailTemplateIdNameMap } from "../lib/automation-types.js";
9
+ interface SequenceSyncResult {
10
+ items: SequenceDetailsDto[];
11
+ deleted: number[];
12
+ baseItems: Record<string, SequenceDetailsDto>;
13
+ nextSyncToken: string;
14
+ }
15
+ declare function pullSequenceSync(syncToken?: string): Promise<SequenceSyncResult>;
16
+ /** Build a map of sequence ID β†’ file path from existing local files. */
17
+ declare function buildSequenceIdIndex(dir: string): Promise<Map<string, string>>;
18
+ declare function getSequenceFilePath(sequence: SequenceDetailsDto | LocalSequenceDto): string;
19
+ /** Build segment ID→name and email template ID→name lookup maps. */
20
+ declare function buildLookupMaps(): Promise<{
21
+ segmentMap: SegmentIdNameMap;
22
+ templateMap: EmailTemplateIdNameMap;
23
+ }>;
24
+ interface PullSequencesOptions {
25
+ /** When true, delete all local sequence files and sync token before pulling. */
26
+ reset?: boolean;
27
+ /** Optional remote context for multi-remote sync token isolation. */
28
+ remoteContext?: RemoteContext;
29
+ }
30
+ export declare function pullLeadCMSSequences(optionsOrRemoteCtx?: PullSequencesOptions | RemoteContext): Promise<void>;
31
+ export { pullSequenceSync, buildSequenceIdIndex, getSequenceFilePath, buildLookupMaps };
32
+ //# sourceMappingURL=pull-sequences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-sequences.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-sequences.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AAUvB,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI7E,OAAO,KAAK,EACV,kBAAkB,EAElB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,4BAA4B,CAAC;AAIpC,UAAU,kBAAkB;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,CAAC;CACvB;AA6BD,iBAAe,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoD/E;AAED,wEAAwE;AACxE,iBAAe,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAuB7E;AAED,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,MAAM,CAGpF;AAED,oEAAoE;AACpE,iBAAe,eAAe,IAAI,OAAO,CAAC;IAAE,UAAU,EAAE,gBAAgB,CAAC;IAAC,WAAW,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAiB/G;AAED,UAAU,oBAAoB;IAC5B,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,wBAAsB,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGnH;AAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Pull sequences from LeadCMS.
3
+ * Transforms segment IDs β†’ names and emailTemplateId β†’ emailTemplateName
4
+ * for human-readable local files.
5
+ */
6
+ import "dotenv/config";
7
+ import fs from "fs/promises";
8
+ import path from "path";
9
+ import axios from "axios";
10
+ import { leadCMSUrl, leadCMSApiKey, SEQUENCES_DIR, } from "./leadcms-helpers.js";
11
+ import { leadCMSDataService } from "../lib/data-service.js";
12
+ import { syncTokenPath } from "../lib/remote-context.js";
13
+ import { resetSequencesState } from "./pull-all.js";
14
+ import { logger } from "../lib/logger.js";
15
+ import { toLocalSequence } from "../lib/automation-types.js";
16
+ import { slugify } from "../lib/slugify.js";
17
+ async function readFileOrUndefined(filePath) {
18
+ try {
19
+ return (await fs.readFile(filePath, "utf8")).trim() || undefined;
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ }
25
+ async function readSyncToken(remoteCtx) {
26
+ if (remoteCtx) {
27
+ const tokenPath = syncTokenPath(remoteCtx, "sequences");
28
+ return readFileOrUndefined(tokenPath);
29
+ }
30
+ return readFileOrUndefined(path.join(SEQUENCES_DIR, ".sync-token"));
31
+ }
32
+ async function writeSyncToken(token, remoteCtx) {
33
+ if (remoteCtx) {
34
+ const tokenPath = syncTokenPath(remoteCtx, "sequences");
35
+ await fs.mkdir(path.dirname(tokenPath), { recursive: true });
36
+ await fs.writeFile(tokenPath, token, "utf8");
37
+ return;
38
+ }
39
+ await fs.mkdir(SEQUENCES_DIR, { recursive: true });
40
+ await fs.writeFile(path.join(SEQUENCES_DIR, ".sync-token"), token, "utf8");
41
+ }
42
+ async function pullSequenceSync(syncToken) {
43
+ if (!leadCMSUrl) {
44
+ throw new Error("LeadCMS URL is not configured.");
45
+ }
46
+ if (!leadCMSApiKey) {
47
+ throw new Error("LeadCMS API key is required to pull sequences.");
48
+ }
49
+ let allItems = [];
50
+ let allDeleted = [];
51
+ let allBaseItems = {};
52
+ let token = syncToken || "";
53
+ let nextSyncToken = token;
54
+ while (true) {
55
+ const url = new URL("/api/sequences/sync", leadCMSUrl);
56
+ url.searchParams.set("filter[limit]", "100");
57
+ url.searchParams.set("filter[include]", "steps");
58
+ url.searchParams.set("syncToken", token);
59
+ if (syncToken) {
60
+ url.searchParams.set("includeBase", "true");
61
+ }
62
+ const res = await axios.get(url.toString(), {
63
+ headers: { Authorization: `Bearer ${leadCMSApiKey}` },
64
+ });
65
+ if (res.status === 204)
66
+ break;
67
+ const data = res.data || {};
68
+ if (data.items && Array.isArray(data.items)) {
69
+ allItems.push(...data.items);
70
+ }
71
+ if (data.deleted && Array.isArray(data.deleted)) {
72
+ allDeleted.push(...data.deleted);
73
+ }
74
+ if (data.baseItems && typeof data.baseItems === "object") {
75
+ Object.assign(allBaseItems, data.baseItems);
76
+ }
77
+ const newSyncToken = res.headers["x-next-sync-token"] || token;
78
+ if (!newSyncToken || newSyncToken === token) {
79
+ nextSyncToken = newSyncToken || token;
80
+ break;
81
+ }
82
+ nextSyncToken = newSyncToken;
83
+ token = newSyncToken;
84
+ }
85
+ return { items: allItems, deleted: allDeleted, baseItems: allBaseItems, nextSyncToken };
86
+ }
87
+ /** Build a map of sequence ID β†’ file path from existing local files. */
88
+ async function buildSequenceIdIndex(dir) {
89
+ const index = new Map();
90
+ let entries;
91
+ try {
92
+ entries = await fs.readdir(dir, { withFileTypes: true });
93
+ }
94
+ catch {
95
+ return index;
96
+ }
97
+ for (const entry of entries) {
98
+ if (!entry.isFile() || !entry.name.endsWith(".json"))
99
+ continue;
100
+ const fullPath = path.join(dir, entry.name);
101
+ try {
102
+ const content = JSON.parse(await fs.readFile(fullPath, "utf8"));
103
+ // Support both flat format and legacy _entityType wrapper
104
+ const id = content?._entityType === "sequence" ? content?.data?.id : content?.id;
105
+ if (id != null) {
106
+ index.set(String(id), fullPath);
107
+ }
108
+ }
109
+ catch { /* skip unreadable */ }
110
+ }
111
+ return index;
112
+ }
113
+ function getSequenceFilePath(sequence) {
114
+ const slug = slugify(sequence.name) || `sequence-${sequence.id}`;
115
+ return path.join(SEQUENCES_DIR, `${slug}.json`);
116
+ }
117
+ /** Build segment ID→name and email template ID→name lookup maps. */
118
+ async function buildLookupMaps() {
119
+ const [segments, templates] = await Promise.all([
120
+ leadCMSDataService.getAllSegments(),
121
+ leadCMSDataService.getAllEmailTemplates(),
122
+ ]);
123
+ const segmentMap = new Map();
124
+ for (const seg of segments) {
125
+ if (seg.id != null)
126
+ segmentMap.set(seg.id, seg.name);
127
+ }
128
+ const templateMap = new Map();
129
+ for (const tpl of templates) {
130
+ if (tpl.id != null && tpl.name)
131
+ templateMap.set(tpl.id, tpl.name);
132
+ }
133
+ return { segmentMap, templateMap };
134
+ }
135
+ export async function pullLeadCMSSequences(optionsOrRemoteCtx) {
136
+ // Support both old signature (RemoteContext) and new options object
137
+ let reset;
138
+ let remoteCtx;
139
+ if (optionsOrRemoteCtx && 'name' in optionsOrRemoteCtx && 'url' in optionsOrRemoteCtx) {
140
+ remoteCtx = optionsOrRemoteCtx;
141
+ }
142
+ else if (optionsOrRemoteCtx) {
143
+ const opts = optionsOrRemoteCtx;
144
+ reset = opts.reset;
145
+ remoteCtx = opts.remoteContext;
146
+ }
147
+ if (reset) {
148
+ console.log(`πŸ”„ Resetting sequences state...\n`);
149
+ await resetSequencesState(remoteCtx);
150
+ }
151
+ const lastSyncToken = await readSyncToken(remoteCtx);
152
+ const { items, deleted, nextSyncToken } = await pullSequenceSync(lastSyncToken);
153
+ let metadataMap;
154
+ const rcModule = remoteCtx ? await import("../lib/remote-context.js") : undefined;
155
+ if (remoteCtx && rcModule) {
156
+ metadataMap = await rcModule.readMetadataMap(remoteCtx);
157
+ }
158
+ const idIndex = (items.length > 0 || deleted.length > 0)
159
+ ? await buildSequenceIdIndex(SEQUENCES_DIR)
160
+ : new Map();
161
+ // Build lookup maps for ID→name transformations
162
+ let segmentMap = new Map();
163
+ let templateMap = new Map();
164
+ if (items.length > 0) {
165
+ const maps = await buildLookupMaps();
166
+ segmentMap = maps.segmentMap;
167
+ templateMap = maps.templateMap;
168
+ }
169
+ let newCount = 0;
170
+ let updatedCount = 0;
171
+ for (const sequence of items) {
172
+ const idStr = sequence.id != null ? String(sequence.id) : undefined;
173
+ // Update per-remote metadata
174
+ if (remoteCtx && rcModule && metadataMap && sequence.id != null) {
175
+ rcModule.setSequenceRemoteId(metadataMap, sequence.name, sequence.id);
176
+ rcModule.setMetadataForSequence(metadataMap, sequence.name, {
177
+ id: sequence.id,
178
+ createdAt: sequence.createdAt,
179
+ updatedAt: sequence.updatedAt ?? undefined,
180
+ });
181
+ }
182
+ // Remove old file if ID maps to a different path (e.g. rename)
183
+ if (idStr && idIndex.has(idStr)) {
184
+ const oldPath = idIndex.get(idStr);
185
+ const newPath = getSequenceFilePath(sequence);
186
+ if (oldPath !== newPath) {
187
+ try {
188
+ await fs.unlink(oldPath);
189
+ }
190
+ catch { /* ignore */ }
191
+ }
192
+ }
193
+ // Transform to local shape
194
+ const localDto = toLocalSequence(sequence, segmentMap, templateMap);
195
+ const filePath = getSequenceFilePath(sequence);
196
+ const content = JSON.stringify(localDto, null, 2) + "\n";
197
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
198
+ const existed = idStr ? idIndex.has(idStr) : false;
199
+ await fs.writeFile(filePath, content, "utf8");
200
+ if (existed) {
201
+ updatedCount++;
202
+ }
203
+ else {
204
+ newCount++;
205
+ }
206
+ }
207
+ // Handle deletions
208
+ for (const id of deleted) {
209
+ const filePath = idIndex.get(String(id));
210
+ if (filePath) {
211
+ try {
212
+ await fs.unlink(filePath);
213
+ }
214
+ catch { /* ignore */ }
215
+ }
216
+ }
217
+ // Persist metadata
218
+ if (remoteCtx && rcModule && metadataMap && items.length > 0) {
219
+ await rcModule.writeMetadataMap(remoteCtx, metadataMap);
220
+ logger.verbose(`[PULL] Updated metadata-map for remote "${remoteCtx.name}"`);
221
+ }
222
+ if (nextSyncToken) {
223
+ await writeSyncToken(nextSyncToken, remoteCtx);
224
+ }
225
+ if (newCount > 0 || updatedCount > 0 || deleted.length > 0) {
226
+ console.log(`\nπŸ“Š Sequences sync summary:`);
227
+ if (newCount > 0)
228
+ console.log(` ✨ New: ${newCount}`);
229
+ if (updatedCount > 0)
230
+ console.log(` πŸ“ Updated: ${updatedCount}`);
231
+ if (deleted.length > 0)
232
+ console.log(` πŸ—‘οΈ Deleted: ${deleted.length}`);
233
+ }
234
+ }
235
+ export { pullSequenceSync, buildSequenceIdIndex, getSequenceFilePath, buildLookupMaps };
236
+ //# sourceMappingURL=pull-sequences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-sequences.js","sourceRoot":"","sources":["../../src/scripts/pull-sequences.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push-email-templates.d.ts","sourceRoot":"","sources":["../../src/scripts/push-email-templates.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAoBvB,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE3E,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,uBAAuB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClD,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4ED,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED,iBAAS,mBAAmB,CAC1B,QAAQ,EAAE,sBAAsB,EAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,GACxC,MAAM,GAAG,IAAI,CAiCf;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAehF;AAED;;;;;GAKG;AACH,iBAAS,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAQ9E;AAED;;;GAGG;AACH,iBAAe,wBAAwB,CACrC,cAAc,EAAE,sBAAsB,EAAE,EACxC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACzC,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,cAAc,EAAE,CAAC,CA+C3B;AAED,iBAAS,cAAc,CACrB,KAAK,EAAE,sBAAsB,EAC7B,eAAe,EAAE,uBAAuB,EAAE,EAC1C,WAAW,CAAC,EAAE,WAAW,GACxB,uBAAuB,GAAG,SAAS,CAwBrC;AAgMD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iBAAe,wBAAwB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiJvG;AAED,iBAAS,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAKpE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuLrF;AAGD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,CAAC;AAGxF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,cAAc,EAAE,CAAC;AACpI,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0LjF"}
1
+ {"version":3,"file":"push-email-templates.d.ts","sourceRoot":"","sources":["../../src/scripts/push-email-templates.ts"],"names":[],"mappings":"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"}
@@ -10,13 +10,6 @@ import { leadCMSDataService } from "../lib/data-service.js";
10
10
  import { pullEmailTemplateSync } from "./pull-leadcms-email-templates.js";
11
11
  import { colorConsole, statusColors, diffColors } from "../lib/console-colors.js";
12
12
  import { logger } from "../lib/logger.js";
13
- function slugifySegment(value) {
14
- return value
15
- .toLowerCase()
16
- .trim()
17
- .replace(/[^a-z0-9]+/g, "-")
18
- .replace(/^-+|-+$/g, "");
19
- }
20
13
  async function isLocaleDirectory(dirPath, parentDir) {
21
14
  if (parentDir !== EMAIL_TEMPLATES_DIR) {
22
15
  return false;
@@ -607,7 +600,7 @@ export async function statusEmailTemplates(options = {}) {
607
600
  const groupLabel = (op.local?.groupFolder || 'ungrouped').padEnd(12);
608
601
  const localeLabel = `[${op.local?.locale || defaultLanguage}]`.padEnd(6);
609
602
  const nameLabel = op.local?.metadata?.name || 'unknown';
610
- colorConsole.log(` ${statusColors.created('new file:')} ${groupLabel} ${localeLabel} ${colorConsole.highlight(nameLabel)}`);
603
+ colorConsole.log(` ${statusColors.created('new: ')} ${groupLabel} ${localeLabel} ${colorConsole.highlight(nameLabel)}`);
611
604
  await printDiffPreview(op);
612
605
  }
613
606
  for (const op of updateOps) {