@revfleet/hscli 0.8.10 → 0.8.12

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 (63) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +31 -2
  3. package/dist/cli.js +27 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auth/index.js +46 -11
  6. package/dist/commands/auth/index.js.map +1 -1
  7. package/dist/commands/crm/activities.d.ts +3 -0
  8. package/dist/commands/crm/activities.js +186 -0
  9. package/dist/commands/crm/activities.js.map +1 -0
  10. package/dist/commands/crm/index.js +4 -0
  11. package/dist/commands/crm/index.js.map +1 -1
  12. package/dist/commands/crm/migration.d.ts +3 -0
  13. package/dist/commands/crm/migration.js +155 -0
  14. package/dist/commands/crm/migration.js.map +1 -0
  15. package/dist/commands/crm/properties.js +105 -18
  16. package/dist/commands/crm/properties.js.map +1 -1
  17. package/dist/commands/crm/property-batch.d.ts +34 -0
  18. package/dist/commands/crm/property-batch.js +205 -0
  19. package/dist/commands/crm/property-batch.js.map +1 -0
  20. package/dist/commands/doctor/index.js +119 -1
  21. package/dist/commands/doctor/index.js.map +1 -1
  22. package/dist/commands/forms/index.js +47 -6
  23. package/dist/commands/forms/index.js.map +1 -1
  24. package/dist/commands/forms/legacy-v2.d.ts +6 -0
  25. package/dist/commands/forms/legacy-v2.js +350 -0
  26. package/dist/commands/forms/legacy-v2.js.map +1 -0
  27. package/dist/commands/forms/property-preflight.d.ts +20 -0
  28. package/dist/commands/forms/property-preflight.js +99 -0
  29. package/dist/commands/forms/property-preflight.js.map +1 -0
  30. package/dist/commands/guide/index.d.ts +6 -0
  31. package/dist/commands/guide/index.js +257 -0
  32. package/dist/commands/guide/index.js.map +1 -0
  33. package/dist/commands/settings/index.js +238 -2
  34. package/dist/commands/settings/index.js.map +1 -1
  35. package/dist/commands/ui/index.d.ts +3 -0
  36. package/dist/commands/ui/index.js +412 -0
  37. package/dist/commands/ui/index.js.map +1 -0
  38. package/dist/core/auth.d.ts +7 -1
  39. package/dist/core/auth.js +45 -7
  40. package/dist/core/auth.js.map +1 -1
  41. package/dist/core/http.d.ts +16 -0
  42. package/dist/core/http.js +141 -40
  43. package/dist/core/http.js.map +1 -1
  44. package/dist/core/output.d.ts +2 -0
  45. package/dist/core/output.js +1 -1
  46. package/dist/core/output.js.map +1 -1
  47. package/dist/core/scopes.d.ts +29 -0
  48. package/dist/core/scopes.js +415 -0
  49. package/dist/core/scopes.js.map +1 -0
  50. package/dist/mcp/ext-tools.d.ts +1 -1
  51. package/dist/mcp/ext-tools.js +52 -1
  52. package/dist/mcp/ext-tools.js.map +1 -1
  53. package/dist/mcp/server.js +90 -22
  54. package/dist/mcp/server.js.map +1 -1
  55. package/docs/CAPABILITY_LIBRARY.md +4 -3
  56. package/docs/COMMAND_TREE.md +23 -5
  57. package/docs/COOKBOOK.md +99 -0
  58. package/docs/MARKETING_SETUP.md +8 -2
  59. package/docs/MCP.md +1 -0
  60. package/docs/OPERATIONAL_PLAYBOOKS.md +1 -1
  61. package/docs/PORTAL_SETUP.md +3 -2
  62. package/docs/SAFETY_MODEL.md +3 -0
  63. package/package.json +1 -1
@@ -28,6 +28,8 @@ import { registerTaxes } from "./taxes.js";
28
28
  import { registerCommunications } from "./communications.js";
29
29
  import { registerUsersObject } from "./users.js";
30
30
  import { registerDatedApi } from "./dated.js";
