@revfleet/hscli 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/CHANGELOG.md +466 -0
  2. package/LICENSE +21 -0
  3. package/README.md +287 -0
  4. package/SECURITY.md +68 -0
  5. package/dist/cli.d.ts +8 -0
  6. package/dist/cli.js +192 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/account/index.d.ts +3 -0
  9. package/dist/commands/account/index.js +65 -0
  10. package/dist/commands/account/index.js.map +1 -0
  11. package/dist/commands/api/index.d.ts +3 -0
  12. package/dist/commands/api/index.js +35 -0
  13. package/dist/commands/api/index.js.map +1 -0
  14. package/dist/commands/auth/index.d.ts +3 -0
  15. package/dist/commands/auth/index.js +229 -0
  16. package/dist/commands/auth/index.js.map +1 -0
  17. package/dist/commands/automation/index.d.ts +3 -0
  18. package/dist/commands/automation/index.js +119 -0
  19. package/dist/commands/automation/index.js.map +1 -0
  20. package/dist/commands/cms/blog-settings.d.ts +3 -0
  21. package/dist/commands/cms/blog-settings.js +70 -0
  22. package/dist/commands/cms/blog-settings.js.map +1 -0
  23. package/dist/commands/cms/content-ops.d.ts +13 -0
  24. package/dist/commands/cms/content-ops.js +262 -0
  25. package/dist/commands/cms/content-ops.js.map +1 -0
  26. package/dist/commands/cms/hubdb.d.ts +3 -0
  27. package/dist/commands/cms/hubdb.js +55 -0
  28. package/dist/commands/cms/hubdb.js.map +1 -0
  29. package/dist/commands/cms/index.d.ts +3 -0
  30. package/dist/commands/cms/index.js +119 -0
  31. package/dist/commands/cms/index.js.map +1 -0
  32. package/dist/commands/cms/source-code.d.ts +3 -0
  33. package/dist/commands/cms/source-code.js +101 -0
  34. package/dist/commands/cms/source-code.js.map +1 -0
  35. package/dist/commands/communication-preferences/index.d.ts +3 -0
  36. package/dist/commands/communication-preferences/index.js +107 -0
  37. package/dist/commands/communication-preferences/index.js.map +1 -0
  38. package/dist/commands/conversations/index.d.ts +3 -0
  39. package/dist/commands/conversations/index.js +233 -0
  40. package/dist/commands/conversations/index.js.map +1 -0
  41. package/dist/commands/crm/associations.d.ts +3 -0
  42. package/dist/commands/crm/associations.js +180 -0
  43. package/dist/commands/crm/associations.js.map +1 -0
  44. package/dist/commands/crm/cards.d.ts +3 -0
  45. package/dist/commands/crm/cards.js +72 -0
  46. package/dist/commands/crm/cards.js.map +1 -0
  47. package/dist/commands/crm/carts.d.ts +3 -0
  48. package/dist/commands/crm/carts.js +5 -0
  49. package/dist/commands/crm/carts.js.map +1 -0
  50. package/dist/commands/crm/communications.d.ts +3 -0
  51. package/dist/commands/crm/communications.js +5 -0
  52. package/dist/commands/crm/communications.js.map +1 -0
  53. package/dist/commands/crm/companies.d.ts +3 -0
  54. package/dist/commands/crm/companies.js +5 -0
  55. package/dist/commands/crm/companies.js.map +1 -0
  56. package/dist/commands/crm/contacts.d.ts +3 -0
  57. package/dist/commands/crm/contacts.js +5 -0
  58. package/dist/commands/crm/contacts.js.map +1 -0
  59. package/dist/commands/crm/custom-objects.d.ts +3 -0
  60. package/dist/commands/crm/custom-objects.js +83 -0
  61. package/dist/commands/crm/custom-objects.js.map +1 -0
  62. package/dist/commands/crm/dated.d.ts +9 -0
  63. package/dist/commands/crm/dated.js +247 -0
  64. package/dist/commands/crm/dated.js.map +1 -0
  65. package/dist/commands/crm/deals.d.ts +3 -0
  66. package/dist/commands/crm/deals.js +5 -0
  67. package/dist/commands/crm/deals.js.map +1 -0
  68. package/dist/commands/crm/describe.d.ts +3 -0
  69. package/dist/commands/crm/describe.js +89 -0
  70. package/dist/commands/crm/describe.js.map +1 -0
  71. package/dist/commands/crm/discounts.d.ts +3 -0
  72. package/dist/commands/crm/discounts.js +5 -0
  73. package/dist/commands/crm/discounts.js.map +1 -0
  74. package/dist/commands/crm/engagements.d.ts +3 -0
  75. package/dist/commands/crm/engagements.js +8 -0
  76. package/dist/commands/crm/engagements.js.map +1 -0
  77. package/dist/commands/crm/fees.d.ts +3 -0
  78. package/dist/commands/crm/fees.js +5 -0
  79. package/dist/commands/crm/fees.js.map +1 -0
  80. package/dist/commands/crm/goals.d.ts +3 -0
  81. package/dist/commands/crm/goals.js +30 -0
  82. package/dist/commands/crm/goals.js.map +1 -0
  83. package/dist/commands/crm/imports.d.ts +3 -0
  84. package/dist/commands/crm/imports.js +45 -0
  85. package/dist/commands/crm/imports.js.map +1 -0
  86. package/dist/commands/crm/index.d.ts +3 -0
  87. package/dist/commands/crm/index.js +64 -0
  88. package/dist/commands/crm/index.js.map +1 -0
  89. package/dist/commands/crm/invoices.d.ts +3 -0
  90. package/dist/commands/crm/invoices.js +5 -0
  91. package/dist/commands/crm/invoices.js.map +1 -0
  92. package/dist/commands/crm/leads.d.ts +3 -0
  93. package/dist/commands/crm/leads.js +5 -0
  94. package/dist/commands/crm/leads.js.map +1 -0
  95. package/dist/commands/crm/line-items.d.ts +3 -0
  96. package/dist/commands/crm/line-items.js +5 -0
  97. package/dist/commands/crm/line-items.js.map +1 -0
  98. package/dist/commands/crm/orders.d.ts +3 -0
  99. package/dist/commands/crm/orders.js +5 -0
  100. package/dist/commands/crm/orders.js.map +1 -0
  101. package/dist/commands/crm/owners.d.ts +3 -0
  102. package/dist/commands/crm/owners.js +22 -0
  103. package/dist/commands/crm/owners.js.map +1 -0
  104. package/dist/commands/crm/payments.d.ts +3 -0
  105. package/dist/commands/crm/payments.js +5 -0
  106. package/dist/commands/crm/payments.js.map +1 -0
  107. package/dist/commands/crm/pipelines.d.ts +3 -0
  108. package/dist/commands/crm/pipelines.js +70 -0
  109. package/dist/commands/crm/pipelines.js.map +1 -0
  110. package/dist/commands/crm/products.d.ts +3 -0
  111. package/dist/commands/crm/products.js +5 -0
  112. package/dist/commands/crm/products.js.map +1 -0
  113. package/dist/commands/crm/properties.d.ts +3 -0
  114. package/dist/commands/crm/properties.js +103 -0
  115. package/dist/commands/crm/properties.js.map +1 -0
  116. package/dist/commands/crm/quotes.d.ts +3 -0
  117. package/dist/commands/crm/quotes.js +5 -0
  118. package/dist/commands/crm/quotes.js.map +1 -0
  119. package/dist/commands/crm/shared.d.ts +17 -0
  120. package/dist/commands/crm/shared.js +256 -0
  121. package/dist/commands/crm/shared.js.map +1 -0
  122. package/dist/commands/crm/subscriptions.d.ts +3 -0
  123. package/dist/commands/crm/subscriptions.js +5 -0
  124. package/dist/commands/crm/subscriptions.js.map +1 -0
  125. package/dist/commands/crm/sync.d.ts +3 -0
  126. package/dist/commands/crm/sync.js +116 -0
  127. package/dist/commands/crm/sync.js.map +1 -0
  128. package/dist/commands/crm/taxes.d.ts +3 -0
  129. package/dist/commands/crm/taxes.js +5 -0
  130. package/dist/commands/crm/taxes.js.map +1 -0
  131. package/dist/commands/crm/tickets.d.ts +3 -0
  132. package/dist/commands/crm/tickets.js +5 -0
  133. package/dist/commands/crm/tickets.js.map +1 -0
  134. package/dist/commands/crm/users.d.ts +3 -0
  135. package/dist/commands/crm/users.js +5 -0
  136. package/dist/commands/crm/users.js.map +1 -0
  137. package/dist/commands/doctor/index.d.ts +3 -0
  138. package/dist/commands/doctor/index.js +232 -0
  139. package/dist/commands/doctor/index.js.map +1 -0
  140. package/dist/commands/domains/shared.d.ts +13 -0
  141. package/dist/commands/domains/shared.js +56 -0
  142. package/dist/commands/domains/shared.js.map +1 -0
  143. package/dist/commands/email-events/index.d.ts +3 -0
  144. package/dist/commands/email-events/index.js +77 -0
  145. package/dist/commands/email-events/index.js.map +1 -0
  146. package/dist/commands/events/index.d.ts +3 -0
  147. package/dist/commands/events/index.js +80 -0
  148. package/dist/commands/events/index.js.map +1 -0
  149. package/dist/commands/exports/index.d.ts +3 -0
  150. package/dist/commands/exports/index.js +45 -0
  151. package/dist/commands/exports/index.js.map +1 -0
  152. package/dist/commands/extensions/index.d.ts +3 -0
  153. package/dist/commands/extensions/index.js +118 -0
  154. package/dist/commands/extensions/index.js.map +1 -0
  155. package/dist/commands/feature-flags/index.d.ts +3 -0
  156. package/dist/commands/feature-flags/index.js +65 -0
  157. package/dist/commands/feature-flags/index.js.map +1 -0
  158. package/dist/commands/files/folders.d.ts +3 -0
  159. package/dist/commands/files/folders.js +74 -0
  160. package/dist/commands/files/folders.js.map +1 -0
  161. package/dist/commands/files/index.d.ts +3 -0
  162. package/dist/commands/files/index.js +30 -0
  163. package/dist/commands/files/index.js.map +1 -0
  164. package/dist/commands/forms/index.d.ts +3 -0
  165. package/dist/commands/forms/index.js +37 -0
  166. package/dist/commands/forms/index.js.map +1 -0
  167. package/dist/commands/integrations/index.d.ts +3 -0
  168. package/dist/commands/integrations/index.js +64 -0
  169. package/dist/commands/integrations/index.js.map +1 -0
  170. package/dist/commands/integrators/index.d.ts +3 -0
  171. package/dist/commands/integrators/index.js +79 -0
  172. package/dist/commands/integrators/index.js.map +1 -0
  173. package/dist/commands/legacy/index.d.ts +13 -0
  174. package/dist/commands/legacy/index.js +254 -0
  175. package/dist/commands/legacy/index.js.map +1 -0
  176. package/dist/commands/legacy-v1/index.d.ts +29 -0
  177. package/dist/commands/legacy-v1/index.js +568 -0
  178. package/dist/commands/legacy-v1/index.js.map +1 -0
  179. package/dist/commands/lists/index.d.ts +3 -0
  180. package/dist/commands/lists/index.js +148 -0
  181. package/dist/commands/lists/index.js.map +1 -0
  182. package/dist/commands/marketing/ads.d.ts +3 -0
  183. package/dist/commands/marketing/ads.js +45 -0
  184. package/dist/commands/marketing/ads.js.map +1 -0
  185. package/dist/commands/marketing/behavioral-events.d.ts +3 -0
  186. package/dist/commands/marketing/behavioral-events.js +38 -0
  187. package/dist/commands/marketing/behavioral-events.js.map +1 -0
  188. package/dist/commands/marketing/events.d.ts +3 -0
  189. package/dist/commands/marketing/events.js +69 -0
  190. package/dist/commands/marketing/events.js.map +1 -0
  191. package/dist/commands/marketing/index.d.ts +3 -0
  192. package/dist/commands/marketing/index.js +55 -0
  193. package/dist/commands/marketing/index.js.map +1 -0
  194. package/dist/commands/marketing/landing-pages.d.ts +3 -0
  195. package/dist/commands/marketing/landing-pages.js +48 -0
  196. package/dist/commands/marketing/landing-pages.js.map +1 -0
  197. package/dist/commands/marketing/seo.d.ts +3 -0
  198. package/dist/commands/marketing/seo.js +35 -0
  199. package/dist/commands/marketing/seo.js.map +1 -0
  200. package/dist/commands/marketing/social.d.ts +3 -0
  201. package/dist/commands/marketing/social.js +45 -0
  202. package/dist/commands/marketing/social.js.map +1 -0
  203. package/dist/commands/marketing/subscriptions.d.ts +3 -0
  204. package/dist/commands/marketing/subscriptions.js +27 -0
  205. package/dist/commands/marketing/subscriptions.js.map +1 -0
  206. package/dist/commands/marketing/transactional.d.ts +3 -0
  207. package/dist/commands/marketing/transactional.js +30 -0
  208. package/dist/commands/marketing/transactional.js.map +1 -0
  209. package/dist/commands/marketing-emails-v1/index.d.ts +3 -0
  210. package/dist/commands/marketing-emails-v1/index.js +72 -0
  211. package/dist/commands/marketing-emails-v1/index.js.map +1 -0
  212. package/dist/commands/mcp.d.ts +2 -0
  213. package/dist/commands/mcp.js +10 -0
  214. package/dist/commands/mcp.js.map +1 -0
  215. package/dist/commands/media-bridge/index.d.ts +3 -0
  216. package/dist/commands/media-bridge/index.js +209 -0
  217. package/dist/commands/media-bridge/index.js.map +1 -0
  218. package/dist/commands/reporting/index.d.ts +3 -0
  219. package/dist/commands/reporting/index.js +73 -0
  220. package/dist/commands/reporting/index.js.map +1 -0
  221. package/dist/commands/sales/calling.d.ts +3 -0
  222. package/dist/commands/sales/calling.js +32 -0
  223. package/dist/commands/sales/calling.js.map +1 -0
  224. package/dist/commands/sales/index.d.ts +3 -0
  225. package/dist/commands/sales/index.js +10 -0
  226. package/dist/commands/sales/index.js.map +1 -0
  227. package/dist/commands/sales/meetings.d.ts +3 -0
  228. package/dist/commands/sales/meetings.js +37 -0
  229. package/dist/commands/sales/meetings.js.map +1 -0
  230. package/dist/commands/sales/sequences.d.ts +3 -0
  231. package/dist/commands/sales/sequences.js +78 -0
  232. package/dist/commands/sales/sequences.js.map +1 -0
  233. package/dist/commands/seed/cms.d.ts +6 -0
  234. package/dist/commands/seed/cms.js +204 -0
  235. package/dist/commands/seed/cms.js.map +1 -0
  236. package/dist/commands/seed/commerce.d.ts +3 -0
  237. package/dist/commands/seed/commerce.js +117 -0
  238. package/dist/commands/seed/commerce.js.map +1 -0
  239. package/dist/commands/seed/context.d.ts +8 -0
  240. package/dist/commands/seed/context.js +76 -0
  241. package/dist/commands/seed/context.js.map +1 -0
  242. package/dist/commands/seed/crm-core.d.ts +3 -0
  243. package/dist/commands/seed/crm-core.js +137 -0
  244. package/dist/commands/seed/crm-core.js.map +1 -0
  245. package/dist/commands/seed/data.d.ts +73 -0
  246. package/dist/commands/seed/data.js +49 -0
  247. package/dist/commands/seed/data.js.map +1 -0
  248. package/dist/commands/seed/engagements.d.ts +3 -0
  249. package/dist/commands/seed/engagements.js +89 -0
  250. package/dist/commands/seed/engagements.js.map +1 -0
  251. package/dist/commands/seed/index.d.ts +3 -0
  252. package/dist/commands/seed/index.js +95 -0
  253. package/dist/commands/seed/index.js.map +1 -0
  254. package/dist/commands/seed/infra.d.ts +6 -0
  255. package/dist/commands/seed/infra.js +163 -0
  256. package/dist/commands/seed/infra.js.map +1 -0
  257. package/dist/commands/seed/marketing.d.ts +3 -0
  258. package/dist/commands/seed/marketing.js +172 -0
  259. package/dist/commands/seed/marketing.js.map +1 -0
  260. package/dist/commands/seed/shared.d.ts +8 -0
  261. package/dist/commands/seed/shared.js +37 -0
  262. package/dist/commands/seed/shared.js.map +1 -0
  263. package/dist/commands/seed/types.d.ts +44 -0
  264. package/dist/commands/seed/types.js +2 -0
  265. package/dist/commands/seed/types.js.map +1 -0
  266. package/dist/commands/service/chatflows.d.ts +3 -0
  267. package/dist/commands/service/chatflows.js +30 -0
  268. package/dist/commands/service/chatflows.js.map +1 -0
  269. package/dist/commands/service/index.d.ts +3 -0
  270. package/dist/commands/service/index.js +25 -0
  271. package/dist/commands/service/index.js.map +1 -0
  272. package/dist/commands/service/knowledge-base.d.ts +3 -0
  273. package/dist/commands/service/knowledge-base.js +19 -0
  274. package/dist/commands/service/knowledge-base.js.map +1 -0
  275. package/dist/commands/service/pipelines.d.ts +3 -0
  276. package/dist/commands/service/pipelines.js +36 -0
  277. package/dist/commands/service/pipelines.js.map +1 -0
  278. package/dist/commands/settings/index.d.ts +3 -0
  279. package/dist/commands/settings/index.js +149 -0
  280. package/dist/commands/settings/index.js.map +1 -0
  281. package/dist/commands/site-search/index.d.ts +3 -0
  282. package/dist/commands/site-search/index.js +36 -0
  283. package/dist/commands/site-search/index.js.map +1 -0
  284. package/dist/commands/timeline/index.d.ts +3 -0
  285. package/dist/commands/timeline/index.js +32 -0
  286. package/dist/commands/timeline/index.js.map +1 -0
  287. package/dist/commands/webhooks/index.d.ts +3 -0
  288. package/dist/commands/webhooks/index.js +41 -0
  289. package/dist/commands/webhooks/index.js.map +1 -0
  290. package/dist/commands/workflows/index.d.ts +3 -0
  291. package/dist/commands/workflows/index.js +13 -0
  292. package/dist/commands/workflows/index.js.map +1 -0
  293. package/dist/core/auth.d.ts +33 -0
  294. package/dist/core/auth.js +137 -0
  295. package/dist/core/auth.js.map +1 -0
  296. package/dist/core/capabilities.d.ts +60 -0
  297. package/dist/core/capabilities.js +559 -0
  298. package/dist/core/capabilities.js.map +1 -0
  299. package/dist/core/http.d.ts +47 -0
  300. package/dist/core/http.js +433 -0
  301. package/dist/core/http.js.map +1 -0
  302. package/dist/core/output.d.ts +23 -0
  303. package/dist/core/output.js +197 -0
  304. package/dist/core/output.js.map +1 -0
  305. package/dist/core/permissions.d.ts +9 -0
  306. package/dist/core/permissions.js +27 -0
  307. package/dist/core/permissions.js.map +1 -0
  308. package/dist/core/plugins.d.ts +42 -0
  309. package/dist/core/plugins.js +94 -0
  310. package/dist/core/plugins.js.map +1 -0
  311. package/dist/core/policy.d.ts +2 -0
  312. package/dist/core/policy.js +38 -0
  313. package/dist/core/policy.js.map +1 -0
  314. package/dist/core/schema-cache.d.ts +56 -0
  315. package/dist/core/schema-cache.js +338 -0
  316. package/dist/core/schema-cache.js.map +1 -0
  317. package/dist/core/schemas.d.ts +96 -0
  318. package/dist/core/schemas.js +104 -0
  319. package/dist/core/schemas.js.map +1 -0
  320. package/dist/core/urls.d.ts +50 -0
  321. package/dist/core/urls.js +122 -0
  322. package/dist/core/urls.js.map +1 -0
  323. package/dist/core/vault.d.ts +37 -0
  324. package/dist/core/vault.js +143 -0
  325. package/dist/core/vault.js.map +1 -0
  326. package/dist/mcp/server.d.ts +5 -0
  327. package/dist/mcp/server.js +680 -0
  328. package/dist/mcp/server.js.map +1 -0
  329. package/package.json +84 -0
