@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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,252 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.11 - 2026-04-24
|
|
4
|
+
|
|
5
|
+
**Migration operator surface + shared rate-limit enforcement.** Ships
|
|
6
|
+
the Claude-style `/setup` → `/migration` → `/read` → `/write` →
|
|
7
|
+
`/guardrails` operator flow, fleshes out migration-replay coverage
|
|
8
|
+
(batch properties, custom-object property routing, legacy v2 forms
|
|
9
|
+
translator, session-auth permission sets), and tightens the HTTP
|
|
10
|
+
layer so multiple clients in one process no longer overrun a shared
|
|
11
|
+
HubSpot rate budget.
|
|
12
|
+
|
|
13
|
+
38 new tests land alongside the features (307 total passing).
|
|
14
|
+
|
|
15
|
+
### Added — migration/operator workflows
|
|
16
|
+
|
|
17
|
+
- Claude-style operator entrypoints: `hscli /setup`, `/migration`,
|
|
18
|
+
`/read`, `/write`, and `/guardrails`, with non-slash aliases for
|
|
19
|
+
shell environments that prefer plain command names.
|
|
20
|
+
- `auth set-hublet <profile> <hublet>` plus global `--hublet` /
|
|
21
|
+
`--api-base-url` routing overrides for explicit EU/AP/NA hublet
|
|
22
|
+
control.
|
|
23
|
+
- `doctor scopes list|presets|explain|diff`, backed by a local
|
|
24
|
+
HubSpot scope catalog and `real-mirror-read` / `real-mirror-write`
|
|
25
|
+
presets.
|
|
26
|
+
|
|
27
|
+
### Added — migration replay coverage
|
|
28
|
+
|
|
29
|
+
- Batch property create support and custom-object property/group
|
|
30
|
+
endpoint routing for object type IDs.
|
|
31
|
+
- Legacy v2 forms translator/replay hardening: required v3 metadata,
|
|
32
|
+
property preflight, and group-size splitting.
|
|
33
|
+
- Session-auth permission-set commands for internal HubSpot permission
|
|
34
|
+
set migration paths.
|
|
35
|
+
|
|
36
|
+
### Fixed — HubSpot rate-limit enforcement
|
|
37
|
+
|
|
38
|
+
- Rate-limit state is now shared by `profile + API base URL + auth kind`
|
|
39
|
+
within the process, so multiple clients do not overrun the same
|
|
40
|
+
observed budget.
|
|
41
|
+
- The HTTP layer enforces HubSpot `Secondly`, rolling window, daily
|
|
42
|
+
remaining, and `Retry-After` headers before subsequent calls.
|
|
43
|
+
- Daily hard-limit responses now stop immediately with
|
|
44
|
+
`RATE_LIMIT_DAILY_EXHAUSTED` instead of retrying and wasting calls.
|
|
45
|
+
|
|
46
|
+
## 0.8.10 - 2026-04-24
|
|
47
|
+
|
|
48
|
+
**Polish follow-up to 0.8.9.** Five small fixes from the PR #43 review —
|
|
49
|
+
no behavior change on the safety rails landed in 0.8.9, just closing
|
|
50
|
+
gaps around product claim honesty, packaging, regression coverage,
|
|
51
|
+
first-call hublet UX, and doc freshness.
|
|
52
|
+
|
|
53
|
+
### Changed — README claim wording aligned with package.json
|
|
54
|
+
|
|
55
|
+
The README's "What '1,180 endpoints' means" block previously said
|
|
56
|
+
"Every one of HubSpot's documented public API endpoints has a
|
|
57
|
+
corresponding CLI subcommand." Rewritten to "covers **~all** of
|
|
58
|
+
HubSpot's documented public API endpoints" with an explicit list of
|
|
59
|
+
reachability gates (tier, scope, auth model, deprecation, UI-only)
|
|
60
|
+
and a pointer to the ❌/⚠️/✅ matrix in `docs/CAPABILITY_LIBRARY.md`.
|
|
61
|
+
The "Full surface coverage" details summary also softened to
|
|
62
|
+
"Surface coverage".
|
|
63
|
+
|
|
64
|
+
### Fixed — more packaged-docs link breakage on npm
|
|
65
|
+
|
|
66
|
+
0.8.9 caught `docs/TUTORIALS/*.md` and `docs/POLICY_EXAMPLE.json`.
|
|
67
|
+
Review flagged a second batch: `brand/readme-hero.svg`,
|
|
68
|
+
`CONTRIBUTING.md`, `scripts/demo.sh`, `scripts/demo.tape`, and
|
|
69
|
+
`scripts/README.md` were still relative and not in the tarball.
|
|
70
|
+
|
|
71
|
+
- `brand/readme-hero.svg` + `CONTRIBUTING.md` added to `files`
|
|
72
|
+
(small, make sense in-package).
|
|
73
|
+
- `scripts/*` links rewritten to absolute
|
|
74
|
+
`github.com/revfleet/hscli/blob/main/...` URLs since the
|
|
75
|
+
`scripts/` directory also contains ~200KB of Python helpers, a
|
|
76
|
+
`__pycache__/`, and release tooling that don't belong in npm.
|
|
77
|
+
|
|
78
|
+
### Added — security regression tests (`tests/bugfixes-v0.8.9.test.ts`)
|
|
79
|
+
|
|
80
|
+
Locking in 0.8.9's hardening so future refactors don't silently
|
|
81
|
+
re-open the leaks:
|
|
82
|
+
|
|
83
|
+
- **`auth token-info` never writes the raw token to telemetry**
|
|
84
|
+
(verifies the `/oauth/v1/access-tokens/{token}` path is redacted
|
|
85
|
+
to `/oauth/v1/access-tokens/[REDACTED]`).
|
|
86
|
+
- **`--include-bodies` redacts secrets in request + response**
|
|
87
|
+
(posts a `pat-na1-…` in the request body and receives it in the
|
|
88
|
+
response body, asserts the raw value never appears in the JSONL
|
|
89
|
+
and `[REDACTED]` does).
|
|
90
|
+
- **CLI path surfaces `changeTicket` in telemetry**
|
|
91
|
+
(covers the env-bridge fallback — the MCP-only ALS test from
|
|
92
|
+
0.8.9 didn't exercise the non-MCP code path).
|
|
93
|
+
|
|
94
|
+
### Changed — `auth login` uses hublet-aware verification URL
|
|
95
|
+
|
|
96
|
+
`fetchPortalDetails()` previously always hit `api.hubapi.com` for
|
|
97
|
+
the initial `/account-info/v3/details` probe. For EU/AP portals
|
|
98
|
+
this first call fails and the code falls through to another probe
|
|
99
|
+
before the hublet gets saved. Now the token prefix (`pat-eu1-…`,
|
|
100
|
+
`pat-ap1-…`) is passed through the existing `detectHublet()`
|
|
101
|
+
helper before the first fetch, so EU/AP users get a 2xx on the
|
|
102
|
+
first try instead of a silent fallback.
|
|
103
|
+
|
|
104
|
+
### Changed — stale doc references to `~/.hscli`
|
|
105
|
+
|
|
106
|
+
Some operational docs still pointed to the pre-rebrand config dir:
|
|
107
|
+
|
|
108
|
+
- `docs/MCP.md` — example `HSCLI_HOME` value corrected to
|
|
109
|
+
`/absolute/path/to/.revfleet`.
|
|
110
|
+
- `docs/OPERATIONAL_PLAYBOOKS.md` — 7 shell snippets rewritten from
|
|
111
|
+
`~/.hscli/` → `~/.revfleet/`. The single reference to
|
|
112
|
+
HubSpot's official `@hubspot/cli` (which *does* use
|
|
113
|
+
`~/.hscli.config.yml`) is now explicitly flagged as such.
|
|
114
|
+
- `docs/ROADMAP_PHASE1_TO_3.md` — plugin discovery entry updated to
|
|
115
|
+
reflect 0.8.9's opt-in `HSCLI_PLUGIN_AUTO_DISCOVER` model.
|
|
116
|
+
|
|
117
|
+
## 0.8.9 - 2026-04-23
|
|
118
|
+
|
|
119
|
+
**Security hardening + hublet routing completeness.** Addresses five
|
|
120
|
+
audit findings against 0.8.8 (Codex review on `revfleet/hscli@2e169f0`).
|
|
121
|
+
|
|
122
|
+
### Fixed — P1: trace/audit logs could leak tokens
|
|
123
|
+
|
|
124
|
+
- `src/core/http.ts` now redacts the telemetry event before writing to
|
|
125
|
+
the JSONL. Request bodies, response bodies, and error strings pass
|
|
126
|
+
through `redactSensitive()` from `core/output.ts`. The request path
|
|
127
|
+
is also run through a new `redactTokenPath()` helper that replaces
|
|
128
|
+
the token segment on `/oauth/v1/access-tokens/{token}` and
|
|
129
|
+
`/oauth/v1/refresh-tokens/{token}`, so `hscli auth token-info`
|
|
130
|
+
traces no longer capture the raw secret.
|
|
131
|
+
- The trace-help text (`hscli trace start --include-bodies` —
|
|
132
|
+
"redacted for secrets") now matches actual behavior.
|
|
133
|
+
|
|
134
|
+
### Fixed — P1: several commands bypassed hublet routing
|
|
135
|
+
|
|
136
|
+
Commands instantiating `new HubSpotClient(getToken(profile))` directly
|
|
137
|
+
fell back to `api.hubapi.com` regardless of the profile's `hublet`
|
|
138
|
+
setting, so EU1/AP portal writes silently hit the wrong base URL.
|
|
139
|
+
|
|
140
|
+
Swapped to `createClient(profile)` (which resolves `getApiBaseUrl`)
|
|
141
|
+
across: `commands/account`, `commands/auth` (`token-info`),
|
|
142
|
+
`commands/communication-preferences`, `commands/events`,
|
|
143
|
+
`commands/marketing` (helper path), `commands/settings`,
|
|
144
|
+
`mcp/server` (`executeTool`), `mcp/hubspot-modules`.
|
|
145
|
+
|
|
146
|
+
### Fixed — P2: MCP cannot provide change tickets (and audit it)
|
|
147
|
+
|
|
148
|
+
`baseArgsSchema` and `McpBaseArgs` now include an optional
|
|
149
|
+
`changeTicket` field. `mcpContext()` threads it into the `CliContext`
|
|
150
|
+
so policies with `requireChangeTicket: true` accept MCP writes.
|
|
151
|
+
|
|
152
|
+
The ticket is **also written into the trace/audit JSONL** — the first
|
|
153
|
+
iteration of this PR only threaded it into the policy check but
|
|
154
|
+
left telemetry blind to it (review feedback). `TelemetryContext`
|
|
155
|
+
now carries `changeTicket`, `executeTool()` extends the ALS scope
|
|
156
|
+
with it via a new `withTelemetryContext()` helper, and
|
|
157
|
+
`emitTelemetry()` emits it on every event. For CLI (non-MCP), the
|
|
158
|
+
preAction hook sets `HSCLI_CHANGE_TICKET` so the HTTP layer picks
|
|
159
|
+
it up as an env fallback (CLI is single-invocation per process, so
|
|
160
|
+
env is race-safe). `HSCLI_POLICY_FILE` + `HSCLI_CHANGE_TICKET` are
|
|
161
|
+
also honored on MCP so agents can inject without a code change.
|
|
162
|
+
|
|
163
|
+
Regression test: `changeTicket from MCP args is written into the
|
|
164
|
+
telemetry event` in `tests/bugfixes-v0.7.1.test.ts`.
|
|
165
|
+
|
|
166
|
+
### Fixed — P2: MCP tool-name attribution was process-global
|
|
167
|
+
|
|
168
|
+
`registerMcpTool()` previously mutated `process.env.HSCLI_MCP_TOOL_NAME`
|
|
169
|
+
around the async handler, so two concurrent MCP calls would clobber
|
|
170
|
+
each other's tool name. Replaced with `AsyncLocalStorage` in a new
|
|
171
|
+
`core/telemetry-context.ts` module. `emitTelemetry()` in `http.ts`
|
|
172
|
+
reads `toolName` from the ALS store, which is scoped to each
|
|
173
|
+
invocation's async chain.
|
|
174
|
+
|
|
175
|
+
### Fixed — P2: plugin auto-discovery is now opt-in
|
|
176
|
+
|
|
177
|
+
`core/plugins.ts` no longer imports every `node_modules` package with
|
|
178
|
+
keyword `hscli-plugin` by default. Auto-discovery runs only when
|
|
179
|
+
`HSCLI_PLUGIN_AUTO_DISCOVER=1`, and when it does, hscli prints the
|
|
180
|
+
resolved package list to stderr before loading. Explicit `HSCLI_PLUGINS`
|
|
181
|
+
allowlist is always honored. Documented in `docs/PLUGIN_GUIDE.md`.
|
|
182
|
+
|
|
183
|
+
### Added — `auth login` portal verification warning
|
|
184
|
+
|
|
185
|
+
`hscli auth login` now warns loudly on stderr when the token was saved
|
|
186
|
+
but `/account-info/v3/details` and `/integrations/v1/me` both failed —
|
|
187
|
+
previously the command succeeded silently with an unverifiable token.
|
|
188
|
+
`--no-verify` skips the check for offline/restricted-network setups.
|
|
189
|
+
|
|
190
|
+
### Changed — packaging
|
|
191
|
+
|
|
192
|
+
`files` in `package.json` now includes `docs/*.md`,
|
|
193
|
+
`docs/TUTORIALS/*.md`, and `docs/POLICY_EXAMPLE.json` so the
|
|
194
|
+
README's doc links resolve after `npm install`. Previously only
|
|
195
|
+
`docs/policy-templates/` was shipped. The top-level `docs/*.md`
|
|
196
|
+
glob is non-recursive, so `TUTORIALS/` needed its own explicit
|
|
197
|
+
entry (review feedback). The README's `demo-*.gif` references were
|
|
198
|
+
switched to absolute GitHub raw URLs since the 14 MB of demo
|
|
199
|
+
assets don't belong in the tarball.
|
|
200
|
+
|
|
201
|
+
### Changed — product positioning
|
|
202
|
+
|
|
203
|
+
`package.json.description` rewritten: "~all documented public
|
|
204
|
+
endpoints" instead of "100% public API coverage". Reachability is
|
|
205
|
+
tier/scope/auth-model/deprecation-gated; see `docs/CAPABILITY_LIBRARY.md`
|
|
206
|
+
for the ❌/⚠️/✅ matrix.
|
|
207
|
+
|
|
208
|
+
## 0.8.8 - 2026-04-23
|
|
209
|
+
|
|
210
|
+
**Multipart HTTP support + MCP drag-and-drop module tools.** Two
|
|
211
|
+
complementary unlocks that close the last major capability gaps from
|
|
212
|
+
the re-audit series.
|
|
213
|
+
|
|
214
|
+
### Added — multipart HTTP (Node 20+ native FormData)
|
|
215
|
+
|
|
216
|
+
`src/core/http.ts` now accepts `RequestOptions.multipart` — a field-name
|
|
217
|
+
→ (string | `{path, contentType?, filename?}`) record. Internally it
|
|
218
|
+
builds a native `FormData` and lets the runtime emit the correct
|
|
219
|
+
`multipart/form-data; boundary=…` Content-Type. Manually setting the
|
|
220
|
+
header without a boundary was the root cause of every 415 we hit
|
|
221
|
+
(confirmed via reading HubSpot's own [nodejs SDK source](https://github.com/HubSpot/hubspot-api-nodejs)).
|
|
222
|
+
|
|
223
|
+
Three new CLI commands:
|
|
224
|
+
|
|
225
|
+
- `hscli cms source-code upload <env> <destPath> --file <localPath> [--content-type <mime>]` — PUT a local file to a CMS source-code path. Verified live.
|
|
226
|
+
- `hscli cms hubdb import <tableId> --file <csv> --config '<json>'` — import rows into a HubDB draft table (multipart: `config` + `file` parts). Transport verified; CSV imports themselves require a Content-Hub plan tier that supports them.
|
|
227
|
+
- `hscli cms upload <destPath> --file <localPath> [--content-type <mime>]` — mirrors the legacy `content/filemapper/v1/upload/{dest}` endpoint that HubSpot's own `hs upload` command uses under the hood (not in public dev-docs). Verified live.
|
|
228
|
+
|
|
229
|
+
New flags on raw passthrough:
|
|
230
|
+
|
|
231
|
+
- `hscli api request --file <field>=<path>[:<contentType>]` — repeatable file part attachment.
|
|
232
|
+
- `hscli api request --part <field>=<value>` — repeatable text part attachment.
|
|
233
|
+
|
|
234
|
+
Combined: any multipart endpoint is reachable without a dedicated wrapper command.
|
|
235
|
+
|
|
236
|
+
### Added — MCP drag-and-drop module tools
|
|
237
|
+
|
|
238
|
+
Three new MCP tools wire HubSpot's full `@hubspot/*` module library into the agent surface:
|
|
239
|
+
|
|
240
|
+
- **`hubspot_module_list`** — enumerate built-in modules on the caller's portal, with `--schemas` for inline field definitions.
|
|
241
|
+
- **`hubspot_module_describe`** — fetch one module's `fields.json` (types, required, defaults, choices, nested groups). The same schema a UI user sees when they click a module.
|
|
242
|
+
- **`hubspot_module_compose`** — given a module path + field values, returns a validated widget body ready to embed in `content.widgets[widgetId]`. Rejects unknown fields + type mismatches before the widget is posted to HubSpot.
|
|
243
|
+
|
|
244
|
+
Design: one dynamic compose tool instead of auto-generating 55 per-module tools, matching how a drag-drop user actually works (browse → describe → fill).
|
|
245
|
+
|
|
246
|
+
### Fixes
|
|
247
|
+
|
|
248
|
+
- [docs/CAPABILITY_LIBRARY.md](docs/CAPABILITY_LIBRARY.md) §6 CMS source-code + §6 HubDB import + §13 multipart table — all ⚠️ rows for multipart endpoints flip to ✅. Appendix B gains a subsection describing the 3 new MCP tools and the agent "browse → describe → fill" flow.
|
|
249
|
+
|
|
3
250
|
## 0.8.7 - 2026-04-23
|
|
4
251
|
|
|
5
252
|
**Third docs pass + HubSpot open-source scan.** Reviewed
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Contributing to hscli
|
|
2
|
+
|
|
3
|
+
Thanks for considering a contribution. hscli is built to a high bar — security, safety, and rigor first. Please read this doc before opening issues or PRs.
|
|
4
|
+
|
|
5
|
+
## Ground rules
|
|
6
|
+
|
|
7
|
+
1. **Security-first.** hscli handles HubSpot private app tokens. Any change must preserve:
|
|
8
|
+
- Secret redaction in output and error paths
|
|
9
|
+
- File permissions on the auth store (0700 dir, 0600 file)
|
|
10
|
+
- Path scope allowlisting
|
|
11
|
+
- No plaintext tokens in logs, telemetry, or error traces
|
|
12
|
+
2. **Type-safety.** TypeScript strict mode is mandatory. `any` is allowed only with an inline comment justifying it.
|
|
13
|
+
3. **Tests required.** New commands need at least a CLI smoke test. New transport paths need an http.test.ts case. MCP tools need an mcp.test.ts case.
|
|
14
|
+
4. **Backwards compatibility.** Don't rename or remove existing commands / flags in a minor release. If you must, open a discussion first.
|
|
15
|
+
5. **100% surface coverage is the contract.** hscli claims to cover every public HubSpot endpoint. If HubSpot publishes a new endpoint, there's a gap to fill. PRs adding a new endpoint are welcome and merged fast. See [docs/TIERS.md](docs/TIERS.md) for the current mapping of endpoints → required HubSpot plan tier.
|
|
16
|
+
|
|
17
|
+
## When an endpoint doesn't work for you
|
|
18
|
+
|
|
19
|
+
First, check [docs/TIERS.md](docs/TIERS.md) — most "it doesn't work" cases are because the endpoint requires a paid HubSpot tier or specific app context:
|
|
20
|
+
|
|
21
|
+
| Symptom | Likely cause | Fix |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 401 / *"requires hapikey="* | [Zombie endpoint](docs/TIERS.md#zombie-endpoints) — HubSpot's legacy Developer API Key | Not fixable in hscli; HubSpot must migrate. Track with label `hubspot-platform` |
|
|
24
|
+
| 403 / *"not available on your account"* | Tier-locked | Upgrade the HubSpot plan or test on a portal that has it |
|
|
25
|
+
| 404 on a `{revisionId}` path | No revision history | Edit a page first to create a revision |
|
|
26
|
+
| 404 on a `{appId}` path | Need OAuth Developer App | See [OAuth setup](docs/TIERS.md#developer-platform-hubspot-developer-account-free) |
|
|
27
|
+
| 400 / validation error | Body payload incomplete | Check HubSpot docs for required fields; pass via `--data` |
|
|
28
|
+
|
|
29
|
+
If the endpoint **should** work on your tier but doesn't, open an [endpoint issue](https://github.com/revfleet/hscli/issues/new?template=endpoint_not_working.md) with:
|
|
30
|
+
- The `hscli` command you ran
|
|
31
|
+
- Your portal's tier per hub
|
|
32
|
+
- The HubSpot correlation ID from the response
|
|
33
|
+
- Whether the same operation works in the HubSpot UI
|
|
34
|
+
|
|
35
|
+
These issues are triaged quickly. If the cause is a bug in hscli's payload construction or path handling, we fix it in a patch release.
|
|
36
|
+
|
|
37
|
+
## Running the portal probes
|
|
38
|
+
|
|
39
|
+
hscli ships two probe scripts that test the portal's reachable surface:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Read probe (GET + safe POST /search endpoints)
|
|
43
|
+
HSCLI_PROFILE=default HSCLI_DEV_APP_ID=<optional> \
|
|
44
|
+
node scripts/test-portal-coverage.mjs > coverage.md
|
|
45
|
+
|
|
46
|
+
# Write probe (POST / PUT / PATCH / DELETE endpoints)
|
|
47
|
+
HSCLI_PROFILE=default HSCLI_DEV_APP_ID=<optional> \
|
|
48
|
+
node scripts/test-portal-writes.mjs > writes.md
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Both scripts:
|
|
52
|
+
- Discover real IDs from the portal dynamically
|
|
53
|
+
- Classify responses as PASS / VALIDATION / AUTH / ZOMBIE / TIER / 404
|
|
54
|
+
- Auto-retry 405 Method Not Allowed with the Allow-header's suggested verb
|
|
55
|
+
- Skip scrape artifacts (paths like `/{0}`)
|
|
56
|
+
|
|
57
|
+
If your probe run surfaces endpoints that are reachable on a different tier or region than what hscli's capability cache claims, open an issue — it's valuable telemetry.
|
|
58
|
+
|
|
59
|
+
## Development workflow
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
git clone https://github.com/revfleet/hscli.git
|
|
63
|
+
cd hscli
|
|
64
|
+
npm install
|
|
65
|
+
npm run typecheck
|
|
66
|
+
npm test
|
|
67
|
+
npm run build
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Watch mode:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run dev -- crm contacts list --limit 3
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Run a command against a real sandbox (you need a HubSpot sandbox token):
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
export HSCLI_HOME="$(mktemp -d)"
|
|
80
|
+
printf '%s' "$SANDBOX_TOKEN" | node dist/cli.js auth login --token-stdin
|
|
81
|
+
node dist/cli.js crm contacts list --limit 3
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Run the contract tests against a sandbox:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
export HSCLI_ENABLE_SANDBOX_CONTRACT=1
|
|
88
|
+
export HSCLI_SANDBOX_TOKEN="pat-..."
|
|
89
|
+
npm run test:contract
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Adding a new command
|
|
93
|
+
|
|
94
|
+
1. Put the command under `src/commands/<domain>/` (e.g. `src/commands/crm/`)
|
|
95
|
+
2. Follow the existing pattern — use `registerResource()` for CRUD or hand-roll with `commander` for special endpoints
|
|
96
|
+
3. Use `encodePathSegment()` on every dynamic path part
|
|
97
|
+
4. Route writes through `maybeWrite()` so the safety gate is enforced
|
|
98
|
+
5. Validate JSON payloads with `parseJsonPayload()` and numeric flags with `parseNumberFlag()`
|
|
99
|
+
6. Add a CLI test in `tests/cli.test.ts`
|
|
100
|
+
7. If the command should also be callable from MCP, register it in `src/mcp/server.ts`
|
|
101
|
+
8. Update `docs/COMMAND_TREE.md`
|
|
102
|
+
|
|
103
|
+
## Reporting security issues
|
|
104
|
+
|
|
105
|
+
Do **not** open a public issue for security vulnerabilities. Email the maintainer directly (see SECURITY.md) or use GitHub Security Advisories on this repository.
|
|
106
|
+
|
|
107
|
+
## Style
|
|
108
|
+
|
|
109
|
+
- Biome handles lint + format: `npm run lint:fix`
|
|
110
|
+
- Prefer `import type` for type-only imports
|
|
111
|
+
- Don't use default exports except where required
|
|
112
|
+
- Keep functions small, side-effects explicit
|
|
113
|
+
|
|
114
|
+
## Release process
|
|
115
|
+
|
|
116
|
+
See [docs/RELEASE_GOVERNANCE.md](docs/RELEASE_GOVERNANCE.md).
|
|
117
|
+
|
|
118
|
+
## Licensing
|
|
119
|
+
|
|
120
|
+
All contributions are licensed MIT, the same as the project. By opening a PR you agree your contribution is MIT-licensed and you have the right to submit it.
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
16
|
-
<img src="docs/demo-hubspot.gif" alt="hscli writing into a HubSpot portal in real time — records appear in the UI as hscli creates them" width="100%">
|
|
16
|
+
<img src="https://raw.githubusercontent.com/revfleet/hscli/main/docs/demo-hubspot.gif" alt="hscli writing into a HubSpot portal in real time — records appear in the UI as hscli creates them" width="100%">
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
@@ -38,6 +38,32 @@ hscli crm contacts list --limit 5
|
|
|
38
38
|
|
|
39
39
|
Create a Private App token at **Settings → Integrations → Private Apps → Create private app** in your HubSpot portal.
|
|
40
40
|
|
|
41
|
+
For EU/AP/NA hublet routing, hscli auto-detects from token/account metadata. You can also pin it explicitly:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
printf '%s' "$HUBSPOT_TOKEN" | hscli auth login --profile live --token-stdin --hublet eu1
|
|
45
|
+
hscli auth set-hublet live eu1
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Operator workflows
|
|
49
|
+
|
|
50
|
+
Start from intent instead of memorizing the whole command tree:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
hscli /setup # auth, hublet routing, scopes, capabilities
|
|
54
|
+
hscli /migration # portal/schema migration sequence
|
|
55
|
+
hscli /read # source-portal read workflow
|
|
56
|
+
hscli /write # target-portal write workflow
|
|
57
|
+
hscli /guardrails # read-only, policy, trace, scope checks
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Scope checks are built in:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
hscli doctor scopes diff --required real-mirror-read
|
|
64
|
+
hscli doctor scopes explain sales-email-read
|
|
65
|
+
```
|
|
66
|
+
|
|
41
67
|
## Write safely
|
|
42
68
|
|
|
43
69
|
```bash
|
|
@@ -107,7 +133,7 @@ Every request hscli makes is append-only JSONL. Pair `trace` with `audit` for fu
|
|
|
107
133
|
## What's in the box
|
|
108
134
|
|
|
109
135
|
<details>
|
|
110
|
-
<summary><strong>
|
|
136
|
+
<summary><strong>Surface coverage</strong> — click to expand</summary>
|
|
111
137
|
|
|
112
138
|
- **CRM** — contacts, companies, deals, tickets, leads, quotes, products, line items, orders, carts, discounts, fees, taxes, invoices, subscriptions, payments, goals, communications, users, custom objects, properties, pipelines, associations v4, owners, imports, exports, engagements, sync, describe/validate, timeline, CRM Cards
|
|
113
139
|
- **Marketing** — emails (v3 + legacy v1), campaigns, ads, social, SEO, landing pages, transactional, subscriptions, events, behavioral events, forms
|
|
@@ -121,15 +147,23 @@ Every request hscli makes is append-only JSONL. Pair `trace` with `audit` for fu
|
|
|
121
147
|
- **Legacy v1/v2** — every pre-v3 surface preserved for portals that still need them
|
|
122
148
|
- **Raw API** command with path-scope controls + full OAuth flow support
|
|
123
149
|
|
|
124
|
-
Enterprise defaults: `--dry-run`, `--force`, policy files, change tickets, capability probing, rate-limit
|
|
150
|
+
Enterprise defaults: `--dry-run`, `--force`, policy files, change tickets, capability probing, shared rate-limit enforcement, token redaction, path scope allowlisting, idempotency keys on every write.
|
|
125
151
|
|
|
126
152
|
</details>
|
|
127
153
|
|
|
128
154
|
### What "1,180 endpoints" means
|
|
129
155
|
|
|
130
|
-
|
|
156
|
+
hscli covers **~all** of HubSpot's documented public API endpoints — a CLI subcommand or MCP tool per endpoint, verified against an automated scrape of HubSpot's developer documentation. A small residue stays out of reach because it's UI-only, deprecated, or requires a developer-app auth model rather than a private-app bearer token; see [docs/CAPABILITY_LIBRARY.md](docs/CAPABILITY_LIBRARY.md) for the ❌/⚠️/✅ matrix.
|
|
157
|
+
|
|
158
|
+
Even within the reachable set, actual 2xx responses on your portal depend on:
|
|
159
|
+
|
|
160
|
+
- **Tier/plan gates** — hundreds of endpoints are locked to Marketing/Sales/Service/CMS/Ops/Commerce Pro/Enterprise or add-ons.
|
|
161
|
+
- **Scope gates** — the private-app token must carry the right scopes; some scopes have no public endpoint surface.
|
|
162
|
+
- **Auth-model gates** — a subset (developer-platform, app-install) require a Developer Account + `appId` + developer API key, not a bearer token.
|
|
163
|
+
- **Deprecated surfaces** — HubDB v2, CMS performance, legacy ecommerce bridge, accounting extension, marketing calendar etc. are shipped for continuity but HubSpot may 4xx them.
|
|
164
|
+
- **UI-only surfaces** — chatflow decision trees, SLA policies, quote e-signature, social-inbox reactions, scoring formulas and similar authoring flows have no public endpoint (covered in the library as ❌ hard-locks).
|
|
131
165
|
|
|
132
|
-
|
|
166
|
+
HubSpot's own tier map, projected onto hscli's surface:
|
|
133
167
|
|
|
134
168
|
| Portal profile | Reachable endpoints |
|
|
135
169
|
|---|---:|
|
|
@@ -145,7 +179,7 @@ Exact endpoint → tier mapping in [docs/TIERS.md](docs/TIERS.md).
|
|
|
145
179
|
1. **CLI-first, MCP as a peer.** Every MCP tool has a matching `hscli` command — same write gates, same redaction, same capability probing in both.
|
|
146
180
|
2. **Self-hosted, token-sovereign.** Your HubSpot private app token stays on your machine. No telemetry, no phone-home.
|
|
147
181
|
3. **Safe by default.** Mutations are blocked unless `--force` is explicit. `--dry-run` previews every write. Idempotency-Key on every mutation.
|
|
148
|
-
4. **HubSpot-native.** Reads `X-HubSpot-RateLimit-*` headers, throttles proactively, caches capabilities by `portalId + scopes`, validates payloads offline.
|
|
182
|
+
4. **HubSpot-native.** Reads `X-HubSpot-RateLimit-*` headers, throttles proactively across clients, stops on daily hard-limit exhaustion, caches capabilities by `portalId + scopes`, validates payloads offline.
|
|
149
183
|
|
|
150
184
|
## Output modes
|
|
151
185
|
|
|
@@ -161,10 +195,10 @@ hscli --format table crm contacts list --limit 5 # table (default)
|
|
|
161
195
|
The HubSpot-UI recording at the top shows the *outcome*. Here's the *cause* — the same fixture built and torn down entirely from the shell:
|
|
162
196
|
|
|
163
197
|
<p align="center">
|
|
164
|
-
<img src="docs/demo-terminal.gif" alt="hscli terminal walkthrough — blank → create → associate → read → update → archive → blank" width="100%">
|
|
198
|
+
<img src="https://raw.githubusercontent.com/revfleet/hscli/main/docs/demo-terminal.gif" alt="hscli terminal walkthrough — blank → create → associate → read → update → archive → blank" width="100%">
|
|
165
199
|
</p>
|
|
166
200
|
|
|
167
|
-
[Source script](scripts/demo.sh) · [recording config](scripts/demo.tape) · [how the recordings are made](scripts/README.md)
|
|
201
|
+
[Source script](https://github.com/revfleet/hscli/blob/main/scripts/demo.sh) · [recording config](https://github.com/revfleet/hscli/blob/main/scripts/demo.tape) · [how the recordings are made](https://github.com/revfleet/hscli/blob/main/scripts/README.md)
|
|
168
202
|
|
|
169
203
|
## Caches
|
|
170
204
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 220" width="1280" height="220">
|
|
3
|
+
<title>hscli readme hero</title>
|
|
4
|
+
<rect width="1280" height="220" fill="#0F172A"></rect>
|
|
5
|
+
|
|
6
|
+
<!-- Dotted texture for depth -->
|
|
7
|
+
<defs>
|
|
8
|
+
<pattern id="dots" x="16" y="16" width="32" height="32" patternUnits="userSpaceOnUse">
|
|
9
|
+
<circle cx="0" cy="0" r="1.2" fill="#22D3EE" fill-opacity="0.07"></circle>
|
|
10
|
+
</pattern>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect width="1280" height="220" fill="url(#dots)"></rect>
|
|
13
|
+
|
|
14
|
+
<!-- Monogram -->
|
|
15
|
+
<g transform="translate(56,62)">
|
|
16
|
+
<rect width="96" height="96" rx="17.3" fill="#0F172A" stroke="#22D3EE" stroke-width="1.5" stroke-opacity="0.4"></rect>
|
|
17
|
+
<text x="48" y="48" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="700" font-size="41" letter-spacing="-1" fill="#22D3EE" text-anchor="middle" dominant-baseline="central">[hs]</text>
|
|
18
|
+
</g>
|
|
19
|
+
|
|
20
|
+
<!-- Wordmark -->
|
|
21
|
+
<text x="176" y="96" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="700" font-size="72" letter-spacing="-2" fill="#F8FAFC" dominant-baseline="central">hscli</text>
|
|
22
|
+
|
|
23
|
+
<!-- Tagline -->
|
|
24
|
+
<text x="176" y="148" font-family="'JetBrains Mono', 'Berkeley Mono', ui-monospace, monospace" font-weight="400" font-size="20" letter-spacing="0.3" fill="#22D3EE" dominant-baseline="central">agentic HubSpot CLI + MCP server</text>
|
|
25
|
+
</svg>
|
package/dist/cli.js
CHANGED
|
@@ -32,6 +32,7 @@ import { registerEvents } from "./commands/events/index.js";
|
|
|
32
32
|
import { registerEmailEvents } from "./commands/email-events/index.js";
|
|
33
33
|
import { registerMediaBridge } from "./commands/media-bridge/index.js";
|
|
34
34
|
import { registerFeatureFlags } from "./commands/feature-flags/index.js";
|
|
35
|
+
import { registerGuide } from "./commands/guide/index.js";
|
|
35
36
|
import { registerMarketingEmailsV1 } from "./commands/marketing-emails-v1/index.js";
|
|
36
37
|
import { registerIntegrators } from "./commands/integrators/index.js";
|
|
37
38
|
import { registerIntegrations } from "./commands/integrations/index.js";
|
|
@@ -40,6 +41,7 @@ import { registerBroadcast, registerVisitorIdentification, registerSubmissions,
|
|
|
40
41
|
import { registerContactsV1, registerCompaniesV2, registerDealsV1, registerOwnersV2, registerEngagementsV1, registerPropertiesLegacy, registerReportsV2, registerPaymentsSubscriptions, registerContentV2, registerSalesExtensions, registerComments, registerCallingV1, registerChannels, } from "./commands/legacy-v1/index.js";
|
|
41
42
|
import { CliError, printError } from "./core/output.js";
|
|
42
43
|
import { loadPlugins } from "./core/plugins.js";
|
|
44
|
+
import { normalizeApiBaseUrl, normalizeStoredHublet, resolveApiDomain } from "./core/auth.js";
|
|
43
45
|
import pkg from "../package.json" with { type: "json" };
|
|
44
46
|
export function createProgram() {
|
|
45
47
|
const program = new Command();
|
|
@@ -64,9 +66,13 @@ export function createProgram() {
|
|
|
64
66
|
.option("--policy-file <path>", "Policy file controlling write/delete permissions")
|
|
65
67
|
.option("--change-ticket <id>", "Change ticket reference for guarded writes")
|
|
66
68
|
.option("--telemetry-file <path>", "Append request telemetry JSON lines to a local file")
|
|
69
|
+
.option("--hublet <id>", "Override HubSpot hublet routing for this invocation (eu1, na1, na2, ap1)")
|
|
70
|
+
.option("--api-base-url <url>", "Advanced: override HubSpot API base URL (must be api*.hubapi.com)")
|
|
67
71
|
.hook("preAction", (cmd) => {
|
|
68
72
|
const opts = cmd.optsWithGlobals();
|
|
69
73
|
const telemetryFile = opts.telemetryFile ? String(opts.telemetryFile).trim() : undefined;
|
|
74
|
+
const hublet = opts.hublet ? normalizeStoredHublet(String(opts.hublet)) : undefined;
|
|
75
|
+
const apiBaseUrl = resolveApiBaseUrlOverride(hublet, opts.apiBaseUrl ? String(opts.apiBaseUrl) : undefined);
|
|
70
76
|
ctx = {
|
|
71
77
|
profile: opts.profile ?? "default",
|
|
72
78
|
json: Boolean(opts.json),
|
|
@@ -78,12 +84,28 @@ export function createProgram() {
|
|
|
78
84
|
changeTicket: opts.changeTicket ? String(opts.changeTicket).trim() : undefined,
|
|
79
85
|
runId,
|
|
80
86
|
telemetryFile,
|
|
87
|
+
hublet,
|
|
88
|
+
apiBaseUrl,
|
|
81
89
|
};
|
|
82
90
|
process.env.HSCLI_PROFILE = ctx.profile;
|
|
83
91
|
process.env.HSCLI_STRICT_CAPABILITIES = ctx.strictCapabilities ? "1" : "0";
|
|
84
92
|
process.env.HSCLI_REQUEST_ID = runId;
|
|
85
93
|
if (telemetryFile)
|
|
86
94
|
process.env.HSCLI_TELEMETRY_FILE = telemetryFile;
|
|
95
|
+
if (apiBaseUrl)
|
|
96
|
+
process.env.HSCLI_API_BASE_URL = apiBaseUrl;
|
|
97
|
+
else
|
|
98
|
+
delete process.env.HSCLI_API_BASE_URL;
|
|
99
|
+
// CLI is single-invocation per process, so env is safe here (no
|
|
100
|
+
// concurrency). emitTelemetry() reads this as a fallback when the
|
|
101
|
+
// AsyncLocalStorage changeTicket isn't set — which is the CLI case,
|
|
102
|
+
// since only MCP runs inside runWithTelemetryContext.
|
|
103
|
+
if (ctx.changeTicket) {
|
|
104
|
+
process.env.HSCLI_CHANGE_TICKET = ctx.changeTicket;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
delete process.env.HSCLI_CHANGE_TICKET;
|
|
108
|
+
}
|
|
87
109
|
});
|
|
88
110
|
registerAuth(program, () => ctx);
|
|
89
111
|
registerDoctor(program, () => ctx);
|
|
@@ -115,6 +137,7 @@ export function createProgram() {
|
|
|
115
137
|
registerEmailEvents(program, () => ctx);
|
|
116
138
|
registerMediaBridge(program, () => ctx);
|
|
117
139
|
registerFeatureFlags(program, () => ctx);
|
|
140
|
+
registerGuide(program, () => ctx);
|
|
118
141
|
registerMarketingEmailsV1(program, () => ctx);
|
|
119
142
|
registerIntegrators(program, () => ctx);
|
|
120
143
|
registerIntegrations(program, () => ctx);
|
|
@@ -179,6 +202,8 @@ export async function run(argv = process.argv) {
|
|
|
179
202
|
changeTicket: opts.changeTicket ? String(opts.changeTicket).trim() : undefined,
|
|
180
203
|
runId: process.env.HSCLI_REQUEST_ID,
|
|
181
204
|
telemetryFile: opts.telemetryFile ? String(opts.telemetryFile).trim() : undefined,
|
|
205
|
+
hublet: opts.hublet ? String(opts.hublet).trim() : undefined,
|
|
206
|
+
apiBaseUrl: opts.apiBaseUrl ? String(opts.apiBaseUrl).trim() : undefined,
|
|
182
207
|
};
|
|
183
208
|
printError(ctx, err);
|
|
184
209
|
process.exitCode = 1;
|
|
@@ -203,6 +228,16 @@ try {
|
|
|
203
228
|
catch {
|
|
204
229
|
// If realpath fails (e.g. imported as ESM for testing), silently skip.
|
|
205
230
|
}
|
|
231
|
+
function resolveApiBaseUrlOverride(hublet, rawApiBaseUrl) {
|
|
232
|
+
if (hublet && rawApiBaseUrl?.trim()) {
|
|
233
|
+
throw new CliError("API_ROUTING_CONFLICT", "Use either --hublet or --api-base-url, not both.");
|
|
234
|
+
}
|
|
235
|
+
if (rawApiBaseUrl?.trim())
|
|
236
|
+
return normalizeApiBaseUrl(rawApiBaseUrl);
|
|
237
|
+
if (hublet)
|
|
238
|
+
return `https://${resolveApiDomain(hublet)}`;
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
206
241
|
function resolveOutputFormat(raw, jsonFlag) {
|
|
207
242
|
const fallback = "table";
|
|
208
243
|
const value = (raw === undefined || raw === null) ? fallback : String(raw).trim().toLowerCase();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|