@sendly/cli 3.11.0 → 3.12.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 CHANGED
@@ -206,6 +206,159 @@ This creates a secure tunnel and displays:
206
206
  - Webhook secret for signature verification
207
207
  - Real-time event stream
208
208
 
209
+ #### Create Webhook
210
+
211
+ ```bash
212
+ sendly webhooks create --url https://myapp.com/webhook --events message.delivered,message.failed
213
+
214
+ # With description and mode
215
+ sendly webhooks create \
216
+ --url https://myapp.com/webhook \
217
+ --events message.delivered,message.failed,message.bounced \
218
+ --description "Production webhook" \
219
+ --mode live
220
+ ```
221
+
222
+ #### Get Webhook Details
223
+
224
+ ```bash
225
+ sendly webhooks get whk_abc123
226
+ ```
227
+
228
+ #### Update Webhook
229
+
230
+ ```bash
231
+ sendly webhooks update whk_abc123 --url https://newdomain.com/webhook
232
+
233
+ # Update events
234
+ sendly webhooks update whk_abc123 --events message.delivered,message.bounced
235
+
236
+ # Disable webhook
237
+ sendly webhooks update whk_abc123 --active false
238
+ ```
239
+
240
+ #### Delete Webhook
241
+
242
+ ```bash
243
+ sendly webhooks delete whk_abc123
244
+
245
+ # Skip confirmation
246
+ sendly webhooks delete whk_abc123 --yes
247
+ ```
248
+
249
+ #### Test Webhook
250
+
251
+ ```bash
252
+ sendly webhooks test whk_abc123
253
+ ```
254
+
255
+ #### View Delivery History
256
+
257
+ ```bash
258
+ sendly webhooks deliveries whk_abc123
259
+
260
+ # Show only failed deliveries
261
+ sendly webhooks deliveries whk_abc123 --failed-only --limit 20
262
+ ```
263
+
264
+ #### Rotate Webhook Secret
265
+
266
+ ```bash
267
+ sendly webhooks rotate-secret whk_abc123
268
+ ```
269
+
270
+ Note: Old secret remains valid for 24 hours during migration.
271
+
272
+ ### Verification (OTP) Commands
273
+
274
+ #### Send OTP
275
+
276
+ ```bash
277
+ sendly verify send --to "+15551234567"
278
+
279
+ # With custom app name
280
+ sendly verify send --to "+15551234567" --app-name "MyApp"
281
+
282
+ # With template
283
+ sendly verify send --to "+15551234567" --template tpl_preset_2fa
284
+
285
+ # Custom code length and timeout
286
+ sendly verify send --to "+15551234567" --code-length 6 --timeout 300
287
+ ```
288
+
289
+ #### Check OTP Code
290
+
291
+ ```bash
292
+ sendly verify check ver_abc123 --code 123456
293
+ ```
294
+
295
+ #### Get Verification Status
296
+
297
+ ```bash
298
+ sendly verify status ver_abc123
299
+ ```
300
+
301
+ #### List Recent Verifications
302
+
303
+ ```bash
304
+ sendly verify list
305
+
306
+ # Limit results
307
+ sendly verify list --limit 10
308
+ ```
309
+
310
+ #### Resend OTP
311
+
312
+ ```bash
313
+ sendly verify resend ver_abc123
314
+ ```
315
+
316
+ ### Template Commands
317
+
318
+ #### List Templates
319
+
320
+ ```bash
321
+ sendly templates list
322
+ ```
323
+
324
+ #### Get Template Details
325
+
326
+ ```bash
327
+ sendly templates get tpl_abc123
328
+
329
+ # Get a preset template
330
+ sendly templates get tpl_preset_2fa
331
+ ```
332
+
333
+ #### Create Template
334
+
335
+ ```bash
336
+ sendly templates create --name "My OTP" --text "Your code is {{code}}"
337
+ ```
338
+
339
+ Supported variables: `{{code}}`, `{{app_name}}`
340
+
341
+ #### Publish Template
342
+
343
+ ```bash
344
+ sendly templates publish tpl_abc123
345
+ ```
346
+
347
+ #### Delete Template
348
+
349
+ ```bash
350
+ sendly templates delete tpl_abc123
351
+
352
+ # Skip confirmation
353
+ sendly templates delete tpl_abc123 --force
354
+ ```
355
+
356
+ #### List Preset Templates
357
+
358
+ ```bash
359
+ sendly templates presets
360
+ ```
361
+
209
362
  ### Logs Commands
210
363
 
211
364
  #### Tail Logs
@@ -253,6 +406,29 @@ This checks:
253
406
  - Configuration validity
254
407
  - Network issues
255
408
 
