conduyt 1.4.0 → 1.5.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/README.md +2 -0
- package/dist/index.js +30 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -37,6 +37,8 @@ conduyt deals list --pipeline <id> # list deals
|
|
|
37
37
|
conduyt pipelines # list pipelines and stages
|
|
38
38
|
conduyt search "acme corp" # search across the CRM
|
|
39
39
|
conduyt insights summary # run an AI insight query
|
|
40
|
+
conduyt privacy export <id> # GDPR data-portability export (owner/admin)
|
|
41
|
+
conduyt privacy forget <id> --confirm FORGET # GDPR erasure — IRREVERSIBLE, owner only
|
|
40
42
|
conduyt api GET /api/v1/companies # raw authenticated request (escape hatch)
|
|
41
43
|
conduyt config show # show resolved config (key masked)
|
|
42
44
|
```
|
package/dist/index.js
CHANGED
|
@@ -1480,6 +1480,36 @@ dnc
|
|
|
1480
1480
|
assertUuid(id, "dnc id");
|
|
1481
1481
|
return client.del(`/api/v1/dnc/${encodeURIComponent(id)}`);
|
|
1482
1482
|
}));
|
|
1483
|
+
// ---- privacy (GDPR) ----
|
|
1484
|
+
const privacy = program
|
|
1485
|
+
.command("privacy")
|
|
1486
|
+
.description("GDPR data export and right-to-be-forgotten erasure");
|
|
1487
|
+
privacy
|
|
1488
|
+
.command("export <id>")
|
|
1489
|
+
.description("Export a contact's full portable data as JSON (GDPR data portability). Owner/admin key.")
|
|
1490
|
+
.action(run(async (client, id) => {
|
|
1491
|
+
assertUuid(id, "contact id");
|
|
1492
|
+
return client.get(`/api/v1/contacts/${encodeURIComponent(id)}/gdpr-export`);
|
|
1493
|
+
}));
|
|
1494
|
+
privacy
|
|
1495
|
+
.command("forget <id>")
|
|
1496
|
+
.description("IRREVERSIBLE GDPR right-to-be-forgotten erasure — permanently anonymizes the contact and erases their personal data everywhere it appears (messages, notes, deals, files, automations, exports) across the whole account. Suppression tombstones are kept. THERE IS NO UNDO. Owner key. Requires --confirm FORGET.")
|
|
1497
|
+
// Require an explicit VALUE (--confirm FORGET), not a bare boolean flag: a
|
|
1498
|
+
// boolean --confirm would treat `--confirm false` as true (leaving "false" as
|
|
1499
|
+
// an ignored extra arg) and erase anyway — a real automation footgun for an
|
|
1500
|
+
// irreversible command. Reject excess args so that stray token can't slip by.
|
|
1501
|
+
.allowExcessArguments(false)
|
|
1502
|
+
.option("--confirm <word>", "required — pass exactly FORGET to authorize the irreversible erasure")
|
|
1503
|
+
.action(run(async (client, id, opts) => {
|
|
1504
|
+
assertUuid(id, "contact id");
|
|
1505
|
+
if (opts.confirm !== "FORGET") {
|
|
1506
|
+
fail("Refusing to erase: pass --confirm FORGET to authorize this irreversible erasure. It permanently anonymizes the contact and erases their personal data everywhere — there is no undo.");
|
|
1507
|
+
}
|
|
1508
|
+
// The API demands { confirm: "FORGET" }; the CLI mirrors that literal so
|
|
1509
|
+
// the destructive intent is explicit at both layers. A 409 is retryable
|
|
1510
|
+
// (concurrent merge / in-flight automation).
|
|
1511
|
+
return client.post(`/api/v1/contacts/${encodeURIComponent(id)}/gdpr-forget`, { confirm: "FORGET" });
|
|
1512
|
+
}));
|
|
1483
1513
|
// ---- ai ----
|
|
1484
1514
|
const ai = program.command("ai").description("AI assistant and insight endpoints");
|
|
1485
1515
|
ai
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "conduyt",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Command-line interface for Conduyt CRM
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Command-line interface for Conduyt CRM \u2014 manage contacts, deals, pipelines, and run insight queries from your terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"typecheck": "tsc --noEmit",
|
|
20
20
|
"start": "tsx src/index.ts",
|
|
21
|
-
"prepublishOnly": "npm run build"
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"test": "node --import tsx --test src/*.test.ts"
|
|
22
23
|
},
|
|
23
24
|
"keywords": [
|
|
24
25
|
"conduyt",
|