@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.
- package/CHANGELOG.md +466 -0
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/SECURITY.md +68 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +192 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/account/index.d.ts +3 -0
- package/dist/commands/account/index.js +65 -0
- package/dist/commands/account/index.js.map +1 -0
- package/dist/commands/api/index.d.ts +3 -0
- package/dist/commands/api/index.js +35 -0
- package/dist/commands/api/index.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.js +229 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/automation/index.d.ts +3 -0
- package/dist/commands/automation/index.js +119 -0
- package/dist/commands/automation/index.js.map +1 -0
- package/dist/commands/cms/blog-settings.d.ts +3 -0
- package/dist/commands/cms/blog-settings.js +70 -0
- package/dist/commands/cms/blog-settings.js.map +1 -0
- package/dist/commands/cms/content-ops.d.ts +13 -0
- package/dist/commands/cms/content-ops.js +262 -0
- package/dist/commands/cms/content-ops.js.map +1 -0
- package/dist/commands/cms/hubdb.d.ts +3 -0
- package/dist/commands/cms/hubdb.js +55 -0
- package/dist/commands/cms/hubdb.js.map +1 -0
- package/dist/commands/cms/index.d.ts +3 -0
- package/dist/commands/cms/index.js +119 -0
- package/dist/commands/cms/index.js.map +1 -0
- package/dist/commands/cms/source-code.d.ts +3 -0
- package/dist/commands/cms/source-code.js +101 -0
- package/dist/commands/cms/source-code.js.map +1 -0
- package/dist/commands/communication-preferences/index.d.ts +3 -0
- package/dist/commands/communication-preferences/index.js +107 -0
- package/dist/commands/communication-preferences/index.js.map +1 -0
- package/dist/commands/conversations/index.d.ts +3 -0
- package/dist/commands/conversations/index.js +233 -0
- package/dist/commands/conversations/index.js.map +1 -0
- package/dist/commands/crm/associations.d.ts +3 -0
- package/dist/commands/crm/associations.js +180 -0
- package/dist/commands/crm/associations.js.map +1 -0
- package/dist/commands/crm/cards.d.ts +3 -0
- package/dist/commands/crm/cards.js +72 -0
- package/dist/commands/crm/cards.js.map +1 -0
- package/dist/commands/crm/carts.d.ts +3 -0
- package/dist/commands/crm/carts.js +5 -0
- package/dist/commands/crm/carts.js.map +1 -0
- package/dist/commands/crm/communications.d.ts +3 -0
- package/dist/commands/crm/communications.js +5 -0
- package/dist/commands/crm/communications.js.map +1 -0
- package/dist/commands/crm/companies.d.ts +3 -0
- package/dist/commands/crm/companies.js +5 -0
- package/dist/commands/crm/companies.js.map +1 -0
- package/dist/commands/crm/contacts.d.ts +3 -0
- package/dist/commands/crm/contacts.js +5 -0
- package/dist/commands/crm/contacts.js.map +1 -0
- package/dist/commands/crm/custom-objects.d.ts +3 -0
- package/dist/commands/crm/custom-objects.js +83 -0
- package/dist/commands/crm/custom-objects.js.map +1 -0
- package/dist/commands/crm/dated.d.ts +9 -0
- package/dist/commands/crm/dated.js +247 -0
- package/dist/commands/crm/dated.js.map +1 -0
- package/dist/commands/crm/deals.d.ts +3 -0
- package/dist/commands/crm/deals.js +5 -0
- package/dist/commands/crm/deals.js.map +1 -0
- package/dist/commands/crm/describe.d.ts +3 -0
- package/dist/commands/crm/describe.js +89 -0
- package/dist/commands/crm/describe.js.map +1 -0
- package/dist/commands/crm/discounts.d.ts +3 -0
- package/dist/commands/crm/discounts.js +5 -0
- package/dist/commands/crm/discounts.js.map +1 -0
- package/dist/commands/crm/engagements.d.ts +3 -0
- package/dist/commands/crm/engagements.js +8 -0
- package/dist/commands/crm/engagements.js.map +1 -0
- package/dist/commands/crm/fees.d.ts +3 -0
- package/dist/commands/crm/fees.js +5 -0
- package/dist/commands/crm/fees.js.map +1 -0
- package/dist/commands/crm/goals.d.ts +3 -0
- package/dist/commands/crm/goals.js +30 -0
- package/dist/commands/crm/goals.js.map +1 -0
- package/dist/commands/crm/imports.d.ts +3 -0
- package/dist/commands/crm/imports.js +45 -0
- package/dist/commands/crm/imports.js.map +1 -0
- package/dist/commands/crm/index.d.ts +3 -0
- package/dist/commands/crm/index.js +64 -0
- package/dist/commands/crm/index.js.map +1 -0
- package/dist/commands/crm/invoices.d.ts +3 -0
- package/dist/commands/crm/invoices.js +5 -0
- package/dist/commands/crm/invoices.js.map +1 -0
- package/dist/commands/crm/leads.d.ts +3 -0
- package/dist/commands/crm/leads.js +5 -0
- package/dist/commands/crm/leads.js.map +1 -0
- package/dist/commands/crm/line-items.d.ts +3 -0
- package/dist/commands/crm/line-items.js +5 -0
- package/dist/commands/crm/line-items.js.map +1 -0
- package/dist/commands/crm/orders.d.ts +3 -0
- package/dist/commands/crm/orders.js +5 -0
- package/dist/commands/crm/orders.js.map +1 -0
- package/dist/commands/crm/owners.d.ts +3 -0
- package/dist/commands/crm/owners.js +22 -0
- package/dist/commands/crm/owners.js.map +1 -0
- package/dist/commands/crm/payments.d.ts +3 -0
- package/dist/commands/crm/payments.js +5 -0
- package/dist/commands/crm/payments.js.map +1 -0
- package/dist/commands/crm/pipelines.d.ts +3 -0
- package/dist/commands/crm/pipelines.js +70 -0
- package/dist/commands/crm/pipelines.js.map +1 -0
- package/dist/commands/crm/products.d.ts +3 -0
- package/dist/commands/crm/products.js +5 -0
- package/dist/commands/crm/products.js.map +1 -0
- package/dist/commands/crm/properties.d.ts +3 -0
- package/dist/commands/crm/properties.js +103 -0
- package/dist/commands/crm/properties.js.map +1 -0
- package/dist/commands/crm/quotes.d.ts +3 -0
- package/dist/commands/crm/quotes.js +5 -0
- package/dist/commands/crm/quotes.js.map +1 -0
- package/dist/commands/crm/shared.d.ts +17 -0
- package/dist/commands/crm/shared.js +256 -0
- package/dist/commands/crm/shared.js.map +1 -0
- package/dist/commands/crm/subscriptions.d.ts +3 -0
- package/dist/commands/crm/subscriptions.js +5 -0
- package/dist/commands/crm/subscriptions.js.map +1 -0
- package/dist/commands/crm/sync.d.ts +3 -0
- package/dist/commands/crm/sync.js +116 -0
- package/dist/commands/crm/sync.js.map +1 -0
- package/dist/commands/crm/taxes.d.ts +3 -0
- package/dist/commands/crm/taxes.js +5 -0
- package/dist/commands/crm/taxes.js.map +1 -0
- package/dist/commands/crm/tickets.d.ts +3 -0
- package/dist/commands/crm/tickets.js +5 -0
- package/dist/commands/crm/tickets.js.map +1 -0
- package/dist/commands/crm/users.d.ts +3 -0
- package/dist/commands/crm/users.js +5 -0
- package/dist/commands/crm/users.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.js +232 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/domains/shared.d.ts +13 -0
- package/dist/commands/domains/shared.js +56 -0
- package/dist/commands/domains/shared.js.map +1 -0
- package/dist/commands/email-events/index.d.ts +3 -0
- package/dist/commands/email-events/index.js +77 -0
- package/dist/commands/email-events/index.js.map +1 -0
- package/dist/commands/events/index.d.ts +3 -0
- package/dist/commands/events/index.js +80 -0
- package/dist/commands/events/index.js.map +1 -0
- package/dist/commands/exports/index.d.ts +3 -0
- package/dist/commands/exports/index.js +45 -0
- package/dist/commands/exports/index.js.map +1 -0
- package/dist/commands/extensions/index.d.ts +3 -0
- package/dist/commands/extensions/index.js +118 -0
- package/dist/commands/extensions/index.js.map +1 -0
- package/dist/commands/feature-flags/index.d.ts +3 -0
- package/dist/commands/feature-flags/index.js +65 -0
- package/dist/commands/feature-flags/index.js.map +1 -0
- package/dist/commands/files/folders.d.ts +3 -0
- package/dist/commands/files/folders.js +74 -0
- package/dist/commands/files/folders.js.map +1 -0
- package/dist/commands/files/index.d.ts +3 -0
- package/dist/commands/files/index.js +30 -0
- package/dist/commands/files/index.js.map +1 -0
- package/dist/commands/forms/index.d.ts +3 -0
- package/dist/commands/forms/index.js +37 -0
- package/dist/commands/forms/index.js.map +1 -0
- package/dist/commands/integrations/index.d.ts +3 -0
- package/dist/commands/integrations/index.js +64 -0
- package/dist/commands/integrations/index.js.map +1 -0
- package/dist/commands/integrators/index.d.ts +3 -0
- package/dist/commands/integrators/index.js +79 -0
- package/dist/commands/integrators/index.js.map +1 -0
- package/dist/commands/legacy/index.d.ts +13 -0
- package/dist/commands/legacy/index.js +254 -0
- package/dist/commands/legacy/index.js.map +1 -0
- package/dist/commands/legacy-v1/index.d.ts +29 -0
- package/dist/commands/legacy-v1/index.js +568 -0
- package/dist/commands/legacy-v1/index.js.map +1 -0
- package/dist/commands/lists/index.d.ts +3 -0
- package/dist/commands/lists/index.js +148 -0
- package/dist/commands/lists/index.js.map +1 -0
- package/dist/commands/marketing/ads.d.ts +3 -0
- package/dist/commands/marketing/ads.js +45 -0
- package/dist/commands/marketing/ads.js.map +1 -0
- package/dist/commands/marketing/behavioral-events.d.ts +3 -0
- package/dist/commands/marketing/behavioral-events.js +38 -0
- package/dist/commands/marketing/behavioral-events.js.map +1 -0
- package/dist/commands/marketing/events.d.ts +3 -0
- package/dist/commands/marketing/events.js +69 -0
- package/dist/commands/marketing/events.js.map +1 -0
- package/dist/commands/marketing/index.d.ts +3 -0
- package/dist/commands/marketing/index.js +55 -0
- package/dist/commands/marketing/index.js.map +1 -0
- package/dist/commands/marketing/landing-pages.d.ts +3 -0
- package/dist/commands/marketing/landing-pages.js +48 -0
- package/dist/commands/marketing/landing-pages.js.map +1 -0
- package/dist/commands/marketing/seo.d.ts +3 -0
- package/dist/commands/marketing/seo.js +35 -0
- package/dist/commands/marketing/seo.js.map +1 -0
- package/dist/commands/marketing/social.d.ts +3 -0
- package/dist/commands/marketing/social.js +45 -0
- package/dist/commands/marketing/social.js.map +1 -0
- package/dist/commands/marketing/subscriptions.d.ts +3 -0
- package/dist/commands/marketing/subscriptions.js +27 -0
- package/dist/commands/marketing/subscriptions.js.map +1 -0
- package/dist/commands/marketing/transactional.d.ts +3 -0
- package/dist/commands/marketing/transactional.js +30 -0
- package/dist/commands/marketing/transactional.js.map +1 -0
- package/dist/commands/marketing-emails-v1/index.d.ts +3 -0
- package/dist/commands/marketing-emails-v1/index.js +72 -0
- package/dist/commands/marketing-emails-v1/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +10 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/media-bridge/index.d.ts +3 -0
- package/dist/commands/media-bridge/index.js +209 -0
- package/dist/commands/media-bridge/index.js.map +1 -0
- package/dist/commands/reporting/index.d.ts +3 -0
- package/dist/commands/reporting/index.js +73 -0
- package/dist/commands/reporting/index.js.map +1 -0
- package/dist/commands/sales/calling.d.ts +3 -0
- package/dist/commands/sales/calling.js +32 -0
- package/dist/commands/sales/calling.js.map +1 -0
- package/dist/commands/sales/index.d.ts +3 -0
- package/dist/commands/sales/index.js +10 -0
- package/dist/commands/sales/index.js.map +1 -0
- package/dist/commands/sales/meetings.d.ts +3 -0
- package/dist/commands/sales/meetings.js +37 -0
- package/dist/commands/sales/meetings.js.map +1 -0
- package/dist/commands/sales/sequences.d.ts +3 -0
- package/dist/commands/sales/sequences.js +78 -0
- package/dist/commands/sales/sequences.js.map +1 -0
- package/dist/commands/seed/cms.d.ts +6 -0
- package/dist/commands/seed/cms.js +204 -0
- package/dist/commands/seed/cms.js.map +1 -0
- package/dist/commands/seed/commerce.d.ts +3 -0
- package/dist/commands/seed/commerce.js +117 -0
- package/dist/commands/seed/commerce.js.map +1 -0
- package/dist/commands/seed/context.d.ts +8 -0
- package/dist/commands/seed/context.js +76 -0
- package/dist/commands/seed/context.js.map +1 -0
- package/dist/commands/seed/crm-core.d.ts +3 -0
- package/dist/commands/seed/crm-core.js +137 -0
- package/dist/commands/seed/crm-core.js.map +1 -0
- package/dist/commands/seed/data.d.ts +73 -0
- package/dist/commands/seed/data.js +49 -0
- package/dist/commands/seed/data.js.map +1 -0
- package/dist/commands/seed/engagements.d.ts +3 -0
- package/dist/commands/seed/engagements.js +89 -0
- package/dist/commands/seed/engagements.js.map +1 -0
- package/dist/commands/seed/index.d.ts +3 -0
- package/dist/commands/seed/index.js +95 -0
- package/dist/commands/seed/index.js.map +1 -0
- package/dist/commands/seed/infra.d.ts +6 -0
- package/dist/commands/seed/infra.js +163 -0
- package/dist/commands/seed/infra.js.map +1 -0
- package/dist/commands/seed/marketing.d.ts +3 -0
- package/dist/commands/seed/marketing.js +172 -0
- package/dist/commands/seed/marketing.js.map +1 -0
- package/dist/commands/seed/shared.d.ts +8 -0
- package/dist/commands/seed/shared.js +37 -0
- package/dist/commands/seed/shared.js.map +1 -0
- package/dist/commands/seed/types.d.ts +44 -0
- package/dist/commands/seed/types.js +2 -0
- package/dist/commands/seed/types.js.map +1 -0
- package/dist/commands/service/chatflows.d.ts +3 -0
- package/dist/commands/service/chatflows.js +30 -0
- package/dist/commands/service/chatflows.js.map +1 -0
- package/dist/commands/service/index.d.ts +3 -0
- package/dist/commands/service/index.js +25 -0
- package/dist/commands/service/index.js.map +1 -0
- package/dist/commands/service/knowledge-base.d.ts +3 -0
- package/dist/commands/service/knowledge-base.js +19 -0
- package/dist/commands/service/knowledge-base.js.map +1 -0
- package/dist/commands/service/pipelines.d.ts +3 -0
- package/dist/commands/service/pipelines.js +36 -0
- package/dist/commands/service/pipelines.js.map +1 -0
- package/dist/commands/settings/index.d.ts +3 -0
- package/dist/commands/settings/index.js +149 -0
- package/dist/commands/settings/index.js.map +1 -0
- package/dist/commands/site-search/index.d.ts +3 -0
- package/dist/commands/site-search/index.js +36 -0
- package/dist/commands/site-search/index.js.map +1 -0
- package/dist/commands/timeline/index.d.ts +3 -0
- package/dist/commands/timeline/index.js +32 -0
- package/dist/commands/timeline/index.js.map +1 -0
- package/dist/commands/webhooks/index.d.ts +3 -0
- package/dist/commands/webhooks/index.js +41 -0
- package/dist/commands/webhooks/index.js.map +1 -0
- package/dist/commands/workflows/index.d.ts +3 -0
- package/dist/commands/workflows/index.js +13 -0
- package/dist/commands/workflows/index.js.map +1 -0
- package/dist/core/auth.d.ts +33 -0
- package/dist/core/auth.js +137 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/capabilities.d.ts +60 -0
- package/dist/core/capabilities.js +559 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/http.d.ts +47 -0
- package/dist/core/http.js +433 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/output.d.ts +23 -0
- package/dist/core/output.js +197 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/permissions.d.ts +9 -0
- package/dist/core/permissions.js +27 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/plugins.d.ts +42 -0
- package/dist/core/plugins.js +94 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/policy.d.ts +2 -0
- package/dist/core/policy.js +38 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/schema-cache.d.ts +56 -0
- package/dist/core/schema-cache.js +338 -0
- package/dist/core/schema-cache.js.map +1 -0
- package/dist/core/schemas.d.ts +96 -0
- package/dist/core/schemas.js +104 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/urls.d.ts +50 -0
- package/dist/core/urls.js +122 -0
- package/dist/core/urls.js.map +1 -0
- package/dist/core/vault.d.ts +37 -0
- package/dist/core/vault.js +143 -0
- package/dist/core/vault.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.js +680 -0
- package/dist/mcp/server.js.map +1 -0
- 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,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,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>;
|