@revfleet/hscli 0.8.7 → 0.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +247 -0
- package/CONTRIBUTING.md +120 -0
- package/README.md +42 -8
- package/brand/readme-hero.svg +25 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/account/index.js +5 -6
- package/dist/commands/account/index.js.map +1 -1
- package/dist/commands/api/index.js +43 -3
- package/dist/commands/api/index.js.map +1 -1
- package/dist/commands/auth/index.js +74 -13
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/cms/hubdb.js +31 -0
- package/dist/commands/cms/hubdb.js.map +1 -1
- package/dist/commands/cms/index.js +27 -0
- package/dist/commands/cms/index.js.map +1 -1
- package/dist/commands/cms/source-code.js +21 -0
- package/dist/commands/cms/source-code.js.map +1 -1
- package/dist/commands/communication-preferences/index.js +11 -12
- package/dist/commands/communication-preferences/index.js.map +1 -1
- package/dist/commands/crm/activities.d.ts +3 -0
- package/dist/commands/crm/activities.js +186 -0
- package/dist/commands/crm/activities.js.map +1 -0
- package/dist/commands/crm/index.js +4 -0
- package/dist/commands/crm/index.js.map +1 -1
- package/dist/commands/crm/migration.d.ts +3 -0
- package/dist/commands/crm/migration.js +155 -0
- package/dist/commands/crm/migration.js.map +1 -0
- package/dist/commands/crm/properties.js +105 -18
- package/dist/commands/crm/properties.js.map +1 -1
- package/dist/commands/crm/property-batch.d.ts +34 -0
- package/dist/commands/crm/property-batch.js +205 -0
- package/dist/commands/crm/property-batch.js.map +1 -0
- package/dist/commands/crm/shared.d.ts +1 -0
- package/dist/commands/crm/shared.js +3 -4
- package/dist/commands/crm/shared.js.map +1 -1
- package/dist/commands/doctor/index.js +119 -1
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/commands/events/index.js +7 -8
- package/dist/commands/events/index.js.map +1 -1
- package/dist/commands/forms/index.js +47 -6
- package/dist/commands/forms/index.js.map +1 -1
- package/dist/commands/forms/legacy-v2.d.ts +6 -0
- package/dist/commands/forms/legacy-v2.js +350 -0
- package/dist/commands/forms/legacy-v2.js.map +1 -0
- package/dist/commands/forms/property-preflight.d.ts +20 -0
- package/dist/commands/forms/property-preflight.js +99 -0
- package/dist/commands/forms/property-preflight.js.map +1 -0
- package/dist/commands/guide/index.d.ts +3 -0
- package/dist/commands/guide/index.js +231 -0
- package/dist/commands/guide/index.js.map +1 -0
- package/dist/commands/marketing/index.js +3 -4
- package/dist/commands/marketing/index.js.map +1 -1
- package/dist/commands/settings/index.js +249 -14
- package/dist/commands/settings/index.js.map +1 -1
- package/dist/core/auth.d.ts +7 -1
- package/dist/core/auth.js +45 -7
- package/dist/core/auth.js.map +1 -1
- package/dist/core/http.d.ts +43 -0
- package/dist/core/http.js +227 -57
- package/dist/core/http.js.map +1 -1
- package/dist/core/output.d.ts +2 -0
- package/dist/core/output.js +1 -1
- package/dist/core/output.js.map +1 -1
- package/dist/core/plugins.d.ts +5 -2
- package/dist/core/plugins.js +18 -1
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/scopes.d.ts +29 -0
- package/dist/core/scopes.js +415 -0
- package/dist/core/scopes.js.map +1 -0
- package/dist/core/telemetry-context.d.ts +13 -0
- package/dist/core/telemetry-context.js +30 -0
- package/dist/core/telemetry-context.js.map +1 -0
- package/dist/mcp/ext-tools.d.ts +1 -1
- package/dist/mcp/ext-tools.js +52 -1
- package/dist/mcp/ext-tools.js.map +1 -1
- package/dist/mcp/hubspot-modules.d.ts +30 -0
- package/dist/mcp/hubspot-modules.js +305 -0
- package/dist/mcp/hubspot-modules.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +120 -48
- package/dist/mcp/server.js.map +1 -1
- package/docs/ARCHITECTURE.md +39 -0
- package/docs/CAPABILITY_LIBRARY.md +639 -0
- package/docs/CMS_SETUP.md +349 -0
- package/docs/COMMAND_COMPATIBILITY.md +24 -0
- package/docs/COMMAND_TREE.md +199 -0
- package/docs/COMMERCE_SETUP.md +400 -0
- package/docs/COMPARISON.md +146 -0
- package/docs/COOKBOOK.md +896 -0
- package/docs/INTEGRATIONS_NOTIFICATIONS_SETUP.md +352 -0
- package/docs/MARKETING_SETUP.md +509 -0
- package/docs/MCP.md +172 -0
- package/docs/OPERATIONAL_PLAYBOOKS.md +322 -0
- package/docs/OPERATIONS_SETUP.md +362 -0
- package/docs/PLUGIN_GUIDE.md +158 -0
- package/docs/POLICY_EXAMPLE.json +57 -0
- package/docs/PORTAL_SETUP.md +684 -0
- package/docs/PUBLISHING.md +154 -0
- package/docs/RELEASE_GOVERNANCE.md +34 -0
- package/docs/REPORTING_SETUP.md +310 -0
- package/docs/ROADMAP-DATE-BASED-API.md +103 -0
- package/docs/ROADMAP_PHASE1_TO_3.md +96 -0
- package/docs/SAFETY_MODEL.md +40 -0
- package/docs/SALES_SETUP.md +369 -0
- package/docs/SERVICE_SETUP.md +403 -0
- package/docs/TESTING_PLAN.md +89 -0
- package/docs/TIERS.md +320 -0
- package/docs/TUTORIALS/audit-portal-writes.md +150 -0
- package/docs/TUTORIALS/secure-agent-writes.md +177 -0
- package/docs/TUTORIALS/trace-replay-repro.md +147 -0
- package/docs/WHY_HOW_WHAT.md +81 -0
- package/package.json +7 -2
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { CliError } from "../../core/output.js";
|
|
2
|
+
const LEGAL_CONSENT_TYPES = new Set([
|
|
3
|
+
"none",
|
|
4
|
+
"legitimate_interest",
|
|
5
|
+
"explicit_consent_to_process",
|
|
6
|
+
"implicit_consent_to_process",
|
|
7
|
+
]);
|
|
8
|
+
const GROUP_TYPES = new Set(["default_group", "progressive", "queued"]);
|
|
9
|
+
const RICH_TEXT_TYPES = new Set(["text", "image"]);
|
|
10
|
+
const FIELD_TYPE_ALIASES = {
|
|
11
|
+
booleancheckbox: "single_checkbox",
|
|
12
|
+
checkbox: "multiple_checkboxes",
|
|
13
|
+
date: "datepicker",
|
|
14
|
+
datepicker: "datepicker",
|
|
15
|
+
dropdown: "dropdown",
|
|
16
|
+
email: "email",
|
|
17
|
+
file: "file",
|
|
18
|
+
mobile_phone: "mobile_phone",
|
|
19
|
+
mobilephone: "mobile_phone",
|
|
20
|
+
multi_line_text: "multi_line_text",
|
|
21
|
+
multiple_checkboxes: "multiple_checkboxes",
|
|
22
|
+
number: "number",
|
|
23
|
+
payment_link_radio: "payment_link_radio",
|
|
24
|
+
phone: "phone",
|
|
25
|
+
phonenumber: "phone",
|
|
26
|
+
radio: "radio",
|
|
27
|
+
select: "dropdown",
|
|
28
|
+
single_checkbox: "single_checkbox",
|
|
29
|
+
single_line_text: "single_line_text",
|
|
30
|
+
string: "single_line_text",
|
|
31
|
+
text: "single_line_text",
|
|
32
|
+
textarea: "multi_line_text",
|
|
33
|
+
};
|
|
34
|
+
const OPTION_FIELD_TYPES = new Set([
|
|
35
|
+
"dropdown",
|
|
36
|
+
"multiple_checkboxes",
|
|
37
|
+
"payment_link_radio",
|
|
38
|
+
"radio",
|
|
39
|
+
"single_checkbox",
|
|
40
|
+
]);
|
|
41
|
+
const OBJECT_TYPE_IDS = {
|
|
42
|
+
COMPANY: "0-2",
|
|
43
|
+
CONTACT: "0-1",
|
|
44
|
+
DEAL: "0-3",
|
|
45
|
+
TICKET: "0-5",
|
|
46
|
+
};
|
|
47
|
+
const PROPERTY_ENDPOINT_OBJECT_TYPES = {
|
|
48
|
+
"0-1": "contacts",
|
|
49
|
+
"0-2": "companies",
|
|
50
|
+
"0-3": "deals",
|
|
51
|
+
"0-5": "tickets",
|
|
52
|
+
COMPANY: "companies",
|
|
53
|
+
CONTACT: "contacts",
|
|
54
|
+
DEAL: "deals",
|
|
55
|
+
TICKET: "tickets",
|
|
56
|
+
};
|
|
57
|
+
const MAX_FIELDS_PER_GROUP = 3;
|
|
58
|
+
export function parseFormPayloadFormat(raw) {
|
|
59
|
+
if (raw === undefined || raw === "auto")
|
|
60
|
+
return "auto";
|
|
61
|
+
if (raw === "v2" || raw === "v3")
|
|
62
|
+
return raw;
|
|
63
|
+
throw new CliError("INVALID_FLAG", "--source-format must be one of: auto, v2, v3");
|
|
64
|
+
}
|
|
65
|
+
export function normalizeFormPayloadForV3(input, format = "auto") {
|
|
66
|
+
if (format === "v3")
|
|
67
|
+
return input;
|
|
68
|
+
if (format === "auto" && !isLegacyFormV2Payload(input))
|
|
69
|
+
return input;
|
|
70
|
+
return translateLegacyFormV2ToV3(input);
|
|
71
|
+
}
|
|
72
|
+
export function isLegacyFormV2Payload(input) {
|
|
73
|
+
return Array.isArray(input.formFieldGroups)
|
|
74
|
+
|| typeof input.submitText === "string"
|
|
75
|
+
|| typeof input.inlineMessage === "string"
|
|
76
|
+
|| typeof input.notifyRecipients === "string"
|
|
77
|
+
|| typeof input.guid === "string";
|
|
78
|
+
}
|
|
79
|
+
export function legacyFormFieldPropertyObjectType(field) {
|
|
80
|
+
const objectTypeId = stringValue(field.objectTypeId);
|
|
81
|
+
if (objectTypeId)
|
|
82
|
+
return PROPERTY_ENDPOINT_OBJECT_TYPES[objectTypeId] ?? objectTypeId;
|
|
83
|
+
const propertyObjectType = stringValue(field.propertyObjectType)?.trim().toUpperCase();
|
|
84
|
+
if (propertyObjectType)
|
|
85
|
+
return PROPERTY_ENDPOINT_OBJECT_TYPES[propertyObjectType] ?? propertyObjectType.toLowerCase();
|
|
86
|
+
return "contacts";
|
|
87
|
+
}
|
|
88
|
+
export function translateLegacyFormV2ToV3(input) {
|
|
89
|
+
const name = stringValue(input.name) ?? stringValue(input.title);
|
|
90
|
+
if (!name) {
|
|
91
|
+
throw new CliError("INVALID_FORM_PAYLOAD", "Legacy forms/v2 payload is missing a form name");
|
|
92
|
+
}
|
|
93
|
+
const fieldGroups = mapFieldGroups(input.formFieldGroups);
|
|
94
|
+
if (fieldGroups.length === 0) {
|
|
95
|
+
throw new CliError("INVALID_FORM_PAYLOAD", "Legacy forms/v2 payload contains no enabled fields to translate");
|
|
96
|
+
}
|
|
97
|
+
return cleanRecord({
|
|
98
|
+
formType: "hubspot",
|
|
99
|
+
name,
|
|
100
|
+
createdAt: new Date().toISOString(),
|
|
101
|
+
archived: false,
|
|
102
|
+
fieldGroups,
|
|
103
|
+
configuration: mapConfiguration(input),
|
|
104
|
+
displayOptions: mapDisplayOptions(input),
|
|
105
|
+
legalConsentOptions: mapLegalConsentOptions(input),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function mapFieldGroups(rawGroups) {
|
|
109
|
+
const groups = records(rawGroups);
|
|
110
|
+
return groups.flatMap((group) => {
|
|
111
|
+
const fields = records(group.fields)
|
|
112
|
+
.filter((field) => field.enabled !== false)
|
|
113
|
+
.map(mapField)
|
|
114
|
+
.filter((field) => field !== undefined);
|
|
115
|
+
const richText = stringValue(group.richText);
|
|
116
|
+
if (fields.length === 0 && !richText)
|
|
117
|
+
return undefined;
|
|
118
|
+
const baseGroup = cleanRecord({
|
|
119
|
+
groupType: mapGroupType(group),
|
|
120
|
+
richTextType: mapRichTextType(group.richTextType),
|
|
121
|
+
richText,
|
|
122
|
+
fields: fields.slice(0, MAX_FIELDS_PER_GROUP),
|
|
123
|
+
});
|
|
124
|
+
if (fields.length <= MAX_FIELDS_PER_GROUP)
|
|
125
|
+
return baseGroup;
|
|
126
|
+
const splitGroups = [baseGroup];
|
|
127
|
+
for (let start = MAX_FIELDS_PER_GROUP; start < fields.length; start += MAX_FIELDS_PER_GROUP) {
|
|
128
|
+
splitGroups.push(cleanRecord({
|
|
129
|
+
groupType: mapGroupType(group),
|
|
130
|
+
richTextType: mapRichTextType(group.richTextType),
|
|
131
|
+
fields: fields.slice(start, start + MAX_FIELDS_PER_GROUP),
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
return splitGroups;
|
|
135
|
+
}).filter((group) => group !== undefined);
|
|
136
|
+
}
|
|
137
|
+
function mapField(field) {
|
|
138
|
+
const name = stringValue(field.name);
|
|
139
|
+
if (!name)
|
|
140
|
+
return undefined;
|
|
141
|
+
const fieldType = mapFieldType(field);
|
|
142
|
+
const hidden = booleanValue(field.hidden, false);
|
|
143
|
+
const translated = cleanRecord({
|
|
144
|
+
objectTypeId: mapObjectTypeId(field),
|
|
145
|
+
name,
|
|
146
|
+
label: stringValue(field.label) ?? name,
|
|
147
|
+
required: hidden ? false : booleanValue(field.required, false),
|
|
148
|
+
hidden,
|
|
149
|
+
fieldType,
|
|
150
|
+
defaultValue: mapDefaultValue(field, fieldType),
|
|
151
|
+
description: stringValue(field.description),
|
|
152
|
+
placeholder: stringValue(field.placeholder),
|
|
153
|
+
validation: mapValidation(field, fieldType),
|
|
154
|
+
useCountryCodeSelect: fieldType === "phone" || fieldType === "mobile_phone"
|
|
155
|
+
? booleanValue(field.useCountryCodeSelect, true)
|
|
156
|
+
: undefined,
|
|
157
|
+
});
|
|
158
|
+
if (OPTION_FIELD_TYPES.has(fieldType)) {
|
|
159
|
+
const options = mapOptions(field.options);
|
|
160
|
+
if (options.length > 0)
|
|
161
|
+
translated.options = options;
|
|
162
|
+
}
|
|
163
|
+
return translated;
|
|
164
|
+
}
|
|
165
|
+
function mapFieldType(field) {
|
|
166
|
+
const raw = (stringValue(field.fieldType) ?? stringValue(field.type) ?? "").trim().toLowerCase();
|
|
167
|
+
const fromAlias = FIELD_TYPE_ALIASES[raw];
|
|
168
|
+
if (fromAlias)
|
|
169
|
+
return fromAlias;
|
|
170
|
+
const name = (stringValue(field.name) ?? "").toLowerCase();
|
|
171
|
+
if (name === "email" || name.endsWith("_email"))
|
|
172
|
+
return "email";
|
|
173
|
+
if (name.includes("mobile"))
|
|
174
|
+
return "mobile_phone";
|
|
175
|
+
if (name.includes("phone"))
|
|
176
|
+
return "phone";
|
|
177
|
+
return "single_line_text";
|
|
178
|
+
}
|
|
179
|
+
function mapObjectTypeId(field) {
|
|
180
|
+
const objectTypeId = stringValue(field.objectTypeId);
|
|
181
|
+
if (objectTypeId)
|
|
182
|
+
return objectTypeId;
|
|
183
|
+
const propertyObjectType = stringValue(field.propertyObjectType)?.trim().toUpperCase();
|
|
184
|
+
if (propertyObjectType && OBJECT_TYPE_IDS[propertyObjectType])
|
|
185
|
+
return OBJECT_TYPE_IDS[propertyObjectType];
|
|
186
|
+
return "0-1";
|
|
187
|
+
}
|
|
188
|
+
function mapOptions(rawOptions) {
|
|
189
|
+
return records(rawOptions).map((option, index) => {
|
|
190
|
+
const value = stringValue(option.value) ?? stringValue(option.internalName) ?? stringValue(option.label);
|
|
191
|
+
const label = stringValue(option.label) ?? value;
|
|
192
|
+
if (!value || !label)
|
|
193
|
+
return undefined;
|
|
194
|
+
return cleanRecord({
|
|
195
|
+
label,
|
|
196
|
+
value,
|
|
197
|
+
description: stringValue(option.description) ?? "",
|
|
198
|
+
displayOrder: numberValue(option.displayOrder) ?? index,
|
|
199
|
+
});
|
|
200
|
+
}).filter((option) => option !== undefined);
|
|
201
|
+
}
|
|
202
|
+
function mapDefaultValue(field, fieldType) {
|
|
203
|
+
const explicit = stringValue(field.defaultValue);
|
|
204
|
+
if (explicit !== undefined)
|
|
205
|
+
return explicit;
|
|
206
|
+
const selectedOptions = strings(field.selectedOptions);
|
|
207
|
+
if (selectedOptions.length === 0)
|
|
208
|
+
return undefined;
|
|
209
|
+
if (fieldType === "multiple_checkboxes")
|
|
210
|
+
return selectedOptions.join(";");
|
|
211
|
+
return selectedOptions[0];
|
|
212
|
+
}
|
|
213
|
+
function mapValidation(field, fieldType) {
|
|
214
|
+
const validation = record(field.validation) ?? {};
|
|
215
|
+
if (fieldType === "email") {
|
|
216
|
+
return {
|
|
217
|
+
blockedEmailDomains: mapBlockedEmailDomains(validation),
|
|
218
|
+
useDefaultBlockList: booleanValue(validation.useDefaultBlockList, false),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
if (fieldType === "phone" || fieldType === "mobile_phone") {
|
|
222
|
+
return cleanRecord({
|
|
223
|
+
minAllowedDigits: numberValue(validation.minAllowedDigits) ?? 7,
|
|
224
|
+
maxAllowedDigits: numberValue(validation.maxAllowedDigits) ?? 20,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
function mapBlockedEmailDomains(validation) {
|
|
230
|
+
const values = [
|
|
231
|
+
...strings(validation.blockedEmailDomains),
|
|
232
|
+
...strings(validation.blockedEmailAddresses),
|
|
233
|
+
];
|
|
234
|
+
return [...new Set(values.map((value) => {
|
|
235
|
+
const trimmed = value.trim().toLowerCase();
|
|
236
|
+
const atIndex = trimmed.lastIndexOf("@");
|
|
237
|
+
return atIndex >= 0 ? trimmed.slice(atIndex + 1) : trimmed;
|
|
238
|
+
}).filter(Boolean))];
|
|
239
|
+
}
|
|
240
|
+
function mapGroupType(group) {
|
|
241
|
+
const groupType = stringValue(group.groupType);
|
|
242
|
+
if (groupType && GROUP_TYPES.has(groupType))
|
|
243
|
+
return groupType;
|
|
244
|
+
if (group.isSmartGroup === true || group.progressive === true)
|
|
245
|
+
return "progressive";
|
|
246
|
+
if (group.queued === true || group.queuedFields === true)
|
|
247
|
+
return "queued";
|
|
248
|
+
return "default_group";
|
|
249
|
+
}
|
|
250
|
+
function mapRichTextType(raw) {
|
|
251
|
+
const value = stringValue(raw);
|
|
252
|
+
if (value && RICH_TEXT_TYPES.has(value))
|
|
253
|
+
return value;
|
|
254
|
+
return "text";
|
|
255
|
+
}
|
|
256
|
+
function mapConfiguration(input) {
|
|
257
|
+
return cleanRecord({
|
|
258
|
+
allowLinkToResetKnownValues: booleanValue(input.allowLinkToResetKnownValues, false),
|
|
259
|
+
archivable: booleanValue(input.archivable, true),
|
|
260
|
+
cloneable: booleanValue(input.cloneable, true),
|
|
261
|
+
createNewContactForNewEmail: booleanValue(input.createNewContactForNewEmail, true),
|
|
262
|
+
editable: booleanValue(input.editable, true),
|
|
263
|
+
language: stringValue(input.language) ?? "en",
|
|
264
|
+
notifyContactOwner: booleanValue(input.notifyContactOwner, false),
|
|
265
|
+
notifyRecipients: parseRecipients(input.notifyRecipients),
|
|
266
|
+
postSubmitAction: mapPostSubmitAction(input),
|
|
267
|
+
prePopulateKnownValues: booleanValue(input.prePopulateKnownValues, true),
|
|
268
|
+
recaptchaEnabled: booleanValue(input.recaptchaEnabled, booleanValue(input.captchaEnabled, false)),
|
|
269
|
+
embedType: "V3",
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
function mapPostSubmitAction(input) {
|
|
273
|
+
const redirect = stringValue(input.redirect) ?? stringValue(input.redirectUrl);
|
|
274
|
+
if (redirect)
|
|
275
|
+
return { type: "redirect_url", value: redirect };
|
|
276
|
+
const message = stringValue(input.inlineMessage)
|
|
277
|
+
?? stringValue(input.thankYouMessage)
|
|
278
|
+
?? "Thanks for submitting the form.";
|
|
279
|
+
return { type: "thank_you", value: message };
|
|
280
|
+
}
|
|
281
|
+
function mapDisplayOptions(input) {
|
|
282
|
+
return cleanRecord({
|
|
283
|
+
renderRawHtml: booleanValue(input.renderRawHtml, false),
|
|
284
|
+
submitButtonText: stringValue(input.submitText) ?? "Submit",
|
|
285
|
+
theme: stringValue(input.theme) ?? "canvas",
|
|
286
|
+
cssClass: stringValue(input.cssClass),
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
function mapLegalConsentOptions(input) {
|
|
290
|
+
const legacy = record(input.legalConsentOptions);
|
|
291
|
+
const type = stringValue(legacy?.type);
|
|
292
|
+
if (legacy && type && LEGAL_CONSENT_TYPES.has(type))
|
|
293
|
+
return legacy;
|
|
294
|
+
return { type: "none" };
|
|
295
|
+
}
|
|
296
|
+
function parseRecipients(raw) {
|
|
297
|
+
if (Array.isArray(raw))
|
|
298
|
+
return raw.map((value) => String(value).trim()).filter(Boolean);
|
|
299
|
+
const value = stringValue(raw);
|
|
300
|
+
if (!value)
|
|
301
|
+
return [];
|
|
302
|
+
return value.split(/[;,]/).map((part) => part.trim()).filter(Boolean);
|
|
303
|
+
}
|
|
304
|
+
function records(raw) {
|
|
305
|
+
if (!Array.isArray(raw))
|
|
306
|
+
return [];
|
|
307
|
+
return raw.filter(record);
|
|
308
|
+
}
|
|
309
|
+
function strings(raw) {
|
|
310
|
+
if (!Array.isArray(raw))
|
|
311
|
+
return [];
|
|
312
|
+
return raw.map((value) => String(value).trim()).filter(Boolean);
|
|
313
|
+
}
|
|
314
|
+
function record(raw) {
|
|
315
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
316
|
+
return raw;
|
|
317
|
+
}
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
function stringValue(raw) {
|
|
321
|
+
if (typeof raw !== "string")
|
|
322
|
+
return undefined;
|
|
323
|
+
const value = raw.trim();
|
|
324
|
+
return value ? value : undefined;
|
|
325
|
+
}
|
|
326
|
+
function booleanValue(raw, fallback) {
|
|
327
|
+
if (typeof raw === "boolean")
|
|
328
|
+
return raw;
|
|
329
|
+
if (typeof raw === "string") {
|
|
330
|
+
if (raw.toLowerCase() === "true")
|
|
331
|
+
return true;
|
|
332
|
+
if (raw.toLowerCase() === "false")
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
return fallback;
|
|
336
|
+
}
|
|
337
|
+
function numberValue(raw) {
|
|
338
|
+
if (typeof raw === "number" && Number.isFinite(raw))
|
|
339
|
+
return raw;
|
|
340
|
+
if (typeof raw === "string") {
|
|
341
|
+
const value = Number(raw);
|
|
342
|
+
if (Number.isFinite(value))
|
|
343
|
+
return value;
|
|
344
|
+
}
|
|
345
|
+
return undefined;
|
|
346
|
+
}
|
|
347
|
+
function cleanRecord(input) {
|
|
348
|
+
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=legacy-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-v2.js","sourceRoot":"","sources":["../../../src/commands/forms/legacy-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { HubSpotClient } from "../../core/http.js";
|
|
2
|
+
export type FormPropertyPreflightMode = "auto" | "skip" | "strict";
|
|
3
|
+
export interface SkippedFormField {
|
|
4
|
+
name: string;
|
|
5
|
+
objectType: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
groupIndex: number;
|
|
8
|
+
fieldIndex: number;
|
|
9
|
+
reason: "property-missing-on-target";
|
|
10
|
+
}
|
|
11
|
+
export interface FormPropertyPreflightResult {
|
|
12
|
+
payload: Record<string, unknown>;
|
|
13
|
+
skippedFields: SkippedFormField[];
|
|
14
|
+
}
|
|
15
|
+
type PropertyNameLoader = (objectType: string) => Promise<Set<string>>;
|
|
16
|
+
export declare function parseFormPropertyPreflightMode(raw: string | undefined): FormPropertyPreflightMode;
|
|
17
|
+
export declare function shouldRunFormPropertyPreflight(payload: Record<string, unknown>, mode: FormPropertyPreflightMode, dryRun: boolean): boolean;
|
|
18
|
+
export declare function preflightLegacyFormProperties(payload: Record<string, unknown>, loadPropertyNames: PropertyNameLoader, strict: boolean): Promise<FormPropertyPreflightResult>;
|
|
19
|
+
export declare function loadTargetFormPropertyNames(client: HubSpotClient, objectType: string): Promise<Set<string>>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { CliError } from "../../core/output.js";
|
|
2
|
+
import { encodePathSegment } from "../crm/shared.js";
|
|
3
|
+
import { isLegacyFormV2Payload, legacyFormFieldPropertyObjectType } from "./legacy-v2.js";
|
|
4
|
+
export function parseFormPropertyPreflightMode(raw) {
|
|
5
|
+
if (raw === undefined || raw === "auto")
|
|
6
|
+
return "auto";
|
|
7
|
+
if (raw === "skip" || raw === "strict")
|
|
8
|
+
return raw;
|
|
9
|
+
throw new CliError("INVALID_FLAG", "--property-preflight must be one of: auto, skip, strict");
|
|
10
|
+
}
|
|
11
|
+
export function shouldRunFormPropertyPreflight(payload, mode, dryRun) {
|
|
12
|
+
if (!isLegacyFormV2Payload(payload))
|
|
13
|
+
return false;
|
|
14
|
+
if (mode === "skip")
|
|
15
|
+
return false;
|
|
16
|
+
if (mode === "strict")
|
|
17
|
+
return true;
|
|
18
|
+
return !dryRun;
|
|
19
|
+
}
|
|
20
|
+
export async function preflightLegacyFormProperties(payload, loadPropertyNames, strict) {
|
|
21
|
+
const formFieldGroups = Array.isArray(payload.formFieldGroups) ? payload.formFieldGroups : [];
|
|
22
|
+
const cache = new Map();
|
|
23
|
+
const skippedFields = [];
|
|
24
|
+
let changed = false;
|
|
25
|
+
const groups = await Promise.all(formFieldGroups.map(async (group, groupIndex) => {
|
|
26
|
+
if (!isRecord(group))
|
|
27
|
+
return group;
|
|
28
|
+
const fields = Array.isArray(group.fields) ? group.fields : undefined;
|
|
29
|
+
if (!fields)
|
|
30
|
+
return group;
|
|
31
|
+
const keptFields = [];
|
|
32
|
+
let groupChanged = false;
|
|
33
|
+
for (let fieldIndex = 0; fieldIndex < fields.length; fieldIndex += 1) {
|
|
34
|
+
const field = fields[fieldIndex];
|
|
35
|
+
if (!isRecord(field) || field.enabled === false) {
|
|
36
|
+
keptFields.push(field);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const name = stringValue(field.name);
|
|
40
|
+
if (!name) {
|
|
41
|
+
keptFields.push(field);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const objectType = legacyFormFieldPropertyObjectType(field);
|
|
45
|
+
const names = await getCachedPropertyNames(cache, loadPropertyNames, objectType);
|
|
46
|
+
if (names.has(name)) {
|
|
47
|
+
keptFields.push(field);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
changed = true;
|
|
51
|
+
groupChanged = true;
|
|
52
|
+
skippedFields.push({
|
|
53
|
+
name,
|
|
54
|
+
objectType,
|
|
55
|
+
label: stringValue(field.label),
|
|
56
|
+
groupIndex,
|
|
57
|
+
fieldIndex,
|
|
58
|
+
reason: "property-missing-on-target",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return groupChanged ? { ...group, fields: keptFields } : group;
|
|
62
|
+
}));
|
|
63
|
+
if (strict && skippedFields.length > 0) {
|
|
64
|
+
throw new CliError("FORM_PROPERTY_PREFLIGHT_FAILED", "Legacy form references properties missing on the target portal.", undefined, { skippedFields });
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
payload: changed ? { ...payload, formFieldGroups: groups } : payload,
|
|
68
|
+
skippedFields,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export async function loadTargetFormPropertyNames(client, objectType) {
|
|
72
|
+
const objectTypeSegment = encodePathSegment(objectType, "objectType");
|
|
73
|
+
const response = await client.request(`/crm/v3/properties/${objectTypeSegment}`);
|
|
74
|
+
if (!isRecord(response) || !Array.isArray(response.results)) {
|
|
75
|
+
throw new CliError("FORM_PROPERTY_PREFLIGHT_INVALID_RESPONSE", `Could not read target properties for ${objectType}.`, undefined, { objectType, response });
|
|
76
|
+
}
|
|
77
|
+
return new Set(response.results
|
|
78
|
+
.filter(isRecord)
|
|
79
|
+
.map((property) => stringValue(property.name))
|
|
80
|
+
.filter((name) => Boolean(name)));
|
|
81
|
+
}
|
|
82
|
+
function getCachedPropertyNames(cache, loadPropertyNames, objectType) {
|
|
83
|
+
const existing = cache.get(objectType);
|
|
84
|
+
if (existing)
|
|
85
|
+
return existing;
|
|
86
|
+
const pending = loadPropertyNames(objectType);
|
|
87
|
+
cache.set(objectType, pending);
|
|
88
|
+
return pending;
|
|
89
|
+
}
|
|
90
|
+
function isRecord(value) {
|
|
91
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
92
|
+
}
|
|
93
|
+
function stringValue(raw) {
|
|
94
|
+
if (typeof raw !== "string")
|
|
95
|
+
return undefined;
|
|
96
|
+
const value = raw.trim();
|
|
97
|
+
return value ? value : undefined;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=property-preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-preflight.js","sourceRoot":"","sources":["../../../src/commands/forms/property-preflight.ts"],"names":[],"mappings":"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"}
|