@sendly/cli 3.11.0 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -0
- package/dist/commands/webhooks/get.js +4 -2
- package/oclif.manifest.json +460 -460
- package/package.json +1 -1
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":
|
|
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,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFFTixVQUFVLEdBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQWtCN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFZLFNBQVEsb0JBQW9CO0lBQzNELE1BQU0sQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUM7SUFFM0MsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQiwyQ0FBMkM7UUFDM0Msa0RBQWtEO0tBQ25ELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZCxXQUFXLEVBQUUsWUFBWTtZQUN6QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBVSxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMs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L2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAga2V5VmFsdWUsXG4gIGpzb24sXG4gIGhlYWRlcixcbiAgZm9ybWF0RGF0ZSxcbiAgY29sb3JzLFxuICBkaXZpZGVyLFxuICBpc0pzb25Nb2RlLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG50eXBlIFdlYmhvb2tNb2RlID0gXCJhbGxcIiB8IFwidGVzdFwiIHwgXCJsaXZlXCI7XG5cbmludGVyZmFjZSBXZWJob29rIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGV2ZW50czogc3RyaW5nW107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtb2RlOiBXZWJob29rTW9kZTtcbiAgaXNfYWN0aXZlOiBib29sZWFuO1xuICBmYWlsdXJlX2NvdW50OiBudW1iZXI7XG4gIGNpcmN1aXRfc3RhdGU6IFwiY2xvc2VkXCIgfCBcIm9wZW5cIiB8IFwiaGFsZl9vcGVuXCI7XG4gIHNlY3JldF92ZXJzaW9uOiBudW1iZXI7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rc0dldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJHZXQgd2ViaG9vayBkZXRhaWxzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgZ2V0IHdoa19hYmMxMjNcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGdldCB3aGtfYWJjMTIzIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIGlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXZWJob29rIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2ViaG9va3NHZXQpO1xuXG4gICAgY29uc3Qgd2ViaG9vayA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8V2ViaG9vaz4oYC9hcGkvdjEvd2ViaG9va3MvJHthcmdzLmlkfWApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbih3ZWJob29rKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoZWFkZXIoYFdlYmhvb2sgJHt3ZWJob29rLmlkfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBjb25zdCBtb2RlRGlzcGxheSA9IHtcbiAgICAgIGFsbDogY29sb3JzLmRpbShcImFsbFwiKSxcbiAgICAgIHRlc3Q6IGNvbG9ycy53YXJuaW5nKFwidGVzdFwiKSxcbiAgICAgIGxpdmU6IGNvbG9ycy5zdWNjZXNzKFwibGl2ZVwiKSxcbiAgICB9O1xuXG4gICAga2V5VmFsdWUoe1xuICAgICAgSUQ6IHdlYmhvb2suaWQsXG4gICAgICBVUkw6IHdlYmhvb2sudXJsLFxuICAgICAgRXZlbnRzOiB3ZWJob29rLmV2ZW50cy5qb2luKFwiLCBcIiksXG4gICAgICBNb2RlOiBtb2RlRGlzcGxheVt3ZWJob29rLm1vZGVdIHx8IHdlYmhvb2subW9kZSB8fCBjb2xvcnMuZGltKFwiYWxsXCIpLFxuICAgICAgLi4uKHdlYmhvb2suZGVzY3JpcHRpb24gPyB7IERlc2NyaXB0aW9uOiB3ZWJob29rLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICBTdGF0dXM6IHdlYmhvb2suaXNfYWN0aXZlXG4gICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJhY3RpdmVcIilcbiAgICAgICAgOiBjb2xvcnMud2FybmluZyhcImluYWN0aXZlXCIpLFxuICAgICAgXCJDaXJjdWl0IFN0YXRlXCI6XG4gICAgICAgIHdlYmhvb2suY2lyY3VpdF9zdGF0ZSA9PT0gXCJjbG9zZWRcIlxuICAgICAgICAgID8gY29sb3JzLnN1Y2Nlc3MoXCJjbG9zZWRcIilcbiAgICAgICAgICA6IHdlYmhvb2suY2lyY3VpdF9zdGF0ZSA9PT0gXCJvcGVuXCJcbiAgICAgICAgICAgID8gY29sb3JzLmVycm9yKFwib3BlblwiKVxuICAgICAgICAgICAgOiBjb2xvcnMud2FybmluZyhcImhhbGZfb3BlblwiKSxcbiAgICAgIFwiRmFpbHVyZSBDb3VudFwiOiBTdHJpbmcod2ViaG9vay5mYWlsdXJlX2NvdW50KSxcbiAgICAgIFwiU2VjcmV0IFZlcnNpb25cIjogd2ViaG9vay5zZWNyZXRfdmVyc2lvblxuICAgICAgICA/IFN0cmluZyh3ZWJob29rLnNlY3JldF92ZXJzaW9uKVxuICAgICAgICA6IFwiMVwiLFxuICAgICAgQ3JlYXRlZDogZm9ybWF0RGF0ZSh3ZWJob29rLmNyZWF0ZWRfYXQpLFxuICAgICAgVXBkYXRlZDogZm9ybWF0RGF0ZSh3ZWJob29rLnVwZGF0ZWRfYXQpLFxuICAgIH0pO1xuXG4gICAgaWYgKHdlYmhvb2suZmFpbHVyZV9jb3VudCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgYOKaoCBUaGlzIHdlYmhvb2sgaGFzIGZhaWxlZCAke3dlYmhvb2suZmFpbHVyZV9jb3VudH0gdGltZXMgcmVjZW50bHkuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcIkNoZWNrIGRlbGl2ZXJ5IGhpc3Rvcnkgd2l0aDpcIiksXG4gICAgICAgIGNvbG9ycy5jb2RlKGBzZW5kbHkgd2ViaG9va3MgZGVsaXZlcmllcyAke3dlYmhvb2suaWR9YCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh3ZWJob29rLmNpcmN1aXRfc3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICBcIuKaoCBDaXJjdWl0IGJyZWFrZXIgaXMgT1BFTiAtIHdlYmhvb2sgZGVsaXZlcmllcyBhcmUgcGF1c2VkLlwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFwiVGVzdCB5b3VyIGVuZHBvaW50IGFuZCB0aGUgY2lyY3VpdCB3aWxsIGF1dG8tcmVjb3Zlci5cIiksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|