@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,137 @@
1
+ import { CONTACTS, COMPANIES, DEALS, TICKETS } from "./data.js";
2
+ import { futureDate, safeAssociate, safeCreate } from "./shared.js";
3
+ /** Contacts, companies, deals, tickets + their cross-associations. */
4
+ export async function seedCrmCore(ctx, result) {
5
+ const { client, ownerId } = ctx;
6
+ // --- Contacts ---
7
+ for (const c of CONTACTS) {
8
+ const search = await client.request("/crm/v3/objects/contacts/search", {
9
+ method: "POST",
10
+ body: { filterGroups: [{ filters: [{ propertyName: "email", operator: "EQ", value: c.email }] }], limit: 1 },
11
+ });
12
+ if (search.total && search.total > 0) {
13
+ const id = search.results[0].id;
14
+ ctx.contactIds.push(id);
15
+ result.skipped.push({ type: "contact", name: `${c.firstname} ${c.lastname}`, reason: `already exists (${id})` });
16
+ continue;
17
+ }
18
+ const props = { ...c };
19
+ if (ownerId)
20
+ props.hubspot_owner_id = ownerId;
21
+ const rec = await safeCreate(client, "/crm/v3/objects/contacts", { properties: props });
22
+ if (rec) {
23
+ ctx.contactIds.push(rec.id);
24
+ result.created.push({ type: "contact", name: `${c.firstname} ${c.lastname}`, id: rec.id, url: ctx.recordUrl("0-1", rec.id) });
25
+ }
26
+ else {
27
+ ctx.contactIds.push(null);
28
+ result.skipped.push({ type: "contact", name: `${c.firstname} ${c.lastname}`, reason: "create failed (duplicate?)" });
29
+ }
30
+ }
31
+ // --- Companies ---
32
+ for (const co of COMPANIES) {
33
+ const search = await client.request("/crm/v3/objects/companies/search", {
34
+ method: "POST",
35
+ body: { filterGroups: [{ filters: [{ propertyName: "domain", operator: "EQ", value: co.domain }] }], limit: 1 },
36
+ });
37
+ if (search.total && search.total > 0) {
38
+ const id = search.results[0].id;
39
+ ctx.companyIds.push(id);
40
+ result.skipped.push({ type: "company", name: co.name, reason: `already exists (${id})` });
41
+ continue;
42
+ }
43
+ const props = { ...co };
44
+ if (ownerId)
45
+ props.hubspot_owner_id = ownerId;
46
+ const rec = await safeCreate(client, "/crm/v3/objects/companies", { properties: props });
47
+ if (rec) {
48
+ ctx.companyIds.push(rec.id);
49
+ result.created.push({ type: "company", name: co.name, id: rec.id, url: ctx.recordUrl("0-2", rec.id) });
50
+ }
51
+ else {
52
+ ctx.companyIds.push(null);
53
+ result.skipped.push({ type: "company", name: co.name, reason: "create failed" });
54
+ }
55
+ }
56
+ // --- Deals ---
57
+ for (const d of DEALS) {
58
+ const props = {
59
+ dealname: d.dealname,
60
+ amount: d.amount,
61
+ closedate: futureDate(60 + Math.floor(Math.random() * 90)),
62
+ };
63
+ if (ctx.dealPipeline)
64
+ props.pipeline = ctx.dealPipeline;
65
+ if (ctx.dealStage)
66
+ props.dealstage = ctx.dealStage;
67
+ if (ownerId)
68
+ props.hubspot_owner_id = ownerId;
69
+ const rec = await safeCreate(client, "/crm/v3/objects/deals", { properties: props });
70
+ if (rec) {
71
+ ctx.dealIds.push(rec.id);
72
+ result.created.push({ type: "deal", name: d.dealname, id: rec.id, url: ctx.recordUrl("0-3", rec.id) });
73
+ }
74
+ else {
75
+ ctx.dealIds.push(null);
76
+ result.skipped.push({ type: "deal", name: d.dealname, reason: "create failed" });
77
+ }
78
+ }
79
+ // --- Tickets ---
80
+ for (const t of TICKETS) {
81
+ const props = {
82
+ subject: t.subject,
83
+ content: t.content,
84
+ hs_ticket_priority: t.hs_ticket_priority,
85
+ };
86
+ if (ctx.ticketPipeline)
87
+ props.hs_pipeline = ctx.ticketPipeline;
88
+ if (ctx.ticketStage)
89
+ props.hs_pipeline_stage = ctx.ticketStage;
90
+ if (ownerId)
91
+ props.hubspot_owner_id = ownerId;
92
+ const rec = await safeCreate(client, "/crm/v3/objects/tickets", { properties: props });
93
+ if (rec) {
94
+ ctx.ticketIds.push(rec.id);
95
+ result.created.push({ type: "ticket", name: t.subject, id: rec.id, url: ctx.recordUrl("0-5", rec.id) });
96
+ }
97
+ else {
98
+ ctx.ticketIds.push(null);
99
+ result.skipped.push({ type: "ticket", name: t.subject, reason: "create failed" });
100
+ }
101
+ }
102
+ // --- Cross-associations ---
103
+ for (let i = 0; i < CONTACTS.length; i++) {
104
+ const contactId = ctx.contactIds[i];
105
+ const companyId = ctx.companyIds[i];
106
+ if (!contactId || !companyId)
107
+ continue;
108
+ const status = await safeAssociate(client, "contacts", contactId, "companies", companyId);
109
+ result.associations.push({ from: `contact:${contactId}`, to: `company:${companyId}`, status });
110
+ }
111
+ for (let i = 0; i < DEALS.length; i++) {
112
+ const dealId = ctx.dealIds[i];
113
+ if (!dealId)
114
+ continue;
115
+ const contactId = ctx.contactIds[DEALS[i].contactIndex];
116
+ const companyId = ctx.companyIds[DEALS[i].companyIndex];
117
+ if (contactId) {
118
+ const status = await safeAssociate(client, "deals", dealId, "contacts", contactId);
119
+ result.associations.push({ from: `deal:${dealId}`, to: `contact:${contactId}`, status });
120
+ }
121
+ if (companyId) {
122
+ const status = await safeAssociate(client, "deals", dealId, "companies", companyId);
123
+ result.associations.push({ from: `deal:${dealId}`, to: `company:${companyId}`, status });
124
+ }
125
+ }
126
+ for (let i = 0; i < TICKETS.length; i++) {
127
+ const ticketId = ctx.ticketIds[i];
128
+ if (!ticketId)
129
+ continue;
130
+ const contactId = ctx.contactIds[TICKETS[i].contactIndex];
131
+ if (contactId) {
132
+ const status = await safeAssociate(client, "tickets", ticketId, "contacts", contactId);
133
+ result.associations.push({ from: `ticket:${ticketId}`, to: `contact:${contactId}`, status });
134
+ }
135
+ }
136
+ }
137
+ //# sourceMappingURL=crm-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crm-core.js","sourceRoot":"","sources":["../../../src/commands/seed/crm-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ export declare const CONTACTS: {
2
+ firstname: string;
3
+ lastname: string;
4
+ email: string;
5
+ jobtitle: string;
6
+ lifecyclestage: string;
7
+ }[];
8
+ export declare const COMPANIES: {
9
+ name: string;
10
+ domain: string;
11
+ industry: string;
12
+ city: string;
13
+ country: string;
14
+ numberofemployees: string;
15
+ annualrevenue: string;
16
+ }[];
17
+ export declare const DEALS: {
18
+ dealname: string;
19
+ amount: string;
20
+ closedate: string;
21
+ contactIndex: number;
22
+ companyIndex: number;
23
+ }[];
24
+ export declare const TICKETS: {
25
+ subject: string;
26
+ content: string;
27
+ hs_ticket_priority: string;
28
+ contactIndex: number;
29
+ }[];
30
+ export declare const NOTES: {
31
+ hs_note_body: string;
32
+ contactIndex: number;
33
+ }[];
34
+ export declare const TASKS: {
35
+ hs_task_subject: string;
36
+ hs_task_body: string;
37
+ hs_task_status: string;
38
+ hs_task_priority: string;
39
+ contactIndex: number;
40
+ }[];
41
+ export declare const CALLS: {
42
+ hs_call_title: string;
43
+ hs_call_body: string;
44
+ hs_call_direction: string;
45
+ hs_call_duration: string;
46
+ contactIndex: number;
47
+ }[];
48
+ export declare const MEETINGS: {
49
+ hs_meeting_title: string;
50
+ hs_meeting_body: string;
51
+ hs_meeting_outcome: string;
52
+ hs_meeting_start_time: string;
53
+ hs_meeting_end_time: string;
54
+ contactIndex: number;
55
+ }[];
56
+ export declare const PRODUCTS: {
57
+ name: string;
58
+ description: string;
59
+ price: string;
60
+ hs_sku: string;
61
+ hs_cost_of_goods_sold: string;
62
+ }[];
63
+ export declare const LEADS: {
64
+ firstname: string;
65
+ lastname: string;
66
+ email: string;
67
+ jobtitle: string;
68
+ lifecyclestage: string;
69
+ }[];
70
+ export declare const GOALS: {
71
+ hs_goal_name: string;
72
+ hs_goal_description: string;
73
+ }[];
@@ -0,0 +1,49 @@
1
+ // Sample records + config used by the seed command. Kept data-only (no logic)
2
+ // so reviewers can edit the seed dataset without touching orchestration code.
3
+ export const CONTACTS = [
4
+ { firstname: "Alice", lastname: "Martin", email: "alice.martin@acmetech.io", jobtitle: "VP of Engineering", lifecyclestage: "opportunity" },
5
+ { firstname: "Bob", lastname: "Chen", email: "bob.chen@globalsync.co", jobtitle: "CTO", lifecyclestage: "lead" },
6
+ { firstname: "Clara", lastname: "Johansson", email: "clara.johansson@nordicdata.se", jobtitle: "Head of Product", lifecyclestage: "customer" },
7
+ ];
8
+ export const COMPANIES = [
9
+ { name: "AcmeTech", domain: "acmetech.io", industry: "COMPUTER_SOFTWARE", city: "San Francisco", country: "United States", numberofemployees: "150", annualrevenue: "12000000" },
10
+ { name: "GlobalSync", domain: "globalsync.co", industry: "INFORMATION_TECHNOLOGY_AND_SERVICES", city: "London", country: "United Kingdom", numberofemployees: "80", annualrevenue: "5500000" },
11
+ { name: "NordicData", domain: "nordicdata.se", industry: "COMPUTER_SOFTWARE", city: "Stockholm", country: "Sweden", numberofemployees: "200", annualrevenue: "18000000" },
12
+ ];
13
+ export const DEALS = [
14
+ { dealname: "AcmeTech — Platform License", amount: "65000", closedate: "", contactIndex: 0, companyIndex: 0 },
15
+ { dealname: "GlobalSync — API Integration", amount: "38000", closedate: "", contactIndex: 1, companyIndex: 1 },
16
+ { dealname: "NordicData — Enterprise Suite", amount: "150000", closedate: "", contactIndex: 2, companyIndex: 2 },
17
+ ];
18
+ export const TICKETS = [
19
+ { subject: "AcmeTech API rate limit issue", content: "Alice reports intermittent 429 errors during peak hours.", hs_ticket_priority: "HIGH", contactIndex: 0 },
20
+ { subject: "GlobalSync SSO configuration", content: "Bob needs help configuring SAML for their IdP.", hs_ticket_priority: "MEDIUM", contactIndex: 1 },
21
+ ];
22
+ export const NOTES = [
23
+ { hs_note_body: "Call recap: Alice confirmed Q2 budget is approved. EU data residency is a requirement.", contactIndex: 0 },
24
+ { hs_note_body: "Bob sent SAML configuration guide. Follow up in 48h if no progress.", contactIndex: 1 },
25
+ ];
26
+ export const TASKS = [
27
+ { hs_task_subject: "Prepare integration demo for AcmeTech", hs_task_body: "Build demo environment with sample API calls and webhooks.", hs_task_status: "NOT_STARTED", hs_task_priority: "HIGH", contactIndex: 0 },
28
+ { hs_task_subject: "Follow up on GlobalSync SSO issue", hs_task_body: "Check if Bob resolved the SAML configuration.", hs_task_status: "NOT_STARTED", hs_task_priority: "MEDIUM", contactIndex: 1 },
29
+ ];
30
+ export const CALLS = [
31
+ { hs_call_title: "Discovery call — NordicData", hs_call_body: "Discussed multi-region deployment needs. Budget range 120-180K.", hs_call_direction: "OUTBOUND", hs_call_duration: "1800000", contactIndex: 2 },
32
+ ];
33
+ export const MEETINGS = [
34
+ { hs_meeting_title: "Kickoff — AcmeTech onboarding", hs_meeting_body: "Walk through integration plan + Q2 milestones.", hs_meeting_outcome: "COMPLETED", hs_meeting_start_time: new Date(Date.now() + 86400000 * 3).toISOString(), hs_meeting_end_time: new Date(Date.now() + 86400000 * 3 + 3600000).toISOString(), contactIndex: 0 },
35
+ { hs_meeting_title: "Quarterly review — NordicData", hs_meeting_body: "Q1 progress + Q2 expansion discussion.", hs_meeting_outcome: "SCHEDULED", hs_meeting_start_time: new Date(Date.now() + 86400000 * 10).toISOString(), hs_meeting_end_time: new Date(Date.now() + 86400000 * 10 + 1800000).toISOString(), contactIndex: 2 },
36
+ ];
37
+ export const PRODUCTS = [
38
+ { name: "Platform License — Starter", description: "Single-portal license, 10k contacts, standard support.", price: "5000", hs_sku: "HUBCLI-PLAT-STARTER", hs_cost_of_goods_sold: "800" },
39
+ { name: "Platform License — Pro", description: "Multi-portal, 100k contacts, dedicated CSM.", price: "25000", hs_sku: "HUBCLI-PLAT-PRO", hs_cost_of_goods_sold: "2500" },
40
+ { name: "Professional Services — Onboarding", description: "6-week guided onboarding engagement.", price: "12000", hs_sku: "HUBCLI-PS-ONBD", hs_cost_of_goods_sold: "6000" },
41
+ ];
42
+ export const LEADS = [
43
+ { firstname: "Eve", lastname: "Barros", email: "eve.barros@prospecttech.io", jobtitle: "Head of RevOps", lifecyclestage: "subscriber" },
44
+ { firstname: "Marco", lastname: "Keller", email: "marco.keller@inboundco.de", jobtitle: "Founder", lifecyclestage: "marketingqualifiedlead" },
45
+ ];
46
+ export const GOALS = [
47
+ { hs_goal_name: "Q2 Pipeline Coverage Target", hs_goal_description: "Maintain 3x coverage over Q2 booked ARR target." },
48
+ ];
49
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/commands/seed/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SeedContext, SeedResult } from "./types.js";
2
+ /** Notes, tasks, calls, meetings — each associated to a contact. */
3
+ export declare function seedEngagements(ctx: SeedContext, result: SeedResult): Promise<void>;
@@ -0,0 +1,89 @@
1
+ import { CALLS, MEETINGS, NOTES, TASKS } from "./data.js";
2
+ import { nowIso, safeAssociate, safeCreate } from "./shared.js";
3
+ /** Notes, tasks, calls, meetings — each associated to a contact. */
4
+ export async function seedEngagements(ctx, result) {
5
+ const { client, ownerId } = ctx;
6
+ const engagementTypes = [
7
+ {
8
+ type: "note", path: "/crm/v3/objects/notes",
9
+ items: NOTES.map(n => ({
10
+ props: { hs_note_body: n.hs_note_body, hs_timestamp: nowIso() },
11
+ contactIndex: n.contactIndex,
12
+ })),
13
+ },
14
+ {
15
+ type: "task", path: "/crm/v3/objects/tasks",
16
+ items: TASKS.map(t => ({
17
+ props: {
18
+ hs_task_subject: t.hs_task_subject,
19
+ hs_task_body: t.hs_task_body,
20
+ hs_task_status: t.hs_task_status,
21
+ hs_task_priority: t.hs_task_priority,
22
+ hs_timestamp: nowIso(),
23
+ },
24
+ contactIndex: t.contactIndex,
25
+ })),
26
+ },
27
+ {
28
+ type: "call", path: "/crm/v3/objects/calls",
29
+ items: CALLS.map(c => ({
30
+ props: {
31
+ hs_call_title: c.hs_call_title,
32
+ hs_call_body: c.hs_call_body,
33
+ hs_call_direction: c.hs_call_direction,
34
+ hs_call_duration: c.hs_call_duration,
35
+ hs_call_status: "COMPLETED",
36
+ hs_timestamp: nowIso(),
37
+ },
38
+ contactIndex: c.contactIndex,
39
+ })),
40
+ },
41
+ ];
42
+ for (const eng of engagementTypes) {
43
+ for (const item of eng.items) {
44
+ const props = { ...item.props };
45
+ if (ownerId)
46
+ props.hubspot_owner_id = ownerId;
47
+ const rec = await safeCreate(client, eng.path, { properties: props });
48
+ if (rec) {
49
+ result.created.push({
50
+ type: eng.type,
51
+ name: props.hs_note_body || props.hs_task_subject || props.hs_call_title || eng.type,
52
+ id: rec.id,
53
+ });
54
+ const contactId = ctx.contactIds[item.contactIndex];
55
+ if (contactId) {
56
+ const plural = eng.type === "call" ? "calls" : eng.type + "s";
57
+ const status = await safeAssociate(client, plural, rec.id, "contacts", contactId);
58
+ result.associations.push({ from: `${eng.type}:${rec.id}`, to: `contact:${contactId}`, status });
59
+ }
60
+ }
61
+ }
62
+ }
63
+ // Meetings (dedicated — use MEETINGS data)
64
+ for (const m of MEETINGS) {
65
+ const props = {
66
+ hs_meeting_title: m.hs_meeting_title,
67
+ hs_meeting_body: m.hs_meeting_body,
68
+ hs_meeting_outcome: m.hs_meeting_outcome,
69
+ hs_meeting_start_time: m.hs_meeting_start_time,
70
+ hs_meeting_end_time: m.hs_meeting_end_time,
71
+ hs_timestamp: nowIso(),
72
+ };
73
+ if (ownerId)
74
+ props.hubspot_owner_id = ownerId;
75
+ const rec = await safeCreate(client, "/crm/v3/objects/meetings", { properties: props });
76
+ if (rec) {
77
+ result.created.push({ type: "meeting", name: m.hs_meeting_title, id: rec.id });
78
+ const contactId = ctx.contactIds[m.contactIndex];
79
+ if (contactId) {
80
+ const status = await safeAssociate(client, "meetings", rec.id, "contacts", contactId);
81
+ result.associations.push({ from: `meeting:${rec.id}`, to: `contact:${contactId}`, status });
82
+ }
83
+ }
84
+ else {
85
+ result.skipped.push({ type: "meeting", name: m.hs_meeting_title, reason: "create failed" });
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=engagements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engagements.js","sourceRoot":"","sources":["../../../src/commands/seed/engagements.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 registerSeed(program: Command, getCtx: () => CliContext): void;
@@ -0,0 +1,95 @@
1
+ import { CliError, printResult } from "../../core/output.js";
2
+ import { CALLS, COMPANIES, CONTACTS, DEALS, GOALS, LEADS, MEETINGS, NOTES, PRODUCTS, TASKS, TICKETS } from "./data.js";
3
+ import { buildSeedContext } from "./context.js";
4
+ import { seedCrmCore } from "./crm-core.js";
5
+ import { seedEngagements } from "./engagements.js";
6
+ import { seedCommerce } from "./commerce.js";
7
+ import { seedMarketing } from "./marketing.js";
8
+ import { seedCms } from "./cms.js";
9
+ import { seedInfra } from "./infra.js";
10
+ /**
11
+ * Run every seed module in a stable order. Order matters: CRM core must run
12
+ * first (contacts/companies/deals/tickets provide IDs that commerce, marketing,
13
+ * and infra modules reference). Each module mutates the shared result object.
14
+ */
15
+ async function runSeed(cliCtx) {
16
+ const ctx = await buildSeedContext(cliCtx);
17
+ const result = { created: [], associations: [], skipped: [], tips: [] };
18
+ await seedCrmCore(ctx, result);
19
+ await seedEngagements(ctx, result);
20
+ await seedCommerce(ctx, result);
21
+ await seedMarketing(ctx, result);
22
+ await seedCms(ctx, result);
23
+ await seedInfra(ctx, result);
24
+ // --- Summary tips ---
25
+ if (!ctx.ownerId)
26
+ result.tips.push("No owner detected. Records created without an owner. Run 'hubcli crm owners list' to verify.");
27
+ if (!ctx.dealPipeline)
28
+ result.tips.push("No deal pipeline found. Deals created without pipeline/stage.");
29
+ if (!ctx.ticketPipeline)
30
+ result.tips.push("No ticket pipeline found. Tickets created without pipeline/stage.");
31
+ if (ctx.customSchemas.length === 0)
32
+ result.tips.push("No custom objects found. Create one in HubSpot Settings → Data Management → Custom Objects.");
33
+ const failedAssociations = result.associations.filter(a => a.status === "no_default_association");
34
+ if (failedAssociations.length > 0) {
35
+ result.tips.push(`${failedAssociations.length} association(s) skipped (no default association type configured). Configure them in HubSpot Settings → Data Management → Associations.`);
36
+ }
37
+ printResult(cliCtx, {
38
+ summary: {
39
+ created: result.created.length,
40
+ skipped: result.skipped.length,
41
+ associations: result.associations.filter(a => a.status === "ok").length,
42
+ associationsFailed: failedAssociations.length,
43
+ },
44
+ created: result.created,
45
+ skipped: result.skipped.length > 0 ? result.skipped : undefined,
46
+ tips: result.tips.length > 0 ? result.tips : undefined,
47
+ });
48
+ }
49
+ export function registerSeed(program, getCtx) {
50
+ program
51
+ .command("seed")
52
+ .description("Seed a test portal with comprehensive sample data: contacts, companies, deals, tickets, engagements (notes/tasks/calls/meetings), products + line-items, quotes, leads, goals, a marketing form, a static list, a custom property group + property, a URL redirect, a timeline event template + event, and (best-effort) a webhook subscription + HubDB table + custom-object records. Associations wired up automatically.")
53
+ .action(async () => {
54
+ const ctx = getCtx();
55
+ if (ctx.dryRun) {
56
+ printResult(ctx, {
57
+ dryRun: true,
58
+ message: "Dry-run mode: no records will be created. Remove --dry-run and use --force to execute.",
59
+ wouldCreate: {
60
+ contacts: CONTACTS.length,
61
+ companies: COMPANIES.length,
62
+ deals: DEALS.length,
63
+ tickets: TICKETS.length,
64
+ notes: NOTES.length,
65
+ tasks: TASKS.length,
66
+ calls: CALLS.length,
67
+ meetings: MEETINGS.length,
68
+ products: PRODUCTS.length,
69
+ line_items: "1 per deal+product pair",
70
+ quotes: "1 (best-effort)",
71
+ leads: LEADS.length,
72
+ goals: GOALS.length,
73
+ form: 1,
74
+ list: 1,
75
+ property_group: 1,
76
+ custom_property: 1,
77
+ url_redirect: 1,
78
+ timeline_event_template: "1 (best-effort)",
79
+ timeline_event: "1 (best-effort)",
80
+ webhook_subscription: "1 (best-effort, usually fails w/o app)",
81
+ hubdb_table: "1 (best-effort, CMS Hub only)",
82
+ custom_object_records: "1 per schema detected",
83
+ pipelines: "1 deals + 1 tickets",
84
+ custom_object_schema: "1 (only if none exist)",
85
+ },
86
+ });
87
+ return;
88
+ }
89
+ if (!ctx.force) {
90
+ throw new CliError("WRITE_CONFIRMATION_REQUIRED", "seed creates records in your portal. Preview with --dry-run, then run with --force to execute.");
91
+ }
92
+ await runSeed(ctx);
93
+ });
94
+ }
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/seed/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SeedContext, SeedResult } from "./types.js";
2
+ /**
3
+ * Portal infrastructure: custom pipelines, custom object schemas, timeline
4
+ * event templates, webhook subscriptions, workflow (Ops Hub Pro+).
5
+ */
6
+ export declare function seedInfra(ctx: SeedContext, result: SeedResult): Promise<void>;