@@ -0,0 +1,149 @@
1
+ import { getToken } from "../../core/auth.js";
2
+ import { HubSpotClient } from "../../core/http.js";
3
+ import { printResult } from "../../core/output.js";
4
+ import { encodePathSegment, maybeWrite, parseJsonPayload, parseNumberFlag } from "../crm/shared.js";
5
+ export function registerSettings(program, getCtx) {
6
+ const settings = program.command("settings").description("HubSpot Settings APIs");
7
+ // Users
8
+ const users = settings.command("users").description("User provisioning");
9
+ users
10
+ .command("list")
11
+ .option("--limit <n>", "Max records", "100")
12
+ .option("--after <cursor>", "Paging cursor")
13
+ .action(async (opts) => {
14
+ const ctx = getCtx();
15
+ const client = new HubSpotClient(getToken(ctx.profile));
16
+ const params = new URLSearchParams();
17
+ params.set("limit", String(parseNumberFlag(opts.limit, "--limit")));
18
+ if (opts.after)
19
+ params.set("after", opts.after);
20
+ const res = await client.request(`/settings/v3/users/?${params.toString()}`);
21
+ printResult(ctx, res);
22
+ });
23
+ users.command("get").argument("<userId>").action(async (userId) => {
24
+ const ctx = getCtx();
25
+ const client = new HubSpotClient(getToken(ctx.profile));
26
+ const res = await client.request(`/settings/v3/users/${encodePathSegment(userId, "userId")}`);
27
+ printResult(ctx, res);
28
+ });
29
+ users
30
+ .command("create")
31
+ .requiredOption("--data <payload>", "User creation payload JSON")
32
+ .action(async (opts) => {
33
+ const ctx = getCtx();
34
+ const client = new HubSpotClient(getToken(ctx.profile));
35
+ const payload = parseJsonPayload(opts.data);
36
+ const res = await maybeWrite(ctx, client, "POST", "/settings/v3/users/", payload);
37
+ printResult(ctx, res);
38
+ });
39
+ users
40
+ .command("update")
41
+ .argument("<userId>")
42
+ .requiredOption("--data <payload>", "User update payload JSON")
43
+ .action(async (userId, opts) => {
44
+ const ctx = getCtx();
45
+ const client = new HubSpotClient(getToken(ctx.profile));
46
+ const payload = parseJsonPayload(opts.data);
47
+ const res = await maybeWrite(ctx, client, "PUT", `/settings/v3/users/${encodePathSegment(userId, "userId")}`, payload);
48
+ printResult(ctx, res);
49
+ });
50
+ users
51
+ .command("delete")
52
+ .argument("<userId>")
53
+ .action(async (userId) => {
54
+ const ctx = getCtx();
55
+ const client = new HubSpotClient(getToken(ctx.profile));
56
+ const res = await maybeWrite(ctx, client, "DELETE", `/settings/v3/users/${encodePathSegment(userId, "userId")}`);
57
+ printResult(ctx, res);
58
+ });
59
+ users
60
+ .command("roles")
61
+ .description("List available user roles")
62
+ .action(async () => {
63
+ const ctx = getCtx();
64
+ const client = new HubSpotClient(getToken(ctx.profile));
65
+ const res = await client.request("/settings/v3/users/roles");
66
+ printResult(ctx, res);
67
+ });
68
+ // Business Units
69
+ const businessUnits = settings.command("business-units").description("Business unit management");
70
+ businessUnits
71
+ .command("list")
72
+ .option("--limit <n>", "Max records", "100")
73
+ .option("--after <cursor>", "Paging cursor")
74
+ .action(async (opts) => {
75
+ const ctx = getCtx();
76
+ const client = new HubSpotClient(getToken(ctx.profile));
77
+ const params = new URLSearchParams();
78
+ params.set("limit", String(parseNumberFlag(opts.limit, "--limit")));
79
+ if (opts.after)
80
+ params.set("after", opts.after);
81
+ const res = await client.request(`/settings/v3/business-units/?${params.toString()}`);
82
+ printResult(ctx, res);
83
+ });
84
+ // Teams
85
+ const teams = settings.command("teams").description("Team management");
86
+ teams
87
+ .command("list")
88
+ .action(async () => {
89
+ const ctx = getCtx();
90
+ const client = new HubSpotClient(getToken(ctx.profile));
91
+ const res = await client.request("/settings/v3/users/teams");
92
+ printResult(ctx, res);
93
+ });
94
+ // Currencies
95
+ const currencies = settings.command("currencies").description("Multi-currency management");
96
+ currencies
97
+ .command("list")
98
+ .action(async () => {
99
+ const ctx = getCtx();
100
+ const client = new HubSpotClient(getToken(ctx.profile));
101
+ const res = await client.request("/settings/v3/currencies");
102
+ printResult(ctx, res);
103
+ });
104
+ // Audit Logs
105
+ const auditLogs = settings.command("audit-logs").description("Account audit logs");
106
+ auditLogs
107
+ .command("list")
108
+ .description("List HubSpot account audit-log events (/account-info/v3/activity/audit-logs)")
109
+ .option("--limit <n>", "Max records", "100")
110
+ .option("--after <cursor>", "Paging cursor")
111
+ .option("--occurred-before <iso>", "Events that occurred before this ISO-8601 datetime")
112
+ .option("--occurred-after <iso>", "Events that occurred after this ISO-8601 datetime")
113
+ .option("--acting-user-id <id>", "Filter by the user id that performed the action")
114
+ .option("--event-type <type>", "Filter by event type (e.g. USER_LOGIN, PERMISSION_CHANGE)")
115
+ .option("--object-type <type>", "Filter by the object type the action was performed on")
116
+ .action(async (opts) => {
117
+ const ctx = getCtx();
118
+ const client = new HubSpotClient(getToken(ctx.profile));
119
+ const params = new URLSearchParams();
120
+ params.set("limit", String(parseNumberFlag(opts.limit, "--limit")));
121
+ if (opts.after)
122
+ params.set("after", opts.after);
123
+ if (opts.occurredBefore)
124
+ params.set("occurredBefore", opts.occurredBefore);
125
+ if (opts.occurredAfter)
126
+ params.set("occurredAfter", opts.occurredAfter);
127
+ if (opts.actingUserId)
128
+ params.set("actingUserId", opts.actingUserId);
129
+ if (opts.eventType)
130
+ params.set("eventType", opts.eventType);
131
+ if (opts.objectType)
132
+ params.set("objectType", opts.objectType);
133
+ const res = await client.request(`/account-info/v3/activity/audit-logs?${params.toString()}`);
134
+ printResult(ctx, res);
135
+ });
136
+ // GDPR
137
+ const gdpr = settings.command("gdpr").description("GDPR compliance tools");
138
+ gdpr
139
+ .command("delete-contact")
140
+ .requiredOption("--data <payload>", "GDPR delete payload JSON")
141
+ .action(async (opts) => {
142
+ const ctx = getCtx();
143
+ const client = new HubSpotClient(getToken(ctx.profile));
144
+ const payload = parseJsonPayload(opts.data);
145
+ const res = await maybeWrite(ctx, client, "POST", "/crm/v3/objects/contacts/gdpr-delete", payload);
146
+ printResult(ctx, res);
147
+ });
148
+ }
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/settings/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../../core/output.js";
3
+ export declare function registerSiteSearch(program: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,36 @@
1
+ import { createClient } from "../../core/http.js";
2
+ import { printResult } from "../../core/output.js";
3
+ export function registerSiteSearch(program, getCtx) {
4
+ const siteSearch = program.command("site-search").description("HubSpot Site Search APIs");
5
+ siteSearch
6
+ .command("indexed")
7
+ .description("Get indexed pages data")
8
+ .option("--type <type>", "Content type: LANDING_PAGE, SITE_PAGE, BLOG_POST, LISTING_PAGE, KNOWLEDGE_ARTICLE", "SITE_PAGE")
9
+ .option("--limit <n>", "Max results", "20")
10
+ .option("--offset <n>", "Offset for pagination", "0")
11
+ .action(async (opts) => {
12
+ const ctx = getCtx();
13
+ const client = createClient(ctx.profile);
14
+ const params = new URLSearchParams();
15
+ params.set("type", opts.type);
16
+ params.set("limit", opts.limit);
17
+ params.set("offset", opts.offset);
18
+ const res = await client.request(`/cms/v3/site-search/indexed-data/${encodeURIComponent(opts.type)}?${params.toString()}`);
19
+ printResult(ctx, res);
20
+ });
21
+ siteSearch
22
+ .command("search")
23
+ .description("Search site content")
24
+ .requiredOption("--query <text>", "Search query")
25
+ .option("--limit <n>", "Max results", "10")
26
+ .action(async (opts) => {
27
+ const ctx = getCtx();
28
+ const client = createClient(ctx.profile);
29
+ const params = new URLSearchParams();
30
+ params.set("q", opts.query);
31
+ params.set("limit", opts.limit);
32
+ const res = await client.request(`/cms/v3/site-search/search?${params.toString()}`);
33
+ printResult(ctx, res);
34
+ });
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/site-search/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,MAAwB;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE1F,UAAU;SACP,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,eAAe,EAAE,mFAAmF,EAAE,WAAW,CAAC;SACzH,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,cAAc,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oCAAoC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3H,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAChD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,8BAA8B,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpF,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../../core/output.js";
3
+ export declare function registerTimeline(program: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,32 @@
1
+ import { createClient } from "../../core/http.js";
2
+ import { printResult } from "../../core/output.js";
3
+ import { appendOptional, maybeWrite, parseJsonPayload, parseNumberFlag } from "../crm/shared.js";
4
+ export function registerTimeline(program, getCtx) {
5
+ const timeline = program.command("timeline").description("HubSpot Timeline APIs");
6
+ const eventTemplates = timeline.command("event-templates").description("Timeline event templates");
7
+ eventTemplates
8
+ .command("list")
9
+ .option("--limit <n>", "Max records", "50")
10
+ .option("--after <cursor>", "Paging cursor")
11
+ .action(async (opts) => {
12
+ const ctx = getCtx();
13
+ const client = createClient(ctx.profile);
14
+ const params = new URLSearchParams();
15
+ params.set("limit", String(parseNumberFlag(opts.limit, "--limit")));
16
+ appendOptional(params, "after", opts.after);
17
+ const res = await client.request(`/crm/v3/timeline/event-templates?${params.toString()}`);
18
+ printResult(ctx, res);
19
+ });
20
+ const events = timeline.command("events").description("Timeline events");
21
+ events
22
+ .command("create")
23
+ .requiredOption("--data <payload>", "JSON payload")
24
+ .action(async (opts) => {
25
+ const ctx = getCtx();
26
+ const client = createClient(ctx.profile);
27
+ const body = parseJsonPayload(opts.data);
28
+ const res = await maybeWrite(ctx, client, "POST", "/crm/v3/timeline/events", body);
29
+ printResult(ctx, res);
30
+ });
31
+ }
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/timeline/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjG,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,MAAwB;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAElF,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IACnG,cAAc;SACX,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACpE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oCAAoC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1F,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACzE,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;QACnF,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../../core/output.js";
3
+ export declare function registerWebhooks(program: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,41 @@
1
+ import { createClient } from "../../core/http.js";
2
+ import { printResult } from "../../core/output.js";
3
+ import { encodePathSegment, maybeWrite, parseJsonPayload } from "../crm/shared.js";
4
+ export function registerWebhooks(program, getCtx) {
5
+ const webhooks = program.command("webhooks").description("HubSpot webhooks subscriptions");
6
+ webhooks
7
+ .command("list")
8
+ .requiredOption("--app-id <id>", "HubSpot app id")
9
+ .action(async (opts) => {
10
+ const ctx = getCtx();
11
+ const client = createClient(ctx.profile);
12
+ const appIdSegment = encodePathSegment(String(opts.appId), "appId");
13
+ const res = await client.request(`/webhooks/v3/${appIdSegment}/subscriptions`);
14
+ printResult(ctx, res);
15
+ });
16
+ webhooks
17
+ .command("subscribe")
18
+ .requiredOption("--app-id <id>", "HubSpot app id")
19
+ .requiredOption("--data <payload>", "Webhook subscription payload JSON")
20
+ .action(async (opts) => {
21
+ const ctx = getCtx();
22
+ const client = createClient(ctx.profile);
23
+ const appIdSegment = encodePathSegment(String(opts.appId), "appId");
24
+ const payload = parseJsonPayload(opts.data);
25
+ const res = await maybeWrite(ctx, client, "POST", `/webhooks/v3/${appIdSegment}/subscriptions`, payload);
26
+ printResult(ctx, res);
27
+ });
28
+ webhooks
29
+ .command("delete")
30
+ .requiredOption("--app-id <id>", "HubSpot app id")
31
+ .requiredOption("--subscription-id <id>", "Webhook subscription id")
32
+ .action(async (opts) => {
33
+ const ctx = getCtx();
34
+ const client = createClient(ctx.profile);
35
+ const appIdSegment = encodePathSegment(String(opts.appId), "appId");
36
+ const subscriptionIdSegment = encodePathSegment(String(opts.subscriptionId), "subscriptionId");
37
+ const res = await maybeWrite(ctx, client, "DELETE", `/webhooks/v3/${appIdSegment}/subscriptions/${subscriptionIdSegment}`);
38
+ printResult(ctx, res);
39
+ });
40
+ }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/webhooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,MAAwB;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAE3F,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,cAAc,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,YAAY,gBAAgB,CAAC,CAAC;QAC/E,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,cAAc,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACjD,cAAc,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,YAAY,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACzG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACjD,cAAc,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC/F,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,YAAY,kBAAkB,qBAAqB,EAAE,CAAC,CAAC;QAC3H,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../../core/output.js";
3
+ export declare function registerWorkflows(program: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,13 @@
1
+ import { registerResource } from "../domains/shared.js";
2
+ export function registerWorkflows(program, getCtx) {
3
+ const workflows = program.command("workflows").description("HubSpot Workflow Automation APIs");
4
+ registerResource(workflows, getCtx, {
5
+ name: "flows",
6
+ description: "Automation flows",
7
+ listPath: "/automation/v4/flows",
8
+ itemPath: (id) => `/automation/v4/flows/${id}`,
9
+ createPath: "/automation/v4/flows",
10
+ updatePath: (id) => `/automation/v4/flows/${id}`,
11
+ });
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/workflows/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,MAAwB;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAE/F,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE;QAClC,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,sBAAsB;QAChC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,wBAAwB,EAAE,EAAE;QAC9C,UAAU,EAAE,sBAAsB;QAClC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,wBAAwB,EAAE,EAAE;KACjD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface AuthProfile {
2
+ token: string;
3
+ refreshToken?: string;
4
+ expiresAt?: string;
5
+ scopes?: string[];
6
+ portalId?: string;
7
+ uiDomain?: string;
8
+ apiDomain?: string;
9
+ hublet?: string;
10
+ mode?: "read-only" | "read-write";
11
+ }
12
+ /**
13
+ * Detect the hublet from available profile data.
14
+ * Priority: explicit hublet field > uiDomain > token prefix.
15
+ */
16
+ export declare function detectHublet(profile: Partial<AuthProfile>): string | undefined;
17
+ /**
18
+ * Resolve the HubSpot API base domain for a given hublet.
19
+ * NA/default → "api.hubapi.com", EU1 → "api-eu1.hubapi.com", etc.
20
+ */
21
+ export declare function resolveApiDomain(hublet?: string): string;
22
+ /**
23
+ * Get the API base URL for a profile (hublet-aware).
24
+ */
25
+ export declare function getApiBaseUrl(profile: string): string;
26
+ export declare function getHubcliHomeDir(): string;
27
+ export declare function saveToken(profile: string, token: string): void;
28
+ export declare function saveProfile(profile: string, data: AuthProfile): void;
29
+ export declare function getToken(profile: string): string;
30
+ export declare function removeToken(profile: string): boolean;
31
+ export declare function hasProfile(profile: string): boolean;
32
+ export declare function listProfiles(): string[];
33
+ export declare function getProfile(profile: string): AuthProfile;
@@ -0,0 +1,137 @@
1
+ import { mkdirSync, readFileSync, writeFileSync, existsSync, chmodSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { CliError } from "./output.js";
5
+ import { isVaultEncrypted, readVaultData, writeVaultData, getVaultPassphrase } from "./vault.js";
6
+ /**
7
+ * Detect the hublet from available profile data.
8
+ * Priority: explicit hublet field > uiDomain > token prefix.
9
+ */
10
+ export function detectHublet(profile) {
11
+ if (profile.hublet)
12
+ return profile.hublet;
13
+ // Detect from uiDomain (e.g. "app-eu1.hubspot.com" → "eu1")
14
+ if (profile.uiDomain) {
15
+ const match = profile.uiDomain.match(/^app-([a-z0-9]+)\./);
16
+ if (match)
17
+ return match[1];
18
+ }
19
+ // Detect from token prefix (e.g. "pat-eu1-..." → "eu1")
20
+ if (profile.token) {
21
+ const tokenMatch = profile.token.match(/^pat-([a-z0-9]+)-/);
22
+ if (tokenMatch && tokenMatch[1] !== "na1")
23
+ return tokenMatch[1];
24
+ }
25
+ return undefined;
26
+ }
27
+ /**
28
+ * Resolve the HubSpot API base domain for a given hublet.
29
+ * NA/default → "api.hubapi.com", EU1 → "api-eu1.hubapi.com", etc.
30
+ */
31
+ export function resolveApiDomain(hublet) {
32
+ if (!hublet)
33
+ return "api.hubapi.com";
34
+ return `api-${hublet}.hubapi.com`;
35
+ }
36
+ /**
37
+ * Get the API base URL for a profile (hublet-aware).
38
+ */
39
+ export function getApiBaseUrl(profile) {
40
+ try {
41
+ const data = getProfile(profile);
42
+ if (data.apiDomain)
43
+ return `https://${data.apiDomain}`;
44
+ const hublet = detectHublet(data);
45
+ return `https://${resolveApiDomain(hublet)}`;
46
+ }
47
+ catch {
48
+ return "https://api.hubapi.com";
49
+ }
50
+ }
51
+ export function getHubcliHomeDir() {
52
+ return process.env.HSCLI_HOME?.trim() || join(homedir(), ".hscli");
53
+ }
54
+ function authPaths() {
55
+ const root = getHubcliHomeDir();
56
+ return { dir: root, file: join(root, "auth.json") };
57
+ }
58
+ function readAuthFile() {
59
+ const { dir } = authPaths();
60
+ // If vault is encrypted, require passphrase — never silently fall back to plaintext
61
+ if (isVaultEncrypted(dir)) {
62
+ const passphrase = getVaultPassphrase();
63
+ if (!passphrase) {
64
+ throw new CliError("VAULT_PASSPHRASE_REQUIRED", "Vault is encrypted (auth.enc exists) but HSCLI_VAULT_PASSPHRASE is not set. Set the env var or run 'hubcli auth decrypt' first.");
65
+ }
66
+ return readVaultData(dir, passphrase);
67
+ }
68
+ const { file } = authPaths();
69
+ if (!existsSync(file))
70
+ return { profiles: {} };
71
+ return JSON.parse(readFileSync(file, "utf8"));
72
+ }
73
+ function writeAuthFile(data) {
74
+ const { dir, file } = authPaths();
75
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
76
+ if (process.platform !== "win32") {
77
+ chmodSync(dir, 0o700);
78
+ }
79
+ // If vault is encrypted, require passphrase — never create plaintext alongside auth.enc
80
+ if (isVaultEncrypted(dir)) {
81
+ const passphrase = getVaultPassphrase();
82
+ if (!passphrase) {
83
+ throw new CliError("VAULT_PASSPHRASE_REQUIRED", "Vault is encrypted (auth.enc exists) but HSCLI_VAULT_PASSPHRASE is not set. Set the env var or run 'hubcli auth decrypt' first.");
84
+ }
85
+ writeVaultData(dir, data, passphrase);
86
+ return;
87
+ }
88
+ writeFileSync(file, JSON.stringify(data, null, 2), { mode: 0o600 });
89
+ if (process.platform !== "win32") {
90
+ chmodSync(file, 0o600);
91
+ }
92
+ }
93
+ export function saveToken(profile, token) {
94
+ if (!token?.trim())
95
+ throw new CliError("AUTH_INVALID_TOKEN", "Token cannot be empty");
96
+ const file = readAuthFile();
97
+ file.profiles[profile] = { ...(file.profiles[profile] ?? {}), token };
98
+ writeAuthFile(file);
99
+ }
100
+ export function saveProfile(profile, data) {
101
+ if (!data.token?.trim())
102
+ throw new CliError("AUTH_INVALID_TOKEN", "Token cannot be empty");
103
+ const file = readAuthFile();
104
+ file.profiles[profile] = { ...file.profiles[profile], ...data, token: data.token.trim() };
105
+ writeAuthFile(file);
106
+ }
107
+ export function getToken(profile) {
108
+ const file = readAuthFile();
109
+ const token = file.profiles[profile]?.token;
110
+ if (!token) {
111
+ throw new CliError("AUTH_PROFILE_NOT_FOUND", `No token found for profile '${profile}'. Run 'hubcli auth login --token <token>'.`);
112
+ }
113
+ return token;
114
+ }
115
+ export function removeToken(profile) {
116
+ const file = readAuthFile();
117
+ if (!file.profiles[profile])
118
+ return false;
119
+ delete file.profiles[profile];
120
+ writeAuthFile(file);
121
+ return true;
122
+ }
123
+ export function hasProfile(profile) {
124
+ const file = readAuthFile();
125
+ return Boolean(file.profiles[profile]);
126
+ }
127
+ export function listProfiles() {
128
+ return Object.keys(readAuthFile().profiles).sort();
129
+ }
130
+ export function getProfile(profile) {
131
+ const value = readAuthFile().profiles[profile];
132
+ if (!value) {
133
+ throw new CliError("AUTH_PROFILE_NOT_FOUND", `No profile found for '${profile}'.`);
134
+ }
135
+ return value;
136
+ }
137
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { CliError } from "./output.js";
2
+ type ProbeMethod = "GET" | "POST" | "PATCH" | "PUT" | "DELETE";
3
+ export type CapabilityStatus = "supported" | "unsupported" | "unknown";
4
+ export interface EndpointCapabilityDefinition {
5
+ id: string;
6
+ label: string;
7
+ pathPrefix: string;
8
+ probePath: string;
9
+ probeMethod: ProbeMethod;
10
+ requiredScopes: string[];
11
+ scopeHints: string[];
12
+ tierHint?: string;
13
+ fallbackCommand: string;
14
+ }
15
+ interface CachedCapabilityStatus {
16
+ status: CapabilityStatus;
17
+ statusCode?: number;
18
+ checkedAt: string;
19
+ note?: string;
20
+ }
21
+ export interface CapabilityProbeResult {
22
+ profile: string;
23
+ portalId: string;
24
+ scopes: string[];
25
+ source: "profile" | "token-info";
26
+ cacheKey: string;
27
+ refreshed: boolean;
28
+ cacheExpiresAt: string;
29
+ ttlHours: number;
30
+ summary: {
31
+ supported: number;
32
+ unsupported: number;
33
+ unknown: number;
34
+ };
35
+ capabilities: Array<EndpointCapabilityDefinition & CachedCapabilityStatus>;
36
+ }
37
+ export declare function preflightEndpointCapability(options: {
38
+ profile: string;
39
+ path: string;
40
+ strict: boolean;
41
+ }): void;
42
+ export declare function mapEndpointAvailabilityError(options: {
43
+ profile: string;
44
+ path: string;
45
+ statusCode: number;
46
+ details: unknown;
47
+ }): CliError | undefined;
48
+ export declare function recordEndpointSuccess(options: {
49
+ profile: string;
50
+ path: string;
51
+ statusCode: number;
52
+ }): void;
53
+ export declare function probeCapabilities(options: {
54
+ profile: string;
55
+ token: string;
56
+ refresh?: boolean;
57
+ ttlMs?: number;
58
+ }): Promise<CapabilityProbeResult>;
59
+ export declare function listEndpointCapabilities(): EndpointCapabilityDefinition[];
60
+ export {};