@revfleet/hscli 0.8.12 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +166 -1
  2. package/README.md +220 -10
  3. package/dist/cli.js +27 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agent/contracts.d.ts +3 -0
  6. package/dist/commands/agent/contracts.js +139 -0
  7. package/dist/commands/agent/contracts.js.map +1 -0
  8. package/dist/commands/agent/index.d.ts +3 -0
  9. package/dist/commands/agent/index.js +188 -0
  10. package/dist/commands/agent/index.js.map +1 -0
  11. package/dist/commands/agent/recipes.d.ts +13 -0
  12. package/dist/commands/agent/recipes.js +108 -0
  13. package/dist/commands/agent/recipes.js.map +1 -0
  14. package/dist/commands/agent/runner.d.ts +16 -0
  15. package/dist/commands/agent/runner.js +165 -0
  16. package/dist/commands/agent/runner.js.map +1 -0
  17. package/dist/commands/auth/index.js +64 -7
  18. package/dist/commands/auth/index.js.map +1 -1
  19. package/dist/commands/automation/index.js +30 -0
  20. package/dist/commands/automation/index.js.map +1 -1
  21. package/dist/commands/backup/index.d.ts +12 -0
  22. package/dist/commands/backup/index.js +459 -0
  23. package/dist/commands/backup/index.js.map +1 -0
  24. package/dist/commands/cms/content-ops.js +1 -1
  25. package/dist/commands/cms/content-ops.js.map +1 -1
  26. package/dist/commands/communication-preferences/index.js +207 -7
  27. package/dist/commands/communication-preferences/index.js.map +1 -1
  28. package/dist/commands/content-permissions/index.d.ts +22 -0
  29. package/dist/commands/content-permissions/index.js +141 -0
  30. package/dist/commands/content-permissions/index.js.map +1 -0
  31. package/dist/commands/context/index.d.ts +3 -0
  32. package/dist/commands/context/index.js +182 -0
  33. package/dist/commands/context/index.js.map +1 -0
  34. package/dist/commands/crm/associations.js +38 -0
  35. package/dist/commands/crm/associations.js.map +1 -1
  36. package/dist/commands/crm/custom-objects.js +39 -2
  37. package/dist/commands/crm/custom-objects.js.map +1 -1
  38. package/dist/commands/crm/dated.js +3 -3
  39. package/dist/commands/crm/dated.js.map +1 -1
  40. package/dist/commands/crm/migration.js +210 -2
  41. package/dist/commands/crm/migration.js.map +1 -1
  42. package/dist/commands/crm/properties.js +2 -1
  43. package/dist/commands/crm/properties.js.map +1 -1
  44. package/dist/commands/crm/property-batch.d.ts +1 -0
  45. package/dist/commands/crm/property-batch.js +44 -5
  46. package/dist/commands/crm/property-batch.js.map +1 -1
  47. package/dist/commands/crm/shared.js +21 -2
  48. package/dist/commands/crm/shared.js.map +1 -1
  49. package/dist/commands/crm/sync.js +1 -1
  50. package/dist/commands/crm/sync.js.map +1 -1
  51. package/dist/commands/doctor/index.js +193 -0
  52. package/dist/commands/doctor/index.js.map +1 -1
  53. package/dist/commands/email-tracking/index.d.ts +16 -0
  54. package/dist/commands/email-tracking/index.js +314 -0
  55. package/dist/commands/email-tracking/index.js.map +1 -0
  56. package/dist/commands/extensions/index.js +1 -1
  57. package/dist/commands/extensions/index.js.map +1 -1
  58. package/dist/commands/forms/index.js +15 -2
  59. package/dist/commands/forms/index.js.map +1 -1
  60. package/dist/commands/forms/legacy-v2.d.ts +7 -2
  61. package/dist/commands/forms/legacy-v2.js +103 -7
  62. package/dist/commands/forms/legacy-v2.js.map +1 -1
  63. package/dist/commands/guide/index.d.ts +1 -1
  64. package/dist/commands/guide/index.js +37 -4
  65. package/dist/commands/guide/index.js.map +1 -1
  66. package/dist/commands/internal/catalog.d.ts +1 -0
  67. package/dist/commands/internal/catalog.js +2 -0
  68. package/dist/commands/internal/catalog.js.map +1 -0
  69. package/dist/commands/internal/index.d.ts +26 -0
  70. package/dist/commands/internal/index.js +823 -0
  71. package/dist/commands/internal/index.js.map +1 -0
  72. package/dist/commands/internal-session.d.ts +15 -0
  73. package/dist/commands/internal-session.js +152 -0
  74. package/dist/commands/internal-session.js.map +1 -0
  75. package/dist/commands/lists/index.js +1 -1
  76. package/dist/commands/lists/index.js.map +1 -1
  77. package/dist/commands/marketing/email-audit.d.ts +32 -0
  78. package/dist/commands/marketing/email-audit.js +121 -0
  79. package/dist/commands/marketing/email-audit.js.map +1 -0
  80. package/dist/commands/marketing/index.js +2 -0
  81. package/dist/commands/marketing/index.js.map +1 -1
  82. package/dist/commands/mcp.js +5 -3
  83. package/dist/commands/mcp.js.map +1 -1
  84. package/dist/commands/playbooks/index.d.ts +3 -0
  85. package/dist/commands/playbooks/index.js +228 -0
  86. package/dist/commands/playbooks/index.js.map +1 -0
  87. package/dist/commands/portals/index.d.ts +3 -0
  88. package/dist/commands/portals/index.js +132 -0
  89. package/dist/commands/portals/index.js.map +1 -0
  90. package/dist/commands/reports/index.d.ts +3 -0
  91. package/dist/commands/reports/index.js +479 -0
  92. package/dist/commands/reports/index.js.map +1 -0
  93. package/dist/commands/sales-content/index.d.ts +13 -0
  94. package/dist/commands/sales-content/index.js +59 -0
  95. package/dist/commands/sales-content/index.js.map +1 -0
  96. package/dist/commands/sales-templates/index.d.ts +3 -0
  97. package/dist/commands/sales-templates/index.js +88 -0
  98. package/dist/commands/sales-templates/index.js.map +1 -0
  99. package/dist/commands/seed/cms.js +28 -45
  100. package/dist/commands/seed/cms.js.map +1 -1
  101. package/dist/commands/sequences/index.d.ts +18 -0
  102. package/dist/commands/sequences/index.js +263 -0
  103. package/dist/commands/sequences/index.js.map +1 -0
  104. package/dist/commands/settings/index.js +450 -102
  105. package/dist/commands/settings/index.js.map +1 -1
  106. package/dist/commands/settings/site-settings.d.ts +3 -0
  107. package/dist/commands/settings/site-settings.js +106 -0
  108. package/dist/commands/settings/site-settings.js.map +1 -0
  109. package/dist/commands/ui/index.js +14 -4
  110. package/dist/commands/ui/index.js.map +1 -1
  111. package/dist/commands/workflows/index.js +2 -0
  112. package/dist/commands/workflows/index.js.map +1 -1
  113. package/dist/commands/workflows/preflight.d.ts +23 -0
  114. package/dist/commands/workflows/preflight.js +295 -0
  115. package/dist/commands/workflows/preflight.js.map +1 -0
  116. package/dist/core/action-contract.d.ts +43 -0
  117. package/dist/core/action-contract.js +207 -0
  118. package/dist/core/action-contract.js.map +1 -0
  119. package/dist/core/auth.d.ts +6 -0
  120. package/dist/core/auth.js +85 -0
  121. package/dist/core/auth.js.map +1 -1
  122. package/dist/core/http.d.ts +8 -0
  123. package/dist/core/http.js +37 -5
  124. package/dist/core/http.js.map +1 -1
  125. package/dist/core/id-maps.d.ts +27 -0
  126. package/dist/core/id-maps.js +204 -0
  127. package/dist/core/id-maps.js.map +1 -0
  128. package/dist/core/output.d.ts +2 -1
  129. package/dist/core/output.js +34 -0
  130. package/dist/core/output.js.map +1 -1
  131. package/dist/mcp/profiles.d.ts +14 -0
  132. package/dist/mcp/profiles.js +68 -0
  133. package/dist/mcp/profiles.js.map +1 -0
  134. package/dist/mcp/server.d.ts +5 -3
  135. package/dist/mcp/server.js +22 -5
  136. package/dist/mcp/server.js.map +1 -1
  137. package/docs/CAPABILITY_LIBRARY.md +29 -8
  138. package/docs/COMMAND_TREE.md +96 -17
  139. package/docs/COMPARISON.md +8 -5
  140. package/docs/COOKBOOK.md +124 -5
  141. package/docs/INTERNAL-ENDPOINTS-DISCOVERY.md +813 -0
  142. package/docs/INTERNAL-ENDPOINTS.md +371 -0
  143. package/docs/INTERNAL_ENDPOINTS.md +243 -0
  144. package/docs/MARKETING_SETUP.md +21 -1
  145. package/docs/MCP.md +28 -89
  146. package/docs/MCP_TOOL_CATALOG.md +192 -0
  147. package/docs/MIGRATION_ADAPTERS.md +115 -0
  148. package/docs/PORTAL_BACKUP.md +212 -0
  149. package/docs/PUBLISHING.md +1 -1
  150. package/docs/SALES_CONTENT_INTERNAL_PUNCH_LIST.md +504 -0
  151. package/docs/TUTORIALS/secure-agent-writes.md +49 -0
  152. package/docs/WHY_HOW_WHAT.md +10 -4
  153. package/package.json +4 -2
