@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,71 @@
|
|
|
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, warn } from "../../lib/output.js";
|
|
5
|
+
export default class CampaignsPreview extends AuthenticatedCommand {
|
|
6
|
+
static description = "Preview campaign cost and recipients";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> campaigns preview cmp_xxx",
|
|
9
|
+
"<%= config.bin %> campaigns preview cmp_xxx --json",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Campaign ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { args } = await this.parse(CampaignsPreview);
|
|
22
|
+
const preview = await apiClient.get(`/api/v1/campaigns/${args.id}/preview`);
|
|
23
|
+
if (isJsonMode()) {
|
|
24
|
+
json(preview);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log();
|
|
28
|
+
console.log(colors.bold("Campaign Preview"));
|
|
29
|
+
console.log();
|
|
30
|
+
keyValue([
|
|
31
|
+
["Recipients", String(preview.recipientCount)],
|
|
32
|
+
["Sendable", String(preview.sendableCount ?? preview.recipientCount)],
|
|
33
|
+
["Estimated Credits", colors.bold(String(preview.estimatedCredits))],
|
|
34
|
+
["Your Balance", String(preview.currentBalance)],
|
|
35
|
+
[
|
|
36
|
+
"Status",
|
|
37
|
+
preview.hasEnoughCredits
|
|
38
|
+
? colors.success("Ready to send")
|
|
39
|
+
: colors.error("Insufficient credits"),
|
|
40
|
+
],
|
|
41
|
+
]);
|
|
42
|
+
if (!preview.hasEnoughCredits) {
|
|
43
|
+
console.log();
|
|
44
|
+
warn(`You need ${preview.estimatedCredits - preview.currentBalance} more credits to send this campaign.`);
|
|
45
|
+
console.log(colors.dim(` Top up at: https://sendly.live/billing`));
|
|
46
|
+
}
|
|
47
|
+
if (preview.blockedCount && preview.blockedCount > 0) {
|
|
48
|
+
console.log();
|
|
49
|
+
warn(`${preview.blockedCount} of ${preview.recipientCount} recipients cannot be reached with your current verification.`);
|
|
50
|
+
}
|
|
51
|
+
if (preview.warnings && preview.warnings.length > 0) {
|
|
52
|
+
console.log();
|
|
53
|
+
for (const w of preview.warnings) {
|
|
54
|
+
warn(w);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (preview.byCountry && Object.keys(preview.byCountry).length > 0) {
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(colors.dim("Cost breakdown by country:"));
|
|
60
|
+
console.log();
|
|
61
|
+
for (const [country, info] of Object.entries(preview.byCountry)) {
|
|
62
|
+
const status = info.allowed ? "" : colors.dim(" (blocked)");
|
|
63
|
+
console.log(` ${country.padEnd(6)} ${String(info.count).padStart(4)} recipients ${colors.bold(String(info.credits))} credits${status}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
console.log();
|
|
67
|
+
console.log(colors.dim("To send this campaign:"));
|
|
68
|
+
console.log(` ${colors.code(`sendly campaigns send ${args.id}`)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jYW1wYWlnbnMvcHJldmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBcUIvRSxNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUNoRSxNQUFNLENBQUMsV0FBVyxHQUFHLHNDQUFzQyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsNkNBQTZDO1FBQzdDLG9EQUFvRDtLQUNyRCxDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksR0FBRztRQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2QsV0FBVyxFQUFFLGFBQWE7WUFDMUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDakMscUJBQXFCLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FDdkMsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxD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QUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLE1BQU0sRUFBRSxDQUM3SCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsganNvbiwgY29sb3JzLCBpc0pzb25Nb2RlLCBrZXlWYWx1ZSwgd2FybiB9IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDYW1wYWlnblByZXZpZXcge1xuICByZWNpcGllbnRDb3VudDogbnVtYmVyO1xuICBlc3RpbWF0ZWRDcmVkaXRzOiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIGhhc0Vub3VnaENyZWRpdHM6IGJvb2xlYW47XG4gIGJsb2NrZWRDb3VudD86IG51bWJlcjtcbiAgc2VuZGFibGVDb3VudD86IG51bWJlcjtcbiAgYnlDb3VudHJ5PzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgY3JlZGl0czogbnVtYmVyO1xuICAgICAgYWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGJsb2NrZWRSZWFzb24/OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICB3YXJuaW5ncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYW1wYWlnbnNQcmV2aWV3IGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlByZXZpZXcgY2FtcGFpZ24gY29zdCBhbmQgcmVjaXBpZW50c1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNhbXBhaWducyBwcmV2aWV3IGNtcF94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNhbXBhaWducyBwcmV2aWV3IGNtcF94eHggLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgaWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNhbXBhaWduIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ2FtcGFpZ25zUHJldmlldyk7XG5cbiAgICBjb25zdCBwcmV2aWV3ID0gYXdhaXQgYXBpQ2xpZW50LmdldDxDYW1wYWlnblByZXZpZXc+KFxuICAgICAgYC9hcGkvdjEvY2FtcGFpZ25zLyR7YXJncy5pZH0vcHJldmlld2AsXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocHJldmlldyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIkNhbXBhaWduIFByZXZpZXdcIikpO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBrZXlWYWx1ZShbXG4gICAgICBbXCJSZWNpcGllbnRzXCIsIFN0cmluZyhwcmV2aWV3LnJlY2lwaWVudENvdW50KV0sXG4gICAgICBbXCJTZW5kYWJsZVwiLCBTdHJpbmcocHJldmlldy5zZW5kYWJsZUNvdW50ID8/IHByZXZpZXcucmVjaXBpZW50Q291bnQpXSxcbiAgICAgIFtcIkVzdGltYXRlZCBDcmVkaXRzXCIsIGNvbG9ycy5ib2xkKFN0cmluZyhwcmV2aWV3LmVzdGltYXRlZENyZWRpdHMpKV0sXG4gICAgICBbXCJZb3VyIEJhbGFuY2VcIiwgU3RyaW5nKHByZXZpZXcuY3VycmVudEJhbGFuY2UpXSxcbiAgICAgIFtcbiAgICAgICAgXCJTdGF0dXNcIixcbiAgICAgICAgcHJldmlldy5oYXNFbm91Z2hDcmVkaXRzXG4gICAgICAgICAgPyBjb2xvcnMuc3VjY2VzcyhcIlJlYWR5IHRvIHNlbmRcIilcbiAgICAgICAgICA6IGNvbG9ycy5lcnJvcihcIkluc3VmZmljaWVudCBjcmVkaXRzXCIpLFxuICAgICAgXSxcbiAgICBdKTtcblxuICAgIGlmICghcHJldmlldy5oYXNFbm91Z2hDcmVkaXRzKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgd2FybihcbiAgICAgICAgYFlvdSBuZWVkICR7cHJldmlldy5lc3RpbWF0ZWRDcmVkaXRzIC0gcHJldmlldy5jdXJyZW50QmFsYW5jZX0gbW9yZSBjcmVkaXRzIHRvIHNlbmQgdGhpcyBjYW1wYWlnbi5gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oYCAgVG9wIHVwIGF0OiBodHRwczovL3NlbmRseS5saXZlL2JpbGxpbmdgKSk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpZXcuYmxvY2tlZENvdW50ICYmIHByZXZpZXcuYmxvY2tlZENvdW50ID4gMCkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIHdhcm4oXG4gICAgICAgIGAke3ByZXZpZXcuYmxvY2tlZENvdW50fSBvZiAke3ByZXZpZXcucmVjaXBpZW50Q291bnR9IHJlY2lwaWVudHMgY2Fubm90IGJlIHJlYWNoZWQgd2l0aCB5b3VyIGN1cnJlbnQgdmVyaWZpY2F0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcmV2aWV3Lndhcm5pbmdzICYmIHByZXZpZXcud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGZvciAoY29uc3QgdyBvZiBwcmV2aWV3Lndhcm5pbmdzKSB7XG4gICAgICAgIHdhcm4odyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZpZXcuYnlDb3VudHJ5ICYmIE9iamVjdC5rZXlzKHByZXZpZXcuYnlDb3VudHJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIkNvc3QgYnJlYWtkb3duIGJ5IGNvdW50cnk6XCIpKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICAgIGZvciAoY29uc3QgW2NvdW50cnksIGluZm9dIG9mIE9iamVjdC5lbnRyaWVzKHByZXZpZXcuYnlDb3VudHJ5KSkge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBpbmZvLmFsbG93ZWQgPyBcIlwiIDogY29sb3JzLmRpbShcIiAoYmxvY2tlZClcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgICR7Y291bnRyeS5wYWRFbmQoNil9ICR7U3RyaW5nKGluZm8uY291bnQpLnBhZFN0YXJ0KDQpfSByZWNpcGllbnRzICAke2NvbG9ycy5ib2xkKFN0cmluZyhpbmZvLmNyZWRpdHMpKX0gY3JlZGl0cyR7c3RhdHVzfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiVG8gc2VuZCB0aGlzIGNhbXBhaWduOlwiKSk7XG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuY29kZShgc2VuZGx5IGNhbXBhaWducyBzZW5kICR7YXJncy5pZH1gKX1gKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class CampaignsSchedule 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
|
+
at: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
timezone: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 { json, success, colors, isJsonMode, keyValue, } from "../../lib/output.js";
|
|
5
|
+
export default class CampaignsSchedule extends AuthenticatedCommand {
|
|
6
|
+
static description = "Schedule a campaign for later";
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> campaigns schedule cmp_xxx --at "2024-01-15T10:00:00Z"',
|
|
9
|
+
'<%= config.bin %> campaigns schedule cmp_xxx --at "2024-01-15T10:00:00" --timezone "America/New_York"',
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Campaign ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
at: Flags.string({
|
|
20
|
+
description: "When to send (ISO 8601 datetime)",
|
|
21
|
+
required: true,
|
|
22
|
+
}),
|
|
23
|
+
timezone: Flags.string({
|
|
24
|
+
char: "z",
|
|
25
|
+
description: 'Timezone (e.g., "America/New_York")',
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
const { args, flags } = await this.parse(CampaignsSchedule);
|
|
30
|
+
const scheduledAt = new Date(flags.at);
|
|
31
|
+
if (isNaN(scheduledAt.getTime())) {
|
|
32
|
+
this.error("Invalid date format. Use ISO 8601 format (e.g., 2024-01-15T10:00:00Z)");
|
|
33
|
+
}
|
|
34
|
+
if (scheduledAt <= new Date()) {
|
|
35
|
+
this.error("Scheduled time must be in the future");
|
|
36
|
+
}
|
|
37
|
+
const campaign = await apiClient.post(`/api/v1/campaigns/${args.id}/schedule`, {
|
|
38
|
+
scheduledAt: flags.at,
|
|
39
|
+
timezone: flags.timezone,
|
|
40
|
+
});
|
|
41
|
+
if (isJsonMode()) {
|
|
42
|
+
json(campaign);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
success(`Campaign scheduled!`);
|
|
46
|
+
console.log();
|
|
47
|
+
keyValue([
|
|
48
|
+
["Campaign", campaign.name],
|
|
49
|
+
["Status", colors.warning("scheduled")],
|
|
50
|
+
["Recipients", String(campaign.totalRecipients)],
|
|
51
|
+
["Scheduled For", new Date(campaign.scheduledAt).toLocaleString()],
|
|
52
|
+
...(campaign.timezone
|
|
53
|
+
? [["Timezone", campaign.timezone]]
|
|
54
|
+
: []),
|
|
55
|
+
]);
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(colors.dim("To cancel:"));
|
|
58
|
+
console.log(` ${colors.code(`sendly campaigns cancel ${campaign.id}`)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvY2FtcGFpZ25zL3NjaGVkdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBWTdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8saUJBQWtCLFNBQVEsb0JBQW9CO0lBQ2pFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsK0JBQStCLENBQUM7SUFFckQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwwRUFBMEU7UUFDMUUsdUdBQXVHO0tBQ3hHLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsYUFBYTtZQUMxQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNmLFdBQVcsRUFBRSxrQ0FBa0M7WUFDL0MsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDckIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUscUNBQXFDO1NBQ25ELENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTVELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQ1IsdUVBQXVFLENBQ3hFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNuQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUN2QztZQUNFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNyQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDekIsQ0FDRixDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWQsUUFBUSxDQUFDO1lBQ1AsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIGpzb24sXG4gIHN1Y2Nlc3MsXG4gIGNvbG9ycyxcbiAgaXNKc29uTW9kZSxcbiAga2V5VmFsdWUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDYW1wYWlnbiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHRvdGFsUmVjaXBpZW50czogbnVtYmVyO1xuICBlc3RpbWF0ZWRDcmVkaXRzOiBudW1iZXI7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYW1wYWlnbnNTY2hlZHVsZSBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTY2hlZHVsZSBhIGNhbXBhaWduIGZvciBsYXRlclwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gY2FtcGFpZ25zIHNjaGVkdWxlIGNtcF94eHggLS1hdCBcIjIwMjQtMDEtMTVUMTA6MDA6MDBaXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBjYW1wYWlnbnMgc2NoZWR1bGUgY21wX3h4eCAtLWF0IFwiMjAyNC0wMS0xNVQxMDowMDowMFwiIC0tdGltZXpvbmUgXCJBbWVyaWNhL05ld19Zb3JrXCInLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDYW1wYWlnbiBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBhdDogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldoZW4gdG8gc2VuZCAoSVNPIDg2MDEgZGF0ZXRpbWUpXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgICB0aW1lem9uZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwielwiLFxuICAgICAgZGVzY3JpcHRpb246ICdUaW1lem9uZSAoZS5nLiwgXCJBbWVyaWNhL05ld19Zb3JrXCIpJyxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDYW1wYWlnbnNTY2hlZHVsZSk7XG5cbiAgICBjb25zdCBzY2hlZHVsZWRBdCA9IG5ldyBEYXRlKGZsYWdzLmF0KTtcbiAgICBpZiAoaXNOYU4oc2NoZWR1bGVkQXQuZ2V0VGltZSgpKSkge1xuICAgICAgdGhpcy5lcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIGRhdGUgZm9ybWF0LiBVc2UgSVNPIDg2MDEgZm9ybWF0IChlLmcuLCAyMDI0LTAxLTE1VDEwOjAwOjAwWilcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVkdWxlZEF0IDw9IG5ldyBEYXRlKCkpIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJTY2hlZHVsZWQgdGltZSBtdXN0IGJlIGluIHRoZSBmdXR1cmVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FtcGFpZ24gPSBhd2FpdCBhcGlDbGllbnQucG9zdDxDYW1wYWlnbj4oXG4gICAgICBgL2FwaS92MS9jYW1wYWlnbnMvJHthcmdzLmlkfS9zY2hlZHVsZWAsXG4gICAgICB7XG4gICAgICAgIHNjaGVkdWxlZEF0OiBmbGFncy5hdCxcbiAgICAgICAgdGltZXpvbmU6IGZsYWdzLnRpbWV6b25lLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihjYW1wYWlnbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhgQ2FtcGFpZ24gc2NoZWR1bGVkIWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBrZXlWYWx1ZShbXG4gICAgICBbXCJDYW1wYWlnblwiLCBjYW1wYWlnbi5uYW1lXSxcbiAgICAgIFtcIlN0YXR1c1wiLCBjb2xvcnMud2FybmluZyhcInNjaGVkdWxlZFwiKV0sXG4gICAgICBbXCJSZWNpcGllbnRzXCIsIFN0cmluZyhjYW1wYWlnbi50b3RhbFJlY2lwaWVudHMpXSxcbiAgICAgIFtcIlNjaGVkdWxlZCBGb3JcIiwgbmV3IERhdGUoY2FtcGFpZ24uc2NoZWR1bGVkQXQpLnRvTG9jYWxlU3RyaW5nKCldLFxuICAgICAgLi4uKGNhbXBhaWduLnRpbWV6b25lXG4gICAgICAgID8gW1tcIlRpbWV6b25lXCIsIGNhbXBhaWduLnRpbWV6b25lXSBhcyBbc3RyaW5nLCBzdHJpbmddXVxuICAgICAgICA6IFtdKSxcbiAgICBdKTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlRvIGNhbmNlbDpcIikpO1xuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmNvZGUoYHNlbmRseSBjYW1wYWlnbnMgY2FuY2VsICR7Y2FtcGFpZ24uaWR9YCl9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class CampaignsSend 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,96 @@
|
|
|
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 { json, success, colors, isJsonMode, keyValue, warn, } from "../../lib/output.js";
|
|
5
|
+
import * as readline from "readline";
|
|
6
|
+
async function confirm(message) {
|
|
7
|
+
const rl = readline.createInterface({
|
|
8
|
+
input: process.stdin,
|
|
9
|
+
output: process.stdout,
|
|
10
|
+
});
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
rl.question(`${message} (y/N) `, (answer) => {
|
|
13
|
+
rl.close();
|
|
14
|
+
resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export default class CampaignsSend extends AuthenticatedCommand {
|
|
19
|
+
static description = "Send a campaign immediately";
|
|
20
|
+
static examples = [
|
|
21
|
+
"<%= config.bin %> campaigns send cmp_xxx",
|
|
22
|
+
"<%= config.bin %> campaigns send cmp_xxx --yes",
|
|
23
|
+
];
|
|
24
|
+
static args = {
|
|
25
|
+
id: Args.string({
|
|
26
|
+
description: "Campaign ID",
|
|
27
|
+
required: true,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
static flags = {
|
|
31
|
+
...AuthenticatedCommand.baseFlags,
|
|
32
|
+
yes: Flags.boolean({
|
|
33
|
+
char: "y",
|
|
34
|
+
description: "Skip confirmation prompt",
|
|
35
|
+
default: false,
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
async run() {
|
|
39
|
+
const { args, flags } = await this.parse(CampaignsSend);
|
|
40
|
+
const preview = await apiClient.get(`/api/v1/campaigns/${args.id}/preview`);
|
|
41
|
+
if (!preview.hasEnoughCredits) {
|
|
42
|
+
warn(`You need ${preview.estimatedCredits - preview.currentBalance} more credits to send this campaign.`);
|
|
43
|
+
console.log(colors.dim(` Top up at: https://sendly.live/billing`));
|
|
44
|
+
this.exit(1);
|
|
45
|
+
}
|
|
46
|
+
if (preview.sendableCount === 0) {
|
|
47
|
+
warn("No recipients can be reached with your current verification.");
|
|
48
|
+
if (preview.warnings) {
|
|
49
|
+
for (const w of preview.warnings) {
|
|
50
|
+
warn(w);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
this.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (preview.blockedCount && preview.blockedCount > 0) {
|
|
56
|
+
warn(`${preview.blockedCount} of ${preview.recipientCount} recipients cannot be reached with your current verification.`);
|
|
57
|
+
}
|
|
58
|
+
if (preview.warnings && preview.warnings.length > 0) {
|
|
59
|
+
for (const w of preview.warnings) {
|
|
60
|
+
warn(w);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!flags.yes && !isJsonMode()) {
|
|
64
|
+
console.log();
|
|
65
|
+
console.log(colors.bold("Campaign Summary"));
|
|
66
|
+
console.log();
|
|
67
|
+
keyValue([
|
|
68
|
+
["Recipients", String(preview.recipientCount)],
|
|
69
|
+
["Credits to use", colors.bold(String(preview.estimatedCredits))],
|
|
70
|
+
]);
|
|
71
|
+
console.log();
|
|
72
|
+
const confirmed = await confirm(colors.warning("Send this campaign now?"));
|
|
73
|
+
if (!confirmed) {
|
|
74
|
+
console.log(colors.dim("Cancelled"));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const result = await apiClient.post(`/api/v1/campaigns/${args.id}/send`);
|
|
79
|
+
if (isJsonMode()) {
|
|
80
|
+
json(result);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
success(`Campaign sent!`);
|
|
84
|
+
console.log();
|
|
85
|
+
keyValue([
|
|
86
|
+
["Total", String(result.total)],
|
|
87
|
+
["Sent", colors.success(String(result.sent))],
|
|
88
|
+
["Failed", result.failed > 0 ? colors.error(String(result.failed)) : "0"],
|
|
89
|
+
["Credits Used", String(result.creditsUsed)],
|
|
90
|
+
]);
|
|
91
|
+
console.log();
|
|
92
|
+
console.log(colors.dim("Check status:"));
|
|
93
|
+
console.log(` ${colors.code(`sendly campaigns get ${args.id}`)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jYW1wYWlnbnMvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsSUFBSSxHQUNMLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFxQnJDLEtBQUssVUFBVSxPQUFPLENBQUMsT0FBZTtJQUNwQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sYUFBYyxTQUFRLG9CQUFvQjtJQUM3RCxNQUFNLENBQUMsV0FBVyxHQUFHLDZCQUE2QixD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QUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBzdWNjZXNzLFxuICBjb2xvcnMsXG4gIGlzSnNvbk1vZGUsXG4gIGtleVZhbHVlLFxuICB3YXJuLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSBcInJlYWRsaW5lXCI7XG5cbmludGVyZmFjZSBCYXRjaFJlc3VsdCB7XG4gIGJhdGNoSWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHNlbnQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNyZWRpdHNVc2VkOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDYW1wYWlnblByZXZpZXcge1xuICByZWNpcGllbnRDb3VudDogbnVtYmVyO1xuICBlc3RpbWF0ZWRDcmVkaXRzOiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIGhhc0Vub3VnaENyZWRpdHM6IGJvb2xlYW47XG4gIGJsb2NrZWRDb3VudD86IG51bWJlcjtcbiAgc2VuZGFibGVDb3VudD86IG51bWJlcjtcbiAgd2FybmluZ3M/OiBzdHJpbmdbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uZmlybShtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKGAke21lc3NhZ2V9ICh5L04pIGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBcInlcIiB8fCBhbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gXCJ5ZXNcIik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYW1wYWlnbnNTZW5kIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlNlbmQgYSBjYW1wYWlnbiBpbW1lZGlhdGVseVwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNhbXBhaWducyBzZW5kIGNtcF94eHhcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNhbXBhaWducyBzZW5kIGNtcF94eHggLS15ZXNcIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ2FtcGFpZ24gSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgeWVzOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwieVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiU2tpcCBjb25maXJtYXRpb24gcHJvbXB0XCIsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzLCBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShDYW1wYWlnbnNTZW5kKTtcblxuICAgIGNvbnN0IHByZXZpZXcgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PENhbXBhaWduUHJldmlldz4oXG4gICAgICBgL2FwaS92MS9jYW1wYWlnbnMvJHthcmdzLmlkfS9wcmV2aWV3YCxcbiAgICApO1xuXG4gICAgaWYgKCFwcmV2aWV3Lmhhc0Vub3VnaENyZWRpdHMpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGBZb3UgbmVlZCAke3ByZXZpZXcuZXN0aW1hdGVkQ3JlZGl0cyAtIHByZXZpZXcuY3VycmVudEJhbGFuY2V9IG1vcmUgY3JlZGl0cyB0byBzZW5kIHRoaXMgY2FtcGFpZ24uYCxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIFRvcCB1cCBhdDogaHR0cHM6Ly9zZW5kbHkubGl2ZS9iaWxsaW5nYCkpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmIChwcmV2aWV3LnNlbmRhYmxlQ291bnQgPT09IDApIHtcbiAgICAgIHdhcm4oXCJObyByZWNpcGllbnRzIGNhbiBiZSByZWFjaGVkIHdpdGggeW91ciBjdXJyZW50IHZlcmlmaWNhdGlvbi5cIik7XG4gICAgICBpZiAocHJldmlldy53YXJuaW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IHcgb2YgcHJldmlldy53YXJuaW5ncykge1xuICAgICAgICAgIHdhcm4odyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlldy5ibG9ja2VkQ291bnQgJiYgcHJldmlldy5ibG9ja2VkQ291bnQgPiAwKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgJHtwcmV2aWV3LmJsb2NrZWRDb3VudH0gb2YgJHtwcmV2aWV3LnJlY2lwaWVudENvdW50fSByZWNpcGllbnRzIGNhbm5vdCBiZSByZWFjaGVkIHdpdGggeW91ciBjdXJyZW50IHZlcmlmaWNhdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlldy53YXJuaW5ncyAmJiBwcmV2aWV3Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgdyBvZiBwcmV2aWV3Lndhcm5pbmdzKSB7XG4gICAgICAgIHdhcm4odyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFmbGFncy55ZXMgJiYgIWlzSnNvbk1vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiQ2FtcGFpZ24gU3VtbWFyeVwiKSk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAga2V5VmFsdWUoW1xuICAgICAgICBbXCJSZWNpcGllbnRzXCIsIFN0cmluZyhwcmV2aWV3LnJlY2lwaWVudENvdW50KV0sXG4gICAgICAgIFtcIkNyZWRpdHMgdG8gdXNlXCIsIGNvbG9ycy5ib2xkKFN0cmluZyhwcmV2aWV3LmVzdGltYXRlZENyZWRpdHMpKV0sXG4gICAgICBdKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oXG4gICAgICAgIGNvbG9ycy53YXJuaW5nKFwiU2VuZCB0aGlzIGNhbXBhaWduIG5vdz9cIiksXG4gICAgICApO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIkNhbmNlbGxlZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxCYXRjaFJlc3VsdD4oXG4gICAgICBgL2FwaS92MS9jYW1wYWlnbnMvJHthcmdzLmlkfS9zZW5kYCxcbiAgICApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MoYENhbXBhaWduIHNlbnQhYCk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGtleVZhbHVlKFtcbiAgICAgIFtcIlRvdGFsXCIsIFN0cmluZyhyZXN1bHQudG90YWwpXSxcbiAgICAgIFtcIlNlbnRcIiwgY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3VsdC5zZW50KSldLFxuICAgICAgW1wiRmFpbGVkXCIsIHJlc3VsdC5mYWlsZWQgPiAwID8gY29sb3JzLmVycm9yKFN0cmluZyhyZXN1bHQuZmFpbGVkKSkgOiBcIjBcIl0sXG4gICAgICBbXCJDcmVkaXRzIFVzZWRcIiwgU3RyaW5nKHJlc3VsdC5jcmVkaXRzVXNlZCldLFxuICAgIF0pO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQ2hlY2sgc3RhdHVzOlwiKSk7XG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuY29kZShgc2VuZGx5IGNhbXBhaWducyBnZXQgJHthcmdzLmlkfWApfWApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class CampaignsUpdate 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
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
list: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
14
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 { json, success, colors, isJsonMode, keyValue } from "../../lib/output.js";
|
|
5
|
+
export default class CampaignsUpdate extends AuthenticatedCommand {
|
|
6
|
+
static description = "Update a campaign";
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> campaigns update cmp_xxx --name "New Name"',
|
|
9
|
+
'<%= config.bin %> campaigns update cmp_xxx --text "Updated message"',
|
|
10
|
+
"<%= config.bin %> campaigns update cmp_xxx --list lst_xxx",
|
|
11
|
+
'<%= config.bin %> campaigns update cmp_xxx --name "Sale" --text "50% off!"',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
id: Args.string({
|
|
15
|
+
description: "Campaign ID",
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...AuthenticatedCommand.baseFlags,
|
|
21
|
+
name: Flags.string({
|
|
22
|
+
char: "n",
|
|
23
|
+
description: "Campaign name",
|
|
24
|
+
}),
|
|
25
|
+
text: Flags.string({
|
|
26
|
+
char: "t",
|
|
27
|
+
description: "Message text (supports {{variables}})",
|
|
28
|
+
}),
|
|
29
|
+
list: Flags.string({
|
|
30
|
+
char: "l",
|
|
31
|
+
description: "Contact list ID",
|
|
32
|
+
}),
|
|
33
|
+
template: Flags.string({
|
|
34
|
+
description: "Template ID",
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
async run() {
|
|
38
|
+
const { args, flags } = await this.parse(CampaignsUpdate);
|
|
39
|
+
if (!flags.name && !flags.text && !flags.list && !flags.template) {
|
|
40
|
+
this.error("At least one of --name, --text, --list, or --template is required");
|
|
41
|
+
}
|
|
42
|
+
const body = {};
|
|
43
|
+
if (flags.name !== undefined)
|
|
44
|
+
body.name = flags.name;
|
|
45
|
+
if (flags.text !== undefined)
|
|
46
|
+
body.messageText = flags.text;
|
|
47
|
+
if (flags.list !== undefined)
|
|
48
|
+
body.targetListId = flags.list;
|
|
49
|
+
if (flags.template !== undefined)
|
|
50
|
+
body.templateId = flags.template;
|
|
51
|
+
const campaign = await apiClient.patch(`/api/v1/campaigns/${args.id}`, body);
|
|
52
|
+
if (isJsonMode()) {
|
|
53
|
+
json(campaign);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
success(`Campaign updated: ${campaign.id}`);
|
|
57
|
+
console.log();
|
|
58
|
+
keyValue([
|
|
59
|
+
["Name", campaign.name],
|
|
60
|
+
["Status", colors.dim(campaign.status)],
|
|
61
|
+
["Message", campaign.messageText],
|
|
62
|
+
["Recipients", String(campaign.totalRecipients)],
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NhbXBhaWducy91cGRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFhbEYsTUFBTSxDQUFDLE9BQU8sT0FBTyxlQUFnQixTQUFRLG9CQUFvQjtJQUMvRCxNQUFNLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBRXpDLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsOERBQThEO1FBQzlELHFFQUFxRTtRQUNyRSwyREFBMkQ7UUFDM0QsNEVBQTRFO0tBQzdFLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsYUFBYTtZQUMxQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSxlQUFlO1NBQzdCLENBQUM7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx1Q0FBdUM7U0FDckQsQ0FBQztRQUNGLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGlCQUFpQjtTQUMvQixDQUFDO1FBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDckIsV0FBVyxFQUFFLGFBQWE7U0FDM0IsQ0FBQztLQUNILENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLEtBQUssQ0FDUixtRUFBbUUsQ0FDcEUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLElBQUksR0FBNEIsRUFBRSxDQUFDO1FBQ3pDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdELElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRW5FLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FDcEMscUJBQXFCLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFDOUIsSUFBSSxDQUNMLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMscUJBQXFCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVkLFFBQVEsQ0FBQztZQUNQLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDdkIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUNqQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBqc29uLCBzdWNjZXNzLCBjb2xvcnMsIGlzSnNvbk1vZGUsIGtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIENhbXBhaWduIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlVGV4dDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgdGFyZ2V0TGlzdElkPzogc3RyaW5nO1xuICB0b3RhbFJlY2lwaWVudHM6IG51bWJlcjtcbiAgZXN0aW1hdGVkQ3JlZGl0czogbnVtYmVyO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FtcGFpZ25zVXBkYXRlIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlVwZGF0ZSBhIGNhbXBhaWduXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgICc8JT0gY29uZmlnLmJpbiAlPiBjYW1wYWlnbnMgdXBkYXRlIGNtcF94eHggLS1uYW1lIFwiTmV3IE5hbWVcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IGNhbXBhaWducyB1cGRhdGUgY21wX3h4eCAtLXRleHQgXCJVcGRhdGVkIG1lc3NhZ2VcIicsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjYW1wYWlnbnMgdXBkYXRlIGNtcF94eHggLS1saXN0IGxzdF94eHhcIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gY2FtcGFpZ25zIHVwZGF0ZSBjbXBfeHh4IC0tbmFtZSBcIlNhbGVcIiAtLXRleHQgXCI1MCUgb2ZmIVwiJyxcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ2FtcGFpZ24gSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgbmFtZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiblwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ2FtcGFpZ24gbmFtZVwiLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk1lc3NhZ2UgdGV4dCAoc3VwcG9ydHMge3t2YXJpYWJsZXN9fSlcIixcbiAgICB9KSxcbiAgICBsaXN0OiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJsXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDb250YWN0IGxpc3QgSURcIixcbiAgICB9KSxcbiAgICB0ZW1wbGF0ZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRlbXBsYXRlIElEXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ2FtcGFpZ25zVXBkYXRlKTtcblxuICAgIGlmICghZmxhZ3MubmFtZSAmJiAhZmxhZ3MudGV4dCAmJiAhZmxhZ3MubGlzdCAmJiAhZmxhZ3MudGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuZXJyb3IoXG4gICAgICAgIFwiQXQgbGVhc3Qgb25lIG9mIC0tbmFtZSwgLS10ZXh0LCAtLWxpc3QsIG9yIC0tdGVtcGxhdGUgaXMgcmVxdWlyZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBpZiAoZmxhZ3MubmFtZSAhPT0gdW5kZWZpbmVkKSBib2R5Lm5hbWUgPSBmbGFncy5uYW1lO1xuICAgIGlmIChmbGFncy50ZXh0ICE9PSB1bmRlZmluZWQpIGJvZHkubWVzc2FnZVRleHQgPSBmbGFncy50ZXh0O1xuICAgIGlmIChmbGFncy5saXN0ICE9PSB1bmRlZmluZWQpIGJvZHkudGFyZ2V0TGlzdElkID0gZmxhZ3MubGlzdDtcbiAgICBpZiAoZmxhZ3MudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkgYm9keS50ZW1wbGF0ZUlkID0gZmxhZ3MudGVtcGxhdGU7XG5cbiAgICBjb25zdCBjYW1wYWlnbiA9IGF3YWl0IGFwaUNsaWVudC5wYXRjaDxDYW1wYWlnbj4oXG4gICAgICBgL2FwaS92MS9jYW1wYWlnbnMvJHthcmdzLmlkfWAsXG4gICAgICBib2R5LFxuICAgICk7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKGNhbXBhaWduKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKGBDYW1wYWlnbiB1cGRhdGVkOiAke2NhbXBhaWduLmlkfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBrZXlWYWx1ZShbXG4gICAgICBbXCJOYW1lXCIsIGNhbXBhaWduLm5hbWVdLFxuICAgICAgW1wiU3RhdHVzXCIsIGNvbG9ycy5kaW0oY2FtcGFpZ24uc3RhdHVzKV0sXG4gICAgICBbXCJNZXNzYWdlXCIsIGNhbXBhaWduLm1lc3NhZ2VUZXh0XSxcbiAgICAgIFtcIlJlY2lwaWVudHNcIiwgU3RyaW5nKGNhbXBhaWduLnRvdGFsUmVjaXBpZW50cyldLFxuICAgIF0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class ContactsCreate extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
phone: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
email: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
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,48 @@
|
|
|
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 ContactsCreate extends AuthenticatedCommand {
|
|
6
|
+
static description = "Create a new contact";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> contacts create --phone +15551234567",
|
|
9
|
+
'<%= config.bin %> contacts create --phone +15551234567 --name "John Doe"',
|
|
10
|
+
'<%= config.bin %> contacts create --phone +15551234567 --name "John" --email john@example.com',
|
|
11
|
+
"<%= config.bin %> contacts create --phone +15551234567 --json",
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
...AuthenticatedCommand.baseFlags,
|
|
15
|
+
phone: Flags.string({
|
|
16
|
+
char: "p",
|
|
17
|
+
description: "Phone number in E.164 format (e.g., +15551234567)",
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
20
|
+
name: Flags.string({
|
|
21
|
+
char: "n",
|
|
22
|
+
description: "Contact name",
|
|
23
|
+
}),
|
|
24
|
+
email: Flags.string({
|
|
25
|
+
char: "e",
|
|
26
|
+
description: "Contact email",
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
async run() {
|
|
30
|
+
const { flags } = await this.parse(ContactsCreate);
|
|
31
|
+
const contact = await apiClient.post("/api/v1/contacts", {
|
|
32
|
+
phone_number: flags.phone,
|
|
33
|
+
name: flags.name,
|
|
34
|
+
email: flags.email,
|
|
35
|
+
});
|
|
36
|
+
if (isJsonMode()) {
|
|
37
|
+
json(contact);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
success("Contact created", {
|
|
41
|
+
ID: contact.id,
|
|
42
|
+
Phone: contact.phone_number,
|
|
43
|
+
Name: contact.name || colors.dim("(none)"),
|
|
44
|
+
Email: contact.email || colors.dim("(none)"),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFVeEUsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBQzlELE1BQU0sQ0FBQyxXQUFXLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQix3REFBd0Q7UUFDeEQsMEVBQTBFO1FBQzFFLCtGQUErRjtRQUMvRiwrREFBK0Q7S0FDaEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsbURBQW1EO1lBQ2hFLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNGLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGNBQWM7U0FDNUIsQ0FBQztRQUNGLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGVBQWU7U0FDN0IsQ0FBQztLQUNILENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFVLGtCQUFrQixFQUFFO1lBQ2hFLFlBQVksRUFBRSxLQUFLLENBQUMsS0FBSztZQUN6QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGpzb24sIGNvbG9ycywgaXNKc29uTW9kZSB9IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDb250YWN0IHtcbiAgaWQ6IHN0cmluZztcbiAgcGhvbmVfbnVtYmVyOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhY3RzQ3JlYXRlIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkNyZWF0ZSBhIG5ldyBjb250YWN0XCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgY3JlYXRlIC0tcGhvbmUgKzE1NTUxMjM0NTY3XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGNyZWF0ZSAtLXBob25lICsxNTU1MTIzNDU2NyAtLW5hbWUgXCJKb2huIERvZVwiJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgY3JlYXRlIC0tcGhvbmUgKzE1NTUxMjM0NTY3IC0tbmFtZSBcIkpvaG5cIiAtLWVtYWlsIGpvaG5AZXhhbXBsZS5jb20nLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gY29udGFjdHMgY3JlYXRlIC0tcGhvbmUgKzE1NTUxMjM0NTY3IC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgcGhvbmU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBob25lIG51bWJlciBpbiBFLjE2NCBmb3JtYXQgKGUuZy4sICsxNTU1MTIzNDU2NylcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICAgIG5hbWU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbnRhY3QgbmFtZVwiLFxuICAgIH0pLFxuICAgIGVtYWlsOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDb250YWN0IGVtYWlsXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoQ29udGFjdHNDcmVhdGUpO1xuXG4gICAgY29uc3QgY29udGFjdCA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PENvbnRhY3Q+KFwiL2FwaS92MS9jb250YWN0c1wiLCB7XG4gICAgICBwaG9uZV9udW1iZXI6IGZsYWdzLnBob25lLFxuICAgICAgbmFtZTogZmxhZ3MubmFtZSxcbiAgICAgIGVtYWlsOiBmbGFncy5lbWFpbCxcbiAgICB9KTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24oY29udGFjdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIkNvbnRhY3QgY3JlYXRlZFwiLCB7XG4gICAgICBJRDogY29udGFjdC5pZCxcbiAgICAgIFBob25lOiBjb250YWN0LnBob25lX251bWJlcixcbiAgICAgIE5hbWU6IGNvbnRhY3QubmFtZSB8fCBjb2xvcnMuZGltKFwiKG5vbmUpXCIpLFxuICAgICAgRW1haWw6IGNvbnRhY3QuZW1haWwgfHwgY29sb3JzLmRpbShcIihub25lKVwiKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class ContactsDelete 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 ContactsDelete extends AuthenticatedCommand {
|
|
7
|
+
static description = "Delete a contact";
|
|
8
|
+
static examples = [
|
|
9
|
+
"<%= config.bin %> contacts delete cnt_xxx",
|
|
10
|
+
"<%= config.bin %> contacts delete cnt_xxx --yes",
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
id: Args.string({
|
|
14
|
+
description: "Contact 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(ContactsDelete);
|
|
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 contact ${colors.code(args.id)}?`,
|
|
34
|
+
default: false,
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
if (!confirm) {
|
|
38
|
+
error("Deletion cancelled");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
await apiClient.delete(`/api/v1/contacts/${args.id}`);
|
|
43
|
+
if (isJsonMode()) {
|
|
44
|
+
json({ success: true, deletedId: args.id });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
success("Contact deleted", {
|
|
48
|
+
ID: args.id,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2RlbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBQzlELE1BQU0sQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7SUFFeEMsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyQ0FBMkM7UUFDM0MsaURBQWlEO0tBQ2xELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEM7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsT0FBTyxFQUFFLDJDQUEyQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztvQkFDM0UsT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzVCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdEQsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBlcnJvciwganNvbiwgY29sb3JzLCBpc0pzb25Nb2RlIH0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFjdHNEZWxldGUgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiRGVsZXRlIGEgY29udGFjdFwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGRlbGV0ZSBjbnRfeHh4XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBkZWxldGUgY250X3h4eCAtLXllc1wiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb250YWN0IElEIHRvIGRlbGV0ZVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICB5ZXM6IEZsYWdzLmJvb2xlYW4oe1xuICAgICAgY2hhcjogXCJ5XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTa2lwIGNvbmZpcm1hdGlvbiBwcm9tcHRcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MsIGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKENvbnRhY3RzRGVsZXRlKTtcblxuICAgIGlmICghZmxhZ3MueWVzKSB7XG4gICAgICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgICBuYW1lOiBcImNvbmZpcm1cIixcbiAgICAgICAgICBtZXNzYWdlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBjb250YWN0ICR7Y29sb3JzLmNvZGUoYXJncy5pZCl9P2AsXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgIGVycm9yKFwiRGVsZXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgYXBpQ2xpZW50LmRlbGV0ZShgL2FwaS92MS9jb250YWN0cy8ke2FyZ3MuaWR9YCk7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHsgc3VjY2VzczogdHJ1ZSwgZGVsZXRlZElkOiBhcmdzLmlkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MoXCJDb250YWN0IGRlbGV0ZWRcIiwge1xuICAgICAgSUQ6IGFyZ3MuaWQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
2
|
+
export default class ContactsGet 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,51 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
+
import { detail, json, colors, isJsonMode } from "../../lib/output.js";
|
|
5
|
+
export default class ContactsGet extends AuthenticatedCommand {
|
|
6
|
+
static description = "Get contact details";
|
|
7
|
+
static examples = [
|
|
8
|
+
"<%= config.bin %> contacts get cnt_xxx",
|
|
9
|
+
"<%= config.bin %> contacts get cnt_xxx --json",
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
id: Args.string({
|
|
13
|
+
description: "Contact ID",
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
static flags = {
|
|
18
|
+
...AuthenticatedCommand.baseFlags,
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { args } = await this.parse(ContactsGet);
|
|
22
|
+
const contact = await apiClient.get(`/api/v1/contacts/${args.id}`);
|
|
23
|
+
if (isJsonMode()) {
|
|
24
|
+
json(contact);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log();
|
|
28
|
+
detail("Contact Details", {
|
|
29
|
+
ID: contact.id,
|
|
30
|
+
Phone: contact.phone_number,
|
|
31
|
+
Name: contact.name || colors.dim("(none)"),
|
|
32
|
+
Email: contact.email || colors.dim("(none)"),
|
|
33
|
+
Status: contact.opted_out ? colors.error("Opted Out") : colors.success("Active"),
|
|
34
|
+
Lists: contact.lists?.length
|
|
35
|
+
? contact.lists.map((l) => l.name).join(", ")
|
|
36
|
+
: colors.dim("(none)"),
|
|
37
|
+
Created: new Date(contact.created_at).toLocaleString(),
|
|
38
|
+
...(contact.updated_at && {
|
|
39
|
+
Updated: new Date(contact.updated_at).toLocaleString(),
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
if (contact.metadata && Object.keys(contact.metadata).length > 0) {
|
|
43
|
+
console.log();
|
|
44
|
+
console.log(colors.bold("Metadata:"));
|
|
45
|
+
for (const [key, value] of Object.entries(contact.metadata)) {
|
|
46
|
+
console.log(` ${key}: ${JSON.stringify(value)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbnRhY3RzL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFjdkUsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFZLFNBQVEsb0JBQW9CO0lBQzNELE1BQU0sQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUM7SUFFM0MsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQix3Q0FBd0M7UUFDeEMsK0NBQStDO0tBQ2hELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsWUFBWTtZQUN6QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDakMsb0JBQW9CLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDNUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2hGLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBQzFCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUN4QixPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGNBQWMsRUFBRTtZQUN0RCxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSTtnQkFDeEIsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxjQUFjLEVBQUU7YUFDdkQsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBkZXRhaWwsIGpzb24sIGNvbG9ycywgaXNKc29uTW9kZSB9IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBDb250YWN0IHtcbiAgaWQ6IHN0cmluZztcbiAgcGhvbmVfbnVtYmVyOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9wdGVkX291dD86IGJvb2xlYW47XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdD86IHN0cmluZztcbiAgbGlzdHM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFjdHNHZXQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiR2V0IGNvbnRhY3QgZGV0YWlsc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGNvbnRhY3RzIGdldCBjbnRfeHh4XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBjb250YWN0cyBnZXQgY250X3h4eCAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29udGFjdCBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKENvbnRhY3RzR2V0KTtcblxuICAgIGNvbnN0IGNvbnRhY3QgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PENvbnRhY3Q+KFxuICAgICAgYC9hcGkvdjEvY29udGFjdHMvJHthcmdzLmlkfWAsXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24oY29udGFjdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBkZXRhaWwoXCJDb250YWN0IERldGFpbHNcIiwge1xuICAgICAgSUQ6IGNvbnRhY3QuaWQsXG4gICAgICBQaG9uZTogY29udGFjdC5waG9uZV9udW1iZXIsXG4gICAgICBOYW1lOiBjb250YWN0Lm5hbWUgfHwgY29sb3JzLmRpbShcIihub25lKVwiKSxcbiAgICAgIEVtYWlsOiBjb250YWN0LmVtYWlsIHx8IGNvbG9ycy5kaW0oXCIobm9uZSlcIiksXG4gICAgICBTdGF0dXM6IGNvbnRhY3Qub3B0ZWRfb3V0ID8gY29sb3JzLmVycm9yKFwiT3B0ZWQgT3V0XCIpIDogY29sb3JzLnN1Y2Nlc3MoXCJBY3RpdmVcIiksXG4gICAgICBMaXN0czogY29udGFjdC5saXN0cz8ubGVuZ3RoXG4gICAgICAgID8gY29udGFjdC5saXN0cy5tYXAoKGwpID0+IGwubmFtZSkuam9pbihcIiwgXCIpXG4gICAgICAgIDogY29sb3JzLmRpbShcIihub25lKVwiKSxcbiAgICAgIENyZWF0ZWQ6IG5ldyBEYXRlKGNvbnRhY3QuY3JlYXRlZF9hdCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgIC4uLihjb250YWN0LnVwZGF0ZWRfYXQgJiYge1xuICAgICAgICBVcGRhdGVkOiBuZXcgRGF0ZShjb250YWN0LnVwZGF0ZWRfYXQpLnRvTG9jYWxlU3RyaW5nKCksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmIChjb250YWN0Lm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKGNvbnRhY3QubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIk1ldGFkYXRhOlwiKSk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb250YWN0Lm1ldGFkYXRhKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|