@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.
- package/CHANGELOG.md +166 -1
- package/README.md +220 -10
- package/dist/cli.js +27 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent/contracts.d.ts +3 -0
- package/dist/commands/agent/contracts.js +139 -0
- package/dist/commands/agent/contracts.js.map +1 -0
- package/dist/commands/agent/index.d.ts +3 -0
- package/dist/commands/agent/index.js +188 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/recipes.d.ts +13 -0
- package/dist/commands/agent/recipes.js +108 -0
- package/dist/commands/agent/recipes.js.map +1 -0
- package/dist/commands/agent/runner.d.ts +16 -0
- package/dist/commands/agent/runner.js +165 -0
- package/dist/commands/agent/runner.js.map +1 -0
- package/dist/commands/auth/index.js +64 -7
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/automation/index.js +30 -0
- package/dist/commands/automation/index.js.map +1 -1
- package/dist/commands/backup/index.d.ts +12 -0
- package/dist/commands/backup/index.js +459 -0
- package/dist/commands/backup/index.js.map +1 -0
- package/dist/commands/cms/content-ops.js +1 -1
- package/dist/commands/cms/content-ops.js.map +1 -1
- package/dist/commands/communication-preferences/index.js +207 -7
- package/dist/commands/communication-preferences/index.js.map +1 -1
- package/dist/commands/content-permissions/index.d.ts +22 -0
- package/dist/commands/content-permissions/index.js +141 -0
- package/dist/commands/content-permissions/index.js.map +1 -0
- package/dist/commands/context/index.d.ts +3 -0
- package/dist/commands/context/index.js +182 -0
- package/dist/commands/context/index.js.map +1 -0
- package/dist/commands/crm/associations.js +38 -0
- package/dist/commands/crm/associations.js.map +1 -1
- package/dist/commands/crm/custom-objects.js +39 -2
- package/dist/commands/crm/custom-objects.js.map +1 -1
- package/dist/commands/crm/dated.js +3 -3
- package/dist/commands/crm/dated.js.map +1 -1
- package/dist/commands/crm/migration.js +210 -2
- package/dist/commands/crm/migration.js.map +1 -1
- package/dist/commands/crm/properties.js +2 -1
- package/dist/commands/crm/properties.js.map +1 -1
- package/dist/commands/crm/property-batch.d.ts +1 -0
- package/dist/commands/crm/property-batch.js +44 -5
- package/dist/commands/crm/property-batch.js.map +1 -1
- package/dist/commands/crm/shared.js +21 -2
- package/dist/commands/crm/shared.js.map +1 -1
- package/dist/commands/crm/sync.js +1 -1
- package/dist/commands/crm/sync.js.map +1 -1
- package/dist/commands/doctor/index.js +193 -0
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/commands/email-tracking/index.d.ts +16 -0
- package/dist/commands/email-tracking/index.js +314 -0
- package/dist/commands/email-tracking/index.js.map +1 -0
- package/dist/commands/extensions/index.js +1 -1
- package/dist/commands/extensions/index.js.map +1 -1
- package/dist/commands/forms/index.js +15 -2
- package/dist/commands/forms/index.js.map +1 -1
- package/dist/commands/forms/legacy-v2.d.ts +7 -2
- package/dist/commands/forms/legacy-v2.js +103 -7
- package/dist/commands/forms/legacy-v2.js.map +1 -1
- package/dist/commands/guide/index.d.ts +1 -1
- package/dist/commands/guide/index.js +37 -4
- package/dist/commands/guide/index.js.map +1 -1
- package/dist/commands/internal/catalog.d.ts +1 -0
- package/dist/commands/internal/catalog.js +2 -0
- package/dist/commands/internal/catalog.js.map +1 -0
- package/dist/commands/internal/index.d.ts +26 -0
- package/dist/commands/internal/index.js +823 -0
- package/dist/commands/internal/index.js.map +1 -0
- package/dist/commands/internal-session.d.ts +15 -0
- package/dist/commands/internal-session.js +152 -0
- package/dist/commands/internal-session.js.map +1 -0
- package/dist/commands/lists/index.js +1 -1
- package/dist/commands/lists/index.js.map +1 -1
- package/dist/commands/marketing/email-audit.d.ts +32 -0
- package/dist/commands/marketing/email-audit.js +121 -0
- package/dist/commands/marketing/email-audit.js.map +1 -0
- package/dist/commands/marketing/index.js +2 -0
- package/dist/commands/marketing/index.js.map +1 -1
- package/dist/commands/mcp.js +5 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/playbooks/index.d.ts +3 -0
- package/dist/commands/playbooks/index.js +228 -0
- package/dist/commands/playbooks/index.js.map +1 -0
- package/dist/commands/portals/index.d.ts +3 -0
- package/dist/commands/portals/index.js +132 -0
- package/dist/commands/portals/index.js.map +1 -0
- package/dist/commands/reports/index.d.ts +3 -0
- package/dist/commands/reports/index.js +479 -0
- package/dist/commands/reports/index.js.map +1 -0
- package/dist/commands/sales-content/index.d.ts +13 -0
- package/dist/commands/sales-content/index.js +59 -0
- package/dist/commands/sales-content/index.js.map +1 -0
- package/dist/commands/sales-templates/index.d.ts +3 -0
- package/dist/commands/sales-templates/index.js +88 -0
- package/dist/commands/sales-templates/index.js.map +1 -0
- package/dist/commands/seed/cms.js +28 -45
- package/dist/commands/seed/cms.js.map +1 -1
- package/dist/commands/sequences/index.d.ts +18 -0
- package/dist/commands/sequences/index.js +263 -0
- package/dist/commands/sequences/index.js.map +1 -0
- package/dist/commands/settings/index.js +450 -102
- package/dist/commands/settings/index.js.map +1 -1
- package/dist/commands/settings/site-settings.d.ts +3 -0
- package/dist/commands/settings/site-settings.js +106 -0
- package/dist/commands/settings/site-settings.js.map +1 -0
- package/dist/commands/ui/index.js +14 -4
- package/dist/commands/ui/index.js.map +1 -1
- package/dist/commands/workflows/index.js +2 -0
- package/dist/commands/workflows/index.js.map +1 -1
- package/dist/commands/workflows/preflight.d.ts +23 -0
- package/dist/commands/workflows/preflight.js +295 -0
- package/dist/commands/workflows/preflight.js.map +1 -0
- package/dist/core/action-contract.d.ts +43 -0
- package/dist/core/action-contract.js +207 -0
- package/dist/core/action-contract.js.map +1 -0
- package/dist/core/auth.d.ts +6 -0
- package/dist/core/auth.js +85 -0
- package/dist/core/auth.js.map +1 -1
- package/dist/core/http.d.ts +8 -0
- package/dist/core/http.js +37 -5
- package/dist/core/http.js.map +1 -1
- package/dist/core/id-maps.d.ts +27 -0
- package/dist/core/id-maps.js +204 -0
- package/dist/core/id-maps.js.map +1 -0
- package/dist/core/output.d.ts +2 -1
- package/dist/core/output.js +34 -0
- package/dist/core/output.js.map +1 -1
- package/dist/mcp/profiles.d.ts +14 -0
- package/dist/mcp/profiles.js +68 -0
- package/dist/mcp/profiles.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -3
- package/dist/mcp/server.js +22 -5
- package/dist/mcp/server.js.map +1 -1
- package/docs/CAPABILITY_LIBRARY.md +29 -8
- package/docs/COMMAND_TREE.md +96 -17
- package/docs/COMPARISON.md +8 -5
- package/docs/COOKBOOK.md +124 -5
- package/docs/INTERNAL-ENDPOINTS-DISCOVERY.md +813 -0
- package/docs/INTERNAL-ENDPOINTS.md +371 -0
- package/docs/INTERNAL_ENDPOINTS.md +243 -0
- package/docs/MARKETING_SETUP.md +21 -1
- package/docs/MCP.md +28 -89
- package/docs/MCP_TOOL_CATALOG.md +192 -0
- package/docs/MIGRATION_ADAPTERS.md +115 -0
- package/docs/PORTAL_BACKUP.md +212 -0
- package/docs/PUBLISHING.md +1 -1
- package/docs/SALES_CONTENT_INTERNAL_PUNCH_LIST.md +504 -0
- package/docs/TUTORIALS/secure-agent-writes.md +49 -0
- package/docs/WHY_HOW_WHAT.md +10 -4
- package/package.json +4 -2
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { findPipelineStageTarget, isStandardObjectTypeId, loadMigrationIdMaps, stringifyId, } from "../../core/id-maps.js";
|
|
2
|
+
import { CliError, printResult } from "../../core/output.js";
|
|
3
|
+
import { parseJsonPayload } from "../crm/shared.js";
|
|
4
|
+
const EMPTY_MAPS = {
|
|
5
|
+
subscriptionTypes: {},
|
|
6
|
+
businessUnits: {},
|
|
7
|
+
emails: {},
|
|
8
|
+
lists: {},
|
|
9
|
+
campaigns: {},
|
|
10
|
+
workflows: {},
|
|
11
|
+
users: {},
|
|
12
|
+
owners: {},
|
|
13
|
+
sequences: {},
|
|
14
|
+
customObjects: {},
|
|
15
|
+
associations: {},
|
|
16
|
+
pipelines: {},
|
|
17
|
+
};
|
|
18
|
+
const UNKNOWN_ID_KEY = /(?:^|[_-])(?:id|ids)$|(?:Id|Ids)$/;
|
|
19
|
+
const SAFE_ID_KEYS = new Set([
|
|
20
|
+
"id",
|
|
21
|
+
"guid",
|
|
22
|
+
"actionId",
|
|
23
|
+
"actionTypeId",
|
|
24
|
+
"portalId",
|
|
25
|
+
"revisionId",
|
|
26
|
+
"createdAt",
|
|
27
|
+
"updatedAt",
|
|
28
|
+
]);
|
|
29
|
+
export function registerWorkflowPreflight(workflows, getCtx) {
|
|
30
|
+
workflows
|
|
31
|
+
.command("preflight")
|
|
32
|
+
.description("Check a workflow export for source-portal IDs before replay")
|
|
33
|
+
.requiredOption("--data <payload>", "Workflow JSON payload, array, or { results|workflows }")
|
|
34
|
+
.option("--id-map-dir <dir>", "Directory containing migration id-map JSON files")
|
|
35
|
+
.option("--strict", "Exit non-zero when broken references are found")
|
|
36
|
+
.action(async (opts) => {
|
|
37
|
+
const ctx = getCtx();
|
|
38
|
+
const result = preflightWorkflowsPayload(parseJsonPayload(opts.data), opts.idMapDir);
|
|
39
|
+
if (opts.strict && !result.ok) {
|
|
40
|
+
throw new CliError("WORKFLOW_PREFLIGHT_BROKEN_REFS", `Workflow preflight found ${result.brokenRefCount} unresolved source references`, undefined, result);
|
|
41
|
+
}
|
|
42
|
+
printResult(ctx, result);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export function preflightWorkflowsPayload(input, idMapDir) {
|
|
46
|
+
const maps = idMapDir ? loadMigrationIdMaps(idMapDir) : EMPTY_MAPS;
|
|
47
|
+
const workflows = normalizeWorkflows(input);
|
|
48
|
+
const checked = workflows.map((workflow, index) => inspectWorkflow(workflow, maps, index));
|
|
49
|
+
const brokenRefCount = checked.reduce((sum, workflow) => sum + workflow.brokenRefs.length, 0);
|
|
50
|
+
const warningCount = checked.reduce((sum, workflow) => sum + workflow.warnings.length, 0);
|
|
51
|
+
return {
|
|
52
|
+
ok: brokenRefCount === 0,
|
|
53
|
+
total: checked.length,
|
|
54
|
+
brokenRefCount,
|
|
55
|
+
warningCount,
|
|
56
|
+
workflows: checked,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function inspectWorkflow(workflow, maps, index) {
|
|
60
|
+
const brokenRefs = [];
|
|
61
|
+
const warnings = [];
|
|
62
|
+
const seenPaths = new Set();
|
|
63
|
+
const actions = records(workflow.actions);
|
|
64
|
+
actions.forEach((action, actionIndex) => {
|
|
65
|
+
const basePath = `workflows[${index}].actions[${actionIndex}]`;
|
|
66
|
+
inspectKnownRefs(action, basePath, maps, brokenRefs, seenPaths);
|
|
67
|
+
inspectPropertyValueRefs(action, basePath, maps, brokenRefs, seenPaths);
|
|
68
|
+
inspectUnknownIdFields(action, basePath, brokenRefs, seenPaths);
|
|
69
|
+
});
|
|
70
|
+
const enrollmentCriteria = record(workflow.enrollmentCriteria);
|
|
71
|
+
if (enrollmentCriteria) {
|
|
72
|
+
inspectKnownRefs(enrollmentCriteria, `workflows[${index}].enrollmentCriteria`, maps, brokenRefs, seenPaths);
|
|
73
|
+
inspectPropertyValueRefs(enrollmentCriteria, `workflows[${index}].enrollmentCriteria`, maps, brokenRefs, seenPaths);
|
|
74
|
+
}
|
|
75
|
+
const suppressionListIds = Array.isArray(workflow.suppressionListIds) ? workflow.suppressionListIds : [];
|
|
76
|
+
suppressionListIds.forEach((source, listIndex) => {
|
|
77
|
+
checkMapped(maps.lists, source, "suppressionList", `workflows[${index}].suppressionListIds[${listIndex}]`, brokenRefs, seenPaths);
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
id: stringifyId(workflow.id),
|
|
81
|
+
name: typeof workflow.name === "string" ? workflow.name : undefined,
|
|
82
|
+
brokenRefs,
|
|
83
|
+
warnings,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function inspectKnownRefs(value, path, maps, brokenRefs, seenPaths) {
|
|
87
|
+
if (Array.isArray(value)) {
|
|
88
|
+
value.forEach((item, index) => inspectKnownRefs(item, `${path}[${index}]`, maps, brokenRefs, seenPaths));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const node = record(value);
|
|
92
|
+
if (!node)
|
|
93
|
+
return;
|
|
94
|
+
for (const [key, raw] of Object.entries(node)) {
|
|
95
|
+
const keyPath = `${path}.${key}`;
|
|
96
|
+
if (raw === undefined || raw === null)
|
|
97
|
+
continue;
|
|
98
|
+
if (["content_id", "email_content_id", "emailContentId", "emailId"].includes(key)) {
|
|
99
|
+
checkMapped(maps.emails, raw, "marketingEmail", keyPath, brokenRefs, seenPaths);
|
|
100
|
+
}
|
|
101
|
+
else if (["subscriptionId", "subscriptionTypeId", "subscription_type_id"].includes(key)) {
|
|
102
|
+
checkMapped(maps.subscriptionTypes, raw, "subscriptionType", keyPath, brokenRefs, seenPaths);
|
|
103
|
+
}
|
|
104
|
+
else if (["listId", "list_id", "staticListId"].includes(key)) {
|
|
105
|
+
checkMapped(maps.lists, raw, "list", keyPath, brokenRefs, seenPaths);
|
|
106
|
+
}
|
|
107
|
+
else if (["campaignId", "campaign_id"].includes(key)) {
|
|
108
|
+
checkMapped(maps.campaigns, raw, "campaign", keyPath, brokenRefs, seenPaths);
|
|
109
|
+
}
|
|
110
|
+
else if (["flow_id", "workflowId", "workflow_id"].includes(key)) {
|
|
111
|
+
checkMapped(maps.workflows, raw, "workflow", keyPath, brokenRefs, seenPaths);
|
|
112
|
+
}
|
|
113
|
+
else if (["userId", "user_id"].includes(key)) {
|
|
114
|
+
checkAnyMapped([maps.users, maps.owners], raw, "user", keyPath, brokenRefs, seenPaths);
|
|
115
|
+
}
|
|
116
|
+
else if (["sequenceId", "sequence_id"].includes(key)) {
|
|
117
|
+
checkMapped(maps.sequences, raw, "sequence", keyPath, brokenRefs, seenPaths);
|
|
118
|
+
}
|
|
119
|
+
else if (["object_type_id", "objectTypeId", "fromObjectType", "toObjectType"].includes(key)) {
|
|
120
|
+
checkCustomObjectMapped(maps.customObjects, raw, keyPath, brokenRefs, seenPaths);
|
|
121
|
+
}
|
|
122
|
+
else if (["labelToApply", "associationTypeId", "association_label_id"].includes(key)) {
|
|
123
|
+
checkMapped(maps.associations, raw, "associationLabel", keyPath, brokenRefs, seenPaths);
|
|
124
|
+
}
|
|
125
|
+
else if (["pipelineId", "pipeline_id"].includes(key)) {
|
|
126
|
+
checkPipelineMapped(maps, raw, keyPath, brokenRefs, seenPaths);
|
|
127
|
+
}
|
|
128
|
+
else if (["stageId", "stage_id"].includes(key)) {
|
|
129
|
+
checkStageMapped(maps, raw, keyPath, brokenRefs, seenPaths);
|
|
130
|
+
}
|
|
131
|
+
inspectKnownRefs(raw, keyPath, maps, brokenRefs, seenPaths);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function inspectPropertyValueRefs(value, path, maps, brokenRefs, seenPaths) {
|
|
135
|
+
if (Array.isArray(value)) {
|
|
136
|
+
value.forEach((item, index) => inspectPropertyValueRefs(item, `${path}[${index}]`, maps, brokenRefs, seenPaths));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const node = record(value);
|
|
140
|
+
if (!node)
|
|
141
|
+
return;
|
|
142
|
+
const propertyName = stringField(node, "propertyName")
|
|
143
|
+
?? stringField(node, "targetProperty")
|
|
144
|
+
?? stringField(node, "property")
|
|
145
|
+
?? stringField(node, "name");
|
|
146
|
+
const rawValue = node.staticValue ?? node.value ?? node.values;
|
|
147
|
+
if (propertyName && rawValue !== undefined) {
|
|
148
|
+
const normalized = propertyName.toLowerCase();
|
|
149
|
+
if (normalized === "pipeline" || normalized === "hs_pipeline") {
|
|
150
|
+
checkPipelineMapped(maps, rawValue, `${path}.value`, brokenRefs, seenPaths);
|
|
151
|
+
}
|
|
152
|
+
if (normalized === "dealstage" || normalized === "hs_pipeline_stage" || normalized === "ticketstage") {
|
|
153
|
+
checkStageMapped(maps, rawValue, `${path}.value`, brokenRefs, seenPaths);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const [key, raw] of Object.entries(node)) {
|
|
157
|
+
inspectPropertyValueRefs(raw, `${path}.${key}`, maps, brokenRefs, seenPaths);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function inspectUnknownIdFields(value, path, brokenRefs, seenPaths) {
|
|
161
|
+
if (Array.isArray(value)) {
|
|
162
|
+
value.forEach((item, index) => inspectUnknownIdFields(item, `${path}[${index}]`, brokenRefs, seenPaths));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const node = record(value);
|
|
166
|
+
if (!node)
|
|
167
|
+
return;
|
|
168
|
+
for (const [key, raw] of Object.entries(node)) {
|
|
169
|
+
const keyPath = `${path}.${key}`;
|
|
170
|
+
if (!seenPaths.has(keyPath) && UNKNOWN_ID_KEY.test(key) && !SAFE_ID_KEYS.has(key) && hasIdLikeValue(raw)) {
|
|
171
|
+
seenPaths.add(keyPath);
|
|
172
|
+
brokenRefs.push({
|
|
173
|
+
path: keyPath,
|
|
174
|
+
kind: "unknown-id-field",
|
|
175
|
+
source: raw,
|
|
176
|
+
message: `Potential source ID field '${key}' has no explicit workflow remapper`,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
inspectUnknownIdFields(raw, keyPath, brokenRefs, seenPaths);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function checkMapped(map, source, kind, path, brokenRefs, seenPaths) {
|
|
183
|
+
const values = idValues(source);
|
|
184
|
+
if (values.length === 0)
|
|
185
|
+
return;
|
|
186
|
+
seenPaths.add(path);
|
|
187
|
+
values.forEach((value, index) => {
|
|
188
|
+
if (map[value] !== undefined)
|
|
189
|
+
return;
|
|
190
|
+
brokenRefs.push({
|
|
191
|
+
path: values.length > 1 ? `${path}[${index}]` : path,
|
|
192
|
+
kind,
|
|
193
|
+
source: value,
|
|
194
|
+
message: `No target ${kind} mapping found for source ID ${value}`,
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function checkAnyMapped(maps, source, kind, path, brokenRefs, seenPaths) {
|
|
199
|
+
const values = idValues(source);
|
|
200
|
+
if (values.length === 0)
|
|
201
|
+
return;
|
|
202
|
+
seenPaths.add(path);
|
|
203
|
+
values.forEach((value, index) => {
|
|
204
|
+
if (maps.some((map) => map[value] !== undefined))
|
|
205
|
+
return;
|
|
206
|
+
brokenRefs.push({
|
|
207
|
+
path: values.length > 1 ? `${path}[${index}]` : path,
|
|
208
|
+
kind,
|
|
209
|
+
source: value,
|
|
210
|
+
message: `No target ${kind} mapping found for source ID ${value}`,
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
function checkCustomObjectMapped(map, source, path, brokenRefs, seenPaths) {
|
|
215
|
+
const value = stringifyId(source);
|
|
216
|
+
if (!value || isStandardObjectTypeId(value))
|
|
217
|
+
return;
|
|
218
|
+
checkMapped(map, value, "customObject", path, brokenRefs, seenPaths);
|
|
219
|
+
}
|
|
220
|
+
function checkPipelineMapped(maps, source, path, brokenRefs, seenPaths) {
|
|
221
|
+
const values = idValues(source);
|
|
222
|
+
if (values.length === 0)
|
|
223
|
+
return;
|
|
224
|
+
seenPaths.add(path);
|
|
225
|
+
values.forEach((value, index) => {
|
|
226
|
+
const found = Object.keys(maps.pipelines).includes(value);
|
|
227
|
+
if (found)
|
|
228
|
+
return;
|
|
229
|
+
brokenRefs.push({
|
|
230
|
+
path: values.length > 1 ? `${path}[${index}]` : path,
|
|
231
|
+
kind: "pipeline",
|
|
232
|
+
source: value,
|
|
233
|
+
message: `No target pipeline mapping found for source ID ${value}`,
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function checkStageMapped(maps, source, path, brokenRefs, seenPaths) {
|
|
238
|
+
const values = idValues(source);
|
|
239
|
+
if (values.length === 0)
|
|
240
|
+
return;
|
|
241
|
+
seenPaths.add(path);
|
|
242
|
+
values.forEach((value, index) => {
|
|
243
|
+
if (findPipelineStageTarget(maps.pipelines, value) !== undefined)
|
|
244
|
+
return;
|
|
245
|
+
brokenRefs.push({
|
|
246
|
+
path: values.length > 1 ? `${path}[${index}]` : path,
|
|
247
|
+
kind: "pipelineStage",
|
|
248
|
+
source: value,
|
|
249
|
+
message: `No target pipeline-stage mapping found for source ID ${value}`,
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function normalizeWorkflows(input) {
|
|
254
|
+
if (Array.isArray(input))
|
|
255
|
+
return input.filter(record);
|
|
256
|
+
const root = record(input);
|
|
257
|
+
if (!root)
|
|
258
|
+
return [];
|
|
259
|
+
for (const key of ["results", "workflows", "flows"]) {
|
|
260
|
+
const candidate = root[key];
|
|
261
|
+
if (Array.isArray(candidate))
|
|
262
|
+
return candidate.filter(record);
|
|
263
|
+
}
|
|
264
|
+
return [root];
|
|
265
|
+
}
|
|
266
|
+
function idValues(raw) {
|
|
267
|
+
if (Array.isArray(raw))
|
|
268
|
+
return raw.map(stringifyId).filter((value) => value !== undefined);
|
|
269
|
+
const value = stringifyId(raw);
|
|
270
|
+
return value ? [value] : [];
|
|
271
|
+
}
|
|
272
|
+
function hasIdLikeValue(raw) {
|
|
273
|
+
if (Array.isArray(raw))
|
|
274
|
+
return raw.some(hasIdLikeValue);
|
|
275
|
+
return stringifyId(raw) !== undefined;
|
|
276
|
+
}
|
|
277
|
+
function records(raw) {
|
|
278
|
+
if (!Array.isArray(raw))
|
|
279
|
+
return [];
|
|
280
|
+
return raw.filter(record);
|
|
281
|
+
}
|
|
282
|
+
function record(raw) {
|
|
283
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
284
|
+
return raw;
|
|
285
|
+
}
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
function stringField(record, key) {
|
|
289
|
+
const value = record[key];
|
|
290
|
+
if (typeof value !== "string")
|
|
291
|
+
return undefined;
|
|
292
|
+
const trimmed = value.trim();
|
|
293
|
+
return trimmed ? trimmed : undefined;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/commands/workflows/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const ACTION_CONTRACT_SCHEMA: "hscli.action-contract/v1";
|
|
2
|
+
export interface ActionContractCommand {
|
|
3
|
+
argv: string[];
|
|
4
|
+
verifyArgv?: string[];
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ActionContractOperation {
|
|
8
|
+
summary: string;
|
|
9
|
+
commands: ActionContractCommand[];
|
|
10
|
+
}
|
|
11
|
+
export interface ActionContractLimits {
|
|
12
|
+
maxCommands?: number;
|
|
13
|
+
maxRecords?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ActionContractDraft {
|
|
16
|
+
profile: string;
|
|
17
|
+
portalId: string;
|
|
18
|
+
createdAt?: string;
|
|
19
|
+
expiresAt: string;
|
|
20
|
+
changeTicket?: string;
|
|
21
|
+
operation: ActionContractOperation;
|
|
22
|
+
limits?: ActionContractLimits;
|
|
23
|
+
}
|
|
24
|
+
export interface ActionContract extends ActionContractDraft {
|
|
25
|
+
schema: typeof ACTION_CONTRACT_SCHEMA;
|
|
26
|
+
id: string;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
digest: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ActionContractVerificationContext {
|
|
31
|
+
profile: string;
|
|
32
|
+
portalId?: string;
|
|
33
|
+
changeTicket?: string;
|
|
34
|
+
now?: Date;
|
|
35
|
+
}
|
|
36
|
+
export declare function readActionContractFile(path: string): unknown;
|
|
37
|
+
export declare function sealActionContract(input: unknown, now?: Date): ActionContract;
|
|
38
|
+
export declare function verifyActionContract(input: unknown, context: ActionContractVerificationContext): {
|
|
39
|
+
contract: ActionContract;
|
|
40
|
+
digest: string;
|
|
41
|
+
valid: true;
|
|
42
|
+
portalCheck: "matched" | "unavailable";
|
|
43
|
+
};
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { CliError, redactSensitive } from "./output.js";
|
|
4
|
+
export const ACTION_CONTRACT_SCHEMA = "hscli.action-contract/v1";
|
|
5
|
+
const FORBIDDEN_ROOT_COMMANDS = new Set(["agent", "auth", "help", "home", "internal", "mcp", "ui"]);
|
|
6
|
+
const FORBIDDEN_GLOBAL_ARGS = new Set([
|
|
7
|
+
"--api-base-url",
|
|
8
|
+
"--change-ticket",
|
|
9
|
+
"--dry-run",
|
|
10
|
+
"--force",
|
|
11
|
+
"--hublet",
|
|
12
|
+
"--policy-file",
|
|
13
|
+
"--profile",
|
|
14
|
+
"--telemetry-file",
|
|
15
|
+
]);
|
|
16
|
+
export function readActionContractFile(path) {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new CliError("ACTION_CONTRACT_FILE_INVALID", `Unable to read action contract '${path}': ${error instanceof Error ? error.message : String(error)}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function sealActionContract(input, now = new Date()) {
|
|
25
|
+
const draft = parseDraft(input, now);
|
|
26
|
+
const unsigned = {
|
|
27
|
+
schema: ACTION_CONTRACT_SCHEMA,
|
|
28
|
+
...draft,
|
|
29
|
+
};
|
|
30
|
+
rejectSensitiveData(unsigned);
|
|
31
|
+
const digest = digestValue(unsigned);
|
|
32
|
+
return {
|
|
33
|
+
...unsigned,
|
|
34
|
+
id: `act_${digest.slice(0, 20)}`,
|
|
35
|
+
digest,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function verifyActionContract(input, context) {
|
|
39
|
+
const contract = parseContract(input);
|
|
40
|
+
rejectSensitiveData(contract);
|
|
41
|
+
const { digest, id, ...unsigned } = contract;
|
|
42
|
+
const expectedDigest = digestValue(unsigned);
|
|
43
|
+
if (digest !== expectedDigest || id !== `act_${expectedDigest.slice(0, 20)}`) {
|
|
44
|
+
throw new CliError("ACTION_CONTRACT_DIGEST_MISMATCH", "Action contract digest or ID does not match its payload.");
|
|
45
|
+
}
|
|
46
|
+
if (contract.profile !== context.profile) {
|
|
47
|
+
throw new CliError("ACTION_CONTRACT_PROFILE_MISMATCH", `Contract profile '${contract.profile}' does not match active profile '${context.profile}'.`);
|
|
48
|
+
}
|
|
49
|
+
if (context.portalId && contract.portalId !== context.portalId) {
|
|
50
|
+
throw new CliError("ACTION_CONTRACT_PORTAL_MISMATCH", `Contract portal '${contract.portalId}' does not match active portal '${context.portalId}'.`);
|
|
51
|
+
}
|
|
52
|
+
if (context.changeTicket && contract.changeTicket !== context.changeTicket) {
|
|
53
|
+
throw new CliError("ACTION_CONTRACT_CHANGE_TICKET_MISMATCH", `Contract change ticket '${contract.changeTicket ?? "none"}' does not match active ticket '${context.changeTicket}'.`);
|
|
54
|
+
}
|
|
55
|
+
const now = context.now ?? new Date();
|
|
56
|
+
if (Date.parse(contract.expiresAt) <= now.getTime()) {
|
|
57
|
+
throw new CliError("ACTION_CONTRACT_EXPIRED", `Action contract expired at ${contract.expiresAt}.`);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
contract,
|
|
61
|
+
digest,
|
|
62
|
+
valid: true,
|
|
63
|
+
portalCheck: context.portalId ? "matched" : "unavailable",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function parseDraft(input, now) {
|
|
67
|
+
const value = requireRecord(input, "Action contract draft must be a JSON object.");
|
|
68
|
+
const profile = requireString(value.profile, "profile");
|
|
69
|
+
const portalId = requireString(value.portalId, "portalId");
|
|
70
|
+
const createdAt = normalizeTimestamp(value.createdAt ?? now.toISOString(), "createdAt");
|
|
71
|
+
const expiresAt = normalizeTimestamp(value.expiresAt, "expiresAt");
|
|
72
|
+
if (Date.parse(expiresAt) <= Date.parse(createdAt)) {
|
|
73
|
+
throw new CliError("ACTION_CONTRACT_TIME_INVALID", "expiresAt must be later than createdAt.");
|
|
74
|
+
}
|
|
75
|
+
const operation = parseOperation(value.operation);
|
|
76
|
+
const limits = parseLimits(value.limits);
|
|
77
|
+
const maxCommands = limits?.maxCommands ?? 25;
|
|
78
|
+
if (operation.commands.length > maxCommands) {
|
|
79
|
+
throw new CliError("ACTION_CONTRACT_COMMAND_LIMIT", `Contract contains ${operation.commands.length} commands; limit is ${maxCommands}.`);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
profile,
|
|
83
|
+
portalId,
|
|
84
|
+
createdAt,
|
|
85
|
+
expiresAt,
|
|
86
|
+
operation,
|
|
87
|
+
...(value.changeTicket === undefined ? {} : { changeTicket: requireString(value.changeTicket, "changeTicket") }),
|
|
88
|
+
...(limits ? { limits } : {}),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function parseContract(input) {
|
|
92
|
+
const value = requireRecord(input, "Action contract must be a JSON object.");
|
|
93
|
+
if (value.schema !== ACTION_CONTRACT_SCHEMA) {
|
|
94
|
+
throw new CliError("ACTION_CONTRACT_SCHEMA_UNSUPPORTED", `Expected schema '${ACTION_CONTRACT_SCHEMA}'.`);
|
|
95
|
+
}
|
|
96
|
+
const draft = parseDraft(value, new Date());
|
|
97
|
+
return {
|
|
98
|
+
schema: ACTION_CONTRACT_SCHEMA,
|
|
99
|
+
id: requireString(value.id, "id"),
|
|
100
|
+
digest: requireString(value.digest, "digest"),
|
|
101
|
+
...draft,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function parseOperation(input) {
|
|
105
|
+
const value = requireRecord(input, "operation must be an object.");
|
|
106
|
+
const summary = requireString(value.summary, "operation.summary");
|
|
107
|
+
if (!Array.isArray(value.commands) || value.commands.length === 0) {
|
|
108
|
+
throw new CliError("ACTION_CONTRACT_OPERATION_INVALID", "operation.commands must contain at least one command.");
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
summary,
|
|
112
|
+
commands: value.commands.map((command, index) => parseCommand(command, index)),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function parseCommand(input, index) {
|
|
116
|
+
const value = requireRecord(input, `operation.commands[${index}] must be an object.`);
|
|
117
|
+
const argv = parseArgv(value.argv, `operation.commands[${index}].argv`);
|
|
118
|
+
validateContractArgv(argv);
|
|
119
|
+
const verifyArgv = value.verifyArgv === undefined
|
|
120
|
+
? undefined
|
|
121
|
+
: parseArgv(value.verifyArgv, `operation.commands[${index}].verifyArgv`);
|
|
122
|
+
if (verifyArgv)
|
|
123
|
+
validateContractArgv(verifyArgv);
|
|
124
|
+
return {
|
|
125
|
+
argv,
|
|
126
|
+
...(verifyArgv ? { verifyArgv } : {}),
|
|
127
|
+
...(value.description === undefined ? {} : { description: requireString(value.description, `operation.commands[${index}].description`) }),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function validateContractArgv(argv) {
|
|
131
|
+
const root = argv[0];
|
|
132
|
+
if (FORBIDDEN_ROOT_COMMANDS.has(root)) {
|
|
133
|
+
throw new CliError("ACTION_CONTRACT_COMMAND_FORBIDDEN", `Root command '${root}' is not allowed in action contracts.`);
|
|
134
|
+
}
|
|
135
|
+
for (const arg of argv) {
|
|
136
|
+
if (FORBIDDEN_GLOBAL_ARGS.has(arg)) {
|
|
137
|
+
throw new CliError("ACTION_CONTRACT_GLOBAL_ARG_FORBIDDEN", `Global argument '${arg}' must be supplied by the contract runner.`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function parseArgv(input, field) {
|
|
142
|
+
if (!Array.isArray(input) || input.length === 0 || input.some((arg) => typeof arg !== "string" || !arg.trim())) {
|
|
143
|
+
throw new CliError("ACTION_CONTRACT_ARGV_INVALID", `${field} must be a non-empty array of non-empty strings.`);
|
|
144
|
+
}
|
|
145
|
+
const argv = input.map((arg) => String(arg));
|
|
146
|
+
if (argv.some((arg) => /[\0\r\n]/.test(arg))) {
|
|
147
|
+
throw new CliError("ACTION_CONTRACT_ARGV_INVALID", `${field} cannot contain NUL or line-break characters.`);
|
|
148
|
+
}
|
|
149
|
+
return argv;
|
|
150
|
+
}
|
|
151
|
+
function parseLimits(input) {
|
|
152
|
+
if (input === undefined)
|
|
153
|
+
return undefined;
|
|
154
|
+
const value = requireRecord(input, "limits must be an object.");
|
|
155
|
+
const output = {};
|
|
156
|
+
for (const field of ["maxCommands", "maxRecords"]) {
|
|
157
|
+
if (value[field] === undefined)
|
|
158
|
+
continue;
|
|
159
|
+
const parsed = Number(value[field]);
|
|
160
|
+
if (!Number.isSafeInteger(parsed) || parsed <= 0) {
|
|
161
|
+
throw new CliError("ACTION_CONTRACT_LIMIT_INVALID", `limits.${field} must be a positive integer.`);
|
|
162
|
+
}
|
|
163
|
+
output[field] = parsed;
|
|
164
|
+
}
|
|
165
|
+
return output;
|
|
166
|
+
}
|
|
167
|
+
function requireRecord(input, message) {
|
|
168
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
169
|
+
throw new CliError("ACTION_CONTRACT_INVALID", message);
|
|
170
|
+
}
|
|
171
|
+
return input;
|
|
172
|
+
}
|
|
173
|
+
function requireString(input, field) {
|
|
174
|
+
if (typeof input !== "string" || !input.trim()) {
|
|
175
|
+
throw new CliError("ACTION_CONTRACT_INVALID", `${field} must be a non-empty string.`);
|
|
176
|
+
}
|
|
177
|
+
return input.trim();
|
|
178
|
+
}
|
|
179
|
+
function normalizeTimestamp(input, field) {
|
|
180
|
+
const value = requireString(input, field);
|
|
181
|
+
const timestamp = Date.parse(value);
|
|
182
|
+
if (!Number.isFinite(timestamp)) {
|
|
183
|
+
throw new CliError("ACTION_CONTRACT_TIME_INVALID", `${field} must be an ISO-8601 timestamp.`);
|
|
184
|
+
}
|
|
185
|
+
return new Date(timestamp).toISOString();
|
|
186
|
+
}
|
|
187
|
+
function rejectSensitiveData(input) {
|
|
188
|
+
if (canonicalize(input) !== canonicalize(redactSensitive(input))) {
|
|
189
|
+
throw new CliError("ACTION_CONTRACT_SENSITIVE_DATA", "Action contracts cannot contain credentials or sensitive values.");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function digestValue(input) {
|
|
193
|
+
return createHash("sha256").update(canonicalize(input)).digest("hex");
|
|
194
|
+
}
|
|
195
|
+
function canonicalize(input) {
|
|
196
|
+
if (Array.isArray(input))
|
|
197
|
+
return `[${input.map((item) => canonicalize(item)).join(",")}]`;
|
|
198
|
+
if (input && typeof input === "object") {
|
|
199
|
+
const record = input;
|
|
200
|
+
return `{${Object.keys(record)
|
|
201
|
+
.sort()
|
|
202
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalize(record[key])}`)
|
|
203
|
+
.join(",")}}`;
|
|
204
|
+
}
|
|
205
|
+
return JSON.stringify(input);
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=action-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-contract.js","sourceRoot":"","sources":["../../src/core/action-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auth.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export interface AuthProfile {
|
|
2
2
|
token: string;
|
|
3
|
+
authMode?: "private-app" | "oauth";
|
|
3
4
|
refreshToken?: string;
|
|
4
5
|
expiresAt?: string;
|
|
5
6
|
scopes?: string[];
|
|
7
|
+
userId?: string;
|
|
8
|
+
oauthClientId?: string;
|
|
9
|
+
oauthClientSecretEnv?: string;
|
|
6
10
|
portalId?: string;
|
|
7
11
|
uiDomain?: string;
|
|
8
12
|
dataHostingLocation?: string;
|
|
@@ -33,6 +37,8 @@ export declare function getHscliHomeDir(): string;
|
|
|
33
37
|
export declare function saveToken(profile: string, token: string): void;
|
|
34
38
|
export declare function saveProfile(profile: string, data: AuthProfile): void;
|
|
35
39
|
export declare function getToken(profile: string): string;
|
|
40
|
+
export declare function resolveAuthMode(profile: AuthProfile): "private-app" | "oauth";
|
|
41
|
+
export declare function getValidAccessToken(profileName: string): Promise<string>;
|
|
36
42
|
export declare function removeToken(profile: string): boolean;
|
|
37
43
|
export declare function hasProfile(profile: string): boolean;
|
|
38
44
|
export declare function listProfiles(): string[];
|