@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.
Files changed (64) hide show
  1. package/README.md +178 -0
  2. package/dist/commands/business-upgrade/resubmit.js +3 -3
  3. package/dist/commands/business-upgrade/start.js +3 -3
  4. package/dist/commands/config/list.js +14 -2
  5. package/dist/commands/config/set.js +16 -3
  6. package/dist/commands/countries.js +2 -2
  7. package/dist/commands/credits/index.d.ts +1 -0
  8. package/dist/commands/credits/index.js +4 -0
  9. package/dist/commands/doctor.d.ts +12 -0
  10. package/dist/commands/doctor.js +51 -8
  11. package/dist/commands/enterprise/upload-verification-document.js +3 -3
  12. package/dist/commands/enterprise/verification/resubmit.js +2 -2
  13. package/dist/commands/enterprise/verification/submit.js +2 -2
  14. package/dist/commands/events/listen.js +3 -3
  15. package/dist/commands/numbers/buy.js +19 -4
  16. package/dist/commands/rcs/agents.d.ts +10 -0
  17. package/dist/commands/rcs/agents.js +89 -0
  18. package/dist/commands/rcs/capability.d.ts +12 -0
  19. package/dist/commands/rcs/capability.js +85 -0
  20. package/dist/commands/rcs/send.d.ts +21 -0
  21. package/dist/commands/rcs/send.js +240 -0
  22. package/dist/commands/send.d.ts +1 -0
  23. package/dist/commands/send.js +5 -2
  24. package/dist/commands/sms/batch.d.ts +1 -0
  25. package/dist/commands/sms/batch.js +11 -1
  26. package/dist/commands/sms/group.d.ts +1 -0
  27. package/dist/commands/sms/group.js +5 -2
  28. package/dist/commands/sms/schedule.d.ts +1 -0
  29. package/dist/commands/sms/schedule.js +5 -2
  30. package/dist/commands/sms/send.d.ts +1 -0
  31. package/dist/commands/sms/send.js +5 -2
  32. package/dist/commands/whatsapp/connect.d.ts +17 -0
  33. package/dist/commands/whatsapp/connect.js +166 -0
  34. package/dist/commands/whatsapp/profile/get.d.ts +13 -0
  35. package/dist/commands/whatsapp/profile/get.js +67 -0
  36. package/dist/commands/whatsapp/profile/update.d.ts +20 -0
  37. package/dist/commands/whatsapp/profile/update.js +109 -0
  38. package/dist/commands/whatsapp/send.d.ts +17 -0
  39. package/dist/commands/whatsapp/send.js +151 -0
  40. package/dist/commands/whatsapp/senders.d.ts +10 -0
  41. package/dist/commands/whatsapp/senders.js +74 -0
  42. package/dist/commands/whatsapp/status.d.ts +13 -0
  43. package/dist/commands/whatsapp/status.js +92 -0
  44. package/dist/commands/whatsapp/templates/create.d.ts +19 -0
  45. package/dist/commands/whatsapp/templates/create.js +205 -0
  46. package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
  47. package/dist/commands/whatsapp/templates/delete.js +69 -0
  48. package/dist/commands/whatsapp/templates/list.d.ts +10 -0
  49. package/dist/commands/whatsapp/templates/list.js +77 -0
  50. package/dist/commands/whatsapp/templates/update.d.ts +18 -0
  51. package/dist/commands/whatsapp/templates/update.js +160 -0
  52. package/dist/commands/whoami.js +32 -6
  53. package/dist/hooks/command-not-found.js +46 -61
  54. package/dist/lib/api-client.d.ts +9 -1
  55. package/dist/lib/api-client.js +78 -9
  56. package/dist/lib/auth.js +10 -6
  57. package/dist/lib/base-command.js +9 -1
  58. package/dist/lib/config.d.ts +50 -1
  59. package/dist/lib/config.js +144 -7
  60. package/dist/lib/help.d.ts +10 -0
  61. package/dist/lib/help.js +23 -0
  62. package/dist/lib/onboarding.js +3 -3
  63. package/oclif.manifest.json +1707 -736
  64. 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
+ }