409
+ ### Utility Commands
410
+
411
+ #### Account Status Dashboard
412
+
413
+ ```bash
414
+ sendly status
415
+ ```
416
+
417
+ Shows account overview including:
418
+ - Verification status and tier
419
+ - Credit balance
420
+ - Active API keys and webhooks
421
+ - Recent messages
422
+
423
+ #### Trigger Test Event
424
+
425
+ For testing with `webhooks listen`:
426
+
427
+ ```bash
428
+ sendly trigger message.delivered
429
+ sendly trigger message.bounced
430
+ ```
431
+
256
432
  ## Environment Variables
257
433
 
258
434
  Override CLI configuration with environment variables:
@@ -46,7 +46,9 @@ export default class WebhooksGet extends AuthenticatedCommand {
46
46
  ? colors.error("open")
47
47
  : colors.warning("half_open"),
48
48
  "Failure Count": String(webhook.failure_count),
49
- "Secret Version": String(webhook.secret_version),
49
+ "Secret Version": webhook.secret_version
50
+ ? String(webhook.secret_version)
51
+ : "1",
50
52
  Created: formatDate(webhook.created_at),
51
53
  Updated: formatDate(webhook.updated_at),
52
54
  });
@@ -62,4 +64,4 @@ export default class WebhooksGet extends AuthenticatedCommand {
62
64
  }
63
65
  }