31
+ import { registerMigration } from "./migration.js";
32
+ import { registerActivities } from "./activities.js";
31
33
  export function registerCrm(program, getCtx) {
32
34
  const crm = program.command("crm").description("HubSpot CRM objects");
33
35
  registerContacts(crm, getCtx);
@@ -60,5 +62,7 @@ export function registerCrm(program, getCtx) {
60
62
  registerCommunications(crm, getCtx);
61
63
  registerUsersObject(crm, getCtx);
62
64
  registerDatedApi(crm, getCtx);
65
+ registerMigration(crm, getCtx);
66
+ registerActivities(crm, getCtx);
63
67
  }
64
68
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/crm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/crm/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../../core/output.js";
3
+ export declare function registerMigration(crm: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,155 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { createClient } from "../../core/http.js";
3
+ import { printResult } from "../../core/output.js";
4
+ import { encodePathSegment } from "./shared.js";
5
+ const DEFAULT_OBJECTS = ["contacts", "companies", "deals", "tickets"];
6
+ const DEFAULT_PIPELINE_OBJECTS = ["deals", "tickets"];
7
+ const DEFAULT_ASSOCIATION_PAIRS = [
8
+ ["contacts", "companies"],
9
+ ["companies", "contacts"],
10
+ ["contacts", "deals"],
11
+ ["deals", "contacts"],
12
+ ["companies", "deals"],
13
+ ["deals", "companies"],
14
+ ["deals", "tickets"],
15
+ ["tickets", "deals"],
16
+ ];
17
+ function parseCsv(raw, fallback) {
18
+ const source = raw?.trim() ? raw : fallback.join(",");
19
+ return source
20
+ .split(",")
21
+ .map((part) => part.trim())
22
+ .filter(Boolean);
23
+ }
24
+ function parsePairs(raw) {
25
+ const source = raw?.trim() ? raw : DEFAULT_ASSOCIATION_PAIRS.map(([from, to]) => `${from}:${to}`).join(",");
26
+ return source
27
+ .split(",")
28
+ .map((part) => part.trim())
29
+ .filter(Boolean)
30
+ .map((part) => part.split(":").map((segment) => segment.trim()))
31
+ .filter((pair) => pair.length === 2 && pair.every(Boolean));
32
+ }
33
+ function serializeError(err) {
34
+ if (err && typeof err === "object") {
35
+ const record = err;
36
+ return {
37
+ code: typeof record.code === "string" ? record.code : "REQUEST_FAILED",
38
+ message: typeof record.message === "string" ? record.message : String(err),
39
+ ...(typeof record.status === "number" ? { status: record.status } : {}),
40
+ };
41
+ }
42
+ return { code: "REQUEST_FAILED", message: String(err) };
43
+ }
44
+ async function capture(client, path) {
45
+ try {
46
+ return { ok: true, data: await client.request(path) };
47
+ }
48
+ catch (err) {
49
+ return { ok: false, error: serializeError(err) };
50
+ }
51
+ }
52
+ function responseResults(value) {
53
+ if (!value.ok || !value.data || typeof value.data !== "object" || Array.isArray(value.data))
54
+ return [];
55
+ const results = value.data.results;
56
+ if (!Array.isArray(results))
57
+ return [];
58
+ return results.filter((item) => item !== null && typeof item === "object" && !Array.isArray(item));
59
+ }
60
+ async function collectPipelineMetadata(client, objectType) {
61
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
62
+ const list = await capture(client, `/crm/v3/pipelines/${objectTypeSegment}`);
63
+ const details = [];
64
+ for (const pipeline of responseResults(list)) {
65
+ if (typeof pipeline.id !== "string" || !pipeline.id.trim())
66
+ continue;
67
+ const pipelineIdSegment = encodePathSegment(pipeline.id, "pipelineId");
68
+ details.push({
69
+ id: pipeline.id,
70
+ pipeline: await capture(client, `/crm/v3/pipelines/${objectTypeSegment}/${pipelineIdSegment}`),
71
+ stages: await capture(client, `/crm/v3/pipelines/${objectTypeSegment}/${pipelineIdSegment}/stages`),
72
+ });
73
+ }
74
+ return { list, details };
75
+ }
76
+ export function registerMigration(crm, getCtx) {
77
+ const migration = crm.command("migration").description("Migration planning and metadata export helpers");
78
+ migration
79
+ .command("export-metadata")
80
+ .description("Export schema/pipeline metadata needed before migrating a HubSpot portal")
81
+ .option("--objects <csv>", "Object types for properties + property groups", DEFAULT_OBJECTS.join(","))
82
+ .option("--pipeline-objects <csv>", "Object types for pipelines + stages", DEFAULT_PIPELINE_OBJECTS.join(","))
83
+ .option("--no-owners", "Do not include CRM owners")
84
+ .option("--no-teams", "Do not include settings teams")
85
+ .option("--no-business-units", "Do not include business units")
86
+ .option("--no-currencies", "Do not include currencies")
87
+ .option("--no-custom-schemas", "Do not include custom object schemas")
88
+ .option("--no-association-labels", "Do not include standard association label metadata")
89
+ .option("--association-pairs <csv>", "Association label pairs as from:to,from:to; supports custom object type IDs")
90
+ .option("--out <file>", "Write the manifest to a JSON file")
91
+ .action(async (opts) => {
92
+ const ctx = getCtx();
93
+ const client = createClient(ctx.profile);
94
+ const objects = parseCsv(opts.objects, DEFAULT_OBJECTS);
95
+ const pipelineObjects = parseCsv(opts.pipelineObjects, DEFAULT_PIPELINE_OBJECTS);
96
+ const propertyGroups = {};
97
+ const properties = {};
98
+ for (const objectType of objects) {
99
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
100
+ propertyGroups[objectType] = await capture(client, `/crm/v3/properties/${objectTypeSegment}/groups`);
101
+ properties[objectType] = await capture(client, `/crm/v3/properties/${objectTypeSegment}`);
102
+ }
103
+ const pipelines = {};
104
+ for (const objectType of pipelineObjects) {
105
+ pipelines[objectType] = await collectPipelineMetadata(client, objectType);
106
+ }
107
+ const associationLabels = {};
108
+ if (opts.associationLabels) {
109
+ for (const [from, to] of parsePairs(opts.associationPairs)) {
110
+ associationLabels[`${from}:${to}`] = await capture(client, `/crm/v4/associations/${encodePathSegment(from, "fromObjectType")}/${encodePathSegment(to, "toObjectType")}/labels`);
111
+ }
112
+ }
113
+ const manifest = {
114
+ manifestVersion: 1,
115
+ generatedAt: new Date().toISOString(),
116
+ profile: ctx.profile,
117
+ intent: "portal-migration-metadata",
118
+ requiredForReplayOrder: [
119
+ "customSchemas",
120
+ "propertyGroups",
121
+ "properties",
122
+ "pipelines",
123
+ "associationLabels",
124
+ "ownersAndTeamsMapping",
125
+ ],
126
+ notes: [
127
+ "Property group labels/displayOrder come from the source portal response; do not derive labels from groupName.",
128
+ "Pipeline metadata includes pipeline detail and stage detail so stage IDs, labels, displayOrder, and metadata can be mapped before record migration.",
129
+ "Owners, teams, currencies, and business units are mapping inputs. They are exported for planning, not blindly replayed.",
130
+ ],
131
+ objects,
132
+ pipelineObjects,
133
+ propertyGroups,
134
+ properties,
135
+ pipelines,
136
+ customSchemas: opts.customSchemas ? await capture(client, "/crm/v3/schemas") : undefined,
137
+ owners: opts.owners ? await capture(client, "/crm/v3/owners/?limit=500") : undefined,
138
+ teams: opts.teams ? await capture(client, "/settings/v3/users/teams") : undefined,
139
+ businessUnits: opts.businessUnits ? await capture(client, "/settings/v3/business-units/?limit=100") : undefined,
140
+ currencies: opts.currencies ? await capture(client, "/settings/v3/currencies") : undefined,
141
+ associationLabels: opts.associationLabels ? associationLabels : undefined,
142
+ recommendedNextCommands: [
143
+ "hscli --dry-run crm properties batch-create contacts --skip-existing --skip-label-collisions --data @contacts-properties.json",
144
+ "hscli --force crm properties batch-create contacts --skip-existing --skip-label-collisions --data @contacts-properties.json",
145
+ "hscli crm pipelines list deals",
146
+ "hscli crm pipelines get deals <pipelineId>",
147
+ ],
148
+ };
149
+ if (opts.out) {
150
+ writeFileSync(String(opts.out), `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
151
+ }
152
+ printResult(ctx, opts.out ? { written: opts.out, ...manifest } : manifest);
153
+ });
154
+ }
155
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/commands/crm/migration.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,27 @@
1
1
  import { createClient } from "../../core/http.js";
2
- import { printResult } from "../../core/output.js";
3
- import { PROPERTY_OBJECT_TYPES, encodePathSegment, maybeWrite, parseJsonPayload, parseNumberFlag, parseSupportedObjectType } from "./shared.js";
2
+ import { CliError, printResult } from "../../core/output.js";
3
+ import { chunkInputs, loadExistingPropertyMetadata, normalizePropertyBatch, normalizePropertyLabel, propertyName, readPropertyInputs } from "./property-batch.js";
4
+ import { encodePathSegment, maybeWrite, parseJsonPayload, parseNumberFlag } from "./shared.js";
5
+ function parseEmptyEnumMode(raw) {
6
+ if (raw === undefined || raw === "skip")
7
+ return "skip";
8
+ if (raw === "demote")
9
+ return "demote";
10
+ throw new CliError("INVALID_FLAG", "--empty-enum must be skip or demote");
11
+ }
4
12
  export function registerProperties(crm, getCtx) {
5
13
  const properties = crm.command("properties").description("Property schema operations");
6
14
  properties.command("list").argument("<objectType>").action(async (objectType) => {
7
15
  const ctx = getCtx();
8
16
  const client = createClient(ctx.profile);
9
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
10
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
17
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
11
18
  const res = await client.request(`/crm/v3/properties/${objectTypeSegment}`);
12
19
  printResult(ctx, res);
13
20
  });
14
21
  properties.command("get").argument("<objectType>").argument("<propertyName>").action(async (objectType, propertyName) => {
15
22
  const ctx = getCtx();
16
23
  const client = createClient(ctx.profile);
17
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
18
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
24
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
19
25
  const propertyNameSegment = encodePathSegment(propertyName, "propertyName");
20
26
  const res = await client.request(`/crm/v3/properties/${objectTypeSegment}/${propertyNameSegment}`);
21
27
  printResult(ctx, res);
@@ -23,12 +29,90 @@ export function registerProperties(crm, getCtx) {
23
29
  properties.command("create").argument("<objectType>").requiredOption("--data <payload>", "Property payload JSON").action(async (objectType, opts) => {
24
30
  const ctx = getCtx();
25
31
  const client = createClient(ctx.profile);
26
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
27
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
32
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
28
33
  const payload = parseJsonPayload(opts.data);
29
34
  const res = await maybeWrite(ctx, client, "POST", `/crm/v3/properties/${objectTypeSegment}`, payload);
30
35
  printResult(ctx, res);
31
36
  });
37
+ properties
38
+ .command("batch-create")
39
+ .description("Create properties in batches; accepts arrays, { inputs }, or properties list dumps with { results }")
40
+ .argument("<objectType>")
41
+ .requiredOption("--data <payload>", "Batch payload JSON, @file, array, { inputs }, or { results } dump")
42
+ .option("--chunk-size <n>", "Properties per batch request", "100")
43
+ .option("--skip-existing", "Fetch existing sandbox properties and skip matching names")
44
+ .option("--skip-label-collisions", "Fetch existing sandbox properties and skip labels already used by another property")
45
+ .option("--include-readonly", "Do not skip hubspotDefined/readOnlyDefinition properties")
46
+ .option("--include-reserved", "Do not skip reserved hs_* property names")
47
+ .option("--empty-enum <mode>", "How to handle enumeration properties with no valid options: skip|demote", "skip")
48
+ .action(async (objectType, opts) => {
49
+ const ctx = getCtx();
50
+ const client = createClient(ctx.profile);
51
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
52
+ const path = `/crm/v3/properties/${objectTypeSegment}/batch/create`;
53
+ const chunkSize = parseNumberFlag(opts.chunkSize, "--chunk-size");
54
+ const rawInputs = readPropertyInputs(opts.data);
55
+ const normalized = normalizePropertyBatch(rawInputs, {
56
+ includeReadonly: Boolean(opts.includeReadonly),
57
+ includeReserved: Boolean(opts.includeReserved),
58
+ emptyEnumMode: parseEmptyEnumMode(opts.emptyEnum),
59
+ });
60
+ let inputs = normalized.inputs;
61
+ const skippedExisting = [];
62
+ const skippedLabelCollisions = [];
63
+ if ((opts.skipExisting || opts.skipLabelCollisions) && inputs.length > 0) {
64
+ const existing = await loadExistingPropertyMetadata(client, objectTypeSegment);
65
+ inputs = inputs.filter((input) => {
66
+ const name = propertyName(input, "");
67
+ if (opts.skipExisting && name !== "" && existing.names.has(name)) {
68
+ skippedExisting.push(name);
69
+ return false;
70
+ }
71
+ const label = normalizePropertyLabel(input.label);
72
+ const existingName = label ? existing.labels.get(label) : undefined;
73
+ if (opts.skipLabelCollisions && label && existingName && existingName !== name) {
74
+ skippedLabelCollisions.push({ name, label: String(input.label), existingName });
75
+ return false;
76
+ }
77
+ return true;
78
+ });
79
+ }
80
+ const chunks = chunkInputs(inputs, chunkSize);
81
+ const summary = {
82
+ objectType,
83
+ endpoint: path,
84
+ totalInput: rawInputs.length,
85
+ requested: inputs.length,
86
+ skippedReadonly: normalized.skippedReadonly,
87
+ skippedReserved: normalized.skippedReserved,
88
+ skippedInvalid: normalized.skippedInvalid,
89
+ skippedExisting,
90
+ skippedLabelCollisions,
91
+ cleanedOptions: normalized.cleanedOptions,
92
+ demotedEnums: normalized.demotedEnums,
93
+ chunkSize,
94
+ chunks: chunks.map((chunk, index) => ({
95
+ index: index + 1,
96
+ count: chunk.length,
97
+ names: chunk.slice(0, 10).map((input, inputIndex) => propertyName(input, `<chunk:${index + 1}:${inputIndex}>`)),
98
+ })),
99
+ previewInputs: inputs.slice(0, 3),
100
+ };
101
+ if (ctx.dryRun) {
102
+ printResult(ctx, { dryRun: true, method: "POST", path, ...summary });
103
+ return;
104
+ }
105
+ if (inputs.length === 0) {
106
+ printResult(ctx, { ...summary, responses: [], noOp: true });
107
+ return;
108
+ }
109
+ const responses = [];
110
+ for (const [index, chunk] of chunks.entries()) {
111
+ const res = await maybeWrite(ctx, client, "POST", path, { inputs: chunk });
112
+ responses.push({ index: index + 1, count: chunk.length, response: res });
113
+ }
114
+ printResult(ctx, { ...summary, responses });
115
+ });
32
116
  properties
33
117
  .command("update")
34
118
  .argument("<objectType>")
@@ -37,8 +121,7 @@ export function registerProperties(crm, getCtx) {
37
121
  .action(async (objectType, propertyName, opts) => {
38
122
  const ctx = getCtx();
39
123
  const client = createClient(ctx.profile);
40
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
41
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
124
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
42
125
  const propertyNameSegment = encodePathSegment(propertyName, "propertyName");
43
126
  const payload = parseJsonPayload(opts.data);
44
127
  const res = await maybeWrite(ctx, client, "PATCH", `/crm/v3/properties/${objectTypeSegment}/${propertyNameSegment}`, payload);
@@ -47,8 +130,7 @@ export function registerProperties(crm, getCtx) {
47
130
  properties.command("delete").argument("<objectType>").argument("<propertyName>").action(async (objectType, propertyName) => {
48
131
  const ctx = getCtx();
49
132
  const client = createClient(ctx.profile);
50
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
51
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
133
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
52
134
  const propertyNameSegment = encodePathSegment(propertyName, "propertyName");
53
135
  const res = await maybeWrite(ctx, client, "DELETE", `/crm/v3/properties/${objectTypeSegment}/${propertyNameSegment}`);
54
136
  printResult(ctx, res);
@@ -62,8 +144,7 @@ export function registerProperties(crm, getCtx) {
62
144
  .action(async (objectType, opts) => {
63
145
  const ctx = getCtx();
64
146
  const client = createClient(ctx.profile);
65
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
66
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
147
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
67
148
  const params = new URLSearchParams();
68
149
  params.set("limit", String(parseNumberFlag(opts.limit, "--limit")));
69
150
  if (opts.after)
@@ -78,8 +159,7 @@ export function registerProperties(crm, getCtx) {
78
159
  .action(async (objectType, opts) => {
79
160
  const ctx = getCtx();
80
161
  const client = createClient(ctx.profile);
81
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
82
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
162
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
83
163
  const payload = parseJsonPayload(opts.data);
84
164
  const res = await maybeWrite(ctx, client, "POST", `/crm/v3/properties/${objectTypeSegment}/groups`, payload);
85
165
  printResult(ctx, res);
@@ -92,12 +172,19 @@ export function registerProperties(crm, getCtx) {
92
172
  .action(async (objectType, groupName, opts) => {
93
173
  const ctx = getCtx();
94
174
  const client = createClient(ctx.profile);
95
- const objectTypeValue = parseSupportedObjectType(objectType, PROPERTY_OBJECT_TYPES, "objectType");
96
- const objectTypeSegment = encodePathSegment(objectTypeValue, "objectType");
175
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
97
176
  const groupNameSegment = encodePathSegment(groupName, "groupName");
98
177
  const payload = parseJsonPayload(opts.data);
99
178
  const res = await maybeWrite(ctx, client, "PATCH", `/crm/v3/properties/${objectTypeSegment}/groups/${groupNameSegment}`, payload);
100
179
  printResult(ctx, res);
101
180
  });
181
+ groups.command("delete").argument("<objectType>").argument("<groupName>").action(async (objectType, groupName) => {
182
+ const ctx = getCtx();
183
+ const client = createClient(ctx.profile);
184
+ const objectTypeSegment = encodePathSegment(objectType, "objectType");
185
+ const groupNameSegment = encodePathSegment(groupName, "groupName");
186
+ const res = await maybeWrite(ctx, client, "DELETE", `/crm/v3/properties/${objectTypeSegment}/groups/${groupNameSegment}`);
187
+ printResult(ctx, res);
188
+ });
102
189
  }
103
190
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/commands/crm/properties.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEhJ,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,MAAwB;IACvE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAEvF,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QAC9E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,iBAAiB,EAAE,CAAC,CAAC;QAC5E,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;QACtH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,iBAAiB,IAAI,mBAAmB,EAAE,CAAC,CAAC;QACnG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QAClJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;QACtG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,cAAc,CAAC;SACxB,QAAQ,CAAC,gBAAgB,CAAC;SAC1B,cAAc,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;QAC/C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,iBAAiB,IAAI,mBAAmB,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9H,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;QACzH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,iBAAiB,IAAI,mBAAmB,EAAE,CAAC,CAAC;QACtH,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAErF,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,cAAc,CAAC;SACxB,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC;SAC3C,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,iBAAiB,WAAW,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,cAAc,CAAC;SACxB,cAAc,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,iBAAiB,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7G,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,cAAc,CAAC;SACxB,QAAQ,CAAC,aAAa,CAAC;SACvB,cAAc,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC,UAAU,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,iBAAiB,WAAW,gBAAgB,EAAE,EAAE,OAAO,CAAC,CAAC;QAClI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/commands/crm/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { HubSpotClient } from "../../core/http.js";
2
+ export type PropertyInput = Record<string, unknown>;
3
+ export type EmptyEnumMode = "skip" | "demote";
4
+ export interface NormalizePropertyBatchOptions {
5
+ includeReadonly?: boolean;
6
+ includeReserved?: boolean;
7
+ emptyEnumMode?: EmptyEnumMode;
8
+ }
9
+ export interface PropertyBatchIssue {
10
+ code: string;
11
+ name: string;
12
+ message: string;
13
+ }
14
+ export interface NormalizedPropertyBatch {
15
+ rawInputs: PropertyInput[];
16
+ inputs: PropertyInput[];
17
+ skippedReadonly: string[];
18
+ skippedReserved: string[];
19
+ skippedInvalid: PropertyBatchIssue[];
20
+ cleanedOptions: PropertyBatchIssue[];
21
+ demotedEnums: PropertyBatchIssue[];
22
+ }
23
+ export interface ExistingPropertyMetadata {
24
+ names: Set<string>;
25
+ labels: Map<string, string>;
26
+ }
27
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
28
+ export declare function readPropertyInputs(raw: string): PropertyInput[];
29
+ export declare function propertyName(input: PropertyInput, fallback: string): string;
30
+ export declare function normalizePropertyBatch(rawInputs: PropertyInput[], options?: NormalizePropertyBatchOptions): NormalizedPropertyBatch;
31
+ export declare function chunkInputs<T>(inputs: T[], chunkSize: number): T[][];
32
+ export declare function loadExistingPropertyNames(client: HubSpotClient, objectTypeSegment: string): Promise<Set<string>>;
33
+ export declare function normalizePropertyLabel(label: unknown): string;
34
+ export declare function loadExistingPropertyMetadata(client: HubSpotClient, objectTypeSegment: string): Promise<ExistingPropertyMetadata>;