@lead-routing/cli 0.7.1 → 0.8.0
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/dist/index.js
CHANGED
|
@@ -111,7 +111,7 @@ function bail2(value) {
|
|
|
111
111
|
}
|
|
112
112
|
throw new Error("Unexpected cancel");
|
|
113
113
|
}
|
|
114
|
-
async function collectConfig(opts = {}) {
|
|
114
|
+
async function collectConfig(opts = {}, authEmail) {
|
|
115
115
|
const crmType = opts.crmType ?? "salesforce";
|
|
116
116
|
note2(
|
|
117
117
|
"You will need:\n \u2022 Public HTTPS URLs for the web app and routing engine",
|
|
@@ -152,16 +152,22 @@ async function collectConfig(opts = {}) {
|
|
|
152
152
|
const redisPassword = generateSecret(16);
|
|
153
153
|
const managedRedis = !opts.externalRedis;
|
|
154
154
|
const redisUrl = opts.externalRedis ?? `redis://:${redisPassword}@redis:6379`;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
155
|
+
let adminEmail;
|
|
156
|
+
if (authEmail) {
|
|
157
|
+
note2(`Using ${authEmail} as admin email`, "Admin Account");
|
|
158
|
+
adminEmail = authEmail;
|
|
159
|
+
} else {
|
|
160
|
+
note2("This creates the first admin user for the web app.", "Admin Account");
|
|
161
|
+
adminEmail = await text2({
|
|
162
|
+
message: "Admin email address",
|
|
163
|
+
placeholder: "admin@acme.com",
|
|
164
|
+
validate: (v) => {
|
|
165
|
+
if (!v) return "Required";
|
|
166
|
+
if (!v.includes("@")) return "Must be a valid email";
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
if (isCancel2(adminEmail)) bail2(adminEmail);
|
|
170
|
+
}
|
|
165
171
|
const adminPassword = await password2({
|
|
166
172
|
message: "Admin password (min 8 characters)",
|
|
167
173
|
validate: (v) => {
|
|
@@ -363,9 +369,9 @@ function renderEnvWeb(c) {
|
|
|
363
369
|
...c.crmType === "hubspot" ? [
|
|
364
370
|
``,
|
|
365
371
|
`# HubSpot`,
|
|
366
|
-
`HUBSPOT_CLIENT_ID=${c.hubspotClientId ?? ""}`,
|
|
367
|
-
`HUBSPOT_CLIENT_SECRET=${c.hubspotClientSecret ?? ""}`,
|
|
368
|
-
`HUBSPOT_APP_ID=${c.hubspotAppId ?? ""}`,
|
|
372
|
+
`HUBSPOT_CLIENT_ID=${c.hubspotClientId ?? "c53f3d1c-ff03-4db7-875a-1ebe7b0f98cc"}`,
|
|
373
|
+
`HUBSPOT_CLIENT_SECRET=${c.hubspotClientSecret ?? "f95949ac-6464-40d3-bdaa-893c48749951"}`,
|
|
374
|
+
`HUBSPOT_APP_ID=${c.hubspotAppId ?? "35016223"}`,
|
|
369
375
|
`HUBSPOT_REDIRECT_URI=${c.appUrl}/api/auth/hubspot/callback`
|
|
370
376
|
] : []
|
|
371
377
|
].join("\n");
|
|
@@ -401,6 +407,7 @@ function renderEnvEngine(c) {
|
|
|
401
407
|
...c.crmType === "hubspot" ? [
|
|
402
408
|
``,
|
|
403
409
|
`# HubSpot`,
|
|
410
|
+
`HUBSPOT_CLIENT_ID=${c.hubspotClientId ?? ""}`,
|
|
404
411
|
`HUBSPOT_CLIENT_SECRET=${c.hubspotClientSecret ?? ""}`
|
|
405
412
|
] : []
|
|
406
413
|
].join("\n");
|
|
@@ -1425,7 +1432,7 @@ Install URL: ${chalk2.cyan(MANAGED_PACKAGE_INSTALL_URL)}`,
|
|
|
1425
1432
|
externalDb: options.externalDb,
|
|
1426
1433
|
externalRedis: options.externalRedis,
|
|
1427
1434
|
crmType
|
|
1428
|
-
});
|
|
1435
|
+
}, auth.customer.email);
|
|
1429
1436
|
await checkDnsResolvable(cfg.appUrl, cfg.engineUrl);
|
|
1430
1437
|
log7.step("Step 6/9 Generating config files");
|
|
1431
1438
|
const { dir } = generateFiles(cfg, sshCfg, {
|
|
@@ -1514,6 +1521,12 @@ Files created: docker-compose.yml, Caddyfile, .env.web, .env.engine, lead-routin
|
|
|
1514
1521
|
log7.step("Retrying health check...");
|
|
1515
1522
|
}
|
|
1516
1523
|
}
|
|
1524
|
+
note3(
|
|
1525
|
+
`You can log in to the web app at ${chalk2.cyan(cfg.appUrl)} with:
|
|
1526
|
+
Email: ${cfg.adminEmail}
|
|
1527
|
+
Password: (the password you set during setup)`,
|
|
1528
|
+
"Admin Login"
|
|
1529
|
+
);
|
|
1517
1530
|
try {
|
|
1518
1531
|
const envWebPath = join5(dir, ".env.web");
|
|
1519
1532
|
const envContent = readFileSync4(envWebPath, "utf-8");
|
|
@@ -140,7 +140,7 @@ model Organization {
|
|
|
140
140
|
fieldsSyncedAt DateTime?
|
|
141
141
|
plan Plan @default(FREE)
|
|
142
142
|
isActive Boolean @default(true)
|
|
143
|
-
seatsPurchased Int @default(
|
|
143
|
+
seatsPurchased Int @default(10)
|
|
144
144
|
seatsUsed Int @default(0)
|
|
145
145
|
routingQuotaUsed Int @default(0)
|
|
146
146
|
quotaResetAt DateTime @default(now())
|
package/package.json
CHANGED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
-- CreateEnum
|
|
2
|
-
CREATE TYPE "FlowStatus" AS ENUM ('DRAFT', 'ACTIVE', 'INACTIVE');
|
|
3
|
-
|
|
4
|
-
-- CreateEnum
|
|
5
|
-
CREATE TYPE "FlowNodeType" AS ENUM ('ENTRY', 'DECISION', 'BRANCH_DECISION', 'MATCH', 'ASSIGNMENT', 'UPDATE_FIELD', 'CREATE_TASK', 'FILTER', 'DEFAULT');
|
|
6
|
-
|
|
7
|
-
-- AlterTable
|
|
8
|
-
ALTER TABLE "organizations" ADD COLUMN "routingMode" JSONB;
|
|
9
|
-
|
|
10
|
-
-- AlterTable
|
|
11
|
-
ALTER TABLE "routing_logs" ADD COLUMN "flowId" TEXT,
|
|
12
|
-
ADD COLUMN "flowNodePath" JSONB;
|
|
13
|
-
|
|
14
|
-
-- CreateTable
|
|
15
|
-
CREATE TABLE "routing_flows" (
|
|
16
|
-
"id" TEXT NOT NULL,
|
|
17
|
-
"orgId" TEXT NOT NULL,
|
|
18
|
-
"objectType" "SfdcObjectType" NOT NULL,
|
|
19
|
-
"name" TEXT NOT NULL DEFAULT 'Untitled Flow',
|
|
20
|
-
"status" "FlowStatus" NOT NULL DEFAULT 'DRAFT',
|
|
21
|
-
"triggerEvent" "TriggerEvent" NOT NULL DEFAULT 'BOTH',
|
|
22
|
-
"isDryRun" BOOLEAN NOT NULL DEFAULT false,
|
|
23
|
-
"version" INTEGER NOT NULL DEFAULT 1,
|
|
24
|
-
"publishedAt" TIMESTAMP(3),
|
|
25
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
26
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
27
|
-
|
|
28
|
-
CONSTRAINT "routing_flows_pkey" PRIMARY KEY ("id")
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
-- CreateTable
|
|
32
|
-
CREATE TABLE "flow_nodes" (
|
|
33
|
-
"id" TEXT NOT NULL,
|
|
34
|
-
"flowId" TEXT NOT NULL,
|
|
35
|
-
"type" "FlowNodeType" NOT NULL,
|
|
36
|
-
"label" TEXT,
|
|
37
|
-
"positionX" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
38
|
-
"positionY" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
39
|
-
"config" JSONB,
|
|
40
|
-
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
41
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
42
|
-
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
43
|
-
|
|
44
|
-
CONSTRAINT "flow_nodes_pkey" PRIMARY KEY ("id")
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
-- CreateTable
|
|
48
|
-
CREATE TABLE "flow_edges" (
|
|
49
|
-
"id" TEXT NOT NULL,
|
|
50
|
-
"flowId" TEXT NOT NULL,
|
|
51
|
-
"fromId" TEXT NOT NULL,
|
|
52
|
-
"toId" TEXT NOT NULL,
|
|
53
|
-
"label" TEXT,
|
|
54
|
-
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
55
|
-
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
56
|
-
|
|
57
|
-
CONSTRAINT "flow_edges_pkey" PRIMARY KEY ("id")
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
-- CreateIndex
|
|
61
|
-
CREATE UNIQUE INDEX "routing_flows_orgId_objectType_key" ON "routing_flows"("orgId", "objectType");
|
|
62
|
-
|
|
63
|
-
-- AddForeignKey
|
|
64
|
-
ALTER TABLE "routing_flows" ADD CONSTRAINT "routing_flows_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
65
|
-
|
|
66
|
-
-- AddForeignKey
|
|
67
|
-
ALTER TABLE "flow_nodes" ADD CONSTRAINT "flow_nodes_flowId_fkey" FOREIGN KEY ("flowId") REFERENCES "routing_flows"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
68
|
-
|
|
69
|
-
-- AddForeignKey
|
|
70
|
-
ALTER TABLE "flow_edges" ADD CONSTRAINT "flow_edges_flowId_fkey" FOREIGN KEY ("flowId") REFERENCES "routing_flows"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
71
|
-
|
|
72
|
-
-- AddForeignKey
|
|
73
|
-
ALTER TABLE "flow_edges" ADD CONSTRAINT "flow_edges_fromId_fkey" FOREIGN KEY ("fromId") REFERENCES "flow_nodes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
74
|
-
|
|
75
|
-
-- AddForeignKey
|
|
76
|
-
ALTER TABLE "flow_edges" ADD CONSTRAINT "flow_edges_toId_fkey" FOREIGN KEY ("toId") REFERENCES "flow_nodes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|