@@ -0,0 +1,88 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { CliError, printResult } from "../../core/output.js";
3
+ import { encodePathSegment } from "../crm/shared.js";
4
+ import { addBrowserSessionOptions, resolveBrowserSession } from "../internal-session.js";
5
+ export function registerSalesTemplates(program, getCtx) {
6
+ const templates = program
7
+ .command("sales-templates")
8
+ .description("Internal HubSpot sales-template backup helpers");
9
+ addBrowserSessionOptions(templates
10
+ .command("list")
11
+ .description("List sales templates through the internal template catalog")).action(async (opts) => {
12
+ const ctx = getCtx();
13
+ const session = resolveBrowserSession(ctx, opts, "Sales-template list", true);
14
+ const res = await session.client.request(`/api/templates/v1/templates?portalId=${encodeURIComponent(session.portalId)}`);
15
+ printResult(ctx, res);
16
+ });
17
+ addBrowserSessionOptions(templates
18
+ .command("get")
19
+ .argument("<id>")
20
+ .description("Fetch a full internal sales-template payload")).action(async (id, opts) => {
21
+ const ctx = getCtx();
22
+ const session = resolveBrowserSession(ctx, opts, "Sales-template get", true);
23
+ const templateId = encodePathSegment(id, "templateId");
24
+ const res = await session.client.request(`/api/sales-templates/v2/templates/${templateId}?portalId=${encodeURIComponent(session.portalId)}`);
25
+ printResult(ctx, res);
26
+ });
27
+ addBrowserSessionOptions(templates
28
+ .command("usage")
29
+ .description("Read sales-template quota and usage")).action(async (opts) => {
30
+ const ctx = getCtx();
31
+ const session = resolveBrowserSession(ctx, opts, "Sales-template usage", true);
32
+ const res = await session.client.request(`/api/sales-templates/v2/templates/usage?portalId=${encodeURIComponent(session.portalId)}`);
33
+ printResult(ctx, res);
34
+ });
35
+ addBrowserSessionOptions(templates
36
+ .command("create")
37
+ .description("Create a sales template via POST /api/sales-templates/v2/templates")
38
+ .option("--name <name>", "Template name")
39
+ .option("--subject <subject>", "Email subject line")
40
+ .option("--body <html>", "Body HTML inline")
41
+ .option("--body-file <path>", "Read body HTML from a file")
42
+ .option("--folder-id <id>", "Optional folderId")
43
+ .option("--from-file <path>", "Read the entire create payload from JSON file (overrides other flags)")).action(async (opts) => {
44
+ const ctx = getCtx();
45
+ const session = resolveBrowserSession(ctx, opts, "Sales-template create", true);
46
+ const body = opts.fromFile ? readJsonFileFlag(opts.fromFile, "--from-file") : buildCreateTemplateBody(opts);
47
+ const res = await session.client.request(`/api/sales-templates/v2/templates?portalId=${encodeURIComponent(session.portalId)}`, { method: "POST", body, permissionMode: "write" });
48
+ printResult(ctx, res);
49
+ });
50
+ }
51
+ function buildCreateTemplateBody(opts) {
52
+ if (!opts.name?.trim()) {
53
+ throw new CliError("INVALID_FLAG", "--name is required for sales-templates create (or use --from-file)");
54
+ }
55
+ const body = { name: opts.name.trim() };
56
+ if (opts.subject !== undefined)
57
+ body.subject = opts.subject;
58
+ if (opts.bodyFile)
59
+ body.body = readFileFlag(opts.bodyFile, "--body-file");
60
+ else if (opts.body !== undefined)
61
+ body.body = opts.body;
62
+ if (opts.folderId) {
63
+ const n = Number(opts.folderId);
64
+ if (!Number.isInteger(n) || n <= 0) {
65
+ throw new CliError("INVALID_FLAG", "--folder-id must be a positive integer");
66
+ }
67
+ body.folderId = n;
68
+ }
69
+ return body;
70
+ }
71
+ function readFileFlag(path, flag) {
72
+ try {
73
+ return readFileSync(path, "utf8");
74
+ }
75
+ catch (err) {
76
+ throw new CliError("INVALID_FLAG", `${flag} cannot read ${path}: ${err instanceof Error ? err.message : String(err)}`);
77
+ }
78
+ }
79
+ function readJsonFileFlag(path, flag) {
80
+ const raw = readFileFlag(path, flag);
81
+ try {
82
+ return JSON.parse(raw);
83
+ }
84
+ catch {
85
+ throw new CliError("INVALID_JSON", `${flag} payload is not valid JSON`);
86
+ }
87
+ }
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sales-templates/index.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ import { errorReason, nowIso, safeCreate } from "./shared.js";
5
5
  */
