@leadcms/sdk 3.5.4 → 3.5.5

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 (96) hide show
  1. package/dist/cli/bin/pull-segments.d.ts +6 -0
  2. package/dist/cli/bin/pull-segments.d.ts.map +1 -0
  3. package/dist/cli/bin/pull-segments.js +25 -0
  4. package/dist/cli/bin/pull-segments.js.map +1 -0
  5. package/dist/cli/bin/pull-sequences.d.ts +6 -0
  6. package/dist/cli/bin/pull-sequences.d.ts.map +1 -0
  7. package/dist/cli/bin/pull-sequences.js +25 -0
  8. package/dist/cli/bin/pull-sequences.js.map +1 -0
  9. package/dist/cli/bin/push-all.js +18 -0
  10. package/dist/cli/bin/push-all.js.map +1 -1
  11. package/dist/cli/bin/push-segments.d.ts +6 -0
  12. package/dist/cli/bin/push-segments.d.ts.map +1 -0
  13. package/dist/cli/bin/push-segments.js +30 -0
  14. package/dist/cli/bin/push-segments.js.map +1 -0
  15. package/dist/cli/bin/push-sequences.d.ts +6 -0
  16. package/dist/cli/bin/push-sequences.d.ts.map +1 -0
  17. package/dist/cli/bin/push-sequences.js +30 -0
  18. package/dist/cli/bin/push-sequences.js.map +1 -0
  19. package/dist/cli/bin/status-all.js +130 -2
  20. package/dist/cli/bin/status-all.js.map +1 -1
  21. package/dist/cli/bin/status-segments.d.ts +6 -0
  22. package/dist/cli/bin/status-segments.d.ts.map +1 -0
  23. package/dist/cli/bin/status-segments.js +24 -0
  24. package/dist/cli/bin/status-segments.js.map +1 -0
  25. package/dist/cli/bin/status-sequences.d.ts +6 -0
  26. package/dist/cli/bin/status-sequences.d.ts.map +1 -0
  27. package/dist/cli/bin/status-sequences.js +24 -0
  28. package/dist/cli/bin/status-sequences.js.map +1 -0
  29. package/dist/cli/index.js +18 -0
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/index.d.ts +3 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/automation-types.d.ts +232 -0
  36. package/dist/lib/automation-types.d.ts.map +1 -0
  37. package/dist/lib/automation-types.js +107 -0
  38. package/dist/lib/automation-types.js.map +1 -0
  39. package/dist/lib/cms-config-types.d.ts +8 -0
  40. package/dist/lib/cms-config-types.d.ts.map +1 -1
  41. package/dist/lib/cms-config-types.js +12 -0
  42. package/dist/lib/cms-config-types.js.map +1 -1
  43. package/dist/lib/cms.d.ts.map +1 -1
  44. package/dist/lib/cms.js +2 -0
  45. package/dist/lib/cms.js.map +1 -1
  46. package/dist/lib/config.d.ts +4 -0
  47. package/dist/lib/config.d.ts.map +1 -1
  48. package/dist/lib/config.js +10 -0
  49. package/dist/lib/config.js.map +1 -1
  50. package/dist/lib/data-service.d.ts +38 -1
  51. package/dist/lib/data-service.d.ts.map +1 -1
  52. package/dist/lib/data-service.js +310 -0
  53. package/dist/lib/data-service.js.map +1 -1
  54. package/dist/lib/email-template-transformation.d.ts.map +1 -1
  55. package/dist/lib/email-template-transformation.js +1 -0
  56. package/dist/lib/email-template-transformation.js.map +1 -1
  57. package/dist/lib/remote-context.d.ts +19 -1
  58. package/dist/lib/remote-context.d.ts.map +1 -1
  59. package/dist/lib/remote-context.js +99 -1
  60. package/dist/lib/remote-context.js.map +1 -1
  61. package/dist/lib/settings-types.d.ts +53 -1
  62. package/dist/lib/settings-types.d.ts.map +1 -1
  63. package/dist/lib/settings-types.js +115 -1
  64. package/dist/lib/settings-types.js.map +1 -1
  65. package/dist/scripts/leadcms-helpers.d.ts +2 -0
  66. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  67. package/dist/scripts/leadcms-helpers.js +2 -0
  68. package/dist/scripts/leadcms-helpers.js.map +1 -1
  69. package/dist/scripts/pull-all.d.ts +9 -1
  70. package/dist/scripts/pull-all.d.ts.map +1 -1
  71. package/dist/scripts/pull-all.js +59 -5
  72. package/dist/scripts/pull-all.js.map +1 -1
  73. package/dist/scripts/pull-segments.d.ts +22 -0
  74. package/dist/scripts/pull-segments.d.ts.map +1 -0
  75. package/dist/scripts/pull-segments.js +207 -0
  76. package/dist/scripts/pull-segments.js.map +1 -0
  77. package/dist/scripts/pull-sequences.d.ts +26 -0
  78. package/dist/scripts/pull-sequences.d.ts.map +1 -0
  79. package/dist/scripts/pull-sequences.js +226 -0
  80. package/dist/scripts/pull-sequences.js.map +1 -0
  81. package/dist/scripts/push-segments.d.ts +34 -0
  82. package/dist/scripts/push-segments.d.ts.map +1 -0
  83. package/dist/scripts/push-segments.js +262 -0
  84. package/dist/scripts/push-segments.js.map +1 -0
  85. package/dist/scripts/push-sequences.d.ts +35 -0
  86. package/dist/scripts/push-sequences.d.ts.map +1 -0
  87. package/dist/scripts/push-sequences.js +290 -0
  88. package/dist/scripts/push-sequences.js.map +1 -0
  89. package/dist/scripts/push-settings.d.ts +3 -3
  90. package/dist/scripts/push-settings.js +8 -8
  91. package/dist/scripts/push-settings.js.map +1 -1
  92. package/dist/scripts/settings-manager.d.ts +5 -4
  93. package/dist/scripts/settings-manager.d.ts.map +1 -1
  94. package/dist/scripts/settings-manager.js +61 -55
  95. package/dist/scripts/settings-manager.js.map +1 -1
  96. package/package.json +1 -1
