@sendly/cli 3.2.0 ā 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/dist/commands/sms/batch.d.ts +1 -0
- package/dist/commands/sms/batch.js +157 -19
- package/dist/commands/webhooks/test.js +13 -8
- package/oclif.manifest.json +12 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -91,11 +91,23 @@ sendly sms get msg_abc123
|
|
|
91
91
|
#### Send Batch Messages
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
# From a
|
|
95
|
-
sendly sms batch --file
|
|
94
|
+
# From a JSON file
|
|
95
|
+
sendly sms batch --file messages.json
|
|
96
|
+
|
|
97
|
+
# From a CSV file (phone-only with shared text)
|
|
98
|
+
sendly sms batch --file phones.csv --text "Your order is ready!"
|
|
96
99
|
|
|
97
100
|
# Multiple recipients inline
|
|
98
101
|
sendly sms batch --to "+15551234567,+15559876543" --text "Hello everyone!"
|
|
102
|
+
|
|
103
|
+
# Preview before sending (dry run) - validates without sending
|
|
104
|
+
sendly sms batch --file messages.json --dry-run
|
|
105
|
+
|
|
106
|
+
# Dry run output includes:
|
|
107
|
+
# - Per-country breakdown with credit costs
|
|
108
|
+
# - Blocked messages and reasons
|
|
109
|
+
# - Your messaging access (domestic/international)
|
|
110
|
+
# - Credit balance check
|
|
99
111
|
```
|
|
100
112
|
|
|
101
113
|
#### Schedule a Message
|
|
@@ -7,6 +7,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
7
7
|
to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
8
|
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
9
|
from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
"dry-run": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
11
|
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
12
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
@@ -8,8 +8,10 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
8
8
|
static examples = [
|
|
9
9
|
"<%= config.bin %> sms batch --file recipients.json",
|
|
10
10
|
'<%= config.bin %> sms batch --to +15551234567,+15559876543 --text "Hello everyone!"',
|
|
11
|
+
'<%= config.bin %> sms batch --file phones.csv --text "Your order is ready!"',
|
|
11
12
|
'<%= config.bin %> sms batch --file recipients.csv --from "Sendly"',
|
|
12
13
|
"<%= config.bin %> sms batch --file messages.json --json",
|
|
14
|
+
'<%= config.bin %> sms batch --file phones.csv --text "Hi" --dry-run',
|
|
13
15
|
];
|
|
14
16
|
static flags = {
|
|
15
17
|
...AuthenticatedCommand.baseFlags,
|
|
@@ -25,12 +27,17 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
25
27
|
}),
|
|
26
28
|
text: Flags.string({
|
|
27
29
|
char: "m",
|
|
28
|
-
description: "Message text (
|
|
30
|
+
description: "Message text (works with --to or --file for phone-only lists)",
|
|
29
31
|
}),
|
|
30
32
|
from: Flags.string({
|
|
31
33
|
char: "f",
|
|
32
34
|
description: "Sender ID or phone number for all messages",
|
|
33
35
|
}),
|
|
36
|
+
"dry-run": Flags.boolean({
|
|
37
|
+
char: "d",
|
|
38
|
+
description: "Preview batch without sending (validates access, shows cost breakdown)",
|
|
39
|
+
default: false,
|
|
40
|
+
}),
|
|
34
41
|
};
|
|
35
42
|
async run() {
|
|
36
43
|
const { flags } = await this.parse(SmsBatch);
|
|
@@ -50,6 +57,13 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
50
57
|
error("Either --file or --to is required");
|
|
51
58
|
this.exit(1);
|
|
52
59
|
}
|
|
60
|
+
// Apply shared text from --text flag to messages without text
|
|
61
|
+
if (flags.text) {
|
|
62
|
+
messages = messages.map((msg) => ({
|
|
63
|
+
to: msg.to,
|
|
64
|
+
text: msg.text || flags.text,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
53
67
|
// Validate messages
|
|
54
68
|
if (messages.length === 0) {
|
|
55
69
|
error("No messages to send");
|
|
@@ -70,10 +84,81 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
70
84
|
this.exit(1);
|
|
71
85
|
}
|
|
72
86
|
if (!msg.text?.trim()) {
|
|
73
|
-
error(`Empty message text for ${msg.to}
|
|
87
|
+
error(`Empty message text for ${msg.to}`, {
|
|
88
|
+
hint: "Use --text to provide a shared message for all recipients",
|
|
89
|
+
});
|
|
74
90
|
this.exit(1);
|
|
75
91
|
}
|
|
76
92
|
}
|
|
93
|
+
// Handle dry-run mode
|
|
94
|
+
if (flags["dry-run"]) {
|
|
95
|
+
const spin = spinner("Analyzing batch...").start();
|
|
96
|
+
try {
|
|
97
|
+
const preview = await apiClient.post("/api/v1/messages/batch/preview", { messages, text: flags.text });
|
|
98
|
+
spin.stop();
|
|
99
|
+
if (isJsonMode()) {
|
|
100
|
+
json(preview);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Show comprehensive preview
|
|
104
|
+
console.log(colors.bold("\nš Batch Preview (Dry Run)\n"));
|
|
105
|
+
// Summary table
|
|
106
|
+
console.log(colors.dim("ā".repeat(50)));
|
|
107
|
+
console.log(`Total messages: ${preview.total}`);
|
|
108
|
+
console.log(`Sendable: ${colors.success(String(preview.sendable))}`);
|
|
109
|
+
console.log(`Blocked: ${preview.blocked > 0 ? colors.error(String(preview.blocked)) : "0"}`);
|
|
110
|
+
console.log(`Duplicates removed: ${preview.duplicates}`);
|
|
111
|
+
console.log(colors.dim("ā".repeat(50)));
|
|
112
|
+
// Credits
|
|
113
|
+
console.log(`\nCredits needed: ${preview.creditsNeeded}`);
|
|
114
|
+
console.log(`Your balance: ${preview.creditBalance}`);
|
|
115
|
+
if (!preview.hasSufficientCredits) {
|
|
116
|
+
console.log(colors.error(`ā ļø Insufficient credits! Need ${preview.creditsNeeded - preview.creditBalance} more.`));
|
|
117
|
+
}
|
|
118
|
+
// Access info
|
|
119
|
+
console.log(`\nAPI Key type: ${preview.keyType.toUpperCase()}`);
|
|
120
|
+
console.log(`Write access: ${preview.hasWriteScope ? "ā" : "ā"}`);
|
|
121
|
+
console.log(`Domestic (US/CA): ${preview.messagingProfile.canSendDomestic ? "ā" : "ā"}`);
|
|
122
|
+
console.log(`International: ${preview.messagingProfile.canSendInternational ? "ā" : "ā"}`);
|
|
123
|
+
// Country breakdown
|
|
124
|
+
const countries = Object.entries(preview.byCountry);
|
|
125
|
+
if (countries.length > 0) {
|
|
126
|
+
console.log(colors.bold("\nš By Country:\n"));
|
|
127
|
+
for (const [country, data] of countries) {
|
|
128
|
+
const status = data.allowed
|
|
129
|
+
? colors.success("ā")
|
|
130
|
+
: colors.error("ā");
|
|
131
|
+
console.log(` ${status} ${country}: ${data.count} msgs, ${data.credits} credits (${data.tier})`);
|
|
132
|
+
if (!data.allowed && data.blockedReason) {
|
|
133
|
+
console.log(colors.dim(` āā ${data.blockedReason}`));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Warnings
|
|
138
|
+
if (preview.warnings.length > 0) {
|
|
139
|
+
console.log(colors.warning("\nā ļø Warnings:"));
|
|
140
|
+
for (const w of preview.warnings) {
|
|
141
|
+
console.log(` ⢠${w}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Blocked messages (first 5)
|
|
145
|
+
if (preview.blockedMessages.length > 0) {
|
|
146
|
+
console.log(colors.error(`\nā Blocked Messages (${preview.blockedMessages.length} total):`));
|
|
147
|
+
for (const b of preview.blockedMessages.slice(0, 5)) {
|
|
148
|
+
console.log(` ${b.to}: ${b.reason}`);
|
|
149
|
+
}
|
|
150
|
+
if (preview.blockedMessages.length > 5) {
|
|
151
|
+
console.log(colors.dim(` ... and ${preview.blockedMessages.length - 5} more`));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
console.log("\n" + colors.dim("No messages were sent. Remove --dry-run to send."));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
spin.stop();
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
77
162
|
const spin = spinner(`Sending ${messages.length} messages...`);
|
|
78
163
|
spin.start();
|
|
79
164
|
try {
|
|
@@ -86,14 +171,47 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
86
171
|
json(response);
|
|
87
172
|
return;
|
|
88
173
|
}
|
|
89
|
-
success
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"
|
|
95
|
-
|
|
96
|
-
|
|
174
|
+
// Determine success level
|
|
175
|
+
const allSucceeded = response.failed === 0;
|
|
176
|
+
const allFailed = response.sent === 0 && response.failed > 0;
|
|
177
|
+
const partialSuccess = response.sent > 0 && response.failed > 0;
|
|
178
|
+
if (allSucceeded) {
|
|
179
|
+
success("Batch sent successfully", {
|
|
180
|
+
"Batch ID": response.batchId,
|
|
181
|
+
Total: response.total,
|
|
182
|
+
Sent: colors.success(String(response.sent)),
|
|
183
|
+
"Credits Used": response.creditsUsed,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else if (allFailed) {
|
|
187
|
+
error("Batch failed", {
|
|
188
|
+
hint: `All ${response.failed} messages failed to send`,
|
|
189
|
+
});
|
|
190
|
+
console.log(colors.dim(` Batch ID: ${response.batchId}`));
|
|
191
|
+
console.log(colors.dim(` Credits Refunded: ${response.creditsRefunded}`));
|
|
192
|
+
}
|
|
193
|
+
else if (partialSuccess) {
|
|
194
|
+
console.log(colors.warning("\nā ļø Batch completed with errors\n"));
|
|
195
|
+
console.log(` Batch ID: ${response.batchId}`);
|
|
196
|
+
console.log(` Total: ${response.total}`);
|
|
197
|
+
console.log(` Sent: ${colors.success(String(response.sent))}`);
|
|
198
|
+
console.log(` Failed: ${colors.error(String(response.failed))}`);
|
|
199
|
+
console.log(` Credits Used: ${response.creditsUsed}`);
|
|
200
|
+
console.log(` Credits Refunded: ${response.creditsRefunded}`);
|
|
201
|
+
// Show failed messages if available
|
|
202
|
+
if (response.messages) {
|
|
203
|
+
const failedMsgs = response.messages.filter((m) => m.status === "failed");
|
|
204
|
+
if (failedMsgs.length > 0 && failedMsgs.length <= 5) {
|
|
205
|
+
console.log(colors.dim("\n Failed messages:"));
|
|
206
|
+
for (const msg of failedMsgs) {
|
|
207
|
+
console.log(colors.dim(` ${msg.to}: ${msg.error || "Unknown error"}`));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else if (failedMsgs.length > 5) {
|
|
211
|
+
console.log(colors.dim(`\n ${failedMsgs.length} messages failed. Use --json for details.`));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
97
215
|
}
|
|
98
216
|
catch (err) {
|
|
99
217
|
spin.stop();
|
|
@@ -124,15 +242,35 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
124
242
|
if (filePath.endsWith(".csv")) {
|
|
125
243
|
const lines = content.trim().split("\n");
|
|
126
244
|
const messages = [];
|
|
127
|
-
//
|
|
128
|
-
const
|
|
245
|
+
// Improved header detection - check for common header patterns
|
|
246
|
+
const headerPatterns = [
|
|
247
|
+
"to",
|
|
248
|
+
"phone",
|
|
249
|
+
"number",
|
|
250
|
+
"recipient",
|
|
251
|
+
"mobile",
|
|
252
|
+
"cell",
|
|
253
|
+
];
|
|
254
|
+
const firstLine = lines[0].toLowerCase();
|
|
255
|
+
const hasHeader = headerPatterns.some((p) => firstLine.includes(p));
|
|
256
|
+
const startIndex = hasHeader ? 1 : 0;
|
|
129
257
|
for (let i = startIndex; i < lines.length; i++) {
|
|
130
|
-
const
|
|
131
|
-
if (
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
258
|
+
const line = lines[i].trim();
|
|
259
|
+
if (!line)
|
|
260
|
+
continue; // Skip empty lines
|
|
261
|
+
const parts = line.split(",");
|
|
262
|
+
if (parts.length >= 1) {
|
|
263
|
+
const phone = parts[0].trim().replace(/"/g, "");
|
|
264
|
+
// Only add if phone looks valid (starts with + or digit)
|
|
265
|
+
if (phone && (phone.startsWith("+") || /^\d/.test(phone))) {
|
|
266
|
+
messages.push({
|
|
267
|
+
to: phone.startsWith("+") ? phone : `+${phone}`,
|
|
268
|
+
text: parts.length >= 2
|
|
269
|
+
? parts.slice(1).join(",").trim().replace(/"/g, "") ||
|
|
270
|
+
undefined
|
|
271
|
+
: undefined,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
136
274
|
}
|
|
137
275
|
}
|
|
138
276
|
return messages;
|
|
@@ -160,4 +298,4 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
160
298
|
return phones.map((phone) => ({ to: phone, text }));
|
|
161
299
|
}
|
|
162
300
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUFnQjdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUFHLHlCQUF5QixDQUFDO0lBRS9DLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsb0RBQW9EO1FBQ3BELHFGQUFxRjtRQUNyRixtRUFBbUU7UUFDbkUseURBQXlEO0tBQzFELENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDbEIsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsd0RBQXdEO1lBQ3JFLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNwQixDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7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QUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoTWVzc2FnZSB7XG4gIHRvOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJhdGNoUmVzcG9uc2Uge1xuICBiYXRjaElkOiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHF1ZXVlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc0JhdGNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIlNlbmQgYmF0Y2ggU01TIG1lc3NhZ2VzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSByZWNpcGllbnRzLmpzb25cIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tdG8gKzE1NTUxMjM0NTY3LCsxNTU1OTg3NjU0MyAtLXRleHQgXCJIZWxsbyBldmVyeW9uZSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcmVjaXBpZW50cy5jc3YgLS1mcm9tIFwiU2VuZGx5XCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBtZXNzYWdlcy5qc29uIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgZmlsZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiRlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSlNPTiBmaWxlIHdpdGggbWVzc2FnZXMgYXJyYXkgW3t0bywgdGV4dH0sIC4uLl1cIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk1lc3NhZ2UgdGV4dCAodXNlZCB3aXRoIC0tdG8gZmxhZylcIixcbiAgICB9KSxcbiAgICBmcm9tOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZW5kZXIgSUQgb3IgcGhvbmUgbnVtYmVyIGZvciBhbGwgbWVzc2FnZXNcIixcbiAgICB9KSxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShTbXNCYXRjaCk7XG5cbiAgICBsZXQgbWVzc2FnZXM6IEJhdGNoTWVzc2FnZVtdID0gW107XG5cbiAgICAvLyBQYXJzZSBtZXNzYWdlcyBmcm9tIGZpbGUgb3IgZmxhZ3NcbiAgICBpZiAoZmxhZ3MuZmlsZSkge1xuICAgICAgbWVzc2FnZXMgPSB0aGlzLnBhcnNlTWVzc2FnZXNGcm9tRmlsZShmbGFncy5maWxlKTtcbiAgICB9IGVsc2UgaWYgKGZsYWdzLnRvKSB7XG4gICAgICBpZiAoIWZsYWdzLnRleHQpIHtcbiAgICAgICAgZXJyb3IoXCItLXRleHQgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyAtLXRvXCIpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICBtZXNzYWdlcyA9IHRoaXMucGFyc2VNZXNzYWdlc0Zyb21GbGFncyhmbGFncy50bywgZmxhZ3MudGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKFwiRWl0aGVyIC0tZmlsZSBvciAtLXRvIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1lc3NhZ2VzXG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXJyb3IoXCJObyBtZXNzYWdlcyB0byBzZW5kXCIpO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAxMDAwKSB7XG4gICAgICBlcnJvcihcIkJhdGNoIHNpemUgY2Fubm90IGV4Y2VlZCAxMDAwIG1lc3NhZ2VzXCIsIHtcbiAgICAgICAgaGludDogXCJTcGxpdCB5b3VyIG1lc3NhZ2VzIGludG8gc21hbGxlciBiYXRjaGVzXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIG1lc3NhZ2VcbiAgICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgaWYgKCEvXlxcK1sxLTldXFxkezEsMTR9JC8udGVzdChtc2cudG8pKSB7XG4gICAgICAgIGVycm9yKGBJbnZhbGlkIHBob25lIG51bWJlcjogJHttc2cudG99YCwge1xuICAgICAgICAgIGhpbnQ6IFwiVXNlIEUuMTY0IGZvcm1hdDogKzE1NTUxMjM0NTY3XCIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgICBpZiAoIW1zZy50ZXh0Py50cmltKCkpIHtcbiAgICAgICAgZXJyb3IoYEVtcHR5IG1lc3NhZ2UgdGV4dCBmb3IgJHttc2cudG99YCk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihgU2VuZGluZyAke21lc3NhZ2VzLmxlbmd0aH0gbWVzc2FnZXMuLi5gKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxCYXRjaFJlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAuLi4oZmxhZ3MuZnJvbSAmJiB7IGZyb206IGZsYWdzLmZyb20gfSksXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBzcGluLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdWNjZXNzKFwiQmF0Y2ggc2VudFwiLCB7XG4gICAgICAgIFwiQmF0Y2ggSURcIjogcmVzcG9uc2UuYmF0Y2hJZCxcbiAgICAgICAgVG90YWw6IHJlc3BvbnNlLnRvdGFsLFxuICAgICAgICBRdWV1ZWQ6IGNvbG9ycy5zdWNjZXNzKFN0cmluZyhyZXNwb25zZS5xdWV1ZWQgPz8gMCkpLFxuICAgICAgICBGYWlsZWQ6XG4gICAgICAgICAgcmVzcG9uc2UuZmFpbGVkID4gMCA/IGNvbG9ycy5lcnJvcihTdHJpbmcocmVzcG9uc2UuZmFpbGVkKSkgOiBcIjBcIixcbiAgICAgICAgXCJDcmVkaXRzIFVzZWRcIjogcmVzcG9uc2UuY3JlZGl0c1VzZWQsXG4gICAgICAgIFN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTWVzc2FnZXNGcm9tRmlsZShmaWxlUGF0aDogc3RyaW5nKTogQmF0Y2hNZXNzYWdlW10ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuXG4gICAgICAvLyBUcnkgSlNPTiBmaXJzdFxuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgdG86IGl0ZW0udG8sXG4gICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLm1lc3NhZ2VzICYmIEFycmF5LmlzQXJyYXkoZGF0YS5tZXNzYWdlcykpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkludmFsaWQgSlNPTiBmb3JtYXRcIiwge1xuICAgICAgICAgIGhpbnQ6IFwiRXhwZWN0ZWQgYXJyYXkgb2Yge3RvLCB0ZXh0fSBvYmplY3RzIG9yIHttZXNzYWdlczogWy4uLl19XCIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBDU1ZcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aChcIi5jc3ZcIikpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnRyaW0oKS5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXM6IEJhdGNoTWVzc2FnZVtdID0gW107XG5cbiAgICAgICAgLy8gU2tpcCBoZWFkZXIgaWYgcHJlc2VudFxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gbGluZXNbMF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInRvXCIpID8gMSA6IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZXNbaV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgIHRvOiBwYXJ0c1swXS50cmltKCkucmVwbGFjZSgvXCIvZywgXCJcIiksXG4gICAgICAgICAgICAgIHRleHQ6IHBhcnRzLnNsaWNlKDEpLmpvaW4oXCIsXCIpLnRyaW0oKS5yZXBsYWNlKC9cIi9nLCBcIlwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKFwiVW5zdXBwb3J0ZWQgZmlsZSBmb3JtYXRcIiwge1xuICAgICAgICBoaW50OiBcIlVzZSAuanNvbiBvciAuY3N2IGZpbGVcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKChlcnIgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgIGVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgZXJyb3IoXCJJbnZhbGlkIEpTT04gaW4gZmlsZVwiLCB7IGhpbnQ6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNZXNzYWdlc0Zyb21GbGFncyh0bzogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBCYXRjaE1lc3NhZ2VbXSB7XG4gICAgY29uc3QgcGhvbmVzID0gdG8uc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuICAgIHJldHVybiBwaG9uZXMubWFwKChwaG9uZSkgPT4gKHsgdG86IHBob25lLCB0ZXh0IH0pKTtcbiAgfVxufVxuIl19
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUE2RDdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUFHLHlCQUF5QixDQUFDO0lBRS9DLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsb0RBQW9EO1FBQ3BELHFGQUFxRjtRQUNyRiw2RUFBNkU7UUFDN0UsbUVBQW1FO1FBQ25FLHlEQUF5RDtRQUN6RCxxRUFBcUU7S0FDdEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsaURBQWlEO1lBQzlELFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQztTQUNsQixDQUFDO1FBQ0YsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx3REFBd0Q7WUFDckUsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ3BCLENBQUM7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0s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LENBQUM7WUFDbEIsQ0FBQztZQUVELEtBQUssQ0FBQyx5QkFBeUIsRUFBRTtnQkFDL0IsSUFBSSxFQUFFLHdCQUF3QjthQUMvQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFLLEdBQTZCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyRCxLQUFLLENBQUMsbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLEVBQUUsQ0FBQztnQkFDdEMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxFQUFVLEVBQUUsSUFBWTtRQUNyRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoTWVzc2FnZSB7XG4gIHRvOiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7IC8vIE9wdGlvbmFsIC0gY2FuIGJlIHByb3ZpZGVkIHZpYSAtLXRleHQgZmxhZ1xufVxuXG5pbnRlcmZhY2UgQmF0Y2hSZXNwb25zZSB7XG4gIGJhdGNoSWQ6IHN0cmluZztcbiAgdG90YWw6IG51bWJlcjtcbiAgc2VudDogbnVtYmVyO1xuICBxdWV1ZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNyZWRpdHNVc2VkOiBudW1iZXI7XG4gIGNyZWRpdHNSZWZ1bmRlZDogbnVtYmVyO1xuICBzdGF0dXM6IHN0cmluZztcbiAgbWVzc2FnZXM/OiBBcnJheTx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG5pbnRlcmZhY2UgQmF0Y2hQcmV2aWV3UmVzcG9uc2Uge1xuICB0b3RhbDogbnVtYmVyO1xuICBzZW5kYWJsZTogbnVtYmVyO1xuICBibG9ja2VkOiBudW1iZXI7XG4gIGR1cGxpY2F0ZXM6IG51bWJlcjtcbiAgY3JlZGl0c05lZWRlZDogbnVtYmVyO1xuICBjcmVkaXRCYWxhbmNlOiBudW1iZXI7XG4gIGhhc1N1ZmZpY2llbnRDcmVkaXRzOiBib29sZWFuO1xuICBrZXlUeXBlOiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICBrZXlTY29wZXM6IHN0cmluZ1tdO1xuICBoYXNXcml0ZVNjb3BlOiBib29sZWFuO1xuICBtZXNzYWdpbmdQcm9maWxlOiB7XG4gICAgaWQ6IHN0cmluZyB8IG51bGw7XG4gICAgY2FuU2VuZERvbWVzdGljOiBib29sZWFuO1xuICAgIGNhblNlbmRJbnRlcm5hdGlvbmFsOiBib29sZWFuO1xuICAgIHZlcmlmaWNhdGlvblN0YXR1czogc3RyaW5nIHwgbnVsbDtcbiAgICB2ZXJpZmljYXRpb25UeXBlOiBzdHJpbmcgfCBudWxsO1xuICB9O1xuICBieUNvdW50cnk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgY291bnQ6IG51bWJlcjtcbiAgICAgIGNyZWRpdHM6IG51bWJlcjtcbiAgICAgIHRpZXI6IHN0cmluZztcbiAgICAgIGFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBibG9ja2VkUmVhc29uPzogc3RyaW5nO1xuICAgIH1cbiAgPjtcbiAgYmxvY2tlZE1lc3NhZ2VzOiBBcnJheTx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB0bzogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICB9PjtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbXNCYXRjaCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTZW5kIGJhdGNoIFNNUyBtZXNzYWdlc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcmVjaXBpZW50cy5qc29uXCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXRvICsxNTU1MTIzNDU2NywrMTU1NTk4NzY1NDMgLS10ZXh0IFwiSGVsbG8gZXZlcnlvbmUhXCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHBob25lcy5jc3YgLS10ZXh0IFwiWW91ciBvcmRlciBpcyByZWFkeSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcmVjaXBpZW50cy5jc3YgLS1mcm9tIFwiU2VuZGx5XCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBtZXNzYWdlcy5qc29uIC0tanNvblwiLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHBob25lcy5jc3YgLS10ZXh0IFwiSGlcIiAtLWRyeS1ydW4nLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgZmlsZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiRlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSlNPTiBmaWxlIHdpdGggbWVzc2FnZXMgYXJyYXkgW3t0bywgdGV4dH0sIC4uLl1cIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk1lc3NhZ2UgdGV4dCAod29ya3Mgd2l0aCAtLXRvIG9yIC0tZmlsZSBmb3IgcGhvbmUtb25seSBsaXN0cylcIixcbiAgICB9KSxcbiAgICBmcm9tOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZW5kZXIgSUQgb3IgcGhvbmUgbnVtYmVyIGZvciBhbGwgbWVzc2FnZXNcIixcbiAgICB9KSxcbiAgICBcImRyeS1ydW5cIjogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBjaGFyOiBcImRcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByZXZpZXcgYmF0Y2ggd2l0aG91dCBzZW5kaW5nICh2YWxpZGF0ZXMgYWNjZXNzLCBzaG93cyBjb3N0IGJyZWFrZG93bilcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc0JhdGNoKTtcblxuICAgIGxldCBtZXNzYWdlczogQmF0Y2hNZXNzYWdlW10gPSBbXTtcblxuICAgIC8vIFBhcnNlIG1lc3NhZ2VzIGZyb20gZmlsZSBvciBmbGFnc1xuICAgIGlmIChmbGFncy5maWxlKSB7XG4gICAgICBtZXNzYWdlcyA9IHRoaXMucGFyc2VNZXNzYWdlc0Zyb21GaWxlKGZsYWdzLmZpbGUpO1xuICAgIH0gZWxzZSBpZiAoZmxhZ3MudG8pIHtcbiAgICAgIGlmICghZmxhZ3MudGV4dCkge1xuICAgICAgICBlcnJvcihcIi0tdGV4dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIC0tdG9cIik7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2VzID0gdGhpcy5wYXJzZU1lc3NhZ2VzRnJvbUZsYWdzKGZsYWdzLnRvLCBmbGFncy50ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoXCJFaXRoZXIgLS1maWxlIG9yIC0tdG8gaXMgcmVxdWlyZWRcIik7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc2hhcmVkIHRleHQgZnJvbSAtLXRleHQgZmxhZyB0byBtZXNzYWdlcyB3aXRob3V0IHRleHRcbiAgICBpZiAoZmxhZ3MudGV4dCkge1xuICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4gKHtcbiAgICAgICAgdG86IG1zZy50byxcbiAgICAgICAgdGV4dDogbXNnLnRleHQgfHwgZmxhZ3MudGV4dCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZXNzYWdlc1xuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGVycm9yKFwiTm8gbWVzc2FnZXMgdG8gc2VuZFwiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMTAwMCkge1xuICAgICAgZXJyb3IoXCJCYXRjaCBzaXplIGNhbm5vdCBleGNlZWQgMTAwMCBtZXNzYWdlc1wiLCB7XG4gICAgICAgIGhpbnQ6IFwiU3BsaXQgeW91ciBtZXNzYWdlcyBpbnRvIHNtYWxsZXIgYmF0Y2hlc1wiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCBtZXNzYWdlXG4gICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICAgIGlmICghL15cXCtbMS05XVxcZHsxLDE0fSQvLnRlc3QobXNnLnRvKSkge1xuICAgICAgICBlcnJvcihgSW52YWxpZCBwaG9uZSBudW1iZXI6ICR7bXNnLnRvfWAsIHtcbiAgICAgICAgICBoaW50OiBcIlVzZSBFLjE2NCBmb3JtYXQ6ICsxNTU1MTIzNDU2N1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgaWYgKCFtc2cudGV4dD8udHJpbSgpKSB7XG4gICAgICAgIGVycm9yKGBFbXB0eSBtZXNzYWdlIHRleHQgZm9yICR7bXNnLnRvfWAsIHtcbiAgICAgICAgICBoaW50OiBcIlVzZSAtLXRleHQgdG8gcHJvdmlkZSBhIHNoYXJlZCBtZXNzYWdlIGZvciBhbGwgcmVjaXBpZW50c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcnktcnVuIG1vZGVcbiAgICBpZiAoZmxhZ3NbXCJkcnktcnVuXCJdKSB7XG4gICAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIkFuYWx5emluZyBiYXRjaC4uLlwiKS5zdGFydCgpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcmV2aWV3ID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QmF0Y2hQcmV2aWV3UmVzcG9uc2U+KFxuICAgICAgICAgIFwiL2FwaS92MS9tZXNzYWdlcy9iYXRjaC9wcmV2aWV3XCIsXG4gICAgICAgICAgeyBtZXNzYWdlcywgdGV4dDogZmxhZ3MudGV4dCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAgICBqc29uKHByZXZpZXcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3cgY29tcHJlaGVuc2l2ZSBwcmV2aWV3XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TiiBCYXRjaCBQcmV2aWV3IChEcnkgUnVuKVxcblwiKSk7XG5cbiAgICAgICAgLy8gU3VtbWFyeSB0YWJsZVxuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDUwKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICAgICAke3ByZXZpZXcudG90YWx9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBTZW5kYWJsZTogICAgICAgICAgICR7Y29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHByZXZpZXcuc2VuZGFibGUpKX1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgQmxvY2tlZDogICAgICAgICAgICAke3ByZXZpZXcuYmxvY2tlZCA+IDAgPyBjb2xvcnMuZXJyb3IoU3RyaW5nKHByZXZpZXcuYmxvY2tlZCkpIDogXCIwXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coYER1cGxpY2F0ZXMgcmVtb3ZlZDogJHtwcmV2aWV3LmR1cGxpY2F0ZXN9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCLilIBcIi5yZXBlYXQoNTApKSk7XG5cbiAgICAgICAgLy8gQ3JlZGl0c1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQ3JlZGl0cyBuZWVkZWQ6ICAgICAke3ByZXZpZXcuY3JlZGl0c05lZWRlZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYFlvdXIgYmFsYW5jZTogICAgICAgJHtwcmV2aWV3LmNyZWRpdEJhbGFuY2V9YCk7XG4gICAgICAgIGlmICghcHJldmlldy5oYXNTdWZmaWNpZW50Q3JlZGl0cykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY29sb3JzLmVycm9yKFxuICAgICAgICAgICAgICBg4pqg77iPICBJbnN1ZmZpY2llbnQgY3JlZGl0cyEgTmVlZCAke3ByZXZpZXcuY3JlZGl0c05lZWRlZCAtIHByZXZpZXcuY3JlZGl0QmFsYW5jZX0gbW9yZS5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWNjZXNzIGluZm9cbiAgICAgICAgY29uc29sZS5sb2coYFxcbkFQSSBLZXkgdHlwZTogICAgICAgJHtwcmV2aWV3LmtleVR5cGUudG9VcHBlckNhc2UoKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYFdyaXRlIGFjY2VzczogICAgICAgJHtwcmV2aWV3Lmhhc1dyaXRlU2NvcGUgPyBcIuKck1wiIDogXCLinJdcIn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYERvbWVzdGljIChVUy9DQSk6ICAgJHtwcmV2aWV3Lm1lc3NhZ2luZ1Byb2ZpbGUuY2FuU2VuZERvbWVzdGljID8gXCLinJNcIiA6IFwi4pyXXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYEludGVybmF0aW9uYWw6ICAgICAgJHtwcmV2aWV3Lm1lc3NhZ2luZ1Byb2ZpbGUuY2FuU2VuZEludGVybmF0aW9uYWwgPyBcIuKck1wiIDogXCLinJdcIn1gLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENvdW50cnkgYnJlYWtkb3duXG4gICAgICAgIGNvbnN0IGNvdW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHByZXZpZXcuYnlDb3VudHJ5KTtcbiAgICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJcXG7wn5ONIEJ5IENvdW50cnk6XFxuXCIpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtjb3VudHJ5LCBkYXRhXSBvZiBjb3VudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYWxsb3dlZFxuICAgICAgICAgICAgICA/IGNvbG9ycy5zdWNjZXNzKFwi4pyTXCIpXG4gICAgICAgICAgICAgIDogY29sb3JzLmVycm9yKFwi4pyXXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGAgICR7c3RhdHVzfSAke2NvdW50cnl9OiAke2RhdGEuY291bnR9IG1zZ3MsICR7ZGF0YS5jcmVkaXRzfSBjcmVkaXRzICgke2RhdGEudGllcn0pYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWRhdGEuYWxsb3dlZCAmJiBkYXRhLmJsb2NrZWRSZWFzb24pIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgICAgICDilJTilIAgJHtkYXRhLmJsb2NrZWRSZWFzb259YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdhcm5pbmdzXG4gICAgICAgIGlmIChwcmV2aWV3Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgV2FybmluZ3M6XCIpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHcgb2YgcHJldmlldy53YXJuaW5ncykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgIOKAoiAke3d9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmxvY2tlZCBtZXNzYWdlcyAoZmlyc3QgNSlcbiAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICAgICAgYFxcbuKdjCBCbG9ja2VkIE1lc3NhZ2VzICgke3ByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aH0gdG90YWwpOmAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZm9yIChjb25zdCBiIG9mIHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgJHtiLnRvfTogJHtiLnJlYXNvbn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGAgICAuLi4gYW5kICR7cHJldmlldy5ibG9ja2VkTWVzc2FnZXMubGVuZ3RoIC0gNX0gbW9yZWAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIFwiXFxuXCIgKyBjb2xvcnMuZGltKFwiTm8gbWVzc2FnZXMgd2VyZSBzZW50LiBSZW1vdmUgLS1kcnktcnVuIHRvIHNlbmQuXCIpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihgU2VuZGluZyAke21lc3NhZ2VzLmxlbmd0aH0gbWVzc2FnZXMuLi5gKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxCYXRjaFJlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAuLi4oZmxhZ3MuZnJvbSAmJiB7IGZyb206IGZsYWdzLmZyb20gfSksXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBzcGluLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgc3VjY2VzcyBsZXZlbFxuICAgICAgY29uc3QgYWxsU3VjY2VlZGVkID0gcmVzcG9uc2UuZmFpbGVkID09PSAwO1xuICAgICAgY29uc3QgYWxsRmFpbGVkID0gcmVzcG9uc2Uuc2VudCA9PT0gMCAmJiByZXNwb25zZS5mYWlsZWQgPiAwO1xuICAgICAgY29uc3QgcGFydGlhbFN1Y2Nlc3MgPSByZXNwb25zZS5zZW50ID4gMCAmJiByZXNwb25zZS5mYWlsZWQgPiAwO1xuXG4gICAgICBpZiAoYWxsU3VjY2VlZGVkKSB7XG4gICAgICAgIHN1Y2Nlc3MoXCJCYXRjaCBzZW50IHN1Y2Nlc3NmdWxseVwiLCB7XG4gICAgICAgICAgXCJCYXRjaCBJRFwiOiByZXNwb25zZS5iYXRjaElkLFxuICAgICAgICAgIFRvdGFsOiByZXNwb25zZS50b3RhbCxcbiAgICAgICAgICBTZW50OiBjb2xvcnMuc3VjY2VzcyhTdHJpbmcocmVzcG9uc2Uuc2VudCkpLFxuICAgICAgICAgIFwiQ3JlZGl0cyBVc2VkXCI6IHJlc3BvbnNlLmNyZWRpdHNVc2VkLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsRmFpbGVkKSB7XG4gICAgICAgIGVycm9yKFwiQmF0Y2ggZmFpbGVkXCIsIHtcbiAgICAgICAgICBoaW50OiBgQWxsICR7cmVzcG9uc2UuZmFpbGVkfSBtZXNzYWdlcyBmYWlsZWQgdG8gc2VuZGAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIEJhdGNoIElEOiAke3Jlc3BvbnNlLmJhdGNoSWR9YCkpO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZGltKGAgIENyZWRpdHMgUmVmdW5kZWQ6ICR7cmVzcG9uc2UuY3JlZGl0c1JlZnVuZGVkfWApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsU3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgQmF0Y2ggY29tcGxldGVkIHdpdGggZXJyb3JzXFxuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgQmF0Y2ggSUQ6ICAgICAgICAgJHtyZXNwb25zZS5iYXRjaElkfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBUb3RhbDogICAgICAgICAgICAke3Jlc3BvbnNlLnRvdGFsfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgICBTZW50OiAgICAgICAgICAgICAke2NvbG9ycy5zdWNjZXNzKFN0cmluZyhyZXNwb25zZS5zZW50KSl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgRmFpbGVkOiAgICAgICAgICAgJHtjb2xvcnMuZXJyb3IoU3RyaW5nKHJlc3BvbnNlLmZhaWxlZCkpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIENyZWRpdHMgVXNlZDogICAgICR7cmVzcG9uc2UuY3JlZGl0c1VzZWR9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIENyZWRpdHMgUmVmdW5kZWQ6ICR7cmVzcG9uc2UuY3JlZGl0c1JlZnVuZGVkfWApO1xuXG4gICAgICAgIC8vIFNob3cgZmFpbGVkIG1lc3NhZ2VzIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZXMpIHtcbiAgICAgICAgICBjb25zdCBmYWlsZWRNc2dzID0gcmVzcG9uc2UubWVzc2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKG0pID0+IG0uc3RhdHVzID09PSBcImZhaWxlZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZhaWxlZE1zZ3MubGVuZ3RoID4gMCAmJiBmYWlsZWRNc2dzLmxlbmd0aCA8PSA1KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiXFxuICBGYWlsZWQgbWVzc2FnZXM6XCIpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIGZhaWxlZE1zZ3MpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY29sb3JzLmRpbShgICAgICR7bXNnLnRvfTogJHttc2cuZXJyb3IgfHwgXCJVbmtub3duIGVycm9yXCJ9YCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmYWlsZWRNc2dzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGBcXG4gICR7ZmFpbGVkTXNncy5sZW5ndGh9IG1lc3NhZ2VzIGZhaWxlZC4gVXNlIC0tanNvbiBmb3IgZGV0YWlscy5gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNZXNzYWdlc0Zyb21GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBCYXRjaE1lc3NhZ2VbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIik7XG5cbiAgICAgIC8vIFRyeSBKU09OIGZpcnN0XG4gICAgICBpZiAoZmlsZVBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICB0bzogaXRlbS50byxcbiAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEubWVzc2FnZXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLm1lc3NhZ2VzKSkge1xuICAgICAgICAgIHJldHVybiBkYXRhLm1lc3NhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiSW52YWxpZCBKU09OIGZvcm1hdFwiLCB7XG4gICAgICAgICAgaGludDogXCJFeHBlY3RlZCBhcnJheSBvZiB7dG8sIHRleHR9IG9iamVjdHMgb3Ige21lc3NhZ2VzOiBbLi4uXX1cIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IENTVlxuICAgICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLmNzdlwiKSkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQudHJpbSgpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBjb25zdCBtZXNzYWdlczogQmF0Y2hNZXNzYWdlW10gPSBbXTtcblxuICAgICAgICAvLyBJbXByb3ZlZCBoZWFkZXIgZGV0ZWN0aW9uIC0gY2hlY2sgZm9yIGNvbW1vbiBoZWFkZXIgcGF0dGVybnNcbiAgICAgICAgY29uc3QgaGVhZGVyUGF0dGVybnMgPSBbXG4gICAgICAgICAgXCJ0b1wiLFxuICAgICAgICAgIFwicGhvbmVcIixcbiAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgIFwicmVjaXBpZW50XCIsXG4gICAgICAgICAgXCJtb2JpbGVcIixcbiAgICAgICAgICBcImNlbGxcIixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gbGluZXNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzSGVhZGVyID0gaGVhZGVyUGF0dGVybnMuc29tZSgocCkgPT4gZmlyc3RMaW5lLmluY2x1ZGVzKHApKTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGhhc0hlYWRlciA/IDEgOiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgICAgICAgIGlmICghbGluZSkgY29udGludWU7IC8vIFNraXAgZW1wdHkgbGluZXNcblxuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBwaG9uZSA9IHBhcnRzWzBdLnRyaW0oKS5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgICAgIC8vIE9ubHkgYWRkIGlmIHBob25lIGxvb2tzIHZhbGlkIChzdGFydHMgd2l0aCArIG9yIGRpZ2l0KVxuICAgICAgICAgICAgaWYgKHBob25lICYmIChwaG9uZS5zdGFydHNXaXRoKFwiK1wiKSB8fCAvXlxcZC8udGVzdChwaG9uZSkpKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRvOiBwaG9uZS5zdGFydHNXaXRoKFwiK1wiKSA/IHBob25lIDogYCske3Bob25lfWAsXG4gICAgICAgICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgICAgICAgIHBhcnRzLmxlbmd0aCA+PSAyXG4gICAgICAgICAgICAgICAgICAgID8gcGFydHMuc2xpY2UoMSkuam9pbihcIixcIikudHJpbSgpLnJlcGxhY2UoL1wiL2csIFwiXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgICAgfVxuXG4gICAgICBlcnJvcihcIlVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0XCIsIHtcbiAgICAgICAgaGludDogXCJVc2UgLmpzb24gb3IgLmNzdiBmaWxlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICgoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICBlcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGVycm9yKFwiSW52YWxpZCBKU09OIGluIGZpbGVcIiwgeyBoaW50OiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTWVzc2FnZXNGcm9tRmxhZ3ModG86IHN0cmluZywgdGV4dDogc3RyaW5nKTogQmF0Y2hNZXNzYWdlW10ge1xuICAgIGNvbnN0IHBob25lcyA9IHRvLnNwbGl0KFwiLFwiKS5tYXAoKHApID0+IHAudHJpbSgpKTtcbiAgICByZXR1cm4gcGhvbmVzLm1hcCgocGhvbmUpID0+ICh7IHRvOiBwaG9uZSwgdGV4dCB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -59,19 +59,24 @@ export default class WebhooksTest extends AuthenticatedCommand {
|
|
|
59
59
|
}
|
|
60
60
|
catch (err) {
|
|
61
61
|
testSpinner.stop();
|
|
62
|
-
if
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
|
|
62
|
+
// Check if it's a "webhook not found" error (API returns 404 status)
|
|
63
|
+
// vs a "target URL returned 404" error (API returns 400 with message)
|
|
64
|
+
if (err instanceof Error) {
|
|
65
|
+
const msg = err.message;
|
|
66
|
+
// Only show "not found" if the API itself returned 404 (webhook doesn't exist)
|
|
67
|
+
// Not if the webhook target URL returned 404
|
|
68
|
+
if (msg.includes("404") && !msg.includes("HTTP 404")) {
|
|
69
|
+
error(`Webhook not found: ${args.id}`);
|
|
68
70
|
}
|
|
69
71
|
else {
|
|
70
|
-
error(`Failed to send test event: ${
|
|
72
|
+
error(`Failed to send test event: ${msg}`);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
75
|
+
else {
|
|
76
|
+
error(`Failed to send test event: ${String(err)}`);
|
|
77
|
+
}
|
|
73
78
|
this.exit(1);
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy93ZWJob29rcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFJLEVBQ0osTUFBTSxFQUVOLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBcUI3QixNQUFNLENBQUMsT0FBTyxPQUFPLFlBQWEsU0FBUSxvQkFBb0I7SUFDNUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQztJQUV0RCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDRDQUE0QztRQUM1QyxtREFBbUQ7S0FDcEQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxD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eyBBcmdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIHN1Y2Nlc3MsXG4gIGVycm9yLFxuICBzcGlubmVyLFxuICBqc29uLFxuICBjb2xvcnMsXG4gIGtleVZhbHVlLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgVGVzdERlbGl2ZXJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgZGVsaXZlcnlfaWQ6IHN0cmluZztcbiAgd2ViaG9va191cmw6IHN0cmluZztcbiAgZXZlbnRfdHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcmVzcG9uc2VfdGltZTogbnVtYmVyO1xuICBzdGF0dXNfY29kZT86IG51bWJlcjtcbiAgcmVzcG9uc2VfYm9keT86IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGRlbGl2ZXJlZF9hdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRlc3RXZWJob29rUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlbGl2ZXJ5PzogVGVzdERlbGl2ZXJ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rc1Rlc3QgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiU2VuZCBhIHRlc3QgZXZlbnQgdG8gYSB3ZWJob29rXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgdGVzdCB3aGtfYWJjMTIzXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3ZWJob29rcyB0ZXN0IHdoa19hYmMxMjMgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgaWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldlYmhvb2sgSUQgdG8gdGVzdFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdlYmhvb2tzVGVzdCk7XG5cbiAgICBjb25zdCB0ZXN0U3Bpbm5lciA9IHNwaW5uZXIoXCJTZW5kaW5nIHRlc3QgZXZlbnQuLi5cIik7XG4gICAgdGVzdFNwaW5uZXIuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxUZXN0V2ViaG9va1Jlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvdjEvd2ViaG9va3MvJHthcmdzLmlkfS90ZXN0YCxcbiAgICAgICk7XG5cbiAgICAgIHRlc3RTcGlubmVyLnN0b3AoKTtcblxuICAgICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAgICBqc29uKHJlc3VsdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsaXZlcnkgPSByZXN1bHQuZGVsaXZlcnk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiBkZWxpdmVyeSkge1xuICAgICAgICBzdWNjZXNzKFwiVGVzdCBldmVudCBkZWxpdmVyZWRcIiwge1xuICAgICAgICAgIFwiRGVsaXZlcnkgSURcIjogZGVsaXZlcnkuZGVsaXZlcnlfaWQsXG4gICAgICAgICAgXCJXZWJob29rIFVSTFwiOiBkZWxpdmVyeS53ZWJob29rX3VybCxcbiAgICAgICAgICBcIkV2ZW50IFR5cGVcIjogZGVsaXZlcnkuZXZlbnRfdHlwZSxcbiAgICAgICAgICBcIlJlc3BvbnNlIFRpbWVcIjogYCR7ZGVsaXZlcnkucmVzcG9uc2VfdGltZX1tc2AsXG4gICAgICAgICAgXCJTdGF0dXMgQ29kZVwiOiBTdHJpbmcoZGVsaXZlcnkuc3RhdHVzX2NvZGUpLFxuICAgICAgICAgIFwiRGVsaXZlcmVkIEF0XCI6IGRlbGl2ZXJ5LmRlbGl2ZXJlZF9hdCB8fCBcIkp1c3Qgbm93XCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkZWxpdmVyeS5yZXNwb25zZV9ib2R5KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiUmVzcG9uc2UgQm9keTpcIikpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgZGVsaXZlcnkucmVzcG9uc2VfYm9keS5zdWJzdHJpbmcoMCwgMjAwKSArXG4gICAgICAgICAgICAgIChkZWxpdmVyeS5yZXNwb25zZV9ib2R5Lmxlbmd0aCA+IDIwMCA/IFwiLi4uXCIgOiBcIlwiKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcihcIlRlc3QgZXZlbnQgZmFpbGVkXCIsIHtcbiAgICAgICAgICBcIkRlbGl2ZXJ5IElEXCI6IGRlbGl2ZXJ5Py5kZWxpdmVyeV9pZCB8fCBcIk4vQVwiLFxuICAgICAgICAgIFwiV2ViaG9vayBVUkxcIjogZGVsaXZlcnk/LndlYmhvb2tfdXJsIHx8IFwiTi9BXCIsXG4gICAgICAgICAgU3RhdHVzOiBkZWxpdmVyeT8uc3RhdHVzIHx8IFwiZmFpbGVkXCIsXG4gICAgICAgICAgRXJyb3I6IGRlbGl2ZXJ5Py5lcnJvciB8fCByZXN1bHQubWVzc2FnZSB8fCBcIlVua25vd24gZXJyb3JcIixcbiAgICAgICAgICAuLi4oZGVsaXZlcnk/LnN0YXR1c19jb2RlICYmIHtcbiAgICAgICAgICAgIFwiU3RhdHVzIENvZGVcIjogU3RyaW5nKGRlbGl2ZXJ5LnN0YXR1c19jb2RlKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0ZXN0U3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBcIndlYmhvb2sgbm90IGZvdW5kXCIgZXJyb3IgKEFQSSByZXR1cm5zIDQwNCBzdGF0dXMpXG4gICAgICAvLyB2cyBhIFwidGFyZ2V0IFVSTCByZXR1cm5lZCA0MDRcIiBlcnJvciAoQVBJIHJldHVybnMgNDAwIHdpdGggbWVzc2FnZSlcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgLy8gT25seSBzaG93IFwibm90IGZvdW5kXCIgaWYgdGhlIEFQSSBpdHNlbGYgcmV0dXJuZWQgNDA0ICh3ZWJob29rIGRvZXNuJ3QgZXhpc3QpXG4gICAgICAgIC8vIE5vdCBpZiB0aGUgd2ViaG9vayB0YXJnZXQgVVJMIHJldHVybmVkIDQwNFxuICAgICAgICBpZiAobXNnLmluY2x1ZGVzKFwiNDA0XCIpICYmICFtc2cuaW5jbHVkZXMoXCJIVFRQIDQwNFwiKSkge1xuICAgICAgICAgIGVycm9yKGBXZWJob29rIG5vdCBmb3VuZDogJHthcmdzLmlkfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKGBGYWlsZWQgdG8gc2VuZCB0ZXN0IGV2ZW50OiAke21zZ31gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoYEZhaWxlZCB0byBzZW5kIHRlc3QgZXZlbnQ6ICR7U3RyaW5nKGVycil9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/oclif.manifest.json
CHANGED
|
@@ -752,8 +752,10 @@
|
|
|
752
752
|
"examples": [
|
|
753
753
|
"<%= config.bin %> sms batch --file recipients.json",
|
|
754
754
|
"<%= config.bin %> sms batch --to +15551234567,+15559876543 --text \"Hello everyone!\"",
|
|
755
|
+
"<%= config.bin %> sms batch --file phones.csv --text \"Your order is ready!\"",
|
|
755
756
|
"<%= config.bin %> sms batch --file recipients.csv --from \"Sendly\"",
|
|
756
|
-
"<%= config.bin %> sms batch --file messages.json --json"
|
|
757
|
+
"<%= config.bin %> sms batch --file messages.json --json",
|
|
758
|
+
"<%= config.bin %> sms batch --file phones.csv --text \"Hi\" --dry-run"
|
|
757
759
|
],
|
|
758
760
|
"flags": {
|
|
759
761
|
"json": {
|
|
@@ -793,7 +795,7 @@
|
|
|
793
795
|
},
|
|
794
796
|
"text": {
|
|
795
797
|
"char": "m",
|
|
796
|
-
"description": "Message text (
|
|
798
|
+
"description": "Message text (works with --to or --file for phone-only lists)",
|
|
797
799
|
"name": "text",
|
|
798
800
|
"hasDynamicHelp": false,
|
|
799
801
|
"multiple": false,
|
|
@@ -806,6 +808,13 @@
|
|
|
806
808
|
"hasDynamicHelp": false,
|
|
807
809
|
"multiple": false,
|
|
808
810
|
"type": "option"
|
|
811
|
+
},
|
|
812
|
+
"dry-run": {
|
|
813
|
+
"char": "d",
|
|
814
|
+
"description": "Preview batch without sending (validates access, shows cost breakdown)",
|
|
815
|
+
"name": "dry-run",
|
|
816
|
+
"allowNo": false,
|
|
817
|
+
"type": "boolean"
|
|
809
818
|
}
|
|
810
819
|
},
|
|
811
820
|
"hasDynamicHelp": false,
|
|
@@ -1714,5 +1723,5 @@
|
|
|
1714
1723
|
]
|
|
1715
1724
|
}
|
|
1716
1725
|
},
|
|
1717
|
-
"version": "3.
|
|
1726
|
+
"version": "3.3.1"
|
|
1718
1727
|
}
|