6
6
  export async function seedCms(ctx, result) {
7
7
  const { client, runSuffix } = ctx;
8
+ const seededSitePages = [];
9
+ const seededLandingPages = [];
8
10
  // --- URL redirect ---
9
11
  try {
10
12
  const rec = await safeCreate(client, "/cms/v3/url-redirects", {
@@ -37,8 +39,10 @@ export async function seedCms(ctx, result) {
37
39
  metaDescription: "A sample site page created by hscli seed for testing.",
38
40
  language: "en",
39
41
  });
40
- if (rec)
42
+ if (rec) {
41
43
  result.created.push({ type: "site_page", name: pageName, id: rec.id });
44
+ seededSitePages.push({ id: rec.id, name: pageName });
45
+ }
42
46
  }
43
47
  catch (err) {
44
48
  result.skipped.push({ type: "site_page", name: "HubCLI Seed Site Page", reason: errorReason(err) });
@@ -52,8 +56,10 @@ export async function seedCms(ctx, result) {
52
56
  htmlTitle: "HubCLI Seed Landing Page",
53
57
  language: "en",
54
58
  });
55
- if (rec)
59
+ if (rec) {
56
60
  result.created.push({ type: "landing_page", name: lpName, id: rec.id });
61
+ seededLandingPages.push({ id: rec.id, name: lpName });
62
+ }
57
63
  }
58
64
  catch (err) {
59
65
  result.skipped.push({ type: "landing_page", name: "HubCLI Seed Landing Page", reason: errorReason(err) });
@@ -136,49 +142,9 @@ export async function seedCms(ctx, result) {
136
142
  catch (err) {
137
143
  result.skipped.push({ type: "hubdb_table", name: "hscli_seed_table", reason: errorReason(err) });
138
144
  }
139
- // --- Revisions + push-live for site-pages/landing-pages ---
140
- try {
141
- const sitePages = await client.request("/cms/v3/pages/site-pages?limit=5");
142
- for (const sp of sitePages.results?.slice(0, 2) ?? []) {
143
- if (!sp.id)
144
- continue;
145
- try {
146
- await client.request(`/cms/v3/pages/site-pages/${sp.id}/draft`, {
147
- method: "PATCH",
148
- body: { metaDescription: `Revised by hscli seed at ${nowIso()}` },
149
- });
150
- result.created.push({ type: "revision:site_page", name: sp.name || sp.id, id: sp.id });
151
- try {
152
- await client.request(`/cms/v3/pages/site-pages/${sp.id}/draft/push-live`, { method: "POST", body: {} });
153
- result.created.push({ type: "publish:site_page", name: sp.name || sp.id, id: sp.id });
154
- }
155
- catch { /* ignore publish failure */ }
156
- }
157
- catch { /* ignore */ }
158
- }
159
- }
160
- catch { /* ignore */ }
161
- try {
162
- const lpList = await client.request("/cms/v3/pages/landing-pages?limit=5");
163
- for (const lp of lpList.results?.slice(0, 2) ?? []) {
164
- if (!lp.id)
165
- continue;
166
- try {
167
- await client.request(`/cms/v3/pages/landing-pages/${lp.id}/draft`, {
168
- method: "PATCH",
169
- body: { metaDescription: `Revised by hscli seed at ${nowIso()}` },
170
- });
171
- result.created.push({ type: "revision:landing_page", name: lp.name || lp.id, id: lp.id });
172
- try {
173
- await client.request(`/cms/v3/pages/landing-pages/${lp.id}/draft/push-live`, { method: "POST", body: {} });
174
- result.created.push({ type: "publish:landing_page", name: lp.name || lp.id, id: lp.id });
175
- }
176
- catch { /* ignore */ }
177
- }
178
- catch { /* ignore */ }
179
- }
180
- }
181
- catch { /* ignore */ }
145
+ // --- Revisions + push-live only for pages created by this seed run ---
146
+ await reviseAndPublishSeededPages(client, result, "site_page", "/cms/v3/pages/site-pages", seededSitePages);
147
+ await reviseAndPublishSeededPages(client, result, "landing_page", "/cms/v3/pages/landing-pages", seededLandingPages);
182
148
  // --- Attempt to create a blog (requires a connected domain) ---
183
149
  try {
184
150
  const existingBlogs = await client.request("/cms/v3/blogs/posts?limit=1");
@@ -201,4 +167,21 @@ export async function seedCms(ctx, result) {
201
167
  }
202
168
  catch { /* ignore */ }
203
169
  }
170
+ async function reviseAndPublishSeededPages(client, result, type, basePath, pages) {
171
+ for (const page of pages) {
172
+ try {
173
+ await client.request(`${basePath}/${page.id}/draft`, {
174
+ method: "PATCH",
175
+ body: { metaDescription: `Revised by hscli seed at ${nowIso()}` },
176
+ });
177
+ result.created.push({ type: `revision:${type}`, name: page.name, id: page.id });
178
+ try {
179
+ await client.request(`${basePath}/${page.id}/draft/push-live`, { method: "POST", body: {} });
180
+ result.created.push({ type: `publish:${type}`, name: page.name, id: page.id });
181
+ }
182
+ catch { /* ignore publish failure */ }
183
+ }
184
+ catch { /* ignore revision failure */ }
185
+ }
186
+ }
204
187
  //# sourceMappingURL=cms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cms.js","sourceRoot":"","sources":["../../../src/commands/seed/cms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cms.js","sourceRoot":"","sources":["../../../src/commands/seed/cms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from "commander";
2
+ import type { HubSpotClient } from "../../core/http.js";
3
+ import type { CliContext } from "../../core/output.js";
4
+ export declare function registerSequencesInternal(program: Command, getCtx: () => CliContext): void;
5
+ interface BuildEggOptions {
6
+ destPortalId: number;
7
+ ownerId: number;
8
+ templateMap: Map<number | string, number>;
9
+ rename?: string;
10
+ }
11
+ /**
12
+ * Strip server-set IDs/timestamps from a source sequence payload and
13
+ * remap owner + template references so it can be POSTed to a
14
+ * destination portal.
15
+ */
16
+ export declare function buildSequenceEgg(sequence: Record<string, unknown>, options: BuildEggOptions): Record<string, unknown>;
17
+ export declare function createSequence(client: HubSpotClient, portalId: string, sequenceEgg: unknown): Promise<unknown>;
18
+ export {};
@@ -0,0 +1,263 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { CliError, printResult } from "../../core/output.js";
3
+ import { encodePathSegment } from "../crm/shared.js";
4
+ import { addBrowserSessionOptions, resolveBrowserSession } from "../internal-session.js";
5
+ import { searchSalesContent } from "../sales-content/index.js";
6
+ import { setContentPermissions } from "../content-permissions/index.js";
7
+ export function registerSequencesInternal(program, getCtx) {
8
+ const sequences = program
9
+ .command("sequences")
10
+ .description("Internal HubSpot sequences backup/migration helpers");
11
+ addBrowserSessionOptions(sequences
12
+ .command("list")
13
+ .option("--query <query>", "Search query", "")
14
+ .option("--limit <n>", "Page size", "100")
15
+ .option("--offset <n>", "Offset", "0")).action(async (opts) => {
16
+ const ctx = getCtx();
17
+ const session = resolveBrowserSession(ctx, opts, "Internal sequence list", true);
18
+ const res = await searchSalesContent(session.client, session.portalId, { ...opts, type: "SEQUENCE" });
19
+ printResult(ctx, res);
20
+ });
21
+ addBrowserSessionOptions(sequences
22
+ .command("get")
23
+ .argument("<id>")
24
+ .description("Fetch the internal full sequence payload")).action(async (id, opts) => {
25
+ const ctx = getCtx();
26
+ const session = resolveBrowserSession(ctx, opts, "Internal sequence get", true);
27
+ const sequenceId = encodePathSegment(id, "sequenceId");
28
+ const res = await session.client.request(`/api/sequences/v3/sequences/${sequenceId}?portalId=${encodeURIComponent(session.portalId)}`);
29
+ printResult(ctx, res);
30
+ });
31
+ addBrowserSessionOptions(sequences
32
+ .command("create")
33
+ .description("POST a new sequence from a sequenceEgg JSON payload")
34
+ .requiredOption("--from-file <path>", "Path to a JSON file containing { sequenceEgg: {...} } or a bare sequenceEgg")).action(async (opts) => {
35
+ const ctx = getCtx();
36
+ const session = resolveBrowserSession(ctx, opts, "Internal sequence create", true);
37
+ const body = readSequenceEggFile(opts.fromFile);
38
+ const res = await session.client.request(`/api/sequences/v3/sequences/create?portalId=${encodeURIComponent(session.portalId)}`, { method: "POST", body, permissionMode: "write" });
39
+ printResult(ctx, res);
40
+ });
41
+ addBrowserSessionOptions(sequences
42
+ .command("delete")
43
+ .description("Batch-delete sequences via DELETE /api/sequences/v3/sequences/batch")
44
+ .requiredOption("--ids <ids>", "Comma-separated sequence IDs")).action(async (opts) => {
45
+ const ctx = getCtx();
46
+ const session = resolveBrowserSession(ctx, opts, "Internal sequence delete", true);
47
+ const ids = parseIdList(opts.ids, "--ids");
48
+ const res = await session.client.request(`/api/sequences/v3/sequences/batch?portalId=${encodeURIComponent(session.portalId)}`, { method: "DELETE", body: { ids }, permissionMode: "write" });
49
+ printResult(ctx, res);
50
+ });
51
+ addBrowserSessionOptions(sequences
52
+ .command("migrate")
53
+ .description("Migrate a sequence src→dest: fetch source body, remap templateIds + owner, create on dest, set permissions")
54
+ .argument("<id>", "Source sequence ID")
55
+ .requiredOption("--src-portal-id <id>", "Source portal ID")
56
+ .option("--src-cookie <header>", "Source browser cookie (defaults to --cookie)")
57
+ .option("--src-cookie-file <path>", "Source cookie file (defaults to --cookie-file)")
58
+ .option("--src-csrf <token>", "Source CSRF token (defaults to --csrf)")
59
+ .requiredOption("--owner-id <id>", "Destination owner userId (sequence.userId)")
60
+ .option("--template-map <path>", "Path to JSON map { srcTemplateId: dstTemplateId } to remap email steps")
61
+ .option("--teams <ids>", "Comma-separated team IDs for destination permissions")
62
+ .option("--users <ids>", "Comma-separated user IDs for destination permissions (defaults to --owner-id)")
63
+ .option("--rename <name>", "Override the sequence name on destination")
64
+ .option("--dry-run", "Print transformed sequenceEgg without POSTing")).action(async (id, opts) => {
65
+ const ctx = getCtx();
66
+ const destSession = resolveBrowserSession(ctx, opts, "Sequence migrate destination", true);
67
+ const srcSession = resolveBrowserSession(ctx, {
68
+ portalId: opts.srcPortalId,
69
+ cookie: opts.srcCookie ?? opts.cookie,
70
+ cookieFile: opts.srcCookieFile ?? opts.cookieFile,
71
+ csrf: opts.srcCsrf ?? opts.csrf,
72
+ uiDomain: opts.uiDomain,
73
+ }, "Sequence migrate source", true);
74
+ const sequenceId = encodePathSegment(id, "sequenceId");
75
+ const srcRes = (await srcSession.client.request(`/api/sequences/v3/sequences/${sequenceId}?portalId=${encodeURIComponent(srcSession.portalId)}`));
76
+ if (!srcRes?.sequence) {
77
+ throw new CliError("MIGRATE_NO_SOURCE", `Source sequence ${id} did not return a sequence payload`);
78
+ }
79
+ const templateMap = opts.templateMap ? parseTemplateMap(readFileFlag(opts.templateMap, "--template-map")) : new Map();
80
+ const ownerId = Number(opts.ownerId);
81
+ if (!Number.isInteger(ownerId) || ownerId <= 0) {
82
+ throw new CliError("INVALID_FLAG", "--owner-id must be a positive integer");
83
+ }
84
+ const egg = buildSequenceEgg(srcRes.sequence, {
85
+ destPortalId: Number(destSession.portalId),
86
+ ownerId,
87
+ templateMap,
88
+ rename: opts.rename,
89
+ });
90
+ if (ctx.dryRun || opts.dryRun) {
91
+ printResult(ctx, { dryRun: true, sequenceEgg: egg });
92
+ return;
93
+ }
94
+ const createRes = (await destSession.client.request(`/api/sequences/v3/sequences/create?portalId=${encodeURIComponent(destSession.portalId)}`, { method: "POST", body: { sequenceEgg: egg }, permissionMode: "write" }));
95
+ const newId = createRes?.sequence?.id;
96
+ let permResult = null;
97
+ if (newId && (opts.teams || opts.users)) {
98
+ const teamIds = opts.teams ? parseIdList(opts.teams, "--teams") : [];
99
+ const userIds = opts.users ? parseIdList(opts.users, "--users") : [ownerId];
100
+ permResult = await setContentPermissions(destSession.client, destSession.portalId, {
101
+ objectType: "SEQUENCE",
102
+ objectIds: [newId],
103
+ teamIds,
104
+ userIds,
105
+ visibleToAll: false,
106
+ private: false,
107
+ });
108
+ }
109
+ printResult(ctx, { newSequenceId: newId, create: createRes, permissions: permResult });
110
+ });
111
+ }
112
+ /**
113
+ * Strip server-set IDs/timestamps from a source sequence payload and
114
+ * remap owner + template references so it can be POSTed to a
115
+ * destination portal.
116
+ */
117
+ export function buildSequenceEgg(sequence, options) {
118
+ const cloned = deepClone(sequence);
119
+ delete cloned.id;
120
+ delete cloned.createdAt;
121
+ delete cloned.updatedAt;
122
+ delete cloned.deletedAt;
123
+ cloned.portalId = options.destPortalId;
124
+ cloned.userId = options.ownerId;
125
+ cloned.folderId = null;
126
+ if (typeof options.rename === "string" && options.rename.trim()) {
127
+ cloned.name = options.rename.trim();
128
+ }
129
+ cloned.active = "INACTIVE";
130
+ const steps = Array.isArray(cloned.steps) ? cloned.steps : [];
131
+ cloned.steps = steps
132
+ .filter((s) => Boolean(s) && typeof s === "object")
133
+ .filter((s) => s.actionType !== "FINISH_ENROLLMENT") // server appends FINISH_ENROLLMENT automatically
134
+ .map((step) => {
135
+ const copy = { ...step };
136
+ delete copy.id;
137
+ delete copy.sequenceId;
138
+ delete copy.createdAt;
139
+ delete copy.updatedAt;
140
+ delete copy.deletedAt;
141
+ if (copy.emailPattern && typeof copy.emailPattern === "object") {
142
+ const emailPattern = { ...copy.emailPattern };
143
+ delete emailPattern.id;
144
+ delete emailPattern.sequenceId;
145
+ delete emailPattern.sequenceStepId;
146
+ delete emailPattern.createdAt;
147
+ delete emailPattern.updatedAt;
148
+ delete emailPattern.deletedAt;
149
+ const srcTpl = emailPattern.templateId;
150
+ if (typeof srcTpl === "number" || typeof srcTpl === "string") {
151
+ const mapped = options.templateMap.get(srcTpl) ?? options.templateMap.get(String(srcTpl));
152
+ if (mapped)
153
+ emailPattern.templateId = mapped;
154
+ }
155
+ copy.emailPattern = emailPattern;
156
+ }
157
+ if (copy.taskPattern && typeof copy.taskPattern === "object") {
158
+ const taskPattern = { ...copy.taskPattern };
159
+ delete taskPattern.id;
160
+ delete taskPattern.sequenceId;
161
+ delete taskPattern.sequenceStepId;
162
+ delete taskPattern.createdAt;
163
+ delete taskPattern.updatedAt;
164
+ delete taskPattern.deletedAt;
165
+ copy.taskPattern = taskPattern;
166
+ }
167
+ return copy;
168
+ });
169
+ const deps = Array.isArray(cloned.dependencies) ? cloned.dependencies : [];
170
+ cloned.dependencies = deps
171
+ .filter((d) => Boolean(d) && typeof d === "object")
172
+ .map((dep) => {
173
+ const copy = { ...dep };
174
+ delete copy.id;
175
+ delete copy.sequenceId;
176
+ delete copy.portalId;
177
+ delete copy.createdAt;
178
+ delete copy.updatedAt;
179
+ delete copy.deletedAt;
180
+ // Server resolves new sequenceStepIds from stepOrder + branchNumber refs
181
+ delete copy.requiredBySequenceStepId;
182
+ delete copy.reliesOnSequenceStepId;
183
+ return copy;
184
+ });
185
+ return cloned;
186
+ }
187
+ function readSequenceEggFile(path) {
188
+ let raw;
189
+ try {
190
+ raw = readFileSync(path, "utf8");
191
+ }
192
+ catch (err) {
193
+ throw new CliError("INVALID_FLAG", `--from-file cannot read ${path}: ${err instanceof Error ? err.message : String(err)}`);
194
+ }
195
+ let parsed;
196
+ try {
197
+ parsed = JSON.parse(raw);
198
+ }
199
+ catch {
200
+ throw new CliError("INVALID_JSON", "--from-file payload is not valid JSON");
201
+ }
202
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed) && "sequenceEgg" in parsed) {
203
+ return parsed;
204
+ }
205
+ return { sequenceEgg: parsed };
206
+ }
207
+ function parseTemplateMap(raw) {
208
+ let parsed;
209
+ try {
210
+ parsed = JSON.parse(raw);
211
+ }
212
+ catch {
213
+ throw new CliError("INVALID_JSON", "--template-map payload is not valid JSON");
214
+ }
215
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
216
+ throw new CliError("INVALID_JSON", "--template-map must be a JSON object of {srcId: dstId}");
217
+ }
218
+ const out = new Map();
219
+ for (const [k, v] of Object.entries(parsed)) {
220
+ const dst = Number(v);
221
+ if (!Number.isInteger(dst) || dst <= 0) {
222
+ throw new CliError("INVALID_JSON", `--template-map values must be positive integers (key ${k})`);
223
+ }
224
+ const numKey = Number(k);
225
+ if (Number.isInteger(numKey))
226
+ out.set(numKey, dst);
227
+ out.set(k, dst);
228
+ }
229
+ return out;
230
+ }
231
+ function parseIdList(raw, flag) {
232
+ const items = raw.split(",").map((s) => s.trim()).filter(Boolean);
233
+ if (!items.length) {
234
+ throw new CliError("INVALID_FLAG", `${flag} must contain at least one ID`);
235
+ }
236
+ return items.map((item) => {
237
+ const n = Number(item);
238
+ if (!Number.isInteger(n) || n <= 0) {
239
+ throw new CliError("INVALID_FLAG", `${flag} entries must be positive integers (got: ${item})`);
240
+ }
241
+ return n;
242
+ });
243
+ }
244
+ function readFileFlag(path, flag) {
245
+ try {
246
+ return readFileSync(path, "utf8");
247
+ }
248
+ catch (err) {
249
+ throw new CliError("INVALID_FLAG", `${flag} cannot read ${path}: ${err instanceof Error ? err.message : String(err)}`);
250
+ }
251
+ }
252
+ function deepClone(value) {
253
+ return JSON.parse(JSON.stringify(value));
254
+ }
255
+ // Helper available for callers that want to inject a HubSpot client directly (tests, automation).
256
+ export async function createSequence(client, portalId, sequenceEgg) {
257
+ return client.request(`/api/sequences/v3/sequences/create?portalId=${encodeURIComponent(portalId)}`, {
258
+ method: "POST",
259
+ body: { sequenceEgg },
260
+ permissionMode: "write",
261
+ });
262
+ }
263
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sequences/index.ts"],"names":[],"mappings":"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"}