@@ -0,0 +1,226 @@
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 { logger } from "../lib/logger.js";
14
+ import { toLocalSequence } from "../lib/automation-types.js";
15
+ function slugify(value) {
16
+ return value
17
+ .toLowerCase()
18
+ .trim()
19
+ .replace(/[^a-z0-9]+/g, "-")
20
+ .replace(/^-+|-+$/g, "");
21
+ }
22
+ async function readFileOrUndefined(filePath) {
23
+ try {
24
+ return (await fs.readFile(filePath, "utf8")).trim() || undefined;
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ async function readSyncToken(remoteCtx) {
31
+ if (remoteCtx) {
32
+ const tokenPath = syncTokenPath(remoteCtx, "sequences");
33
+ return readFileOrUndefined(tokenPath);
34
+ }
35
+ return readFileOrUndefined(path.join(SEQUENCES_DIR, ".sync-token"));
36
+ }
37
+ async function writeSyncToken(token, remoteCtx) {
38
+ if (remoteCtx) {
39
+ const tokenPath = syncTokenPath(remoteCtx, "sequences");
40
+ await fs.mkdir(path.dirname(tokenPath), { recursive: true });
41
+ await fs.writeFile(tokenPath, token, "utf8");
42
+ return;
43
+ }
44
+ await fs.mkdir(SEQUENCES_DIR, { recursive: true });
45
+ await fs.writeFile(path.join(SEQUENCES_DIR, ".sync-token"), token, "utf8");
46
+ }
47
+ async function pullSequenceSync(syncToken) {
48
+ if (!leadCMSUrl) {
49
+ throw new Error("LeadCMS URL is not configured.");
50
+ }
51
+ if (!leadCMSApiKey) {
52
+ throw new Error("LeadCMS API key is required to pull sequences.");
53
+ }
54
+ let allItems = [];
55
+ let allDeleted = [];
56
+ let allBaseItems = {};
57
+ let token = syncToken || "";
58
+ let nextSyncToken = token;
59
+ while (true) {
60
+ const url = new URL("/api/sequences/sync", leadCMSUrl);
61
+ url.searchParams.set("filter[limit]", "100");
62
+ url.searchParams.set("include", "Steps");
63
+ url.searchParams.set("syncToken", token);
64
+ if (syncToken) {
65
+ url.searchParams.set("includeBase", "true");
66
+ }
67
+ const res = await axios.get(url.toString(), {
68
+ headers: { Authorization: `Bearer ${leadCMSApiKey}` },
69
+ });
70
+ if (res.status === 204)
71
+ break;
72
+ const data = res.data || {};
73
+ if (data.items && Array.isArray(data.items)) {
74
+ allItems.push(...data.items);
75
+ }
76
+ if (data.deleted && Array.isArray(data.deleted)) {
77
+ allDeleted.push(...data.deleted);
78
+ }
79
+ if (data.baseItems && typeof data.baseItems === "object") {
80
+ Object.assign(allBaseItems, data.baseItems);
81
+ }
82
+ const newSyncToken = res.headers["x-next-sync-token"] || token;
83
+ if (!newSyncToken || newSyncToken === token) {
84
+ nextSyncToken = newSyncToken || token;
85
+ break;
86
+ }
87
+ nextSyncToken = newSyncToken;
88
+ token = newSyncToken;
89
+ }
90
+ return { items: allItems, deleted: allDeleted, baseItems: allBaseItems, nextSyncToken };
91
+ }
92
+ /** Build a map of sequence ID → file path from existing local files. */
93
+ async function buildSequenceIdIndex(dir) {
94
+ const index = new Map();
95
+ let entries;
96
+ try {
97
+ entries = await fs.readdir(dir, { withFileTypes: true });
98
+ }
99
+ catch {
100
+ return index;
101
+ }
102
+ for (const entry of entries) {
103
+ if (!entry.isFile() || !entry.name.endsWith(".json"))
104
+ continue;
105
+ const fullPath = path.join(dir, entry.name);
106
+ try {
107
+ const content = JSON.parse(await fs.readFile(fullPath, "utf8"));
108
+ // Support both flat format and legacy _entityType wrapper
109
+ const id = content?._entityType === "sequence" ? content?.data?.id : content?.id;
110
+ if (id != null) {
111
+ index.set(String(id), fullPath);
112
+ }
113
+ }
114
+ catch { /* skip unreadable */ }
115
+ }
116
+ return index;
117
+ }
118
+ function getSequenceFilePath(sequence) {
119
+ const slug = slugify(sequence.name) || `sequence-${sequence.id}`;
120
+ return path.join(SEQUENCES_DIR, `${slug}.json`);
121
+ }
122
+ /** Build segment ID→name and email template ID→name lookup maps. */
123
+ async function buildLookupMaps() {
124
+ const [segments, templates] = await Promise.all([
125
+ leadCMSDataService.getAllSegments(),
126
+ leadCMSDataService.getAllEmailTemplates(),
127
+ ]);
128
+ const segmentMap = new Map();
129
+ for (const seg of segments) {
130
+ if (seg.id != null)
131
+ segmentMap.set(seg.id, seg.name);
132
+ }
133
+ const templateMap = new Map();
134
+ for (const tpl of templates) {
135
+ if (tpl.id != null && tpl.name)
136
+ templateMap.set(tpl.id, tpl.name);
137
+ }
138
+ return { segmentMap, templateMap };
139
+ }
140
+ export async function pullLeadCMSSequences(remoteCtx) {
141
+ const lastSyncToken = await readSyncToken(remoteCtx);
142
+ const { items, deleted, nextSyncToken } = await pullSequenceSync(lastSyncToken);
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 = (items.length > 0 || deleted.length > 0)
149
+ ? await buildSequenceIdIndex(SEQUENCES_DIR)
150
+ : new Map();
151
+ // Build lookup maps for ID→name transformations
152
+ let segmentMap = new Map();
153
+ let templateMap = new Map();
154
+ if (items.length > 0) {
155
+ const maps = await buildLookupMaps();
156
+ segmentMap = maps.segmentMap;
157
+ templateMap = maps.templateMap;
158
+ }
159
+ let newCount = 0;
160
+ let updatedCount = 0;
161
+ for (const sequence of items) {
162
+ const idStr = sequence.id != null ? String(sequence.id) : undefined;
163
+ // Update per-remote metadata
164
+ if (remoteCtx && rcModule && metadataMap && sequence.id != null) {
165
+ rcModule.setSequenceRemoteId(metadataMap, sequence.name, sequence.id);
166
+ rcModule.setMetadataForSequence(metadataMap, sequence.name, {
167
+ id: sequence.id,
168
+ createdAt: sequence.createdAt,
169
+ updatedAt: sequence.updatedAt ?? undefined,
170
+ });
171
+ }
172
+ // Remove old file if ID maps to a different path (e.g. rename)
173
+ if (idStr && idIndex.has(idStr)) {
174
+ const oldPath = idIndex.get(idStr);
175
+ const newPath = getSequenceFilePath(sequence);
176
+ if (oldPath !== newPath) {
177
+ try {
178
+ await fs.unlink(oldPath);
179
+ }
180
+ catch { /* ignore */ }
181
+ }
182
+ }
183
+ // Transform to local shape
184
+ const localDto = toLocalSequence(sequence, segmentMap, templateMap);
185
+ const filePath = getSequenceFilePath(sequence);
186
+ const content = JSON.stringify(localDto, null, 2) + "\n";
187
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
188
+ const existed = idStr ? idIndex.has(idStr) : false;
189
+ await fs.writeFile(filePath, content, "utf8");
190
+ if (existed) {
191
+ updatedCount++;
192
+ }
193
+ else {
194
+ newCount++;
195
+ }
196
+ }
197
+ // Handle deletions
198
+ for (const id of deleted) {
199
+ const filePath = idIndex.get(String(id));
200
+ if (filePath) {
201
+ try {
202
+ await fs.unlink(filePath);
203
+ }
204
+ catch { /* ignore */ }
205
+ }
206
+ }
207
+ // Persist metadata
208
+ if (remoteCtx && rcModule && metadataMap && items.length > 0) {
209
+ await rcModule.writeMetadataMap(remoteCtx, metadataMap);
210
+ logger.verbose(`[PULL] Updated metadata-map for remote "${remoteCtx.name}"`);
211
+ }
212
+ if (nextSyncToken) {
213
+ await writeSyncToken(nextSyncToken, remoteCtx);
214
+ }
215
+ if (newCount > 0 || updatedCount > 0 || deleted.length > 0) {
216
+ console.log(`\n📊 Sequences sync summary:`);
217
+ if (newCount > 0)
218
+ console.log(` ✨ New: ${newCount}`);
219
+ if (updatedCount > 0)
220
+ console.log(` 📝 Updated: ${updatedCount}`);
221
+ if (deleted.length > 0)
222
+ console.log(` 🗑️ Deleted: ${deleted.length}`);
223
+ }
224
+ }
225
+ export { pullSequenceSync, buildSequenceIdIndex, getSequenceFilePath, buildLookupMaps };
226
+ //# sourceMappingURL=pull-sequences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-sequences.js","sourceRoot":"","sources":["../../src/scripts/pull-sequences.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAQ1C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAS7D,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK;SACT,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,SAAyB;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,SAAyB;IACpE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAkB;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,QAAQ,GAAyB,EAAE,CAAC;IACxC,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,YAAY,GAAuC,EAAE,CAAC;IAC1D,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;QACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAwC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC/E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,aAAa,EAAE,EAAE;SACtD,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM;QAE9B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;QAC/D,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC5C,aAAa,GAAG,YAAY,IAAI,KAAK,CAAC;YACtC,MAAM;QACR,CAAC;QAED,aAAa,GAAG,YAAY,CAAC;QAC7B,KAAK,GAAG,YAAY,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAC1F,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAChE,0DAA0D;YAC1D,MAAM,EAAE,GAAG,OAAO,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACjF,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA+C;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,QAAQ,CAAC,EAAE,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,oEAAoE;AACpE,KAAK,UAAU,eAAe;IAC5B,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,kBAAkB,CAAC,cAAc,EAAE;QACnC,kBAAkB,CAAC,oBAAoB,EAAE;KAC1C,CAAC,CAAC;IAEH,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,WAAW,GAA2B,IAAI,GAAG,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAyB;IAClE,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEhF,IAAI,WAAoC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,WAAW,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,MAAM,oBAAoB,CAAC,aAAa,CAAC;QAC3C,CAAC,CAAC,IAAI,GAAG,EAAkB,CAAC;IAE9B,gDAAgD;IAChD,IAAI,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,WAAW,GAA2B,IAAI,GAAG,EAAE,CAAC;IACpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;QACrC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACjC,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,6BAA6B;QAC7B,IAAI,SAAS,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACtE,QAAQ,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;gBAC1D,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,SAAS;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,+DAA+D;QAC/D,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC;oBAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE9C,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,IAAI,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,2CAA2C,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACvD,IAAI,YAAY,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Push and status for segments.
3
+ * Only Dynamic segments are synced; Static segments are excluded.
4
+ */
5
+ import "dotenv/config";
6
+ import type { RemoteContext } from "../lib/remote-context.js";
7
+ import type { SegmentDetailsDto } from "../lib/automation-types.js";
8
+ interface PushOptions {
9
+ force?: boolean;
10
+ dryRun?: boolean;
11
+ allowDelete?: boolean;
12
+ remoteContext?: RemoteContext;
13
+ }
14
+ interface StatusOptions {
15
+ showDelete?: boolean;
16
+ remoteContext?: RemoteContext;
17
+ }
18
+ export interface SegmentOperation {
19
+ type: "create" | "update" | "delete" | "conflict";
20
+ local?: SegmentDetailsDto;
21
+ remote?: SegmentDetailsDto;
22
+ filePath?: string;
23
+ reason?: string;
24
+ }
25
+ export interface SegmentStatusResult {
26
+ operations: SegmentOperation[];
27
+ totalLocal: number;
28
+ totalRemote: number;
29
+ }
30
+ export declare function buildSegmentStatus(options?: StatusOptions): Promise<SegmentStatusResult>;
31
+ export declare function statusSegments(options?: StatusOptions): Promise<void>;
32
+ export declare function pushSegments(options?: PushOptions): Promise<void>;
33
+ export {};
34
+ //# sourceMappingURL=push-segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-segments.d.ts","sourceRoot":"","sources":["../../src/scripts/push-segments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EACR,iBAAiB,EAIpB,MAAM,4BAA4B,CAAC;AAIpC,UAAU,WAAW;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,UAAU,aAAa;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClD,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAiID,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0DlG;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC/E;AAID,wBAAsB,YAAY,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E3E"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Push and status for segments.
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 { SEGMENTS_DIR } from "./leadcms-helpers.js";
9
+ import { leadCMSDataService } from "../lib/data-service.js";
10
+ import { colorConsole, statusColors } from "../lib/console-colors.js";
11
+ import { logger } from "../lib/logger.js";
12
+ async function readLocalSegments() {
13
+ const results = [];
14
+ let entries;
15
+ try {
16
+ entries = await fs.readdir(SEGMENTS_DIR, { withFileTypes: true });
17
+ }
18
+ catch {
19
+ return results;
20
+ }
21
+ for (const entry of entries) {
22
+ if (!entry.isFile() || !entry.name.endsWith(".json"))
23
+ continue;
24
+ const fullPath = path.join(SEGMENTS_DIR, entry.name);
25
+ try {
26
+ const raw = JSON.parse(await fs.readFile(fullPath, "utf8"));
27
+ const segment = raw?._entityType === "segment" ? raw.data : undefined;
28
+ if (segment) {
29
+ results.push({ filePath: fullPath, segment });
30
+ }
31
+ }
32
+ catch { /* skip */ }
33
+ }
34
+ return results;
35
+ }
36
+ // ── Matching ────────────────────────────────────────────────────────────
37
+ function getRemoteMatch(local, remotes, metadataMap) {
38
+ // Priority 1: match by name
39
+ const nameMatch = remotes.find(r => r.name === local.name);
40
+ if (nameMatch)
41
+ return nameMatch;
42
+ // Priority 2: metadata-map ID
43
+ if (metadataMap?.segments) {
44
+ const entry = metadataMap.segments[local.name];
45
+ if (entry?.id != null) {
46
+ return remotes.find(r => r.id === entry.id);
47
+ }
48
+ }
49
+ // Priority 3: local id
50
+ if (local.id != null) {
51
+ return remotes.find(r => r.id === local.id);
52
+ }
53
+ return undefined;
54
+ }
55
+ // ── Build payload ───────────────────────────────────────────────────────
56
+ function toCreatePayload(seg) {
57
+ return {
58
+ name: seg.name,
59
+ description: seg.description,
60
+ type: seg.type,
61
+ definition: seg.definition,
62
+ };
63
+ }
64
+ function toUpdatePayload(seg) {
65
+ return {
66
+ name: seg.name,
67
+ description: seg.description,
68
+ definition: seg.definition,
69
+ };
70
+ }
71
+ // ── Compare ─────────────────────────────────────────────────────────────
72
+ function hasSegmentChanges(local, remote) {
73
+ if (local.name !== remote.name)
74
+ return true;
75
+ if ((local.description ?? null) !== (remote.description ?? null))
76
+ return true;
77
+ if (JSON.stringify(local.definition ?? null) !== JSON.stringify(remote.definition ?? null))
78
+ return true;
79
+ return false;
80
+ }
81
+ // ── Update local file after push ────────────────────────────────────────
82
+ async function updateLocalFileAfterPush(filePath, response, remoteCtx) {
83
+ if (remoteCtx) {
84
+ try {
85
+ const rc = await import("../lib/remote-context.js");
86
+ const metaMap = await rc.readMetadataMap(remoteCtx);
87
+ rc.setSegmentRemoteId(metaMap, response.name, response.id);
88
+ rc.setMetadataForSegment(metaMap, response.name, {
89
+ id: response.id,
90
+ createdAt: response.createdAt,
91
+ updatedAt: response.updatedAt ?? undefined,
92
+ });
93
+ await rc.writeMetadataMap(remoteCtx, metaMap);
94
+ }
95
+ catch (e) {
96
+ console.warn(`Failed to update remote metadata: ${e.message}`);
97
+ }
98
+ }
99
+ if (remoteCtx && !remoteCtx.isDefault)
100
+ return;
101
+ try {
102
+ const { contactCount, createdById, updatedById, createdByIp, createdByUserAgent, updatedByIp, updatedByUserAgent, contactIds, ...rest } = response;
103
+ const local = {
104
+ _entityType: "segment",
105
+ data: rest,
106
+ };
107
+ await fs.writeFile(filePath, JSON.stringify(local, null, 2) + "\n", "utf8");
108
+ logger.verbose(`[PUSH] Updated local file: ${filePath}`);
109
+ }
110
+ catch (e) {
111
+ logger.verbose(`[PUSH] Failed to update local file ${filePath}: ${e.message}`);
112
+ }
113
+ }
114
+ // ── Status ──────────────────────────────────────────────────────────────
115
+ export async function buildSegmentStatus(options = {}) {
116
+ const { showDelete, remoteContext: remoteCtx } = options;
117
+ const operations = [];
118
+ const localFiles = await readLocalSegments();
119
+ const remoteSegments = (await leadCMSDataService.getAllSegments()).filter(s => s.type !== "Static");
120
+ let metadataMap;
121
+ if (remoteCtx) {
122
+ const rc = await import("../lib/remote-context.js");
123
+ metadataMap = await rc.readMetadataMap(remoteCtx);
124
+ }
125
+ for (const { filePath, segment } of localFiles) {
126
+ const match = getRemoteMatch(segment, remoteSegments, metadataMap);
127
+ if (!match) {
128
+ operations.push({ type: "create", local: segment, filePath });
129
+ continue;
130
+ }
131
+ // Conflict check: remote updated after local
132
+ const localUpdated = segment.updatedAt ? new Date(segment.updatedAt) : new Date(0);
133
+ const remoteUpdated = match.updatedAt ? new Date(match.updatedAt) : new Date(0);
134
+ if (!options.remoteContext && remoteUpdated > localUpdated) {
135
+ operations.push({
136
+ type: "conflict",
137
+ local: segment,
138
+ remote: match,
139
+ filePath,
140
+ reason: "Remote segment updated after local changes",
141
+ });
142
+ continue;
143
+ }
144
+ if (hasSegmentChanges(segment, match)) {
145
+ operations.push({ type: "update", local: segment, remote: match, filePath });
146
+ }
147
+ }
148
+ if (showDelete) {
149
+ const localNames = new Set(localFiles.map(f => f.segment.name));
150
+ const localIds = new Set(localFiles.map(f => f.segment.id).filter((id) => id != null));
151
+ for (const remote of remoteSegments) {
152
+ if (!localNames.has(remote.name) && (remote.id == null || !localIds.has(remote.id))) {
153
+ operations.push({ type: "delete", remote });
154
+ }
155
+ }
156
+ }
157
+ return {
158
+ operations,
159
+ totalLocal: localFiles.length,
160
+ totalRemote: remoteSegments.length,
161
+ };
162
+ }
163
+ export async function statusSegments(options = {}) {
164
+ if (!leadCMSDataService.isApiKeyConfigured()) {
165
+ console.log("\n📊 LeadCMS Segment Status");
166
+ console.log("");
167
+ console.log("⏭️ Segments require authentication — no API key configured, skipping");
168
+ return;
169
+ }
170
+ const result = await buildSegmentStatus(options);
171
+ const { operations } = result;
172
+ colorConsole.important("\n📊 LeadCMS Segment Status");
173
+ colorConsole.log("");
174
+ if (operations.length === 0) {
175
+ colorConsole.success("✅ All segments are in sync!");
176
+ colorConsole.log("");
177
+ return;
178
+ }
179
+ for (const op of operations) {
180
+ const nameLabel = op.local?.name || op.remote?.name || "unknown";
181
+ const idLabel = op.remote?.id ? `(ID: ${op.remote.id})` : "";
182
+ switch (op.type) {
183
+ case "create":
184
+ colorConsole.log(` ${statusColors.created("new: ")} ${colorConsole.highlight(nameLabel)}`);
185
+ break;
186
+ case "update":
187
+ colorConsole.log(` ${statusColors.modified("modified: ")} ${colorConsole.highlight(nameLabel)} ${colorConsole.gray(idLabel)}`);
188
+ break;
189
+ case "conflict":
190
+ colorConsole.log(` ${statusColors.conflict("conflict: ")} ${colorConsole.highlight(nameLabel)} ${colorConsole.gray(idLabel)}`);
191
+ if (op.reason)
192
+ colorConsole.log(` ${colorConsole.gray(op.reason)}`);
193
+ break;
194
+ case "delete":
195
+ colorConsole.log(` ${statusColors.conflict("deleted: ")} ${colorConsole.highlight(nameLabel)} ${colorConsole.gray(idLabel)}`);
196
+ break;
197
+ }
198
+ }
199
+ colorConsole.log("");
200
+ }
201
+ // ── Push ────────────────────────────────────────────────────────────────
202
+ export async function pushSegments(options = {}) {
203
+ if (!leadCMSDataService.isApiKeyConfigured()) {
204
+ console.log("⏭️ Segments require authentication — no API key configured, skipping");
205
+ return;
206
+ }
207
+ const { force, dryRun, allowDelete, remoteContext: remoteCtx } = options;
208
+ if (remoteCtx) {
209
+ leadCMSDataService.configureForRemote(remoteCtx.url, remoteCtx.apiKey);
210
+ logger.verbose(`[PUSH] Using remote "${remoteCtx.name}" (${remoteCtx.url})`);
211
+ }
212
+ let metadataMap;
213
+ if (remoteCtx) {
214
+ const rc = await import("../lib/remote-context.js");
215
+ metadataMap = await rc.readMetadataMap(remoteCtx);
216
+ }
217
+ const localFiles = await readLocalSegments();
218
+ const remoteSegments = (await leadCMSDataService.getAllSegments()).filter(s => s.type !== "Static");
219
+ for (const { filePath, segment } of localFiles) {
220
+ const match = getRemoteMatch(segment, remoteSegments, metadataMap);
221
+ if (!match) {
222
+ if (dryRun) {
223
+ console.log(`🟡 [DRY RUN] Create segment: ${segment.name}`);
224
+ continue;
225
+ }
226
+ const created = await leadCMSDataService.createSegment(toCreatePayload(segment));
227
+ console.log(`✅ Created segment: ${segment.name}`);
228
+ await updateLocalFileAfterPush(filePath, created, remoteCtx);
229
+ continue;
230
+ }
231
+ const localUpdated = segment.updatedAt ? new Date(segment.updatedAt) : new Date(0);
232
+ const remoteUpdated = match.updatedAt ? new Date(match.updatedAt) : new Date(0);
233
+ if (!force && remoteUpdated > localUpdated) {
234
+ console.warn(`⚠️ Remote segment updated after local changes: ${segment.name} — skipping (use --force to override)`);
235
+ continue;
236
+ }
237
+ if (!hasSegmentChanges(segment, match))
238
+ continue;
239
+ if (dryRun) {
240
+ console.log(`🟡 [DRY RUN] Update segment: ${segment.name} (ID ${match.id})`);
241
+ continue;
242
+ }
243
+ const updated = await leadCMSDataService.updateSegment(match.id, toUpdatePayload(segment));
244
+ console.log(`✅ Updated segment: ${segment.name}`);
245
+ await updateLocalFileAfterPush(filePath, updated, remoteCtx);
246
+ }
247
+ if (!allowDelete)
248
+ return;
249
+ const localNames = new Set(localFiles.map(f => f.segment.name));
250
+ const localIds = new Set(localFiles.map(f => f.segment.id).filter((id) => id != null));
251
+ for (const remote of remoteSegments) {
252
+ if (localNames.has(remote.name) || (remote.id != null && localIds.has(remote.id)))
253
+ continue;
254
+ if (dryRun) {
255
+ console.log(`🟡 [DRY RUN] Delete segment: ${remote.name || remote.id}`);
256
+ continue;
257
+ }
258
+ await leadCMSDataService.deleteSegment(remote.id);
259
+ console.log(`🗑️ Deleted segment: ${remote.name || remote.id}`);
260
+ }
261
+ }
262
+ //# sourceMappingURL=push-segments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-segments.js","sourceRoot":"","sources":["../../src/scripts/push-segments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Push and status for sequences.
3
+ * Uses name-based references locally (segment names, email template names)
4
+ * and transforms to/from ID-based references for the API.
5
+ */
6
+ import "dotenv/config";
7
+ import type { RemoteContext } from "../lib/remote-context.js";
8
+ import type { SequenceDetailsDto, LocalSequenceDto } from "../lib/automation-types.js";
9
+ interface PushOptions {
10
+ force?: boolean;
11
+ dryRun?: boolean;
12
+ allowDelete?: boolean;
13
+ remoteContext?: RemoteContext;
14
+ }
15
+ interface StatusOptions {
16
+ showDelete?: boolean;
17
+ remoteContext?: RemoteContext;
18
+ }
19
+ export interface SequenceOperation {
20
+ type: "create" | "update" | "delete" | "conflict";
21
+ local?: LocalSequenceDto;
22
+ remote?: SequenceDetailsDto;
23
+ filePath?: string;
24
+ reason?: string;
25
+ }
26
+ export interface SequenceStatusResult {
27
+ operations: SequenceOperation[];
28
+ totalLocal: number;
29
+ totalRemote: number;
30
+ }
31
+ export declare function buildSequenceStatus(options?: StatusOptions): Promise<SequenceStatusResult>;
32
+ export declare function statusSequences(options?: StatusOptions): Promise<void>;
33
+ export declare function pushSequences(options?: PushOptions): Promise<void>;
34
+ export {};
35
+ //# sourceMappingURL=push-sequences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-sequences.d.ts","sourceRoot":"","sources":["../../src/scripts/push-sequences.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EACR,kBAAkB,EAElB,gBAAgB,EAKnB,MAAM,4BAA4B,CAAC;AAKpC,UAAU,WAAW;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,UAAU,aAAa;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClD,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAkKD,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0DpG;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChF;AAID,wBAAsB,aAAa,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqF5E"}