64
66
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFFTixVQUFVLEdBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQWtCN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFZLFNBQVEsb0JBQW9CO0lBQzNELE1BQU0sQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUM7SUFFM0MsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyQ0FBMkM7UUFDM0Msa0RBQWtEO0tBQ25ELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsWUFBWTtZQUN6QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBVSxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWQsTUFBTSxXQUFXLEdBQUc7WUFDbEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDN0IsQ0FBQztRQUVGLFFBQVEsQ0FBQztZQUNQLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDcEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUztnQkFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDOUIsZUFBZSxFQUNiLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUTtnQkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxNQUFNO29CQUNoQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ3RCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNuQyxlQUFlLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDOUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDaEQsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsT0FBTyxDQUNaLDZCQUE2QixPQUFPLENBQUMsYUFBYSxrQkFBa0IsQ0FDckUsQ0FDRixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxLQUFLLENBQ1YsNERBQTRELENBQzdELENBQ0YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsQ0FBQyxDQUNwRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIGtleVZhbHVlLFxuICBqc29uLFxuICBoZWFkZXIsXG4gIGZvcm1hdERhdGUsXG4gIGNvbG9ycyxcbiAgZGl2aWRlcixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxudHlwZSBXZWJob29rTW9kZSA9IFwiYWxsXCIgfCBcInRlc3RcIiB8IFwibGl2ZVwiO1xuXG5pbnRlcmZhY2UgV2ViaG9vayB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBldmVudHM6IHN0cmluZ1tdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbW9kZTogV2ViaG9va01vZGU7XG4gIGlzX2FjdGl2ZTogYm9vbGVhbjtcbiAgZmFpbHVyZV9jb3VudDogbnVtYmVyO1xuICBjaXJjdWl0X3N0YXRlOiBcImNsb3NlZFwiIHwgXCJvcGVuXCIgfCBcImhhbGZfb3BlblwiO1xuICBzZWNyZXRfdmVyc2lvbjogbnVtYmVyO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIHVwZGF0ZWRfYXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va3NHZXQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiR2V0IHdlYmhvb2sgZGV0YWlsc1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGdldCB3aGtfYWJjMTIzXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3ZWJob29rcyBnZXQgd2hrX2FiYzEyMyAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICBpZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiV2ViaG9vayBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gIH07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhcmdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdlYmhvb2tzR2V0KTtcblxuICAgIGNvbnN0IHdlYmhvb2sgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PFdlYmhvb2s+KGAvYXBpL3YxL3dlYmhvb2tzLyR7YXJncy5pZH1gKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24od2ViaG9vayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaGVhZGVyKGBXZWJob29rICR7d2ViaG9vay5pZH1gKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgY29uc3QgbW9kZURpc3BsYXkgPSB7XG4gICAgICBhbGw6IGNvbG9ycy5kaW0oXCJhbGxcIiksXG4gICAgICB0ZXN0OiBjb2xvcnMud2FybmluZyhcInRlc3RcIiksXG4gICAgICBsaXZlOiBjb2xvcnMuc3VjY2VzcyhcImxpdmVcIiksXG4gICAgfTtcblxuICAgIGtleVZhbHVlKHtcbiAgICAgIElEOiB3ZWJob29rLmlkLFxuICAgICAgVVJMOiB3ZWJob29rLnVybCxcbiAgICAgIEV2ZW50czogd2ViaG9vay5ldmVudHMuam9pbihcIiwgXCIpLFxuICAgICAgTW9kZTogbW9kZURpc3BsYXlbd2ViaG9vay5tb2RlXSB8fCB3ZWJob29rLm1vZGUgfHwgY29sb3JzLmRpbShcImFsbFwiKSxcbiAgICAgIC4uLih3ZWJob29rLmRlc2NyaXB0aW9uID8geyBEZXNjcmlwdGlvbjogd2ViaG9vay5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgU3RhdHVzOiB3ZWJob29rLmlzX2FjdGl2ZVxuICAgICAgICA/IGNvbG9ycy5zdWNjZXNzKFwiYWN0aXZlXCIpXG4gICAgICAgIDogY29sb3JzLndhcm5pbmcoXCJpbmFjdGl2ZVwiKSxcbiAgICAgIFwiQ2lyY3VpdCBTdGF0ZVwiOlxuICAgICAgICB3ZWJob29rLmNpcmN1aXRfc3RhdGUgPT09IFwiY2xvc2VkXCJcbiAgICAgICAgICA/IGNvbG9ycy5zdWNjZXNzKFwiY2xvc2VkXCIpXG4gICAgICAgICAgOiB3ZWJob29rLmNpcmN1aXRfc3RhdGUgPT09IFwib3BlblwiXG4gICAgICAgICAgICA/IGNvbG9ycy5lcnJvcihcIm9wZW5cIilcbiAgICAgICAgICAgIDogY29sb3JzLndhcm5pbmcoXCJoYWxmX29wZW5cIiksXG4gICAgICBcIkZhaWx1cmUgQ291bnRcIjogU3RyaW5nKHdlYmhvb2suZmFpbHVyZV9jb3VudCksXG4gICAgICBcIlNlY3JldCBWZXJzaW9uXCI6IFN0cmluZyh3ZWJob29rLnNlY3JldF92ZXJzaW9uKSxcbiAgICAgIENyZWF0ZWQ6IGZvcm1hdERhdGUod2ViaG9vay5jcmVhdGVkX2F0KSxcbiAgICAgIFVwZGF0ZWQ6IGZvcm1hdERhdGUod2ViaG9vay51cGRhdGVkX2F0KSxcbiAgICB9KTtcblxuICAgIGlmICh3ZWJob29rLmZhaWx1cmVfY291bnQgPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy53YXJuaW5nKFxuICAgICAgICAgIGDimqAgVGhpcyB3ZWJob29rIGhhcyBmYWlsZWQgJHt3ZWJob29rLmZhaWx1cmVfY291bnR9IHRpbWVzIHJlY2VudGx5LmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJDaGVjayBkZWxpdmVyeSBoaXN0b3J5IHdpdGg6XCIpLFxuICAgICAgICBjb2xvcnMuY29kZShgc2VuZGx5IHdlYmhvb2tzIGRlbGl2ZXJpZXMgJHt3ZWJob29rLmlkfWApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAod2ViaG9vay5jaXJjdWl0X3N0YXRlID09PSBcIm9wZW5cIikge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZXJyb3IoXG4gICAgICAgICAgXCLimqAgQ2lyY3VpdCBicmVha2VyIGlzIE9QRU4gLSB3ZWJob29rIGRlbGl2ZXJpZXMgYXJlIHBhdXNlZC5cIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcIlRlc3QgeW91ciBlbmRwb2ludCBhbmQgdGhlIGNpcmN1aXQgd2lsbCBhdXRvLXJlY292ZXIuXCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFFTixVQUFVLEdBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQWtCN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFZLFNBQVEsb0JBQW9CO0lBQzNELE1BQU0sQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUM7SUFFM0MsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyQ0FBMkM7UUFDM0Msa0RBQWtEO0tBQ25ELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsWUFBWTtZQUN6QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBVSxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMs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L2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAga2V5VmFsdWUsXG4gIGpzb24sXG4gIGhlYWRlcixcbiAgZm9ybWF0RGF0ZSxcbiAgY29sb3JzLFxuICBkaXZpZGVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG50eXBlIFdlYmhvb2tNb2RlID0gXCJhbGxcIiB8IFwidGVzdFwiIHwgXCJsaXZlXCI7XG5cbmludGVyZmFjZSBXZWJob29rIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGV2ZW50czogc3RyaW5nW107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtb2RlOiBXZWJob29rTW9kZTtcbiAgaXNfYWN0aXZlOiBib29sZWFuO1xuICBmYWlsdXJlX2NvdW50OiBudW1iZXI7XG4gIGNpcmN1aXRfc3RhdGU6IFwiY2xvc2VkXCIgfCBcIm9wZW5cIiB8IFwiaGFsZl9vcGVuXCI7XG4gIHNlY3JldF92ZXJzaW9uOiBudW1iZXI7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rc0dldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJHZXQgd2ViaG9vayBkZXRhaWxzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgZ2V0IHdoa19hYmMxMjNcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGdldCB3aGtfYWJjMTIzIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXZWJob29rIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2ViaG9va3NHZXQpO1xuXG4gICAgY29uc3Qgd2ViaG9vayA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8V2ViaG9vaz4oYC9hcGkvdjEvd2ViaG9va3MvJHthcmdzLmlkfWApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbih3ZWJob29rKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoZWFkZXIoYFdlYmhvb2sgJHt3ZWJob29rLmlkfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBjb25zdCBtb2RlRGlzcGxheSA9IHtcbiAgICAgIGFsbDogY29sb3JzLmRpbShcImFsbFwiKSxcbiAgICAgIHRlc3Q6IGNvbG9ycy53YXJuaW5nKFwidGVzdFwiKSxcbiAgICAgIGxpdmU6IGNvbG9ycy5zdWNjZXNzKFwibGl2ZVwiKSxcbiAgICB9O1xuXG4gICAga2V5VmFsdWUoe1xuICAgICAgSUQ6IHdlYmhvb2suaWQsXG4gICAgICBVUkw6IHdlYmhvb2sudXJsLFxuICAgICAgRXZlbnRzOiB3ZWJob29rLmV2ZW50cy5qb2luKFwiLCBcIiksXG4gICAgICBNb2RlOiBtb2RlRGlzcGxheVt3ZWJob29rLm1vZGVdIHx8IHdlYmhvb2subW9kZSB8fCBjb2xvcnMuZGltKFwiYWxsXCIpLFxuICAgICAgLi4uKHdlYmhvb2suZGVzY3JpcHRpb24gPyB7IERlc2NyaXB0aW9uOiB3ZWJob29rLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICBTdGF0dXM6IHdlYmhvb2suaXNfYWN0aXZlXG4gICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJhY3RpdmVcIilcbiAgICAgICAgOiBjb2xvcnMud2FybmluZyhcImluYWN0aXZlXCIpLFxuICAgICAgXCJDaXJjdWl0IFN0YXRlXCI6XG4gICAgICAgIHdlYmhvb2suY2lyY3VpdF9zdGF0ZSA9PT0gXCJjbG9zZWRcIlxuICAgICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJjbG9zZWRcIilcbiAgICAgICAgICA6IHdlYmhvb2suY2lyY3VpdF9zdGF0ZSA9PT0gXCJvcGVuXCJcbiAgICAgICAgICAgID8gY29sb3JzLmVycm9yKFwib3BlblwiKVxuICAgICAgICAgICAgOiBjb2xvcnMud2FybmluZyhcImhhbGZfb3BlblwiKSxcbiAgICAgIFwiRmFpbHVyZSBDb3VudFwiOiBTdHJpbmcod2ViaG9vay5mYWlsdXJlX2NvdW50KSxcbiAgICAgIFwiU2VjcmV0IFZlcnNpb25cIjogd2ViaG9vay5zZWNyZXRfdmVyc2lvblxuICAgICAgICA/IFN0cmluZyh3ZWJob29rLnNlY3JldF92ZXJzaW9uKVxuICAgICAgICA6IFwiMVwiLFxuICAgICAgQ3JlYXRlZDogZm9ybWF0RGF0ZSh3ZWJob29rLmNyZWF0ZWRfYXQpLFxuICAgICAgVXBkYXRlZDogZm9ybWF0RGF0ZSh3ZWJob29rLnVwZGF0ZWRfYXQpLFxuICAgIH0pO1xuXG4gICAgaWYgKHdlYmhvb2suZmFpbHVyZV9jb3VudCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgYOKaoCBUaGlzIHdlYmhvb2sgaGFzIGZhaWxlZCAke3dlYmhvb2suZmFpbHVyZV9jb3VudH0gdGltZXMgcmVjZW50bHkuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcIkNoZWNrIGRlbGl2ZXJ5IGhpc3Rvcnkgd2l0aDpcIiksXG4gICAgICAgIGNvbG9ycy5jb2RlKGBzZW5kbHkgd2ViaG9va3MgZGVsaXZlcmllcyAke3dlYmhvb2suaWR9YCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh3ZWJob29rLmNpcmN1aXRfc3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICBcIuKaoCBDaXJjdWl0IGJyZWFrZXIgaXMgT1BFTiAtIHdlYmhvb2sgZGVsaXZlcmllcyBhcmUgcGF1c2VkLlwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFwiVGVzdCB5b3VyIGVuZHBvaW50IGFuZCB0aGUgY2lyY3VpdCB3aWxsIGF1dG8tcmVjb3Zlci5cIiksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19