@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.
- package/CHANGELOG.md +64 -0
- package/README.md +31 -2
- package/dist/cli.js +27 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth/index.js +46 -11
- package/dist/commands/auth/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/doctor/index.js +119 -1
- package/dist/commands/doctor/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 +6 -0
- package/dist/commands/guide/index.js +257 -0
- package/dist/commands/guide/index.js.map +1 -0
- package/dist/commands/settings/index.js +238 -2
- package/dist/commands/settings/index.js.map +1 -1
- package/dist/commands/ui/index.d.ts +3 -0
- package/dist/commands/ui/index.js +412 -0
- package/dist/commands/ui/index.js.map +1 -0
- 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 +16 -0
- package/dist/core/http.js +141 -40
- 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/scopes.d.ts +29 -0
- package/dist/core/scopes.js +415 -0
- package/dist/core/scopes.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/server.js +90 -22
- package/dist/mcp/server.js.map +1 -1
- package/docs/CAPABILITY_LIBRARY.md +4 -3
- package/docs/COMMAND_TREE.md +23 -5
- package/docs/COOKBOOK.md +99 -0
- package/docs/MARKETING_SETUP.md +8 -2
- package/docs/MCP.md +1 -0
- package/docs/OPERATIONAL_PLAYBOOKS.md +1 -1
- package/docs/PORTAL_SETUP.md +3 -2
- package/docs/SAFETY_MODEL.md +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { createInterface } from "node:readline/promises";
|
|
4
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
5
|
+
import { detectHublet, getApiBaseUrl, getHscliHomeDir, getProfile, hasProfile, listProfiles } from "../../core/auth.js";
|
|
6
|
+
import { printResult } from "../../core/output.js";
|
|
7
|
+
import { readPolicyFile } from "../../core/policy.js";
|
|
8
|
+
import { guidePayload, resolveGoal } from "../guide/index.js";
|
|
9
|
+
const CHOICE_TO_GOAL = {
|
|
10
|
+
setup: "setup",
|
|
11
|
+
migration: "portal-migration",
|
|
12
|
+
read: "read",
|
|
13
|
+
fetch: "fetch",
|
|
14
|
+
write: "write",
|
|
15
|
+
guardrails: "guardrails",
|
|
16
|
+
};
|
|
17
|
+
const CHOICE_ALIASES = {
|
|
18
|
+
"1": "setup",
|
|
19
|
+
setup: "setup",
|
|
20
|
+
"2": "migration",
|
|
21
|
+
migration: "migration",
|
|
22
|
+
migrate: "migration",
|
|
23
|
+
"3": "read",
|
|
24
|
+
read: "read",
|
|
25
|
+
"4": "fetch",
|
|
26
|
+
fetch: "fetch",
|
|
27
|
+
get: "fetch",
|
|
28
|
+
"5": "write",
|
|
29
|
+
write: "write",
|
|
30
|
+
"6": "guardrails",
|
|
31
|
+
guardrails: "guardrails",
|
|
32
|
+
safety: "guardrails",
|
|
33
|
+
"7": "scopes",
|
|
34
|
+
scopes: "scopes",
|
|
35
|
+
scope: "scopes",
|
|
36
|
+
"8": "hublet",
|
|
37
|
+
hublet: "hublet",
|
|
38
|
+
routing: "hublet",
|
|
39
|
+
q: "quit",
|
|
40
|
+
quit: "quit",
|
|
41
|
+
exit: "quit",
|
|
42
|
+
};
|
|
43
|
+
export function registerUi(program, getCtx) {
|
|
44
|
+
const register = (name, description) => {
|
|
45
|
+
program
|
|
46
|
+
.command(name)
|
|
47
|
+
.description(description)
|
|
48
|
+
.option("--goal <goal>", "setup|portal-migration|read|fetch|write|guardrails|property-preflight|audit-trace|explore")
|
|
49
|
+
.option("--no-interactive", "Render the terminal home without prompting")
|
|
50
|
+
.action(async (opts) => {
|
|
51
|
+
const ctx = getCtx();
|
|
52
|
+
const summary = summarizeHome(ctx);
|
|
53
|
+
const goal = opts.goal ? resolveGoal(opts.goal) : undefined;
|
|
54
|
+
const selectedWorkflow = goal ? guidePayload(goal) : undefined;
|
|
55
|
+
if (ctx.json) {
|
|
56
|
+
printResult(ctx, {
|
|
57
|
+
profile: summary.activeProfile,
|
|
58
|
+
profiles: summary.profiles,
|
|
59
|
+
safety: summary.safety,
|
|
60
|
+
recommendation: summary.recommendation,
|
|
61
|
+
workflow: selectedWorkflow ?? null,
|
|
62
|
+
choices: terminalChoices(),
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
output.write(renderHome(summary, selectedWorkflow));
|
|
67
|
+
if (goal || opts.interactive === false || !input.isTTY)
|
|
68
|
+
return;
|
|
69
|
+
const choice = await askChoice();
|
|
70
|
+
if (choice === "quit")
|
|
71
|
+
return;
|
|
72
|
+
output.write(renderChoice(choice));
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
register("ui", "Interactive terminal home for hscli operator workflows");
|
|
76
|
+
register("home", "Terminal home for hscli operator workflows (alias for ui)");
|
|
77
|
+
}
|
|
78
|
+
function summarizeProfile(profile) {
|
|
79
|
+
try {
|
|
80
|
+
if (hasProfile(profile)) {
|
|
81
|
+
const data = getProfile(profile);
|
|
82
|
+
const hublet = detectHublet(data);
|
|
83
|
+
return {
|
|
84
|
+
profile,
|
|
85
|
+
authenticated: true,
|
|
86
|
+
role: inferProfileRole(profile),
|
|
87
|
+
portalId: data.portalId ?? null,
|
|
88
|
+
hublet: data.hublet ?? hublet ?? "na1",
|
|
89
|
+
apiBaseUrl: data.apiDomain ? `https://${data.apiDomain}` : getApiBaseUrl(profile),
|
|
90
|
+
uiDomain: data.uiDomain ?? (hublet ? `app-${hublet}.hubspot.com` : "app.hubspot.com"),
|
|
91
|
+
mode: data.mode ?? "unset",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Fall through to the unauthenticated view. The detailed auth error
|
|
97
|
+
// will surface when the user runs a real command.
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
profile,
|
|
101
|
+
authenticated: false,
|
|
102
|
+
role: inferProfileRole(profile),
|
|
103
|
+
portalId: null,
|
|
104
|
+
hublet: "unknown",
|
|
105
|
+
apiBaseUrl: "https://api.hubapi.com",
|
|
106
|
+
uiDomain: null,
|
|
107
|
+
mode: "not configured",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function summarizeHome(ctx) {
|
|
111
|
+
const activeProfile = summarizeProfile(ctx.profile);
|
|
112
|
+
const profiles = summarizeProfiles(ctx.profile);
|
|
113
|
+
const safety = summarizeSafety(ctx, activeProfile);
|
|
114
|
+
return {
|
|
115
|
+
activeProfile,
|
|
116
|
+
profiles,
|
|
117
|
+
safety,
|
|
118
|
+
recommendation: recommendNextAction(activeProfile, profiles, safety),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function summarizeProfiles(activeProfile) {
|
|
122
|
+
const names = new Set([activeProfile]);
|
|
123
|
+
try {
|
|
124
|
+
for (const profile of listProfiles())
|
|
125
|
+
names.add(profile);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Auth errors are already reflected in the active profile summary.
|
|
129
|
+
}
|
|
130
|
+
return [...names].sort(sortProfiles(activeProfile)).map(summarizeProfile);
|
|
131
|
+
}
|
|
132
|
+
function sortProfiles(activeProfile) {
|
|
133
|
+
return (a, b) => {
|
|
134
|
+
if (a === activeProfile)
|
|
135
|
+
return -1;
|
|
136
|
+
if (b === activeProfile)
|
|
137
|
+
return 1;
|
|
138
|
+
return a.localeCompare(b);
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function inferProfileRole(profile) {
|
|
142
|
+
const value = profile.toLowerCase();
|
|
143
|
+
if (/(^|[-_])(live|prod|production|source)([-_]|$)/.test(value))
|
|
144
|
+
return "SOURCE";
|
|
145
|
+
if (/(^|[-_])(sandbox|target|stage|staging|test|dev)([-_]|$)/.test(value))
|
|
146
|
+
return "TARGET";
|
|
147
|
+
if (value === "default")
|
|
148
|
+
return "CURRENT";
|
|
149
|
+
return "PROFILE";
|
|
150
|
+
}
|
|
151
|
+
function summarizeSafety(ctx, activeProfile) {
|
|
152
|
+
const policy = summarizePolicy(ctx);
|
|
153
|
+
const trace = summarizeTrace(ctx);
|
|
154
|
+
return {
|
|
155
|
+
label: safetyLabel(activeProfile, policy, trace),
|
|
156
|
+
profileMode: activeProfile.mode,
|
|
157
|
+
policy,
|
|
158
|
+
trace,
|
|
159
|
+
rateBudget: "unknown (run `hscli account api-usage`)",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function safetyLabel(activeProfile, policy, trace) {
|
|
163
|
+
if (!activeProfile.authenticated)
|
|
164
|
+
return "setup required";
|
|
165
|
+
if (activeProfile.mode === "read-only")
|
|
166
|
+
return "read-only";
|
|
167
|
+
if (policy.active && trace.active)
|
|
168
|
+
return "guarded writes";
|
|
169
|
+
if (policy.active)
|
|
170
|
+
return "policy active";
|
|
171
|
+
if (trace.active)
|
|
172
|
+
return "trace active";
|
|
173
|
+
if (activeProfile.mode === "read-write")
|
|
174
|
+
return "write-capable";
|
|
175
|
+
return "unverified";
|
|
176
|
+
}
|
|
177
|
+
function summarizePolicy(ctx) {
|
|
178
|
+
const path = ctx.policyFile?.trim() || process.env.HSCLI_POLICY_FILE?.trim() || null;
|
|
179
|
+
if (!path) {
|
|
180
|
+
return { active: false, path: null, status: "off", ruleCount: null, requiresChangeTicket: false };
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const policy = readPolicyFile(path);
|
|
184
|
+
const profiles = Object.values(policy.profiles ?? {});
|
|
185
|
+
const profileRuleCount = profiles.reduce((count, profile) => count + (profile.rules?.length ?? 0), 0);
|
|
186
|
+
const defaultRules = policy.defaults?.rules?.length ?? 0;
|
|
187
|
+
const allProfiles = [policy.defaults, ...profiles].filter(Boolean);
|
|
188
|
+
const requiresChangeTicket = allProfiles.some((profile) => Boolean(profile?.requireChangeTicket || profile?.rules?.some((rule) => rule.requireChangeTicket)));
|
|
189
|
+
return {
|
|
190
|
+
active: true,
|
|
191
|
+
path,
|
|
192
|
+
status: "active",
|
|
193
|
+
ruleCount: profileRuleCount + defaultRules,
|
|
194
|
+
requiresChangeTicket,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return { active: true, path, status: "invalid", ruleCount: null, requiresChangeTicket: false };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function summarizeTrace(ctx) {
|
|
202
|
+
const session = readTraceSession();
|
|
203
|
+
if (session) {
|
|
204
|
+
return {
|
|
205
|
+
active: true,
|
|
206
|
+
mode: "session",
|
|
207
|
+
scope: typeof session.scope === "string" ? session.scope : "all",
|
|
208
|
+
includeBodies: Boolean(session.includeBodies),
|
|
209
|
+
file: typeof session.file === "string" ? session.file : null,
|
|
210
|
+
eventCount: countTraceEvents(typeof session.file === "string" ? session.file : null),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
const file = ctx.telemetryFile?.trim() || process.env.HSCLI_TELEMETRY_FILE?.trim() || null;
|
|
214
|
+
if (file) {
|
|
215
|
+
return {
|
|
216
|
+
active: true,
|
|
217
|
+
mode: "file",
|
|
218
|
+
scope: "all",
|
|
219
|
+
includeBodies: false,
|
|
220
|
+
file,
|
|
221
|
+
eventCount: countTraceEvents(file),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return { active: false, mode: "off", scope: "off", includeBodies: false, file: null, eventCount: null };
|
|
225
|
+
}
|
|
226
|
+
function readTraceSession() {
|
|
227
|
+
const path = join(getHscliHomeDir(), "trace-session.json");
|
|
228
|
+
if (!existsSync(path))
|
|
229
|
+
return null;
|
|
230
|
+
try {
|
|
231
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function countTraceEvents(file) {
|
|
238
|
+
if (!file || !existsSync(file))
|
|
239
|
+
return null;
|
|
240
|
+
try {
|
|
241
|
+
const size = statSync(file).size;
|
|
242
|
+
if (size === 0)
|
|
243
|
+
return 0;
|
|
244
|
+
if (size > 2_000_000)
|
|
245
|
+
return null;
|
|
246
|
+
return readFileSync(file, "utf8").split("\n").filter((line) => line.trim()).length;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function recommendNextAction(activeProfile, profiles, safety) {
|
|
253
|
+
if (!activeProfile.authenticated)
|
|
254
|
+
return `hscli auth login --profile ${activeProfile.profile} --token-stdin --hublet eu1`;
|
|
255
|
+
if (activeProfile.mode === "unset" || activeProfile.mode === "not configured") {
|
|
256
|
+
return `hscli auth set-mode ${activeProfile.profile} read-only`;
|
|
257
|
+
}
|
|
258
|
+
if (activeProfile.role === "SOURCE" && activeProfile.mode !== "read-only") {
|
|
259
|
+
return `hscli auth set-mode ${activeProfile.profile} read-only`;
|
|
260
|
+
}
|
|
261
|
+
if (!safety.policy.active)
|
|
262
|
+
return "hscli policy templates extract read-only --to ./policy.json";
|
|
263
|
+
if (!safety.trace.active)
|
|
264
|
+
return "hscli trace start --scope all --include-bodies";
|
|
265
|
+
if (!profiles.some((profile) => profile.role === "TARGET" && profile.authenticated)) {
|
|
266
|
+
return "hscli auth login --profile sandbox --token-stdin --hublet eu1";
|
|
267
|
+
}
|
|
268
|
+
return "hscli /migration";
|
|
269
|
+
}
|
|
270
|
+
async function askChoice() {
|
|
271
|
+
const rl = createInterface({ input, output });
|
|
272
|
+
try {
|
|
273
|
+
const answer = await rl.question(dim("Select 1-8, or q to quit: "));
|
|
274
|
+
return CHOICE_ALIASES[answer.trim().toLowerCase()] ?? "quit";
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
rl.close();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function renderChoice(choice) {
|
|
281
|
+
const goal = CHOICE_TO_GOAL[choice];
|
|
282
|
+
if (goal)
|
|
283
|
+
return renderWorkflow(guidePayload(goal));
|
|
284
|
+
if (choice === "scopes") {
|
|
285
|
+
return renderPanel("Scope Check", [
|
|
286
|
+
"hscli doctor scopes diff --required real-mirror-read",
|
|
287
|
+
"hscli doctor scopes presets",
|
|
288
|
+
"hscli doctor scopes explain sales-email-read",
|
|
289
|
+
]);
|
|
290
|
+
}
|
|
291
|
+
if (choice === "hublet") {
|
|
292
|
+
return renderPanel("Hublet Routing", [
|
|
293
|
+
"hscli doctor hublet-check",
|
|
294
|
+
"hscli auth set-hublet live eu1",
|
|
295
|
+
"hscli --hublet eu1 --profile live account info",
|
|
296
|
+
]);
|
|
297
|
+
}
|
|
298
|
+
return "";
|
|
299
|
+
}
|
|
300
|
+
function renderHome(summary, workflow) {
|
|
301
|
+
const lines = [
|
|
302
|
+
"",
|
|
303
|
+
accent("hscli"),
|
|
304
|
+
dim("HubSpot operator console"),
|
|
305
|
+
"",
|
|
306
|
+
renderSafetyBanner(summary.safety),
|
|
307
|
+
"",
|
|
308
|
+
renderProfiles(summary.profiles),
|
|
309
|
+
"",
|
|
310
|
+
renderStatus(summary.activeProfile),
|
|
311
|
+
"",
|
|
312
|
+
renderPanel("Recommended Next", [summary.recommendation]),
|
|
313
|
+
"",
|
|
314
|
+
renderPanel("Operator Workflows", terminalChoices()),
|
|
315
|
+
workflow ? renderWorkflow(workflow) : "",
|
|
316
|
+
].filter(Boolean);
|
|
317
|
+
return `${lines.join("\n")}\n`;
|
|
318
|
+
}
|
|
319
|
+
function renderSafetyBanner(safety) {
|
|
320
|
+
const trace = safety.trace.active
|
|
321
|
+
? `${safety.trace.mode}:${safety.trace.scope}${safety.trace.includeBodies ? "+bodies" : ""}${safety.trace.eventCount === null ? "" : ` ${safety.trace.eventCount} events`}`
|
|
322
|
+
: "off";
|
|
323
|
+
const policy = safety.policy.active
|
|
324
|
+
? `${safety.policy.status}${safety.policy.requiresChangeTicket ? " ticket-required" : ""}`
|
|
325
|
+
: "off";
|
|
326
|
+
return renderPanel("Safety", [
|
|
327
|
+
`Mode ${safety.label}`,
|
|
328
|
+
`Policy ${policy}`,
|
|
329
|
+
`Trace ${trace}`,
|
|
330
|
+
`API ${safety.rateBudget}`,
|
|
331
|
+
]);
|
|
332
|
+
}
|
|
333
|
+
function renderProfiles(profiles) {
|
|
334
|
+
const rows = profiles.slice(0, 6).map((profile) => {
|
|
335
|
+
const auth = profile.authenticated ? "ok" : "missing";
|
|
336
|
+
return [
|
|
337
|
+
profile.role.padEnd(7),
|
|
338
|
+
profile.profile.padEnd(12),
|
|
339
|
+
profile.hublet.padEnd(7),
|
|
340
|
+
profile.mode.padEnd(12),
|
|
341
|
+
auth.padEnd(8),
|
|
342
|
+
`portal ${profile.portalId ?? "-"}`,
|
|
343
|
+
].join(" ");
|
|
344
|
+
});
|
|
345
|
+
if (profiles.length > 6)
|
|
346
|
+
rows.push(`+${profiles.length - 6} more profile(s)`);
|
|
347
|
+
return renderPanel("Profiles", rows);
|
|
348
|
+
}
|
|
349
|
+
function renderStatus(summary) {
|
|
350
|
+
const rows = [
|
|
351
|
+
["Profile", summary.profile],
|
|
352
|
+
["Role", summary.role],
|
|
353
|
+
["Auth", summary.authenticated ? "ok" : "missing"],
|
|
354
|
+
["Mode", summary.mode],
|
|
355
|
+
["Hublet", summary.hublet],
|
|
356
|
+
["API", summary.apiBaseUrl],
|
|
357
|
+
["UI", summary.uiDomain ?? "-"],
|
|
358
|
+
["Portal", summary.portalId ?? "-"],
|
|
359
|
+
];
|
|
360
|
+
return renderPanel("Current Context", rows.map(([label, value]) => `${label.padEnd(8)} ${value}`));
|
|
361
|
+
}
|
|
362
|
+
function terminalChoices() {
|
|
363
|
+
return [
|
|
364
|
+
"1 /setup auth, hublet routing, scopes, capabilities",
|
|
365
|
+
"2 /migration portal/schema migration sequence",
|
|
366
|
+
"3 /read source-portal read workflow",
|
|
367
|
+
"4 /fetch get records or metadata without mutation",
|
|
368
|
+
"5 /write target-portal write workflow",
|
|
369
|
+
"6 /guardrails read-only, policy, trace, scope checks",
|
|
370
|
+
"7 scopes compare token scopes to real-mirror-read",
|
|
371
|
+
"8 hublet verify or pin EU/AP/NA routing",
|
|
372
|
+
];
|
|
373
|
+
}
|
|
374
|
+
function renderWorkflow(workflow) {
|
|
375
|
+
const goal = String(workflow.goal ?? "workflow");
|
|
376
|
+
const commands = Array.isArray(workflow.nextCommands)
|
|
377
|
+
? workflow.nextCommands.map(String)
|
|
378
|
+
: [];
|
|
379
|
+
const purpose = typeof workflow.purpose === "string" ? [workflow.purpose] : [];
|
|
380
|
+
return renderPanel(`Workflow: ${goal}`, [...purpose, ...commands]);
|
|
381
|
+
}
|
|
382
|
+
function renderPanel(title, rows) {
|
|
383
|
+
const width = Math.max(title.length + 4, ...rows.map((row) => visibleLength(row) + 4), 44);
|
|
384
|
+
const border = `+${"-".repeat(width - 2)}+`;
|
|
385
|
+
const titlePadding = " ".repeat(Math.max(0, width - visibleLength(title) - 4));
|
|
386
|
+
return [
|
|
387
|
+
border,
|
|
388
|
+
`| ${accent(title)}${titlePadding} |`,
|
|
389
|
+
border,
|
|
390
|
+
...rows.map((row) => `| ${padVisible(row, width - 4)} |`),
|
|
391
|
+
border,
|
|
392
|
+
].join("\n");
|
|
393
|
+
}
|
|
394
|
+
function accent(value) {
|
|
395
|
+
return color(value, "38;5;209");
|
|
396
|
+
}
|
|
397
|
+
function dim(value) {
|
|
398
|
+
return color(value, "2");
|
|
399
|
+
}
|
|
400
|
+
function color(value, code) {
|
|
401
|
+
if (!output.isTTY || process.env.NO_COLOR)
|
|
402
|
+
return value;
|
|
403
|
+
return `\u001b[${code}m${value}\u001b[0m`;
|
|
404
|
+
}
|
|
405
|
+
function visibleLength(value) {
|
|
406
|
+
const escape = String.fromCharCode(27);
|
|
407
|
+
return value.replace(new RegExp(`${escape}\\[[0-9;]*m`, "g"), "").length;
|
|
408
|
+
}
|
|
409
|
+
function padVisible(value, width) {
|
|
410
|
+
return value + " ".repeat(Math.max(0, width - visibleLength(value)));
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/ui/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auth.d.ts
CHANGED
|
@@ -5,13 +5,19 @@ export interface AuthProfile {
|
|
|
5
5
|
scopes?: string[];
|
|
6
6
|
portalId?: string;
|
|
7
7
|
uiDomain?: string;
|
|
8
|
+
dataHostingLocation?: string;
|
|
8
9
|
apiDomain?: string;
|
|
9
10
|
hublet?: string;
|
|
10
11
|
mode?: "read-only" | "read-write";
|
|
11
12
|
}
|
|
13
|
+
export declare function normalizeHublet(value: string | undefined): string | undefined;
|
|
14
|
+
export declare function normalizeStoredHublet(value: string): string;
|
|
15
|
+
export declare function normalizeApiDomain(value: string): string;
|
|
16
|
+
export declare function normalizeApiBaseUrl(value: string): string;
|
|
12
17
|
/**
|
|
13
18
|
* Detect the hublet from available profile data.
|
|
14
|
-
* Priority: explicit hublet field > uiDomain > token prefix.
|
|
19
|
+
* Priority: explicit hublet field > dataHostingLocation > uiDomain > token prefix.
|
|
20
|
+
* NA1 resolves to undefined because public API calls use api.hubapi.com.
|
|
15
21
|
*/
|
|
16
22
|
export declare function detectHublet(profile: Partial<AuthProfile>): string | undefined;
|
|
17
23
|
/**
|
package/dist/core/auth.js
CHANGED
|
@@ -3,24 +3,61 @@ import { join } from "node:path";
|
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { CliError } from "./output.js";
|
|
5
5
|
import { isVaultEncrypted, readVaultData, writeVaultData, getVaultPassphrase } from "./vault.js";
|
|
6
|
+
export function normalizeHublet(value) {
|
|
7
|
+
const normalized = value?.trim().toLowerCase();
|
|
8
|
+
if (!normalized || normalized === "na" || normalized === "na1" || normalized === "global" || normalized === "prod")
|
|
9
|
+
return undefined;
|
|
10
|
+
if (!/^[a-z][a-z0-9]*\d+$/.test(normalized)) {
|
|
11
|
+
throw new CliError("INVALID_HUBLET", `Invalid hublet '${value}'. Expected values like eu1, na1, na2, ap1.`);
|
|
12
|
+
}
|
|
13
|
+
return normalized;
|
|
14
|
+
}
|
|
15
|
+
export function normalizeStoredHublet(value) {
|
|
16
|
+
const normalized = value.trim().toLowerCase();
|
|
17
|
+
if (!normalized)
|
|
18
|
+
throw new CliError("INVALID_HUBLET", "Hublet cannot be empty.");
|
|
19
|
+
if (normalized === "na" || normalized === "global" || normalized === "prod")
|
|
20
|
+
return "na1";
|
|
21
|
+
if (!/^[a-z][a-z0-9]*\d+$/.test(normalized)) {
|
|
22
|
+
throw new CliError("INVALID_HUBLET", `Invalid hublet '${value}'. Expected values like eu1, na1, na2, ap1.`);
|
|
23
|
+
}
|
|
24
|
+
return normalized;
|
|
25
|
+
}
|
|
26
|
+
export function normalizeApiDomain(value) {
|
|
27
|
+
const normalized = value
|
|
28
|
+
.trim()
|
|
29
|
+
.replace(/^https?:\/\//i, "")
|
|
30
|
+
.replace(/\/+$/, "")
|
|
31
|
+
.toLowerCase();
|
|
32
|
+
if (!/^api(?:-[a-z0-9]+)?\.hubapi\.com$/.test(normalized)) {
|
|
33
|
+
throw new CliError("INVALID_API_DOMAIN", "API domain must be api.hubapi.com or api-<hublet>.hubapi.com.");
|
|
34
|
+
}
|
|
35
|
+
return normalized;
|
|
36
|
+
}
|
|
37
|
+
export function normalizeApiBaseUrl(value) {
|
|
38
|
+
return `https://${normalizeApiDomain(value)}`;
|
|
39
|
+
}
|
|
6
40
|
/**
|
|
7
41
|
* Detect the hublet from available profile data.
|
|
8
|
-
* Priority: explicit hublet field > uiDomain > token prefix.
|
|
42
|
+
* Priority: explicit hublet field > dataHostingLocation > uiDomain > token prefix.
|
|
43
|
+
* NA1 resolves to undefined because public API calls use api.hubapi.com.
|
|
9
44
|
*/
|
|
10
45
|
export function detectHublet(profile) {
|
|
11
46
|
if (profile.hublet)
|
|
12
|
-
return profile.hublet;
|
|
47
|
+
return normalizeHublet(profile.hublet);
|
|
48
|
+
if (profile.dataHostingLocation)
|
|
49
|
+
return normalizeHublet(profile.dataHostingLocation);
|
|
13
50
|
// Detect from uiDomain (e.g. "app-eu1.hubspot.com" → "eu1")
|
|
14
51
|
if (profile.uiDomain) {
|
|
15
52
|
const match = profile.uiDomain.match(/^app-([a-z0-9]+)\./);
|
|
16
53
|
if (match)
|
|
17
|
-
return match[1];
|
|
54
|
+
return normalizeHublet(match[1]);
|
|
18
55
|
}
|
|
19
56
|
// Detect from token prefix (e.g. "pat-eu1-..." → "eu1")
|
|
20
57
|
if (profile.token) {
|
|
21
58
|
const tokenMatch = profile.token.match(/^pat-([a-z0-9]+)-/);
|
|
22
|
-
if (tokenMatch
|
|
23
|
-
return tokenMatch[1];
|
|
59
|
+
if (tokenMatch)
|
|
60
|
+
return normalizeHublet(tokenMatch[1]);
|
|
24
61
|
}
|
|
25
62
|
return undefined;
|
|
26
63
|
}
|
|
@@ -29,9 +66,10 @@ export function detectHublet(profile) {
|
|
|
29
66
|
* NA/default → "api.hubapi.com", EU1 → "api-eu1.hubapi.com", etc.
|
|
30
67
|
*/
|
|
31
68
|
export function resolveApiDomain(hublet) {
|
|
32
|
-
|
|
69
|
+
const normalized = normalizeHublet(hublet);
|
|
70
|
+
if (!normalized)
|
|
33
71
|
return "api.hubapi.com";
|
|
34
|
-
return `api-${
|
|
72
|
+
return `api-${normalized}.hubapi.com`;
|
|
35
73
|
}
|
|
36
74
|
/**
|
|
37
75
|
* Get the API base URL for a profile (hublet-aware).
|
package/dist/core/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/http.d.ts
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* Automatically resolves the API base URL from the profile's hublet setting.
|
|
4
4
|
*/
|
|
5
5
|
export declare function createClient(profile: string, options?: Omit<HubSpotClientOptions, "apiBaseUrl">): HubSpotClient;
|
|
6
|
+
export declare function createBrowserSessionClient(profile: string, options: Omit<HubSpotClientOptions, "auth" | "skipCapabilityPreflight"> & {
|
|
7
|
+
cookie: string;
|
|
8
|
+
csrfToken: string;
|
|
9
|
+
}): HubSpotClient;
|
|
6
10
|
export interface RequestOptions {
|
|
7
11
|
method?: "GET" | "POST" | "PATCH" | "PUT" | "DELETE";
|
|
8
12
|
body?: unknown;
|
|
@@ -52,6 +56,12 @@ interface HubSpotClientOptions {
|
|
|
52
56
|
strictCapabilities?: boolean;
|
|
53
57
|
/** Override the API base URL (e.g. "https://api-eu1.hubapi.com" for EU1 portals). */
|
|
54
58
|
apiBaseUrl?: string;
|
|
59
|
+
auth?: {
|
|
60
|
+
kind: "browser-session";
|
|
61
|
+
cookie: string;
|
|
62
|
+
csrfToken: string;
|
|
63
|
+
};
|
|
64
|
+
skipCapabilityPreflight?: boolean;
|
|
55
65
|
}
|
|
56
66
|
export declare class HubSpotClient {
|
|
57
67
|
private readonly token;
|
|
@@ -62,6 +72,8 @@ export declare class HubSpotClient {
|
|
|
62
72
|
private readonly traceIncludeBodies;
|
|
63
73
|
private readonly profile;
|
|
64
74
|
private readonly strictCapabilities;
|
|
75
|
+
private readonly auth?;
|
|
76
|
+
private readonly skipCapabilityPreflight;
|
|
65
77
|
private readonly rateLimitState;
|
|
66
78
|
private portalTimeZone;
|
|
67
79
|
private portalTimeZoneFetching;
|
|
@@ -71,7 +83,9 @@ export declare class HubSpotClient {
|
|
|
71
83
|
private emitTelemetry;
|
|
72
84
|
private beforeRateLimitedRequest;
|
|
73
85
|
private computeWaitMs;
|
|
86
|
+
private computeWindowWaitMs;
|
|
74
87
|
private reserveBudget;
|
|
88
|
+
private reserveWindowBudget;
|
|
75
89
|
private observeRateLimitHeaders;
|
|
76
90
|
/**
|
|
77
91
|
* Fetch the portal's timezone once and cache it on the client instance.
|
|
@@ -82,5 +96,7 @@ export declare class HubSpotClient {
|
|
|
82
96
|
private ensurePortalTimeZoneFetched;
|
|
83
97
|
private observeTooManyRequests;
|
|
84
98
|
private computeDailyPacingNextAt;
|
|
99
|
+
private isDailyQuotaExhausted;
|
|
100
|
+
private dailyQuotaError;
|
|
85
101
|
}
|
|
86
102
|
export {};
|