@sendly/cli 3.37.1 → 3.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -0
- package/dist/commands/business-upgrade/resubmit.js +3 -3
- package/dist/commands/business-upgrade/start.js +3 -3
- package/dist/commands/config/list.js +14 -2
- package/dist/commands/config/set.js +16 -3
- package/dist/commands/countries.js +2 -2
- package/dist/commands/credits/index.d.ts +1 -0
- package/dist/commands/credits/index.js +4 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.js +51 -8
- package/dist/commands/enterprise/upload-verification-document.js +3 -3
- package/dist/commands/enterprise/verification/resubmit.js +2 -2
- package/dist/commands/enterprise/verification/submit.js +2 -2
- package/dist/commands/events/listen.js +3 -3
- package/dist/commands/numbers/buy.js +19 -4
- package/dist/commands/rcs/agents.d.ts +10 -0
- package/dist/commands/rcs/agents.js +89 -0
- package/dist/commands/rcs/capability.d.ts +12 -0
- package/dist/commands/rcs/capability.js +85 -0
- package/dist/commands/rcs/send.d.ts +21 -0
- package/dist/commands/rcs/send.js +240 -0
- package/dist/commands/send.d.ts +1 -0
- package/dist/commands/send.js +5 -2
- package/dist/commands/sms/batch.d.ts +1 -0
- package/dist/commands/sms/batch.js +11 -1
- package/dist/commands/sms/group.d.ts +1 -0
- package/dist/commands/sms/group.js +5 -2
- package/dist/commands/sms/schedule.d.ts +1 -0
- package/dist/commands/sms/schedule.js +5 -2
- package/dist/commands/sms/send.d.ts +1 -0
- package/dist/commands/sms/send.js +5 -2
- package/dist/commands/whatsapp/connect.d.ts +17 -0
- package/dist/commands/whatsapp/connect.js +166 -0
- package/dist/commands/whatsapp/profile/get.d.ts +13 -0
- package/dist/commands/whatsapp/profile/get.js +67 -0
- package/dist/commands/whatsapp/profile/update.d.ts +20 -0
- package/dist/commands/whatsapp/profile/update.js +109 -0
- package/dist/commands/whatsapp/send.d.ts +17 -0
- package/dist/commands/whatsapp/send.js +151 -0
- package/dist/commands/whatsapp/senders.d.ts +10 -0
- package/dist/commands/whatsapp/senders.js +74 -0
- package/dist/commands/whatsapp/status.d.ts +13 -0
- package/dist/commands/whatsapp/status.js +92 -0
- package/dist/commands/whatsapp/templates/create.d.ts +19 -0
- package/dist/commands/whatsapp/templates/create.js +205 -0
- package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
- package/dist/commands/whatsapp/templates/delete.js +69 -0
- package/dist/commands/whatsapp/templates/list.d.ts +10 -0
- package/dist/commands/whatsapp/templates/list.js +77 -0
- package/dist/commands/whatsapp/templates/update.d.ts +18 -0
- package/dist/commands/whatsapp/templates/update.js +160 -0
- package/dist/commands/whoami.js +32 -6
- package/dist/hooks/command-not-found.js +46 -61
- package/dist/lib/api-client.d.ts +9 -1
- package/dist/lib/api-client.js +78 -9
- package/dist/lib/auth.js +10 -6
- package/dist/lib/base-command.js +9 -1
- package/dist/lib/config.d.ts +50 -1
- package/dist/lib/config.js +144 -7
- package/dist/lib/help.d.ts +10 -0
- package/dist/lib/help.js +23 -0
- package/dist/lib/onboarding.js +3 -3
- package/oclif.manifest.json +1707 -736
- package/package.json +8 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient, ApiError, ValidationError, } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, error, warn, json, colors, spinner, isJsonMode, } from "../../../lib/output.js";
|
|
5
|
+
const TEMPLATE_NAME_RE = /^[a-z0-9_]{1,512}$/;
|
|
6
|
+
const BUTTON_TYPES = ["url", "quick_reply", "otp"];
|
|
7
|
+
/**
|
|
8
|
+
* Parse a --button value: "quick_reply:Stop promotions",
|
|
9
|
+
* "url:Track order:https://example.com/{{1}}", or "otp:Copy code".
|
|
10
|
+
* Returns an error string on bad input.
|
|
11
|
+
*/
|
|
12
|
+
function parseButton(raw) {
|
|
13
|
+
const firstSep = raw.indexOf(":");
|
|
14
|
+
if (firstSep === -1) {
|
|
15
|
+
return `Invalid --button "${raw}" — use type:text (types: ${BUTTON_TYPES.join(", ")})`;
|
|
16
|
+
}
|
|
17
|
+
const type = raw.slice(0, firstSep).trim().toLowerCase();
|
|
18
|
+
const rest = raw.slice(firstSep + 1);
|
|
19
|
+
if (!BUTTON_TYPES.includes(type)) {
|
|
20
|
+
return `Invalid --button type "${type}" — must be one of: ${BUTTON_TYPES.join(", ")}`;
|
|
21
|
+
}
|
|
22
|
+
if (type === "url") {
|
|
23
|
+
const secondSep = rest.indexOf(":");
|
|
24
|
+
if (secondSep === -1) {
|
|
25
|
+
return `Invalid --button "${raw}" — url buttons need url:text:https://...`;
|
|
26
|
+
}
|
|
27
|
+
const text = rest.slice(0, secondSep).trim();
|
|
28
|
+
const url = rest.slice(secondSep + 1).trim();
|
|
29
|
+
if (!text || !url) {
|
|
30
|
+
return `Invalid --button "${raw}" — url buttons need url:text:https://...`;
|
|
31
|
+
}
|
|
32
|
+
return { type, text, url };
|
|
33
|
+
}
|
|
34
|
+
const text = rest.trim();
|
|
35
|
+
if (!text) {
|
|
36
|
+
return `Invalid --button "${raw}" — button text is required`;
|
|
37
|
+
}
|
|
38
|
+
return { type, text };
|
|
39
|
+
}
|
|
40
|
+
/** Parse repeatable n=value pairs into a variables/examples record. */
|
|
41
|
+
function parseKeyValuePairs(raw, flagName) {
|
|
42
|
+
if (!raw || raw.length === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
const out = {};
|
|
45
|
+
for (const item of raw) {
|
|
46
|
+
const idx = item.indexOf("=");
|
|
47
|
+
if (idx <= 0) {
|
|
48
|
+
return `Invalid --${flagName} "${item}" — use n=value (e.g. 1=TinyFat)`;
|
|
49
|
+
}
|
|
50
|
+
out[item.slice(0, idx).trim()] = item.slice(idx + 1);
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
/** Unique {{n}} placeholders in a body, ascending. */
|
|
55
|
+
function bodyPlaceholders(body) {
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
const re = /\{\{(\d+)\}\}/g;
|
|
58
|
+
let m;
|
|
59
|
+
while ((m = re.exec(body || "")) !== null) {
|
|
60
|
+
seen.add(parseInt(m[1], 10));
|
|
61
|
+
}
|
|
62
|
+
return Array.from(seen).sort((a, b) => a - b);
|
|
63
|
+
}
|
|
64
|
+
export default class WhatsappTemplatesCreate extends AuthenticatedCommand {
|
|
65
|
+
static description = "Create a WhatsApp template and submit it to Meta for review";
|
|
66
|
+
static examples = [
|
|
67
|
+
'<%= config.bin %> whatsapp templates create --sender +15551234567 --name order_shipped --language en_US --category utility --body "Hi {{1}}, order {{2}} shipped!" --example 1=TinyFat --example 2=4821',
|
|
68
|
+
'<%= config.bin %> whatsapp templates create --sender +15551234567 --name summer_sale --language en_US --category marketing --body "Our sale is on!" --footer "Reply STOP to opt out" --button "quick_reply:Stop promotions"',
|
|
69
|
+
'<%= config.bin %> whatsapp templates create --sender +15551234567 --name login_code --language en_US --category authentication --body "{{1}} is your code" --example 1=123456 --button "otp:Copy code"',
|
|
70
|
+
];
|
|
71
|
+
static flags = {
|
|
72
|
+
...AuthenticatedCommand.baseFlags,
|
|
73
|
+
sender: Flags.string({
|
|
74
|
+
char: "s",
|
|
75
|
+
description: "WhatsApp-connected sender number (E.164 format)",
|
|
76
|
+
required: true,
|
|
77
|
+
}),
|
|
78
|
+
name: Flags.string({
|
|
79
|
+
char: "n",
|
|
80
|
+
description: "Template name (lowercase letters, numbers, and underscores)",
|
|
81
|
+
required: true,
|
|
82
|
+
}),
|
|
83
|
+
language: Flags.string({
|
|
84
|
+
char: "l",
|
|
85
|
+
description: "Template language code (e.g. en_US)",
|
|
86
|
+
required: true,
|
|
87
|
+
}),
|
|
88
|
+
category: Flags.string({
|
|
89
|
+
char: "c",
|
|
90
|
+
description: "Template category",
|
|
91
|
+
options: ["authentication", "utility", "marketing"],
|
|
92
|
+
required: true,
|
|
93
|
+
}),
|
|
94
|
+
body: Flags.string({
|
|
95
|
+
char: "b",
|
|
96
|
+
description: "Body text; use {{1}}, {{2}}, ... for variables",
|
|
97
|
+
required: true,
|
|
98
|
+
}),
|
|
99
|
+
footer: Flags.string({
|
|
100
|
+
description: "Footer text (optional)",
|
|
101
|
+
}),
|
|
102
|
+
header: Flags.string({
|
|
103
|
+
description: "Header text (optional)",
|
|
104
|
+
}),
|
|
105
|
+
button: Flags.string({
|
|
106
|
+
description: 'Button as "type:text" or "url:text:https://..." (types: quick_reply, url, otp). Repeatable.',
|
|
107
|
+
multiple: true,
|
|
108
|
+
}),
|
|
109
|
+
example: Flags.string({
|
|
110
|
+
description: "Example value for a body variable, as n=value (required for every {{n}}). Repeatable.",
|
|
111
|
+
multiple: true,
|
|
112
|
+
}),
|
|
113
|
+
};
|
|
114
|
+
async run() {
|
|
115
|
+
const { flags } = await this.parse(WhatsappTemplatesCreate);
|
|
116
|
+
if (!TEMPLATE_NAME_RE.test(flags.name)) {
|
|
117
|
+
error("Invalid template name", {
|
|
118
|
+
hint: "Use only lowercase letters, numbers, and underscores (e.g. order_shipped)",
|
|
119
|
+
});
|
|
120
|
+
this.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const examples = parseKeyValuePairs(flags.example, "example");
|
|
123
|
+
if (typeof examples === "string") {
|
|
124
|
+
error(examples);
|
|
125
|
+
this.exit(1);
|
|
126
|
+
}
|
|
127
|
+
const missing = bodyPlaceholders(flags.body).filter((n) => !(examples && examples[String(n)]));
|
|
128
|
+
if (missing.length > 0) {
|
|
129
|
+
error(`Missing example value${missing.length === 1 ? "" : "s"} for {{${missing.join("}}, {{")}}}`, {
|
|
130
|
+
hint: `Meta requires an example for every variable: --example ${missing[0]}=value`,
|
|
131
|
+
});
|
|
132
|
+
this.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const buttons = [];
|
|
135
|
+
for (const raw of flags.button ?? []) {
|
|
136
|
+
const parsed = parseButton(raw);
|
|
137
|
+
if (typeof parsed === "string") {
|
|
138
|
+
error(parsed);
|
|
139
|
+
this.exit(1);
|
|
140
|
+
}
|
|
141
|
+
buttons.push(parsed);
|
|
142
|
+
}
|
|
143
|
+
const createSpinner = spinner("Submitting template for review...");
|
|
144
|
+
if (!isJsonMode()) {
|
|
145
|
+
createSpinner.start();
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const response = await apiClient.post("/api/v1/whatsapp/templates", {
|
|
149
|
+
sender: flags.sender,
|
|
150
|
+
name: flags.name,
|
|
151
|
+
language: flags.language,
|
|
152
|
+
category: flags.category,
|
|
153
|
+
body: flags.body,
|
|
154
|
+
...(flags.footer && { footer: flags.footer }),
|
|
155
|
+
...(flags.header && { header: flags.header }),
|
|
156
|
+
...(buttons.length > 0 && { buttons }),
|
|
157
|
+
...(examples && { examples }),
|
|
158
|
+
});
|
|
159
|
+
createSpinner.stop();
|
|
160
|
+
if (isJsonMode()) {
|
|
161
|
+
json(response);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
success("Template submitted for review", {
|
|
165
|
+
ID: colors.code(response.id),
|
|
166
|
+
Name: response.name,
|
|
167
|
+
Language: response.language,
|
|
168
|
+
Category: response.category,
|
|
169
|
+
Status: colors.warning(response.status),
|
|
170
|
+
});
|
|
171
|
+
(response.warnings ?? []).forEach((w) => warn(w));
|
|
172
|
+
console.log();
|
|
173
|
+
console.log(colors.dim(`Meta reviews new templates, usually within a day. Check with: ${colors.code("sendly whatsapp templates list")}`));
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
createSpinner.stop();
|
|
177
|
+
if (err instanceof ApiError && err.code === "template_name_locked") {
|
|
178
|
+
error(err.message, {
|
|
179
|
+
hint: "Edit the existing template instead: sendly whatsapp templates update <id>",
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else if (err instanceof ApiError &&
|
|
183
|
+
err.code === "template_already_exists") {
|
|
184
|
+
error(err.message, {
|
|
185
|
+
hint: "Pick a different name, or edit the existing template with `sendly whatsapp templates update`",
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else if (err instanceof ValidationError && err.message === "HTTP 400") {
|
|
189
|
+
error("The template failed validation checks", {
|
|
190
|
+
hint: "Every {{n}} needs an --example n=value; authentication templates can't contain links and need an otp button; names can't start with test/sample/demo",
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else if (err.message?.includes("connected to WhatsApp")) {
|
|
194
|
+
error(err.message, {
|
|
195
|
+
hint: `Connect it first: sendly whatsapp connect --number ${flags.sender}`,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
201
|
+
this.exit(1);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3doYXRzYXBwL3RlbXBsYXRlcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEdBQ2hCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDO0FBcUJoQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBQzlDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVuRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEIsT0FBTyxxQkFBcUIsR0FBRyw2QkFBNkIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3pGLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FB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QyxJQUFJLEVBQUUsQ0FBQztZQUVyQixJQUFJLEdBQUcsWUFBWSxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtvQkFDakIsSUFBSSxFQUFFLDJFQUEyRTtpQkFDbEYsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUNMLEdBQUcsWUFBWSxRQUFRO2dCQUN2QixHQUFHLENBQUMsSUFBSSxLQUFLLHlCQUF5QixFQUN0QyxDQUFDO2dCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNqQixJQUFJLEVBQUUsOEZBQThGO2lCQUNyRyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksR0FBRyxZQUFZLGVBQWUsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN4RSxLQUFLLENBQUMsdUNBQXVDLEVBQUU7b0JBQzdDLElBQUksRUFBRSxzSkFBc0o7aUJBQzdKLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNqQixJQUFJLEVBQUUsc0RBQXNELEtBQUssQ0FBQyxNQUFNLEVBQUU7aUJBQzNFLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHtcbiAgYXBpQ2xpZW50LFxuICBBcGlFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICB3YXJuLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIHNwaW5uZXIsXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBXaGF0c2FwcFRlbXBsYXRlUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBxdWFsaXR5UmF0aW5nOiBzdHJpbmcgfCBudWxsO1xuICByZWplY3Rpb25SZWFzb246IHN0cmluZyB8IG51bGw7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgd2FybmluZ3M/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFRlbXBsYXRlQnV0dG9uIHtcbiAgdHlwZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuY29uc3QgVEVNUExBVEVfTkFNRV9SRSA9IC9eW2EtejAtOV9dezEsNTEyfSQvO1xuY29uc3QgQlVUVE9OX1RZUEVTID0gW1widXJsXCIsIFwicXVpY2tfcmVwbHlcIiwgXCJvdHBcIl07XG5cbi8qKlxuICogUGFyc2UgYSAtLWJ1dHRvbiB2YWx1ZTogXCJxdWlja19yZXBseTpTdG9wIHByb21vdGlvbnNcIixcbiAqIFwidXJsOlRyYWNrIG9yZGVyOmh0dHBzOi8vZXhhbXBsZS5jb20ve3sxfX1cIiwgb3IgXCJvdHA6Q29weSBjb2RlXCIuXG4gKiBSZXR1cm5zIGFuIGVycm9yIHN0cmluZyBvbiBiYWQgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQnV0dG9uKHJhdzogc3RyaW5nKTogVGVtcGxhdGVCdXR0b24gfCBzdHJpbmcge1xuICBjb25zdCBmaXJzdFNlcCA9IHJhdy5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGZpcnN0U2VwID09PSAtMSkge1xuICAgIHJldHVybiBgSW52YWxpZCAtLWJ1dHRvbiBcIiR7cmF3fVwiIOKAlCB1c2UgdHlwZTp0ZXh0ICh0eXBlczogJHtCVVRUT05fVFlQRVMuam9pbihcIiwgXCIpfSlgO1xuICB9XG4gIGNvbnN0IHR5cGUgPSByYXcuc2xpY2UoMCwgZmlyc3RTZXApLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByZXN0ID0gcmF3LnNsaWNlKGZpcnN0U2VwICsgMSk7XG4gIGlmICghQlVUVE9OX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIC0tYnV0dG9uIHR5cGUgXCIke3R5cGV9XCIg4oCUIG11c3QgYmUgb25lIG9mOiAke0JVVFRPTl9UWVBFUy5qb2luKFwiLCBcIil9YDtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJ1cmxcIikge1xuICAgIGNvbnN0IHNlY29uZFNlcCA9IHJlc3QuaW5kZXhPZihcIjpcIik7XG4gICAgaWYgKHNlY29uZFNlcCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBgSW52YWxpZCAtLWJ1dHRvbiBcIiR7cmF3fVwiIOKAlCB1cmwgYnV0dG9ucyBuZWVkIHVybDp0ZXh0Omh0dHBzOi8vLi4uYDtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IHJlc3Quc2xpY2UoMCwgc2Vjb25kU2VwKS50cmltKCk7XG4gICAgY29uc3QgdXJsID0gcmVzdC5zbGljZShzZWNvbmRTZXAgKyAxKS50cmltKCk7XG4gICAgaWYgKCF0ZXh0IHx8ICF1cmwpIHtcbiAgICAgIHJldHVybiBgSW52YWxpZCAtLWJ1dHRvbiBcIiR7cmF3fVwiIOKAlCB1cmwgYnV0dG9ucyBuZWVkIHVybDp0ZXh0Omh0dHBzOi8vLi4uYDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZSwgdGV4dCwgdXJsIH07XG4gIH1cbiAgY29uc3QgdGV4dCA9IHJlc3QudHJpbSgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gYEludmFsaWQgLS1idXR0b24gXCIke3Jhd31cIiDigJQgYnV0dG9uIHRleHQgaXMgcmVxdWlyZWRgO1xuICB9XG4gIHJldHVybiB7IHR5cGUsIHRleHQgfTtcbn1cblxuLyoqIFBhcnNlIHJlcGVhdGFibGUgbj12YWx1ZSBwYWlycyBpbnRvIGEgdmFyaWFibGVzL2V4YW1wbGVzIHJlY29yZC4gKi9cbmZ1bmN0aW9uIHBhcnNlS2V5VmFsdWVQYWlycyhcbiAgcmF3OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgZmxhZ05hbWU6IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHJhdykge1xuICAgIGNvbnN0IGlkeCA9IGl0ZW0uaW5kZXhPZihcIj1cIik7XG4gICAgaWYgKGlkeCA8PSAwKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgLS0ke2ZsYWdOYW1lfSBcIiR7aXRlbX1cIiDigJQgdXNlIG49dmFsdWUgKGUuZy4gMT1UaW55RmF0KWA7XG4gICAgfVxuICAgIG91dFtpdGVtLnNsaWNlKDAsIGlkeCkudHJpbSgpXSA9IGl0ZW0uc2xpY2UoaWR4ICsgMSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFVuaXF1ZSB7e259fSBwbGFjZWhvbGRlcnMgaW4gYSBib2R5LCBhc2NlbmRpbmcuICovXG5mdW5jdGlvbiBib2R5UGxhY2Vob2xkZXJzKGJvZHk6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBjb25zdCByZSA9IC9cXHtcXHsoXFxkKylcXH1cXH0vZztcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgobSA9IHJlLmV4ZWMoYm9keSB8fCBcIlwiKSkgIT09IG51bGwpIHtcbiAgICBzZWVuLmFkZChwYXJzZUludChtWzFdLCAxMCkpO1xuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHNlZW4pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hhdHNhcHBUZW1wbGF0ZXNDcmVhdGUgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJDcmVhdGUgYSBXaGF0c0FwcCB0ZW1wbGF0ZSBhbmQgc3VibWl0IGl0IHRvIE1ldGEgZm9yIHJldmlld1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgdGVtcGxhdGVzIGNyZWF0ZSAtLXNlbmRlciArMTU1NTEyMzQ1NjcgLS1uYW1lIG9yZGVyX3NoaXBwZWQgLS1sYW5ndWFnZSBlbl9VUyAtLWNhdGVnb3J5IHV0aWxpdHkgLS1ib2R5IFwiSGkge3sxfX0sIG9yZGVyIHt7Mn19IHNoaXBwZWQhXCIgLS1leGFtcGxlIDE9VGlueUZhdCAtLWV4YW1wbGUgMj00ODIxJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgdGVtcGxhdGVzIGNyZWF0ZSAtLXNlbmRlciArMTU1NTEyMzQ1NjcgLS1uYW1lIHN1bW1lcl9zYWxlIC0tbGFuZ3VhZ2UgZW5fVVMgLS1jYXRlZ29yeSBtYXJrZXRpbmcgLS1ib2R5IFwiT3VyIHNhbGUgaXMgb24hXCIgLS1mb290ZXIgXCJSZXBseSBTVE9QIHRvIG9wdCBvdXRcIiAtLWJ1dHRvbiBcInF1aWNrX3JlcGx5OlN0b3AgcHJvbW90aW9uc1wiJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgdGVtcGxhdGVzIGNyZWF0ZSAtLXNlbmRlciArMTU1NTEyMzQ1NjcgLS1uYW1lIGxvZ2luX2NvZGUgLS1sYW5ndWFnZSBlbl9VUyAtLWNhdGVnb3J5IGF1dGhlbnRpY2F0aW9uIC0tYm9keSBcInt7MX19IGlzIHlvdXIgY29kZVwiIC0tZXhhbXBsZSAxPTEyMzQ1NiAtLWJ1dHRvbiBcIm90cDpDb3B5IGNvZGVcIicsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBzZW5kZXI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldoYXRzQXBwLWNvbm5lY3RlZCBzZW5kZXIgbnVtYmVyIChFLjE2NCBmb3JtYXQpXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgICBuYW1lOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJUZW1wbGF0ZSBuYW1lIChsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzKVwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAgbGFuZ3VhZ2U6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImxcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRlbXBsYXRlIGxhbmd1YWdlIGNvZGUgKGUuZy4gZW5fVVMpXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgICBjYXRlZ29yeTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiY1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGVtcGxhdGUgY2F0ZWdvcnlcIixcbiAgICAgIG9wdGlvbnM6IFtcImF1dGhlbnRpY2F0aW9uXCIsIFwidXRpbGl0eVwiLCBcIm1hcmtldGluZ1wiXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICAgIGJvZHk6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkJvZHkgdGV4dDsgdXNlIHt7MX19LCB7ezJ9fSwgLi4uIGZvciB2YXJpYWJsZXNcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICAgIGZvb3RlcjogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkZvb3RlciB0ZXh0IChvcHRpb25hbClcIixcbiAgICB9KSxcbiAgICBoZWFkZXI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJIZWFkZXIgdGV4dCAob3B0aW9uYWwpXCIsXG4gICAgfSksXG4gICAgYnV0dG9uOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdCdXR0b24gYXMgXCJ0eXBlOnRleHRcIiBvciBcInVybDp0ZXh0Omh0dHBzOi8vLi4uXCIgKHR5cGVzOiBxdWlja19yZXBseSwgdXJsLCBvdHApLiBSZXBlYXRhYmxlLicsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICB9KSxcbiAgICBleGFtcGxlOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRXhhbXBsZSB2YWx1ZSBmb3IgYSBib2R5IHZhcmlhYmxlLCBhcyBuPXZhbHVlIChyZXF1aXJlZCBmb3IgZXZlcnkge3tufX0pLiBSZXBlYXRhYmxlLlwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2hhdHNhcHBUZW1wbGF0ZXNDcmVhdGUpO1xuXG4gICAgaWYgKCFURU1QTEFURV9OQU1FX1JFLnRlc3QoZmxhZ3MubmFtZSkpIHtcbiAgICAgIGVycm9yKFwiSW52YWxpZCB0ZW1wbGF0ZSBuYW1lXCIsIHtcbiAgICAgICAgaGludDogXCJVc2Ugb25seSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzIChlLmcuIG9yZGVyX3NoaXBwZWQpXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGFtcGxlcyA9IHBhcnNlS2V5VmFsdWVQYWlycyhmbGFncy5leGFtcGxlLCBcImV4YW1wbGVcIik7XG4gICAgaWYgKHR5cGVvZiBleGFtcGxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZXJyb3IoZXhhbXBsZXMpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pc3NpbmcgPSBib2R5UGxhY2Vob2xkZXJzKGZsYWdzLmJvZHkpLmZpbHRlcihcbiAgICAgIChuKSA9PiAhKGV4YW1wbGVzICYmIGV4YW1wbGVzW1N0cmluZyhuKV0pLFxuICAgICk7XG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgZXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIGV4YW1wbGUgdmFsdWUke21pc3NpbmcubGVuZ3RoID09PSAxID8gXCJcIiA6IFwic1wifSBmb3Ige3ske21pc3Npbmcuam9pbihcIn19LCB7e1wiKX19fWAsXG4gICAgICAgIHtcbiAgICAgICAgICBoaW50OiBgTWV0YSByZXF1aXJlcyBhbiBleGFtcGxlIGZvciBldmVyeSB2YXJpYWJsZTogLS1leGFtcGxlICR7bWlzc2luZ1swXX09dmFsdWVgLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBidXR0b25zOiBUZW1wbGF0ZUJ1dHRvbltdID0gW107XG4gICAgZm9yIChjb25zdCByYXcgb2YgZmxhZ3MuYnV0dG9uID8/IFtdKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJ1dHRvbihyYXcpO1xuICAgICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXJyb3IocGFyc2VkKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHBhcnNlZCBhcyBUZW1wbGF0ZUJ1dHRvbik7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlU3Bpbm5lciA9IHNwaW5uZXIoXCJTdWJtaXR0aW5nIHRlbXBsYXRlIGZvciByZXZpZXcuLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGNyZWF0ZVNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxXaGF0c2FwcFRlbXBsYXRlUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvdjEvd2hhdHNhcHAvdGVtcGxhdGVzXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzZW5kZXI6IGZsYWdzLnNlbmRlcixcbiAgICAgICAgICBuYW1lOiBmbGFncy5uYW1lLFxuICAgICAgICAgIGxhbmd1YWdlOiBmbGFncy5sYW5ndWFnZSxcbiAgICAgICAgICBjYXRlZ29yeTogZmxhZ3MuY2F0ZWdvcnksXG4gICAgICAgICAgYm9keTogZmxhZ3MuYm9keSxcbiAgICAgICAgICAuLi4oZmxhZ3MuZm9vdGVyICYmIHsgZm9vdGVyOiBmbGFncy5mb290ZXIgfSksXG4gICAgICAgICAgLi4uKGZsYWdzLmhlYWRlciAmJiB7IGhlYWRlcjogZmxhZ3MuaGVhZGVyIH0pLFxuICAgICAgICAgIC4uLihidXR0b25zLmxlbmd0aCA+IDAgJiYgeyBidXR0b25zIH0pLFxuICAgICAgICAgIC4uLihleGFtcGxlcyAmJiB7IGV4YW1wbGVzIH0pLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgY3JlYXRlU3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VjY2VzcyhcIlRlbXBsYXRlIHN1Ym1pdHRlZCBmb3IgcmV2aWV3XCIsIHtcbiAgICAgICAgSUQ6IGNvbG9ycy5jb2RlKHJlc3BvbnNlLmlkKSxcbiAgICAgICAgTmFtZTogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgTGFuZ3VhZ2U6IHJlc3BvbnNlLmxhbmd1YWdlLFxuICAgICAgICBDYXRlZ29yeTogcmVzcG9uc2UuY2F0ZWdvcnksXG4gICAgICAgIFN0YXR1czogY29sb3JzLndhcm5pbmcocmVzcG9uc2Uuc3RhdHVzKSxcbiAgICAgIH0pO1xuXG4gICAgICAocmVzcG9uc2Uud2FybmluZ3MgPz8gW10pLmZvckVhY2goKHcpID0+IHdhcm4odykpO1xuXG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgYE1ldGEgcmV2aWV3cyBuZXcgdGVtcGxhdGVzLCB1c3VhbGx5IHdpdGhpbiBhIGRheS4gQ2hlY2sgd2l0aDogJHtjb2xvcnMuY29kZShcInNlbmRseSB3aGF0c2FwcCB0ZW1wbGF0ZXMgbGlzdFwiKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY3JlYXRlU3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBcGlFcnJvciAmJiBlcnIuY29kZSA9PT0gXCJ0ZW1wbGF0ZV9uYW1lX2xvY2tlZFwiKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJFZGl0IHRoZSBleGlzdGluZyB0ZW1wbGF0ZSBpbnN0ZWFkOiBzZW5kbHkgd2hhdHNhcHAgdGVtcGxhdGVzIHVwZGF0ZSA8aWQ+XCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgQXBpRXJyb3IgJiZcbiAgICAgICAgZXJyLmNvZGUgPT09IFwidGVtcGxhdGVfYWxyZWFkeV9leGlzdHNcIlxuICAgICAgKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgaGludDogXCJQaWNrIGEgZGlmZmVyZW50IG5hbWUsIG9yIGVkaXQgdGhlIGV4aXN0aW5nIHRlbXBsYXRlIHdpdGggYHNlbmRseSB3aGF0c2FwcCB0ZW1wbGF0ZXMgdXBkYXRlYFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yICYmIGVyci5tZXNzYWdlID09PSBcIkhUVFAgNDAwXCIpIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgdGVtcGxhdGUgZmFpbGVkIHZhbGlkYXRpb24gY2hlY2tzXCIsIHtcbiAgICAgICAgICBoaW50OiBcIkV2ZXJ5IHt7bn19IG5lZWRzIGFuIC0tZXhhbXBsZSBuPXZhbHVlOyBhdXRoZW50aWNhdGlvbiB0ZW1wbGF0ZXMgY2FuJ3QgY29udGFpbiBsaW5rcyBhbmQgbmVlZCBhbiBvdHAgYnV0dG9uOyBuYW1lcyBjYW4ndCBzdGFydCB3aXRoIHRlc3Qvc2FtcGxlL2RlbW9cIixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlPy5pbmNsdWRlcyhcImNvbm5lY3RlZCB0byBXaGF0c0FwcFwiKSkge1xuICAgICAgICBlcnJvcihlcnIubWVzc2FnZSwge1xuICAgICAgICAgIGhpbnQ6IGBDb25uZWN0IGl0IGZpcnN0OiBzZW5kbHkgd2hhdHNhcHAgY29ubmVjdCAtLW51bWJlciAke2ZsYWdzLnNlbmRlcn1gLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class WhatsappTemplatesDelete 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
|
+
force: 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,69 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
3
|
+
import { apiClient, NotFoundError } from "../../../lib/api-client.js";
|
|
4
|
+
import { success, error, json, colors, spinner, isJsonMode, } from "../../../lib/output.js";
|
|
5
|
+
import { confirm } from "@inquirer/prompts";
|
|
6
|
+
export default class WhatsappTemplatesDelete extends AuthenticatedCommand {
|
|
7
|
+
static description = "Delete a WhatsApp template";
|
|
8
|
+
static examples = [
|
|
9
|
+
"<%= config.bin %> whatsapp templates delete 3f6a1c9e-0000-0000-0000-000000000000",
|
|
10
|
+
"<%= config.bin %> whatsapp templates delete 3f6a1c9e-0000-0000-0000-000000000000 --force",
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
id: Args.string({
|
|
14
|
+
description: "Template ID",
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
...AuthenticatedCommand.baseFlags,
|
|
20
|
+
force: Flags.boolean({
|
|
21
|
+
char: "f",
|
|
22
|
+
description: "Skip confirmation",
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(WhatsappTemplatesDelete);
|
|
28
|
+
if (!flags.force && !isJsonMode()) {
|
|
29
|
+
const confirmed = await confirm({
|
|
30
|
+
message: `Delete WhatsApp template ${args.id}? Its name stays reserved for up to 30 days.`,
|
|
31
|
+
default: false,
|
|
32
|
+
});
|
|
33
|
+
if (!confirmed) {
|
|
34
|
+
console.log(colors.dim("Cancelled"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const deleteSpinner = spinner("Deleting template...");
|
|
39
|
+
if (!isJsonMode()) {
|
|
40
|
+
deleteSpinner.start();
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const response = await apiClient.delete(`/api/v1/whatsapp/templates/${encodeURIComponent(args.id)}`);
|
|
44
|
+
deleteSpinner.stop();
|
|
45
|
+
if (isJsonMode()) {
|
|
46
|
+
json(response);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
success("Template deleted", {
|
|
50
|
+
ID: colors.code(response.id),
|
|
51
|
+
});
|
|
52
|
+
console.log();
|
|
53
|
+
console.log(colors.dim("WhatsApp reserves a deleted template's name for up to 30 days — edit an existing template rather than re-creating one under the same name."));
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
deleteSpinner.stop();
|
|
57
|
+
if (err instanceof NotFoundError) {
|
|
58
|
+
error("Template not found", {
|
|
59
|
+
hint: "Run `sendly whatsapp templates list` to see template ids",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
this.exit(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3doYXRzYXBwL3RlbXBsYXRlcy9kZWxldGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFPNUMsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFDdkUsTUFBTSxDQUFDLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQztJQUVsRCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLGtGQUFrRjtRQUNsRiwwRkFBMEY7S0FDM0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQztnQkFDOUIsT0FBTyxFQUFFLDRCQUE0QixJQUFJLENBQUMsRUFBRSw4Q0FBOEM7Z0JBQzFGLE9BQU8sRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FDckMsOEJBQThCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUM1RCxDQUFDO1lBRUYsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJCLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNmLE9BQU87WUFDVCxDQUFDO1lBRUQsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2dCQUMxQixFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQzdCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FDUiw0SUFBNEksQ0FDN0ksQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJCLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLENBQUMsb0JBQW9CLEVBQUU7b0JBQzFCLElBQUksRUFBRSwwREFBMEQ7aUJBQ2pFLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzLCBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50LCBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAganNvbixcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gXCJAaW5xdWlyZXIvcHJvbXB0c1wiO1xuXG5pbnRlcmZhY2UgRGVsZXRlVGVtcGxhdGVSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoYXRzYXBwVGVtcGxhdGVzRGVsZXRlIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkRlbGV0ZSBhIFdoYXRzQXBwIHRlbXBsYXRlXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2hhdHNhcHAgdGVtcGxhdGVzIGRlbGV0ZSAzZjZhMWM5ZS0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdoYXRzYXBwIHRlbXBsYXRlcyBkZWxldGUgM2Y2YTFjOWUtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIC0tZm9yY2VcIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiVGVtcGxhdGUgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgZm9yY2U6IEZsYWdzLmJvb2xlYW4oe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTa2lwIGNvbmZpcm1hdGlvblwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2hhdHNhcHBUZW1wbGF0ZXNEZWxldGUpO1xuXG4gICAgaWYgKCFmbGFncy5mb3JjZSAmJiAhaXNKc29uTW9kZSgpKSB7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgbWVzc2FnZTogYERlbGV0ZSBXaGF0c0FwcCB0ZW1wbGF0ZSAke2FyZ3MuaWR9PyBJdHMgbmFtZSBzdGF5cyByZXNlcnZlZCBmb3IgdXAgdG8gMzAgZGF5cy5gLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQ2FuY2VsbGVkXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRlbGV0ZVNwaW5uZXIgPSBzcGlubmVyKFwiRGVsZXRpbmcgdGVtcGxhdGUuLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGRlbGV0ZVNwaW5uZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQuZGVsZXRlPERlbGV0ZVRlbXBsYXRlUmVzcG9uc2U+KFxuICAgICAgICBgL2FwaS92MS93aGF0c2FwcC90ZW1wbGF0ZXMvJHtlbmNvZGVVUklDb21wb25lbnQoYXJncy5pZCl9YCxcbiAgICAgICk7XG5cbiAgICAgIGRlbGV0ZVNwaW5uZXIuc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN1Y2Nlc3MoXCJUZW1wbGF0ZSBkZWxldGVkXCIsIHtcbiAgICAgICAgSUQ6IGNvbG9ycy5jb2RlKHJlc3BvbnNlLmlkKSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIFwiV2hhdHNBcHAgcmVzZXJ2ZXMgYSBkZWxldGVkIHRlbXBsYXRlJ3MgbmFtZSBmb3IgdXAgdG8gMzAgZGF5cyDigJQgZWRpdCBhbiBleGlzdGluZyB0ZW1wbGF0ZSByYXRoZXIgdGhhbiByZS1jcmVhdGluZyBvbmUgdW5kZXIgdGhlIHNhbWUgbmFtZS5cIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGRlbGV0ZVNwaW5uZXIuc3RvcCgpO1xuXG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICBlcnJvcihcIlRlbXBsYXRlIG5vdCBmb3VuZFwiLCB7XG4gICAgICAgICAgaGludDogXCJSdW4gYHNlbmRseSB3aGF0c2FwcCB0ZW1wbGF0ZXMgbGlzdGAgdG8gc2VlIHRlbXBsYXRlIGlkc1wiLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class WhatsappTemplatesList 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
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
import { apiClient } from "../../../lib/api-client.js";
|
|
3
|
+
import { json, info, table, colors, spinner, isJsonMode, formatRelativeTime, } from "../../../lib/output.js";
|
|
4
|
+
function formatTemplateStatus(status) {
|
|
5
|
+
switch (String(status).toUpperCase()) {
|
|
6
|
+
case "APPROVED":
|
|
7
|
+
return colors.success(status);
|
|
8
|
+
case "REJECTED":
|
|
9
|
+
case "DISABLED":
|
|
10
|
+
return colors.error(status);
|
|
11
|
+
case "PENDING":
|
|
12
|
+
case "PAUSED":
|
|
13
|
+
return colors.warning(status);
|
|
14
|
+
default:
|
|
15
|
+
return status;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export default class WhatsappTemplatesList extends AuthenticatedCommand {
|
|
19
|
+
static description = "List your WhatsApp message templates";
|
|
20
|
+
static examples = [
|
|
21
|
+
"<%= config.bin %> whatsapp templates list",
|
|
22
|
+
"<%= config.bin %> whatsapp templates list --json",
|
|
23
|
+
];
|
|
24
|
+
static flags = {
|
|
25
|
+
...AuthenticatedCommand.baseFlags,
|
|
26
|
+
};
|
|
27
|
+
async run() {
|
|
28
|
+
await this.parse(WhatsappTemplatesList);
|
|
29
|
+
const listSpinner = spinner("Fetching WhatsApp templates...");
|
|
30
|
+
if (!isJsonMode()) {
|
|
31
|
+
listSpinner.start();
|
|
32
|
+
}
|
|
33
|
+
const response = await apiClient
|
|
34
|
+
.get("/api/v1/whatsapp/templates")
|
|
35
|
+
.finally(() => listSpinner.stop());
|
|
36
|
+
if (isJsonMode()) {
|
|
37
|
+
json(response);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const templates = response.templates ?? [];
|
|
41
|
+
if (templates.length === 0) {
|
|
42
|
+
info("No WhatsApp templates yet");
|
|
43
|
+
console.log(colors.dim(`Create one with: ${colors.code('sendly whatsapp templates create --sender +15551234567 --name order_update --language en_US --category utility --body "Your order {{1}} shipped" --example 1=4821')}`));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
table(templates, [
|
|
47
|
+
{ header: "ID", key: "id", formatter: (v) => colors.code(String(v)) },
|
|
48
|
+
{ header: "Name", key: "name" },
|
|
49
|
+
{ header: "Language", key: "language" },
|
|
50
|
+
{ header: "Category", key: "category" },
|
|
51
|
+
{
|
|
52
|
+
header: "Status",
|
|
53
|
+
key: "status",
|
|
54
|
+
formatter: (v) => formatTemplateStatus(String(v)),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
header: "Quality",
|
|
58
|
+
key: "qualityRating",
|
|
59
|
+
formatter: (v) => (v ? String(v) : colors.dim("—")),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
header: "Updated",
|
|
63
|
+
key: "updatedAt",
|
|
64
|
+
formatter: (v) => formatRelativeTime(String(v)),
|
|
65
|
+
},
|
|
66
|
+
]);
|
|
67
|
+
const rejected = templates.filter((t) => t.rejectionReason);
|
|
68
|
+
if (rejected.length > 0) {
|
|
69
|
+
console.log();
|
|
70
|
+
rejected.forEach((t) => {
|
|
71
|
+
console.log(`${colors.error("✗")} ${t.name} (${t.language}): ${colors.dim(t.rejectionReason)}`);
|
|
72
|
+
});
|
|
73
|
+
console.log(colors.dim(`Edit a rejected template to resubmit it: ${colors.code("sendly whatsapp templates update <id> --body ...")}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kcy93aGF0c2FwcC90ZW1wbGF0ZXMvbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxFQUNMLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxFQUNWLGtCQUFrQixHQUNuQixNQUFNLHdCQUF3QixDQUFDO0FBa0JoQyxTQUFTLG9CQUFvQixDQUFDLE1BQWM7SUFDMUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxLQUFLLFVBQVU7WUFDYixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxRQUFRO1lBQ1gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDO1lBQ0UsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHFCQUFzQixTQUFRLG9CQUFvQjtJQUNyRSxNQUFNLENBQUMsV0FBVyxHQUFHLHNDQUFzQyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsMkNBQTJDO1FBQzNDLGtEQUFrRDtLQUNuRCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FB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QUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FDUiw0Q0FBNEMsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxFQUFFLENBQzlHLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBqc29uLFxuICBpbmZvLFxuICB0YWJsZSxcbiAgY29sb3JzLFxuICBzcGlubmVyLFxuICBpc0pzb25Nb2RlLFxuICBmb3JtYXRSZWxhdGl2ZVRpbWUsXG59IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBXaGF0c2FwcFRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcXVhbGl0eVJhdGluZzogc3RyaW5nIHwgbnVsbDtcbiAgcmVqZWN0aW9uUmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMaXN0VGVtcGxhdGVzUmVzcG9uc2Uge1xuICB0ZW1wbGF0ZXM6IFdoYXRzYXBwVGVtcGxhdGVbXTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGVtcGxhdGVTdGF0dXMoc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKFN0cmluZyhzdGF0dXMpLnRvVXBwZXJDYXNlKCkpIHtcbiAgICBjYXNlIFwiQVBQUk9WRURcIjpcbiAgICAgIHJldHVybiBjb2xvcnMuc3VjY2VzcyhzdGF0dXMpO1xuICAgIGNhc2UgXCJSRUpFQ1RFRFwiOlxuICAgIGNhc2UgXCJESVNBQkxFRFwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5lcnJvcihzdGF0dXMpO1xuICAgIGNhc2UgXCJQRU5ESU5HXCI6XG4gICAgY2FzZSBcIlBBVVNFRFwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy53YXJuaW5nKHN0YXR1cyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hhdHNhcHBUZW1wbGF0ZXNMaXN0IGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkxpc3QgeW91ciBXaGF0c0FwcCBtZXNzYWdlIHRlbXBsYXRlc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdoYXRzYXBwIHRlbXBsYXRlcyBsaXN0XCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3aGF0c2FwcCB0ZW1wbGF0ZXMgbGlzdCAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcnNlKFdoYXRzYXBwVGVtcGxhdGVzTGlzdCk7XG5cbiAgICBjb25zdCBsaXN0U3Bpbm5lciA9IHNwaW5uZXIoXCJGZXRjaGluZyBXaGF0c0FwcCB0ZW1wbGF0ZXMuLi5cIik7XG4gICAgaWYgKCFpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGxpc3RTcGlubmVyLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnRcbiAgICAgIC5nZXQ8TGlzdFRlbXBsYXRlc1Jlc3BvbnNlPihcIi9hcGkvdjEvd2hhdHNhcHAvdGVtcGxhdGVzXCIpXG4gICAgICAuZmluYWxseSgoKSA9PiBsaXN0U3Bpbm5lci5zdG9wKCkpO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gcmVzcG9uc2UudGVtcGxhdGVzID8/IFtdO1xuICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvKFwiTm8gV2hhdHNBcHAgdGVtcGxhdGVzIHlldFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGBDcmVhdGUgb25lIHdpdGg6ICR7Y29sb3JzLmNvZGUoJ3NlbmRseSB3aGF0c2FwcCB0ZW1wbGF0ZXMgY3JlYXRlIC0tc2VuZGVyICsxNTU1MTIzNDU2NyAtLW5hbWUgb3JkZXJfdXBkYXRlIC0tbGFuZ3VhZ2UgZW5fVVMgLS1jYXRlZ29yeSB1dGlsaXR5IC0tYm9keSBcIllvdXIgb3JkZXIge3sxfX0gc2hpcHBlZFwiIC0tZXhhbXBsZSAxPTQ4MjEnKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YWJsZSh0ZW1wbGF0ZXMsIFtcbiAgICAgIHsgaGVhZGVyOiBcIklEXCIsIGtleTogXCJpZFwiLCBmb3JtYXR0ZXI6ICh2KSA9PiBjb2xvcnMuY29kZShTdHJpbmcodikpIH0sXG4gICAgICB7IGhlYWRlcjogXCJOYW1lXCIsIGtleTogXCJuYW1lXCIgfSxcbiAgICAgIHsgaGVhZGVyOiBcIkxhbmd1YWdlXCIsIGtleTogXCJsYW5ndWFnZVwiIH0sXG4gICAgICB7IGhlYWRlcjogXCJDYXRlZ29yeVwiLCBrZXk6IFwiY2F0ZWdvcnlcIiB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiU3RhdHVzXCIsXG4gICAgICAgIGtleTogXCJzdGF0dXNcIixcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4gZm9ybWF0VGVtcGxhdGVTdGF0dXMoU3RyaW5nKHYpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogXCJRdWFsaXR5XCIsXG4gICAgICAgIGtleTogXCJxdWFsaXR5UmF0aW5nXCIsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+ICh2ID8gU3RyaW5nKHYpIDogY29sb3JzLmRpbShcIuKAlFwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiVXBkYXRlZFwiLFxuICAgICAgICBrZXk6IFwidXBkYXRlZEF0XCIsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+IGZvcm1hdFJlbGF0aXZlVGltZShTdHJpbmcodikpLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHJlamVjdGVkID0gdGVtcGxhdGVzLmZpbHRlcigodCkgPT4gdC5yZWplY3Rpb25SZWFzb24pO1xuICAgIGlmIChyZWplY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgcmVqZWN0ZWQuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9ICR7dC5uYW1lfSAoJHt0Lmxhbmd1YWdlfSk6ICR7Y29sb3JzLmRpbSh0LnJlamVjdGlvblJlYXNvbiEpfWAsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGBFZGl0IGEgcmVqZWN0ZWQgdGVtcGxhdGUgdG8gcmVzdWJtaXQgaXQ6ICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgd2hhdHNhcHAgdGVtcGxhdGVzIHVwZGF0ZSA8aWQ+IC0tYm9keSAuLi5cIil9YCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../../../lib/base-command.js";
|
|
2
|
+
export default class WhatsappTemplatesUpdate 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
|
+
body: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
footer: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
header: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
button: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
example: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
15
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|