@sendly/cli 3.12.3 → 3.13.1
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/commands/campaigns/cancel.d.ts +13 -0
- package/dist/commands/campaigns/cancel.js +34 -0
- package/dist/commands/campaigns/clone.d.ts +14 -0
- package/dist/commands/campaigns/clone.js +47 -0
- package/dist/commands/campaigns/create.d.ts +14 -0
- package/dist/commands/campaigns/create.js +64 -0
- package/dist/commands/campaigns/delete.d.ts +14 -0
- package/dist/commands/campaigns/delete.js +63 -0
- package/dist/commands/campaigns/get.d.ts +13 -0
- package/dist/commands/campaigns/get.js +101 -0
- package/dist/commands/campaigns/list.d.ts +13 -0
- package/dist/commands/campaigns/list.js +115 -0
- package/dist/commands/campaigns/preview.d.ts +13 -0
- package/dist/commands/campaigns/preview.js +71 -0
- package/dist/commands/campaigns/schedule.d.ts +15 -0
- package/dist/commands/campaigns/schedule.js +61 -0
- package/dist/commands/campaigns/send.d.ts +14 -0
- package/dist/commands/campaigns/send.js +96 -0
- package/dist/commands/campaigns/update.d.ts +17 -0
- package/dist/commands/campaigns/update.js +66 -0
- package/dist/commands/contacts/create.d.ts +13 -0
- package/dist/commands/contacts/create.js +48 -0
- package/dist/commands/contacts/delete.d.ts +14 -0
- package/dist/commands/contacts/delete.js +52 -0
- package/dist/commands/contacts/get.d.ts +13 -0
- package/dist/commands/contacts/get.js +51 -0
- package/dist/commands/contacts/import.d.ts +14 -0
- package/dist/commands/contacts/import.js +132 -0
- package/dist/commands/contacts/list.d.ts +14 -0
- package/dist/commands/contacts/list.js +101 -0
- package/dist/commands/contacts/lists/add.d.ts +14 -0
- package/dist/commands/contacts/lists/add.js +40 -0
- package/dist/commands/contacts/lists/create.d.ts +12 -0
- package/dist/commands/contacts/lists/create.js +40 -0
- package/dist/commands/contacts/lists/delete.d.ts +14 -0
- package/dist/commands/contacts/lists/delete.js +52 -0
- package/dist/commands/contacts/lists/get.d.ts +13 -0
- package/dist/commands/contacts/lists/get.js +63 -0
- package/dist/commands/contacts/lists/index.d.ts +10 -0
- package/dist/commands/contacts/lists/index.js +68 -0
- package/dist/commands/contacts/lists/remove.d.ts +14 -0
- package/dist/commands/contacts/lists/remove.js +36 -0
- package/dist/commands/contacts/lists/update.d.ts +15 -0
- package/dist/commands/contacts/lists/update.js +51 -0
- package/dist/commands/contacts/update.d.ts +15 -0
- package/dist/commands/contacts/update.js +52 -0
- package/dist/commands/keys/get.d.ts +13 -0
- package/dist/commands/keys/get.js +53 -0
- package/dist/commands/keys/rename.d.ts +14 -0
- package/dist/commands/keys/rename.js +53 -0
- package/dist/commands/keys/rotate.d.ts +15 -0
- package/dist/commands/keys/rotate.js +82 -0
- package/dist/commands/keys/usage.d.ts +13 -0
- package/dist/commands/keys/usage.js +102 -0
- package/dist/commands/status.js +3 -3
- package/dist/commands/templates/clone.d.ts +14 -0
- package/dist/commands/templates/clone.js +45 -0
- package/dist/commands/verify/list.d.ts +3 -0
- package/dist/commands/verify/list.js +31 -5
- package/dist/lib/api-client.d.ts +9 -2
- package/dist/lib/api-client.js +31 -7
- package/dist/lib/base-command.js +31 -4
- package/dist/lib/output.d.ts +4 -2
- package/dist/lib/output.js +19 -6
- package/oclif.manifest.json +2264 -723
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class ContactsImport extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
file: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
list: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
4
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
5
|
+
import { json, success, colors, isJsonMode, keyValue, warn, } from "../../lib/output.js";
|
|
6
|
+
function normalizePhone(raw) {
|
|
7
|
+
let phone = raw.replace(/[\s\-\(\)\.\+]/g, "");
|
|
8
|
+
if (/^\d{10}$/.test(phone)) {
|
|
9
|
+
phone = "1" + phone;
|
|
10
|
+
}
|
|
11
|
+
if (/^\d{11}$/.test(phone) && phone.startsWith("1")) {
|
|
12
|
+
return "+" + phone;
|
|
13
|
+
}
|
|
14
|
+
if (/^\d{7,15}$/.test(phone)) {
|
|
15
|
+
return "+" + phone;
|
|
16
|
+
}
|
|
17
|
+
if (raw.startsWith("+")) {
|
|
18
|
+
return "+" + phone;
|
|
19
|
+
}
|
|
20
|
+
return raw.trim();
|
|
21
|
+
}
|
|
22
|
+
function parseCsv(content) {
|
|
23
|
+
const lines = content.split(/\r?\n/).filter((l) => l.trim());
|
|
24
|
+
if (lines.length < 2)
|
|
25
|
+
return [];
|
|
26
|
+
const headers = lines[0].split(",").map((h) => h.trim().toLowerCase());
|
|
27
|
+
const rows = [];
|
|
28
|
+
for (let i = 1; i < lines.length; i++) {
|
|
29
|
+
const values = lines[i].split(",").map((v) => v.trim());
|
|
30
|
+
const row = {};
|
|
31
|
+
for (let j = 0; j < headers.length; j++) {
|
|
32
|
+
row[headers[j]] = values[j] || "";
|
|
33
|
+
}
|
|
34
|
+
rows.push(row);
|
|
35
|
+
}
|
|
36
|
+
return rows;
|
|
37
|
+
}
|
|
38
|
+
function detectPhoneColumn(headers) {
|
|
39
|
+
const candidates = [
|
|
40
|
+
"phone",
|
|
41
|
+
"phonenumber",
|
|
42
|
+
"phone_number",
|
|
43
|
+
"to",
|
|
44
|
+
"number",
|
|
45
|
+
"mobile",
|
|
46
|
+
"cell",
|
|
47
|
+
];
|
|
48
|
+
for (const h of headers) {
|
|
49
|
+
if (candidates.includes(h.toLowerCase()))
|
|
50
|
+
return h;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
export default class ContactsImport extends AuthenticatedCommand {
|
|
55
|
+
static description = "Import contacts from a CSV file";
|
|
56
|
+
static examples = [
|
|
57
|
+
"<%= config.bin %> contacts import contacts.csv",
|
|
58
|
+
"<%= config.bin %> contacts import contacts.csv --list lst_xxx",
|
|
59
|
+
"<%= config.bin %> contacts import contacts.csv --list lst_xxx --json",
|
|
60
|
+
];
|
|
61
|
+
static args = {
|
|
62
|
+
file: Args.string({
|
|
63
|
+
description: "Path to CSV file (columns: phone, name, email)",
|
|
64
|
+
required: true,
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
static flags = {
|
|
68
|
+
...AuthenticatedCommand.baseFlags,
|
|
69
|
+
list: Flags.string({
|
|
70
|
+
char: "l",
|
|
71
|
+
description: "Contact list ID to add imported contacts to",
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
async run() {
|
|
75
|
+
const { args, flags } = await this.parse(ContactsImport);
|
|
76
|
+
let content;
|
|
77
|
+
try {
|
|
78
|
+
content = readFileSync(args.file, "utf-8");
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
this.error(`Cannot read file: ${args.file}`);
|
|
82
|
+
}
|
|
83
|
+
const rows = parseCsv(content);
|
|
84
|
+
if (rows.length === 0) {
|
|
85
|
+
this.error("CSV file is empty or has no data rows");
|
|
86
|
+
}
|
|
87
|
+
const headers = Object.keys(rows[0]);
|
|
88
|
+
const phoneCol = detectPhoneColumn(headers);
|
|
89
|
+
if (!phoneCol) {
|
|
90
|
+
this.error(`No phone column found. Expected one of: phone, phoneNumber, to, number, mobile`);
|
|
91
|
+
}
|
|
92
|
+
const contacts = rows.map((row) => ({
|
|
93
|
+
phone: normalizePhone(row[phoneCol] || ""),
|
|
94
|
+
name: row["name"] || row["fullname"] || row["full_name"] || undefined,
|
|
95
|
+
email: row["email"] || row["e-mail"] || undefined,
|
|
96
|
+
}));
|
|
97
|
+
if (!isJsonMode()) {
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(colors.dim(`Importing ${contacts.length} contacts from ${args.file}`));
|
|
100
|
+
if (flags.list) {
|
|
101
|
+
console.log(colors.dim(`Adding to list: ${flags.list}`));
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
}
|
|
105
|
+
const result = await apiClient.post("/api/v1/contacts/import", {
|
|
106
|
+
contacts,
|
|
107
|
+
listId: flags.list,
|
|
108
|
+
});
|
|
109
|
+
if (isJsonMode()) {
|
|
110
|
+
json(result);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
success(`Import complete`);
|
|
114
|
+
console.log();
|
|
115
|
+
keyValue([
|
|
116
|
+
["Imported", colors.success(String(result.imported))],
|
|
117
|
+
["Skipped (duplicates)", String(result.skippedDuplicates)],
|
|
118
|
+
["Errors", result.totalErrors > 0 ? colors.error(String(result.totalErrors)) : "0"],
|
|
119
|
+
]);
|
|
120
|
+
if (result.totalErrors > 0 && result.errors.length > 0) {
|
|
121
|
+
console.log();
|
|
122
|
+
warn(`${result.totalErrors} contacts had errors:`);
|
|
123
|
+
for (const err of result.errors.slice(0, 10)) {
|
|
124
|
+
console.log(colors.dim(` Row ${err.index + 1}: ${err.phone || "(empty)"} - ${err.error}`));
|
|
125
|
+
}
|
|
126
|
+
if (result.totalErrors > 10) {
|
|
127
|
+
console.log(colors.dim(` ... and ${result.totalErrors - 10} more`));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxxQkFBcUIsQ0FBQztBQVM3QixTQUFTLGNBQWMsQ0FBQyxHQUFXO0lBQ2pDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFD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LENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLHVCQUF1QixDQUFDLENBQUM7WUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFTLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQy9FLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQ3hELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAganNvbixcbiAgc3VjY2VzcyxcbiAgY29sb3JzLFxuICBpc0pzb25Nb2RlLFxuICBrZXlWYWx1ZSxcbiAgd2Fybixcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEltcG9ydFJlc3BvbnNlIHtcbiAgaW1wb3J0ZWQ6IG51bWJlcjtcbiAgc2tpcHBlZER1cGxpY2F0ZXM6IG51bWJlcjtcbiAgZXJyb3JzOiBBcnJheTx7IGluZGV4OiBudW1iZXI7IHBob25lOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfT47XG4gIHRvdGFsRXJyb3JzOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBob25lKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHBob25lID0gcmF3LnJlcGxhY2UoL1tcXHNcXC1cXChcXClcXC5cXCtdL2csIFwiXCIpO1xuICBpZiAoL15cXGR7MTB9JC8udGVzdChwaG9uZSkpIHtcbiAgICBwaG9uZSA9IFwiMVwiICsgcGhvbmU7XG4gIH1cbiAgaWYgKC9eXFxkezExfSQvLnRlc3QocGhvbmUpICYmIHBob25lLnN0YXJ0c1dpdGgoXCIxXCIpKSB7XG4gICAgcmV0dXJuIFwiK1wiICsgcGhvbmU7XG4gIH1cbiAgaWYgKC9eXFxkezcsMTV9JC8udGVzdChwaG9uZSkpIHtcbiAgICByZXR1cm4gXCIrXCIgKyBwaG9uZTtcbiAgfVxuICBpZiAocmF3LnN0YXJ0c1dpdGgoXCIrXCIpKSB7XG4gICAgcmV0dXJuIFwiK1wiICsgcGhvbmU7XG4gIH1cbiAgcmV0dXJuIHJhdy50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ3N2KGNvbnRlbnQ6IHN0cmluZyk6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKChsKSA9PiBsLnRyaW0oKSk7XG4gIGlmIChsaW5lcy5sZW5ndGggPCAyKSByZXR1cm4gW107XG5cbiAgY29uc3QgaGVhZGVycyA9IGxpbmVzWzBdLnNwbGl0KFwiLFwiKS5tYXAoKGgpID0+IGgudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICBjb25zdCByb3dzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBsaW5lc1tpXS5zcGxpdChcIixcIikubWFwKCh2KSA9PiB2LnRyaW0oKSk7XG4gICAgY29uc3Qgcm93OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWFkZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICByb3dbaGVhZGVyc1tqXV0gPSB2YWx1ZXNbal0gfHwgXCJcIjtcbiAgICB9XG4gICAgcm93cy5wdXNoKHJvdyk7XG4gIH1cblxuICByZXR1cm4gcm93cztcbn1cblxuZnVuY3Rpb24gZGV0ZWN0UGhvbmVDb2x1bW4oaGVhZGVyczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBcInBob25lXCIsXG4gICAgXCJwaG9uZW51bWJlclwiLFxuICAgIFwicGhvbmVfbnVtYmVyXCIsXG4gICAgXCJ0b1wiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJtb2JpbGVcIixcbiAgICBcImNlbGxcIixcbiAgXTtcbiAgZm9yIChjb25zdCBoIG9mIGhlYWRlcnMpIHtcbiAgICBpZiAoY2FuZGlkYXRlcy5pbmNsdWRlcyhoLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gaDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFjdHNJbXBvcnQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiSW1wb3J0IGNvbnRhY3RzIGZyb20gYSBDU1YgZmlsZVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGltcG9ydCBjb250YWN0cy5jc3ZcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGltcG9ydCBjb250YWN0cy5jc3YgLS1saXN0IGxzdF94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGltcG9ydCBjb250YWN0cy5jc3YgLS1saXN0IGxzdF94eHggLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgZmlsZTogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiUGF0aCB0byBDU1YgZmlsZSAoY29sdW1uczogcGhvbmUsIG5hbWUsIGVtYWlsKVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBsaXN0OiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJsXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDb250YWN0IGxpc3QgSUQgdG8gYWRkIGltcG9ydGVkIGNvbnRhY3RzIHRvXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ29udGFjdHNJbXBvcnQpO1xuXG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlYWRGaWxlU3luYyhhcmdzLmZpbGUsIFwidXRmLThcIik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmVycm9yKGBDYW5ub3QgcmVhZCBmaWxlOiAke2FyZ3MuZmlsZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gcGFyc2VDc3YoY29udGVudCk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmVycm9yKFwiQ1NWIGZpbGUgaXMgZW1wdHkgb3IgaGFzIG5vIGRhdGEgcm93c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMocm93c1swXSk7XG4gICAgY29uc3QgcGhvbmVDb2wgPSBkZXRlY3RQaG9uZUNvbHVtbihoZWFkZXJzKTtcbiAgICBpZiAoIXBob25lQ29sKSB7XG4gICAgICB0aGlzLmVycm9yKFxuICAgICAgICBgTm8gcGhvbmUgY29sdW1uIGZvdW5kLiBFeHBlY3RlZCBvbmUgb2Y6IHBob25lLCBwaG9uZU51bWJlciwgdG8sIG51bWJlciwgbW9iaWxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFjdHMgPSByb3dzLm1hcCgocm93KSA9PiAoe1xuICAgICAgcGhvbmU6IG5vcm1hbGl6ZVBob25lKHJvd1twaG9uZUNvbF0gfHwgXCJcIiksXG4gICAgICBuYW1lOiByb3dbXCJuYW1lXCJdIHx8IHJvd1tcImZ1bGxuYW1lXCJdIHx8IHJvd1tcImZ1bGxfbmFtZVwiXSB8fCB1bmRlZmluZWQsXG4gICAgICBlbWFpbDogcm93W1wiZW1haWxcIl0gfHwgcm93W1wiZS1tYWlsXCJdIHx8IHVuZGVmaW5lZCxcbiAgICB9KSk7XG5cbiAgICBpZiAoIWlzSnNvbk1vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKGBJbXBvcnRpbmcgJHtjb250YWN0cy5sZW5ndGh9IGNvbnRhY3RzIGZyb20gJHthcmdzLmZpbGV9YCksXG4gICAgICApO1xuICAgICAgaWYgKGZsYWdzLmxpc3QpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgQWRkaW5nIHRvIGxpc3Q6ICR7ZmxhZ3MubGlzdH1gKSk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PEltcG9ydFJlc3BvbnNlPihcbiAgICAgIFwiL2FwaS92MS9jb250YWN0cy9pbXBvcnRcIixcbiAgICAgIHtcbiAgICAgICAgY29udGFjdHMsXG4gICAgICAgIGxpc3RJZDogZmxhZ3MubGlzdCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKGBJbXBvcnQgY29tcGxldGVgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAga2V5VmFsdWUoW1xuICAgICAgW1wiSW1wb3J0ZWRcIiwgY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3VsdC5pbXBvcnRlZCkpXSxcbiAgICAgIFtcIlNraXBwZWQgKGR1cGxpY2F0ZXMpXCIsIFN0cmluZyhyZXN1bHQuc2tpcHBlZER1cGxpY2F0ZXMpXSxcbiAgICAgIFtcIkVycm9yc1wiLCByZXN1bHQudG90YWxFcnJvcnMgPiAwID8gY29sb3JzLmVycm9yKFN0cmluZyhyZXN1bHQudG90YWxFcnJvcnMpKSA6IFwiMFwiXSxcbiAgICBdKTtcblxuICAgIGlmIChyZXN1bHQudG90YWxFcnJvcnMgPiAwICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIHdhcm4oYCR7cmVzdWx0LnRvdGFsRXJyb3JzfSBjb250YWN0cyBoYWQgZXJyb3JzOmApO1xuICAgICAgZm9yIChjb25zdCBlcnIgb2YgcmVzdWx0LmVycm9ycy5zbGljZSgwLCAxMCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICBSb3cgJHtlcnIuaW5kZXggKyAxfTogJHtlcnIucGhvbmUgfHwgXCIoZW1wdHkpXCJ9IC0gJHtlcnIuZXJyb3J9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0LnRvdGFsRXJyb3JzID4gMTApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICAuLi4gYW5kICR7cmVzdWx0LnRvdGFsRXJyb3JzIC0gMTB9IG1vcmVgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class ContactsList extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
limit: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
offset: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
search: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
list: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { table, json, info, formatRelativeTime, colors, isJsonMode, } from "../../lib/output.js";
|
|
5
|
+
export default class ContactsList extends AuthenticatedCommand {
|
|
6
|
+
static description = "List contacts";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> contacts list",
|
|
9
|
+
"<%= config.bin %> contacts list --search john",
|
|
10
|
+
"<%= config.bin %> contacts list --list lst_xxx",
|
|
11
|
+
"<%= config.bin %> contacts list --limit 50",
|
|
12
|
+
"<%= config.bin %> contacts list --json",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...AuthenticatedCommand.baseFlags,
|
|
16
|
+
limit: Flags.integer({
|
|
17
|
+
char: "l",
|
|
18
|
+
description: "Number of contacts to show",
|
|
19
|
+
default: 50,
|
|
20
|
+
}),
|
|
21
|
+
offset: Flags.integer({
|
|
22
|
+
description: "Offset for pagination",
|
|
23
|
+
default: 0,
|
|
24
|
+
}),
|
|
25
|
+
search: Flags.string({
|
|
26
|
+
char: "s",
|
|
27
|
+
description: "Search by name, phone, or email",
|
|
28
|
+
}),
|
|
29
|
+
list: Flags.string({
|
|
30
|
+
description: "Filter by contact list ID",
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
async run() {
|
|
34
|
+
const { flags } = await this.parse(ContactsList);
|
|
35
|
+
const response = await apiClient.get("/api/v1/contacts", {
|
|
36
|
+
limit: flags.limit,
|
|
37
|
+
offset: flags.offset,
|
|
38
|
+
...(flags.search && { search: flags.search }),
|
|
39
|
+
...(flags.list && { list_id: flags.list }),
|
|
40
|
+
});
|
|
41
|
+
if (isJsonMode()) {
|
|
42
|
+
json(response);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (response.contacts.length === 0) {
|
|
46
|
+
info("No contacts found");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
console.log();
|
|
50
|
+
console.log(colors.dim(`Showing ${response.contacts.length} of ${response.total} contacts`));
|
|
51
|
+
console.log();
|
|
52
|
+
table(response.contacts, [
|
|
53
|
+
{
|
|
54
|
+
header: "ID",
|
|
55
|
+
key: "id",
|
|
56
|
+
width: 18,
|
|
57
|
+
formatter: (v) => colors.dim(String(v).slice(0, 15) + "..."),
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
header: "Phone",
|
|
61
|
+
key: "phone_number",
|
|
62
|
+
width: 16,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
header: "Name",
|
|
66
|
+
key: "name",
|
|
67
|
+
width: 20,
|
|
68
|
+
formatter: (v) => {
|
|
69
|
+
if (!v)
|
|
70
|
+
return colors.dim("-");
|
|
71
|
+
const name = String(v);
|
|
72
|
+
return name.length > 18 ? name.slice(0, 18) + "..." : name;
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
header: "Email",
|
|
77
|
+
key: "email",
|
|
78
|
+
width: 24,
|
|
79
|
+
formatter: (v) => {
|
|
80
|
+
if (!v)
|
|
81
|
+
return colors.dim("-");
|
|
82
|
+
const email = String(v);
|
|
83
|
+
return email.length > 22 ? email.slice(0, 22) + "..." : email;
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
header: "Status",
|
|
88
|
+
key: "opted_out",
|
|
89
|
+
width: 10,
|
|
90
|
+
formatter: (v) => v ? colors.error("opted-out") : colors.success("active"),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
header: "Created",
|
|
94
|
+
key: "created_at",
|
|
95
|
+
width: 12,
|
|
96
|
+
formatter: (v) => formatRelativeTime(String(v)),
|
|
97
|
+
},
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb250YWN0cy9saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLElBQUksRUFDSixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBa0I3QixNQUFNLENBQUMsT0FBTyxPQUFPLFlBQWEsU0FBUSxvQkFBb0I7SUFDNUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7SUFFckMsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixpQ0FBaUM7UUFDakMsK0NBQStDO1FBQy9DLGdEQUFnRDtRQUNoRCw0Q0FBNEM7UUFDNUMsd0NBQXdDO0tBQ3pDLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDRCQUE0QjtZQUN6QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFDRixNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNwQixXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENB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QUFDLEtBQUssQ0FBQztnQkFDaEUsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDM0U7WUFDRDtnQkFDRSxNQUFNLEVBQUUsU0FBUztnQkFDakIsR0FBRyxFQUFFLFlBQVk7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHRhYmxlLFxuICBqc29uLFxuICBpbmZvLFxuICBmb3JtYXRSZWxhdGl2ZVRpbWUsXG4gIGNvbG9ycyxcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIENvbnRhY3Qge1xuICBpZDogc3RyaW5nO1xuICBwaG9uZV9udW1iZXI6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG9wdGVkX291dD86IGJvb2xlYW47XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExpc3RDb250YWN0c1Jlc3BvbnNlIHtcbiAgY29udGFjdHM6IENvbnRhY3RbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhY3RzTGlzdCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJMaXN0IGNvbnRhY3RzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgbGlzdFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgbGlzdCAtLXNlYXJjaCBqb2huXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBsaXN0IC0tbGlzdCBsc3RfeHh4XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBsaXN0IC0tbGltaXQgNTBcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGxpc3QgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBsaW1pdDogRmxhZ3MuaW50ZWdlcih7XG4gICAgICBjaGFyOiBcImxcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk51bWJlciBvZiBjb250YWN0cyB0byBzaG93XCIsXG4gICAgICBkZWZhdWx0OiA1MCxcbiAgICB9KSxcbiAgICBvZmZzZXQ6IEZsYWdzLmludGVnZXIoe1xuICAgICAgZGVzY3JpcHRpb246IFwiT2Zmc2V0IGZvciBwYWdpbmF0aW9uXCIsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgIH0pLFxuICAgIHNlYXJjaDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwic1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiU2VhcmNoIGJ5IG5hbWUsIHBob25lLCBvciBlbWFpbFwiLFxuICAgIH0pLFxuICAgIGxpc3Q6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJGaWx0ZXIgYnkgY29udGFjdCBsaXN0IElEXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ29udGFjdHNMaXN0KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxMaXN0Q29udGFjdHNSZXNwb25zZT4oXG4gICAgICBcIi9hcGkvdjEvY29udGFjdHNcIixcbiAgICAgIHtcbiAgICAgICAgbGltaXQ6IGZsYWdzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IGZsYWdzLm9mZnNldCxcbiAgICAgICAgLi4uKGZsYWdzLnNlYXJjaCAmJiB7IHNlYXJjaDogZmxhZ3Muc2VhcmNoIH0pLFxuICAgICAgICAuLi4oZmxhZ3MubGlzdCAmJiB7IGxpc3RfaWQ6IGZsYWdzLmxpc3QgfSksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuY29udGFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvKFwiTm8gY29udGFjdHMgZm91bmRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNvbG9ycy5kaW0oYFNob3dpbmcgJHtyZXNwb25zZS5jb250YWN0cy5sZW5ndGh9IG9mICR7cmVzcG9uc2UudG90YWx9IGNvbnRhY3RzYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgdGFibGUocmVzcG9uc2UuY29udGFjdHMsIFtcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIklEXCIsXG4gICAgICAgIGtleTogXCJpZFwiLFxuICAgICAgICB3aWR0aDogMTgsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+IGNvbG9ycy5kaW0oU3RyaW5nKHYpLnNsaWNlKDAsIDE1KSArIFwiLi4uXCIpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIlBob25lXCIsXG4gICAgICAgIGtleTogXCJwaG9uZV9udW1iZXJcIixcbiAgICAgICAgd2lkdGg6IDE2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIk5hbWVcIixcbiAgICAgICAga2V5OiBcIm5hbWVcIixcbiAgICAgICAgd2lkdGg6IDIwLFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PiB7XG4gICAgICAgICAgaWYgKCF2KSByZXR1cm4gY29sb3JzLmRpbShcIi1cIik7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IFN0cmluZyh2KTtcbiAgICAgICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAxOCA/IG5hbWUuc2xpY2UoMCwgMTgpICsgXCIuLi5cIiA6IG5hbWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiRW1haWxcIixcbiAgICAgICAga2V5OiBcImVtYWlsXCIsXG4gICAgICAgIHdpZHRoOiAyNCxcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4ge1xuICAgICAgICAgIGlmICghdikgcmV0dXJuIGNvbG9ycy5kaW0oXCItXCIpO1xuICAgICAgICAgIGNvbnN0IGVtYWlsID0gU3RyaW5nKHYpO1xuICAgICAgICAgIHJldHVybiBlbWFpbC5sZW5ndGggPiAyMiA/IGVtYWlsLnNsaWNlKDAsIDIyKSArIFwiLi4uXCIgOiBlbWFpbDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogXCJTdGF0dXNcIixcbiAgICAgICAga2V5OiBcIm9wdGVkX291dFwiLFxuICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+IHYgPyBjb2xvcnMuZXJyb3IoXCJvcHRlZC1vdXRcIikgOiBjb2xvcnMuc3VjY2VzcyhcImFjdGl2ZVwiKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogXCJDcmVhdGVkXCIsXG4gICAgICAgIGtleTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4gZm9ybWF0UmVsYXRpdmVUaW1lKFN0cmluZyh2KSksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class ContactsListsAdd extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
listId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
contacts: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[], import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, json, isJsonMode } from "../../../lib/output.js";
|
|
5
|
+
export default class ContactsListsAdd extends AuthenticatedCommand {
|
|
6
|
+
static description = "Add contacts to a list";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> contacts lists add lst_xxx --contacts cnt_abc,cnt_def",
|
|
9
|
+
"<%= config.bin %> contacts lists add lst_xxx --contacts cnt_abc --contacts cnt_def",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
listId: Args.string({
|
|
13
|
+
description: "Contact list ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
contacts: Flags.string({
|
|
20
|
+
char: "c",
|
|
21
|
+
description: "Contact IDs to add (comma-separated or multiple flags)",
|
|
22
|
+
required: true,
|
|
23
|
+
multiple: true,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(ContactsListsAdd);
|
|
28
|
+
const contactIds = flags.contacts.flatMap((c) => c.split(",").map((id) => id.trim()));
|
|
29
|
+
const response = await apiClient.post(`/api/v1/contact-lists/${args.listId}/contacts`, { contact_ids: contactIds });
|
|
30
|
+
if (isJsonMode()) {
|
|
31
|
+
json(response);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
success("Contacts added to list", {
|
|
35
|
+
"List ID": args.listId,
|
|
36
|
+
"Added Count": response.added_count,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2xpc3RzL2FkZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPbkUsTUFBTSxDQUFDLE9BQU8sT0FBTyxnQkFBaUIsU0FBUSxvQkFBb0I7SUFDaEUsTUFBTSxDQUFDLFdBQVcsR0FBRyx3QkFBd0IsQ0FBQztJQUU5QyxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLHlFQUF5RTtRQUN6RSxvRkFBb0Y7S0FDckYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3JCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLHdEQUF3RDtZQUNyRSxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM5QyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ3BDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ25DLHlCQUF5QixJQUFJLENBQUMsTUFBTSxXQUFXLEVBQy9DLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUM1QixDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLHdCQUF3QixFQUFFO1lBQ2hDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN0QixhQUFhLEVBQUUsUUFBUSxDQUFDLFdBQVc7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGpzb24sIGlzSnNvbk1vZGUgfSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgQWRkQ29udGFjdHNSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGFkZGVkX2NvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhY3RzTGlzdHNBZGQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiQWRkIGNvbnRhY3RzIHRvIGEgbGlzdFwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGxpc3RzIGFkZCBsc3RfeHh4IC0tY29udGFjdHMgY250X2FiYyxjbnRfZGVmXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBsaXN0cyBhZGQgbHN0X3h4eCAtLWNvbnRhY3RzIGNudF9hYmMgLS1jb250YWN0cyBjbnRfZGVmXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgbGlzdElkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb250YWN0IGxpc3QgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgY29udGFjdHM6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbnRhY3QgSURzIHRvIGFkZCAoY29tbWEtc2VwYXJhdGVkIG9yIG11bHRpcGxlIGZsYWdzKVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDb250YWN0c0xpc3RzQWRkKTtcblxuICAgIGNvbnN0IGNvbnRhY3RJZHMgPSBmbGFncy5jb250YWN0cy5mbGF0TWFwKChjKSA9PlxuICAgICAgYy5zcGxpdChcIixcIikubWFwKChpZCkgPT4gaWQudHJpbSgpKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxBZGRDb250YWN0c1Jlc3BvbnNlPihcbiAgICAgIGAvYXBpL3YxL2NvbnRhY3QtbGlzdHMvJHthcmdzLmxpc3RJZH0vY29udGFjdHNgLFxuICAgICAgeyBjb250YWN0X2lkczogY29udGFjdElkcyB9LFxuICAgICk7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKFwiQ29udGFjdHMgYWRkZWQgdG8gbGlzdFwiLCB7XG4gICAgICBcIkxpc3QgSURcIjogYXJncy5saXN0SWQsXG4gICAgICBcIkFkZGVkIENvdW50XCI6IHJlc3BvbnNlLmFkZGVkX2NvdW50LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class ContactsListsCreate extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
description: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
9
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, json, colors, isJsonMode } from "../../../lib/output.js";
|
|
5
|
+
export default class ContactsListsCreate extends AuthenticatedCommand {
|
|
6
|
+
static description = "Create a new contact list";
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> contacts lists create --name "VIP Customers"',
|
|
9
|
+
'<%= config.bin %> contacts lists create --name "Newsletter" --description "Weekly newsletter subscribers"',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...AuthenticatedCommand.baseFlags,
|
|
13
|
+
name: Flags.string({
|
|
14
|
+
char: "n",
|
|
15
|
+
description: "List name",
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
description: Flags.string({
|
|
19
|
+
char: "d",
|
|
20
|
+
description: "List description",
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { flags } = await this.parse(ContactsListsCreate);
|
|
25
|
+
const list = await apiClient.post("/api/v1/contact-lists", {
|
|
26
|
+
name: flags.name,
|
|
27
|
+
description: flags.description,
|
|
28
|
+
});
|
|
29
|
+
if (isJsonMode()) {
|
|
30
|
+
json(list);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
success("Contact list created", {
|
|
34
|
+
ID: list.id,
|
|
35
|
+
Name: list.name,
|
|
36
|
+
Description: list.description || colors.dim("(none)"),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2xpc3RzL2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFVM0UsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQkFBb0IsU0FBUSxvQkFBb0I7SUFDbkUsTUFBTSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztJQUVqRCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLGdFQUFnRTtRQUNoRSwyR0FBMkc7S0FDNUcsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsV0FBVztZQUN4QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSxrQkFBa0I7U0FDaEMsQ0FBQztLQUNILENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQWMsdUJBQXVCLEVBQUU7WUFDdEUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ1gsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsc0JBQXNCLEVBQUU7WUFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDdEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGpzb24sIGNvbG9ycywgaXNKc29uTW9kZSB9IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRhY3RfY291bnQ6IG51bWJlcjtcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWN0c0xpc3RzQ3JlYXRlIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkNyZWF0ZSBhIG5ldyBjb250YWN0IGxpc3RcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJzwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGxpc3RzIGNyZWF0ZSAtLW5hbWUgXCJWSVAgQ3VzdG9tZXJzXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBsaXN0cyBjcmVhdGUgLS1uYW1lIFwiTmV3c2xldHRlclwiIC0tZGVzY3JpcHRpb24gXCJXZWVrbHkgbmV3c2xldHRlciBzdWJzY3JpYmVyc1wiJyxcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIG5hbWU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3QgbmFtZVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAgZGVzY3JpcHRpb246IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3QgZGVzY3JpcHRpb25cIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDb250YWN0c0xpc3RzQ3JlYXRlKTtcblxuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxDb250YWN0TGlzdD4oXCIvYXBpL3YxL2NvbnRhY3QtbGlzdHNcIiwge1xuICAgICAgbmFtZTogZmxhZ3MubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmbGFncy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24obGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIkNvbnRhY3QgbGlzdCBjcmVhdGVkXCIsIHtcbiAgICAgIElEOiBsaXN0LmlkLFxuICAgICAgTmFtZTogbGlzdC5uYW1lLFxuICAgICAgRGVzY3JpcHRpb246IGxpc3QuZGVzY3JpcHRpb24gfHwgY29sb3JzLmRpbShcIihub25lKVwiKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class ContactsListsDelete extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
yes: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, isJsonMode } from "../../../lib/output.js";
|
|
5
|
+
import inquirer from "inquirer";
|
|
6
|
+
export default class ContactsListsDelete extends AuthenticatedCommand {
|
|
7
|
+
static description = "Delete a contact list (does not delete the contacts)";
|
|
8
|
+
static examples = [
|
|
9
|
+
"<%= config.bin %> contacts lists delete lst_xxx",
|
|
10
|
+
"<%= config.bin %> contacts lists delete lst_xxx --yes",
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
id: Args.string({
|
|
14
|
+
description: "Contact list ID to delete",
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
...AuthenticatedCommand.baseFlags,
|
|
20
|
+
yes: Flags.boolean({
|
|
21
|
+
char: "y",
|
|
22
|
+
description: "Skip confirmation prompt",
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(ContactsListsDelete);
|
|
28
|
+
if (!flags.yes) {
|
|
29
|
+
const { confirm } = await inquirer.prompt([
|
|
30
|
+
{
|
|
31
|
+
type: "confirm",
|
|
32
|
+
name: "confirm",
|
|
33
|
+
message: `Are you sure you want to delete list ${colors.code(args.id)}? Contacts will NOT be deleted.`,
|
|
34
|
+
default: false,
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
if (!confirm) {
|
|
38
|
+
error("Deletion cancelled");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
await apiClient.delete(`/api/v1/contact-lists/${args.id}`);
|
|
43
|
+
if (isJsonMode()) {
|
|
44
|
+
json({ success: true, deletedId: args.id });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
success("Contact list deleted", {
|
|
48
|
+
ID: args.id,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2xpc3RzL2RlbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQkFBb0IsU0FBUSxvQkFBb0I7SUFDbkUsTUFBTSxDQUFDLFdBQVcsR0FBRyxzREFBc0QsQ0FBQztJQUU1RSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLGlEQUFpRDtRQUNqRCx1REFBdUQ7S0FDeEQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSwyQkFBMkI7WUFDeEMsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hDO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLE9BQU8sRUFBRSx3Q0FBd0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlDQUFpQztvQkFDdEcsT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzVCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLHNCQUFzQixFQUFFO1lBQzlCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBlcnJvciwganNvbiwgY29sb3JzLCBpc0pzb25Nb2RlIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFjdHNMaXN0c0RlbGV0ZSBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJEZWxldGUgYSBjb250YWN0IGxpc3QgKGRvZXMgbm90IGRlbGV0ZSB0aGUgY29udGFjdHMpXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgbGlzdHMgZGVsZXRlIGxzdF94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGxpc3RzIGRlbGV0ZSBsc3RfeHh4IC0teWVzXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgaWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbnRhY3QgbGlzdCBJRCB0byBkZWxldGVcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgeWVzOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwieVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiU2tpcCBjb25maXJtYXRpb24gcHJvbXB0XCIsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDb250YWN0c0xpc3RzRGVsZXRlKTtcblxuICAgIGlmICghZmxhZ3MueWVzKSB7XG4gICAgICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgICBuYW1lOiBcImNvbmZpcm1cIixcbiAgICAgICAgICBtZXNzYWdlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBsaXN0ICR7Y29sb3JzLmNvZGUoYXJncy5pZCl9PyBDb250YWN0cyB3aWxsIE5PVCBiZSBkZWxldGVkLmAsXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgIGVycm9yKFwiRGVsZXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgYXBpQ2xpZW50LmRlbGV0ZShgL2FwaS92MS9jb250YWN0LWxpc3RzLyR7YXJncy5pZH1gKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24oeyBzdWNjZXNzOiB0cnVlLCBkZWxldGVkSWQ6IGFyZ3MuaWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIkNvbnRhY3QgbGlzdCBkZWxldGVkXCIsIHtcbiAgICAgIElEOiBhcmdzLmlkLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class ContactsListsGet extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
4
|
+
import { json, colors, isJsonMode, keyValue, table, } from "../../../lib/output.js";
|
|
5
|
+
export default class ContactsListsGet extends AuthenticatedCommand {
|
|
6
|
+
static description = "Get contact list details";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> contacts lists get lst_xxx",
|
|
9
|
+
"<%= config.bin %> contacts lists get lst_xxx --json",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Contact list ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { args } = await this.parse(ContactsListsGet);
|
|
22
|
+
const list = await apiClient.get(`/api/v1/contact-lists/${args.id}`, { includeContacts: "true", limit: "10" });
|
|
23
|
+
if (isJsonMode()) {
|
|
24
|
+
json(list);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log();
|
|
28
|
+
console.log(colors.bold(list.name));
|
|
29
|
+
console.log();
|
|
30
|
+
keyValue([
|
|
31
|
+
["ID", list.id],
|
|
32
|
+
["Description", list.description || colors.dim("(none)")],
|
|
33
|
+
["Contacts", String(list.contact_count)],
|
|
34
|
+
["Created", new Date(list.created_at).toLocaleString()],
|
|
35
|
+
["Updated", new Date(list.updated_at).toLocaleString()],
|
|
36
|
+
]);
|
|
37
|
+
if (list.contacts && list.contacts.length > 0) {
|
|
38
|
+
console.log();
|
|
39
|
+
console.log(colors.dim("Contacts:"));
|
|
40
|
+
console.log();
|
|
41
|
+
table(list.contacts, [
|
|
42
|
+
{ header: "Phone", key: "phone_number", width: 18 },
|
|
43
|
+
{
|
|
44
|
+
header: "Name",
|
|
45
|
+
key: "name",
|
|
46
|
+
width: 20,
|
|
47
|
+
formatter: (v) => String(v || colors.dim("-")),
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
header: "Email",
|
|
51
|
+
key: "email",
|
|
52
|
+
width: 25,
|
|
53
|
+
formatter: (v) => String(v || colors.dim("-")),
|
|
54
|
+
},
|
|
55
|
+
]);
|
|
56
|
+
if (list.contact_count > 10) {
|
|
57
|
+
console.log();
|
|
58
|
+
console.log(colors.dim(` Showing 10 of ${list.contact_count} contacts`));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2xpc3RzL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssR0FDTixNQUFNLHdCQUF3QixDQUFDO0FBaUJoQyxNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUNoRSxNQUFNLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDO0lBRWhELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsOENBQThDO1FBQzlDLHFEQUFxRDtLQUN0RCxDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksR0FBRztRQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2QsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUM5Qix5QkFBeUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUNsQyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUN6QyxDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNYLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVkLFFBQVEsQ0FBQztZQUNQLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkQsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hELENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFZCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbkQ7b0JBQ0UsTUFBTSxFQUFFLE1BQU07b0JBQ2QsR0FBRyxFQUFFLE1BQU07b0JBQ1gsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQy9DO2dCQUNEO29CQUNFLE1BQU0sRUFBRSxPQUFPO29CQUNmLEdBQUcsRUFBRSxPQUFPO29CQUNaLEtBQUssRUFBRSxFQUFFO29CQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQzthQUNGLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLGFBQWEsV0FBVyxDQUFDLENBQzdELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIGpzb24sXG4gIGNvbG9ycyxcbiAgaXNKc29uTW9kZSxcbiAga2V5VmFsdWUsXG4gIHRhYmxlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgQ29udGFjdExpc3REZXRhaWwge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb250YWN0X2NvdW50OiBudW1iZXI7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xuICBjb250YWN0cz86IEFycmF5PHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBob25lX251bWJlcjogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZW1haWw/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWN0c0xpc3RzR2V0IGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkdldCBjb250YWN0IGxpc3QgZGV0YWlsc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGxpc3RzIGdldCBsc3RfeHh4XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBsaXN0cyBnZXQgbHN0X3h4eCAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29udGFjdCBsaXN0IElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ29udGFjdHNMaXN0c0dldCk7XG5cbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgYXBpQ2xpZW50LmdldDxDb250YWN0TGlzdERldGFpbD4oXG4gICAgICBgL2FwaS92MS9jb250YWN0LWxpc3RzLyR7YXJncy5pZH1gLFxuICAgICAgeyBpbmNsdWRlQ29udGFjdHM6IFwidHJ1ZVwiLCBsaW1pdDogXCIxMFwiIH0sXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24obGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChsaXN0Lm5hbWUpKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAga2V5VmFsdWUoW1xuICAgICAgW1wiSURcIiwgbGlzdC5pZF0sXG4gICAgICBbXCJEZXNjcmlwdGlvblwiLCBsaXN0LmRlc2NyaXB0aW9uIHx8IGNvbG9ycy5kaW0oXCIobm9uZSlcIildLFxuICAgICAgW1wiQ29udGFjdHNcIiwgU3RyaW5nKGxpc3QuY29udGFjdF9jb3VudCldLFxuICAgICAgW1wiQ3JlYXRlZFwiLCBuZXcgRGF0ZShsaXN0LmNyZWF0ZWRfYXQpLnRvTG9jYWxlU3RyaW5nKCldLFxuICAgICAgW1wiVXBkYXRlZFwiLCBuZXcgRGF0ZShsaXN0LnVwZGF0ZWRfYXQpLnRvTG9jYWxlU3RyaW5nKCldLFxuICAgIF0pO1xuXG4gICAgaWYgKGxpc3QuY29udGFjdHMgJiYgbGlzdC5jb250YWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIkNvbnRhY3RzOlwiKSk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgICB0YWJsZShsaXN0LmNvbnRhY3RzLCBbXG4gICAgICAgIHsgaGVhZGVyOiBcIlBob25lXCIsIGtleTogXCJwaG9uZV9udW1iZXJcIiwgd2lkdGg6IDE4IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IFwiTmFtZVwiLFxuICAgICAgICAgIGtleTogXCJuYW1lXCIsXG4gICAgICAgICAgd2lkdGg6IDIwLFxuICAgICAgICAgIGZvcm1hdHRlcjogKHYpID0+IFN0cmluZyh2IHx8IGNvbG9ycy5kaW0oXCItXCIpKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcjogXCJFbWFpbFwiLFxuICAgICAgICAgIGtleTogXCJlbWFpbFwiLFxuICAgICAgICAgIHdpZHRoOiAyNSxcbiAgICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PiBTdHJpbmcodiB8fCBjb2xvcnMuZGltKFwiLVwiKSksXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgaWYgKGxpc3QuY29udGFjdF9jb3VudCA+IDEwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oYCAgU2hvd2luZyAxMCBvZiAke2xpc3QuY29udGFjdF9jb3VudH0gY29udGFjdHNgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class ContactsListsList extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|