@sendly/cli 3.13.0 → 3.13.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.
@@ -341,25 +341,18 @@
341
341
  "whoami.js"
342
342
  ]
343
343
  },
344
- "config:get": {
344
+ "campaigns:cancel": {
345
345
  "aliases": [],
346
346
  "args": {
347
- "key": {
348
- "description": "Configuration key",
349
- "name": "key",
350
- "options": [
351
- "environment",
352
- "baseUrl",
353
- "defaultFormat",
354
- "colorEnabled"
355
- ],
347
+ "id": {
348
+ "description": "Campaign ID",
349
+ "name": "id",
356
350
  "required": true
357
351
  }
358
352
  },
359
- "description": "Get a configuration value",
353
+ "description": "Cancel a scheduled campaign",
360
354
  "examples": [
361
- "<%= config.bin %> config get environment",
362
- "<%= config.bin %> config get baseUrl"
355
+ "<%= config.bin %> campaigns cancel cmp_xxx"
363
356
  ],
364
357
  "flags": {
365
358
  "json": {
@@ -378,27 +371,32 @@
378
371
  },
379
372
  "hasDynamicHelp": false,
380
373
  "hiddenAliases": [],
381
- "id": "config:get",
374
+ "id": "campaigns:cancel",
382
375
  "pluginAlias": "@sendly/cli",
383
376
  "pluginName": "@sendly/cli",
384
377
  "pluginType": "core",
385
378
  "strict": true,
386
- "enableJsonFlag": false,
387
379
  "isESM": true,
388
380
  "relativePath": [
389
381
  "dist",
390
382
  "commands",
391
- "config",
392
- "get.js"
383
+ "campaigns",
384
+ "cancel.js"
393
385
  ]
394
386
  },
395
- "config:list": {
387
+ "campaigns:clone": {
396
388
  "aliases": [],
397
- "args": {},
398
- "description": "List all configuration values",
389
+ "args": {
390
+ "id": {
391
+ "description": "Campaign ID to clone",
392
+ "name": "id",
393
+ "required": true
394
+ }
395
+ },
396
+ "description": "Clone an existing campaign",
399
397
  "examples": [
400
- "<%= config.bin %> config list",
401
- "<%= config.bin %> config list --json"
398
+ "<%= config.bin %> campaigns clone cmp_xxx",
399
+ "<%= config.bin %> campaigns clone cmp_xxx --name \"Copy of Sale\""
402
400
  ],
403
401
  "flags": {
404
402
  "json": {
@@ -413,49 +411,39 @@
413
411
  "name": "quiet",
414
412
  "allowNo": false,
415
413
  "type": "boolean"
414
+ },
415
+ "name": {
416
+ "char": "n",
417
+ "description": "Name for the cloned campaign",
418
+ "name": "name",
419
+ "hasDynamicHelp": false,
420
+ "multiple": false,
421
+ "type": "option"
416
422
  }
417
423
  },
418
424
  "hasDynamicHelp": false,
419
425
  "hiddenAliases": [],
420
- "id": "config:list",
426
+ "id": "campaigns:clone",
421
427
  "pluginAlias": "@sendly/cli",
422
428
  "pluginName": "@sendly/cli",
423
429
  "pluginType": "core",
424
430
  "strict": true,
425
- "enableJsonFlag": false,
426
431
  "isESM": true,
427
432
  "relativePath": [
428
433
  "dist",
429
434
  "commands",
430
- "config",
431
- "list.js"
435
+ "campaigns",
436
+ "clone.js"
432
437
  ]
433
438
  },
434
- "config:set": {
439
+ "campaigns:create": {
435
440
  "aliases": [],
436
- "args": {
437
- "key": {
438
- "description": "Configuration key",
439
- "name": "key",
440
- "options": [
441
- "environment",
442
- "baseUrl",
443
- "defaultFormat",
444
- "colorEnabled"
445
- ],
446
- "required": true
447
- },
448
- "value": {
449
- "description": "Configuration value",
450
- "name": "value",
451
- "required": true
452
- }
453
- },
454
- "description": "Set a configuration value",
441
+ "args": {},
442
+ "description": "Create a new campaign",
455
443
  "examples": [
456
- "<%= config.bin %> config set environment live",
457
- "<%= config.bin %> config set defaultFormat json",
458
- "<%= config.bin %> config set baseUrl https://api.sendly.live"
444
+ "<%= config.bin %> campaigns create --name \"Welcome\" --text \"Hello {{name}}!\" --list lst_xxx",
445
+ "<%= config.bin %> campaigns create --name \"Sale\" --text \"50% off today!\" --list lst_customers --list lst_subscribers",
446
+ "<%= config.bin %> campaigns create --name \"OTP\" --template tpl_preset_otp --list lst_xxx"
459
447
  ],
460
448
  "flags": {
461
449
  "json": {
@@ -470,31 +458,69 @@
470
458
  "name": "quiet",
471
459
  "allowNo": false,
472
460
  "type": "boolean"
461
+ },
462
+ "name": {
463
+ "char": "n",
464
+ "description": "Campaign name",
465
+ "name": "name",
466
+ "required": true,
467
+ "hasDynamicHelp": false,
468
+ "multiple": false,
469
+ "type": "option"
470
+ },
471
+ "text": {
472
+ "char": "t",
473
+ "description": "Message text (supports {{variables}})",
474
+ "name": "text",
475
+ "hasDynamicHelp": false,
476
+ "multiple": false,
477
+ "type": "option"
478
+ },
479
+ "template": {
480
+ "description": "Template ID to use instead of text",
481
+ "name": "template",
482
+ "hasDynamicHelp": false,
483
+ "multiple": false,
484
+ "type": "option"
485
+ },
486
+ "list": {
487
+ "char": "l",
488
+ "description": "Contact list ID (can specify multiple)",
489
+ "name": "list",
490
+ "required": true,
491
+ "hasDynamicHelp": false,
492
+ "multiple": true,
493
+ "type": "option"
473
494
  }
474
495
  },
475
496
  "hasDynamicHelp": false,
476
497
  "hiddenAliases": [],
477
- "id": "config:set",
498
+ "id": "campaigns:create",
478
499
  "pluginAlias": "@sendly/cli",
479
500
  "pluginName": "@sendly/cli",
480
501
  "pluginType": "core",
481
502
  "strict": true,
482
- "enableJsonFlag": false,
483
503
  "isESM": true,
484
504
  "relativePath": [
485
505
  "dist",
486
506
  "commands",
487
- "config",
488
- "set.js"
507
+ "campaigns",
508
+ "create.js"
489
509
  ]
490
510
  },
491
- "credits:balance": {
511
+ "campaigns:delete": {
492
512
  "aliases": [],
493
- "args": {},
494
- "description": "Check your credit balance",
513
+ "args": {
514
+ "id": {
515
+ "description": "Campaign ID",
516
+ "name": "id",
517
+ "required": true
518
+ }
519
+ },
520
+ "description": "Delete a campaign",
495
521
  "examples": [
496
- "<%= config.bin %> credits balance",
497
- "<%= config.bin %> credits balance --json"
522
+ "<%= config.bin %> campaigns delete cmp_xxx",
523
+ "<%= config.bin %> campaigns delete cmp_xxx --yes"
498
524
  ],
499
525
  "flags": {
500
526
  "json": {
@@ -509,11 +535,18 @@
509
535
  "name": "quiet",
510
536
  "allowNo": false,
511
537
  "type": "boolean"
538
+ },
539
+ "yes": {
540
+ "char": "y",
541
+ "description": "Skip confirmation prompt",
542
+ "name": "yes",
543
+ "allowNo": false,
544
+ "type": "boolean"
512
545
  }
513
546
  },
514
547
  "hasDynamicHelp": false,
515
548
  "hiddenAliases": [],
516
- "id": "credits:balance",
549
+ "id": "campaigns:delete",
517
550
  "pluginAlias": "@sendly/cli",
518
551
  "pluginName": "@sendly/cli",
519
552
  "pluginType": "core",
@@ -522,18 +555,23 @@
522
555
  "relativePath": [
523
556
  "dist",
524
557
  "commands",
525
- "credits",
526
- "balance.js"
558
+ "campaigns",
559
+ "delete.js"
527
560
  ]
528
561
  },
529
- "credits:history": {
562
+ "campaigns:get": {
530
563
  "aliases": [],
531
- "args": {},
532
- "description": "View credit transaction history",
564
+ "args": {
565
+ "id": {
566
+ "description": "Campaign ID",
567
+ "name": "id",
568
+ "required": true
569
+ }
570
+ },
571
+ "description": "Get campaign details",
533
572
  "examples": [
534
- "<%= config.bin %> credits history",
535
- "<%= config.bin %> credits history --limit 10",
536
- "<%= config.bin %> credits history --json"
573
+ "<%= config.bin %> campaigns get cmp_xxx",
574
+ "<%= config.bin %> campaigns get cmp_xxx --json"
537
575
  ],
538
576
  "flags": {
539
577
  "json": {
@@ -548,20 +586,11 @@
548
586
  "name": "quiet",
549
587
  "allowNo": false,
550
588
  "type": "boolean"
551
- },
552
- "limit": {
553
- "char": "l",
554
- "description": "Number of transactions to show",
555
- "name": "limit",
556
- "default": 20,
557
- "hasDynamicHelp": false,
558
- "multiple": false,
559
- "type": "option"
560
589
  }
561
590
  },
562
591
  "hasDynamicHelp": false,
563
592
  "hiddenAliases": [],
564
- "id": "credits:history",
593
+ "id": "campaigns:get",
565
594
  "pluginAlias": "@sendly/cli",
566
595
  "pluginName": "@sendly/cli",
567
596
  "pluginType": "core",
@@ -570,18 +599,19 @@
570
599
  "relativePath": [
571
600
  "dist",
572
601
  "commands",
573
- "credits",
574
- "history.js"
602
+ "campaigns",
603
+ "get.js"
575
604
  ]
576
605
  },
577
- "keys:create": {
606
+ "campaigns:list": {
578
607
  "aliases": [],
579
608
  "args": {},
580
- "description": "Create a new API key",
609
+ "description": "List campaigns",
581
610
  "examples": [
582
- "<%= config.bin %> keys create --name \"Production\"",
583
- "<%= config.bin %> keys create --name \"CI Testing\" --type test",
584
- "<%= config.bin %> keys create --name \"Backend\" --type live --json"
611
+ "<%= config.bin %> campaigns list",
612
+ "<%= config.bin %> campaigns list --status draft",
613
+ "<%= config.bin %> campaigns list --limit 10",
614
+ "<%= config.bin %> campaigns list --json"
585
615
  ],
586
616
  "flags": {
587
617
  "json": {
@@ -597,32 +627,35 @@
597
627
  "allowNo": false,
598
628
  "type": "boolean"
599
629
  },
600
- "name": {
601
- "char": "n",
602
- "description": "Name for the API key",
603
- "name": "name",
604
- "required": true,
630
+ "limit": {
631
+ "char": "l",
632
+ "description": "Number of campaigns to show",
633
+ "name": "limit",
634
+ "default": 20,
605
635
  "hasDynamicHelp": false,
606
636
  "multiple": false,
607
637
  "type": "option"
608
638
  },
609
- "type": {
610
- "char": "t",
611
- "description": "Key type (test or live)",
612
- "name": "type",
613
- "default": "test",
639
+ "offset": {
640
+ "description": "Offset for pagination",
641
+ "name": "offset",
642
+ "default": 0,
643
+ "hasDynamicHelp": false,
644
+ "multiple": false,
645
+ "type": "option"
646
+ },
647
+ "status": {
648
+ "char": "s",
649
+ "description": "Filter by status (draft, scheduled, sending, sent, cancelled)",
650
+ "name": "status",
614
651
  "hasDynamicHelp": false,
615
652
  "multiple": false,
616
- "options": [
617
- "test",
618
- "live"
619
- ],
620
653
  "type": "option"
621
654
  }
622
655
  },
623
656
  "hasDynamicHelp": false,
624
657
  "hiddenAliases": [],
625
- "id": "keys:create",
658
+ "id": "campaigns:list",
626
659
  "pluginAlias": "@sendly/cli",
627
660
  "pluginName": "@sendly/cli",
628
661
  "pluginType": "core",
@@ -631,17 +664,23 @@
631
664
  "relativePath": [
632
665
  "dist",
633
666
  "commands",
634
- "keys",
635
- "create.js"
667
+ "campaigns",
668
+ "list.js"
636
669
  ]
637
670
  },
638
- "keys:list": {
671
+ "campaigns:preview": {
639
672
  "aliases": [],
640
- "args": {},
641
- "description": "List your API keys",
673
+ "args": {
674
+ "id": {
675
+ "description": "Campaign ID",
676
+ "name": "id",
677
+ "required": true
678
+ }
679
+ },
680
+ "description": "Preview campaign cost and recipients",
642
681
  "examples": [
643
- "<%= config.bin %> keys list",
644
- "<%= config.bin %> keys list --json"
682
+ "<%= config.bin %> campaigns preview cmp_xxx",
683
+ "<%= config.bin %> campaigns preview cmp_xxx --json"
645
684
  ],
646
685
  "flags": {
647
686
  "json": {
@@ -660,7 +699,7 @@
660
699
  },
661
700
  "hasDynamicHelp": false,
662
701
  "hiddenAliases": [],
663
- "id": "keys:list",
702
+ "id": "campaigns:preview",
664
703
  "pluginAlias": "@sendly/cli",
665
704
  "pluginName": "@sendly/cli",
666
705
  "pluginType": "core",
@@ -669,24 +708,23 @@
669
708
  "relativePath": [
670
709
  "dist",
671
710
  "commands",
672
- "keys",
673
- "list.js"
711
+ "campaigns",
712
+ "preview.js"
674
713
  ]
675
714
  },
676
- "keys:revoke": {
715
+ "campaigns:schedule": {
677
716
  "aliases": [],
678
717
  "args": {
679
- "keyId": {
680
- "description": "Key ID to revoke (e.g., key_abc123)",
681
- "name": "keyId",
718
+ "id": {
719
+ "description": "Campaign ID",
720
+ "name": "id",
682
721
  "required": true
683
722
  }
684
723
  },
685
- "description": "Revoke an API key",
724
+ "description": "Schedule a campaign for later",
686
725
  "examples": [
687
- "<%= config.bin %> keys revoke key_abc123",
688
- "<%= config.bin %> keys revoke key_abc123 --reason \"Compromised\"",
689
- "<%= config.bin %> keys revoke key_abc123 --yes"
726
+ "<%= config.bin %> campaigns schedule cmp_xxx --at \"2024-01-15T10:00:00Z\"",
727
+ "<%= config.bin %> campaigns schedule cmp_xxx --at \"2024-01-15T10:00:00\" --timezone \"America/New_York\""
690
728
  ],
691
729
  "flags": {
692
730
  "json": {
@@ -702,25 +740,26 @@
702
740
  "allowNo": false,
703
741
  "type": "boolean"
704
742
  },
705
- "reason": {
706
- "char": "r",
707
- "description": "Reason for revoking the key",
708
- "name": "reason",
743
+ "at": {
744
+ "description": "When to send (ISO 8601 datetime)",
745
+ "name": "at",
746
+ "required": true,
709
747
  "hasDynamicHelp": false,
710
748
  "multiple": false,
711
749
  "type": "option"
712
750
  },
713
- "yes": {
714
- "char": "y",
715
- "description": "Skip confirmation prompt",
716
- "name": "yes",
717
- "allowNo": false,
718
- "type": "boolean"
751
+ "timezone": {
752
+ "char": "z",
753
+ "description": "Timezone (e.g., \"America/New_York\")",
754
+ "name": "timezone",
755
+ "hasDynamicHelp": false,
756
+ "multiple": false,
757
+ "type": "option"
719
758
  }
720
759
  },
721
760
  "hasDynamicHelp": false,
722
761
  "hiddenAliases": [],
723
- "id": "keys:revoke",
762
+ "id": "campaigns:schedule",
724
763
  "pluginAlias": "@sendly/cli",
725
764
  "pluginName": "@sendly/cli",
726
765
  "pluginType": "core",
@@ -729,18 +768,23 @@
729
768
  "relativePath": [
730
769
  "dist",
731
770
  "commands",
732
- "keys",
733
- "revoke.js"
771
+ "campaigns",
772
+ "schedule.js"
734
773
  ]
735
774
  },
736
- "logs:tail": {
775
+ "campaigns:send": {
737
776
  "aliases": [],
738
- "args": {},
739
- "description": "Tail logs in real-time (like stripe logs tail)",
777
+ "args": {
778
+ "id": {
779
+ "description": "Campaign ID",
780
+ "name": "id",
781
+ "required": true
782
+ }
783
+ },
784
+ "description": "Send a campaign immediately",
740
785
  "examples": [
741
- "<%= config.bin %> logs tail",
742
- "<%= config.bin %> logs tail --status failed",
743
- "<%= config.bin %> logs tail --since 1h"
786
+ "<%= config.bin %> campaigns send cmp_xxx",
787
+ "<%= config.bin %> campaigns send cmp_xxx --yes"
744
788
  ],
745
789
  "flags": {
746
790
  "json": {
@@ -756,34 +800,17 @@
756
800
  "allowNo": false,
757
801
  "type": "boolean"
758
802
  },
759
- "status": {
760
- "char": "s",
761
- "description": "Filter by status (sent, delivered, failed)",
762
- "name": "status",
763
- "hasDynamicHelp": false,
764
- "multiple": false,
765
- "type": "option"
766
- },
767
- "since": {
768
- "description": "Show logs since (e.g., 1h, 30m, 1d)",
769
- "name": "since",
770
- "default": "1h",
771
- "hasDynamicHelp": false,
772
- "multiple": false,
773
- "type": "option"
774
- },
775
- "type": {
776
- "char": "t",
777
- "description": "Filter by type (message, api_call, webhook)",
778
- "name": "type",
779
- "hasDynamicHelp": false,
780
- "multiple": false,
781
- "type": "option"
803
+ "yes": {
804
+ "char": "y",
805
+ "description": "Skip confirmation prompt",
806
+ "name": "yes",
807
+ "allowNo": false,
808
+ "type": "boolean"
782
809
  }
783
810
  },
784
811
  "hasDynamicHelp": false,
785
812
  "hiddenAliases": [],
786
- "id": "logs:tail",
813
+ "id": "campaigns:send",
787
814
  "pluginAlias": "@sendly/cli",
788
815
  "pluginName": "@sendly/cli",
789
816
  "pluginType": "core",
@@ -792,22 +819,25 @@
792
819
  "relativePath": [
793
820
  "dist",
794
821
  "commands",
795
- "logs",
796
- "tail.js"
822
+ "campaigns",
823
+ "send.js"
797
824
  ]
798
825
  },
799
- "sms:batch": {
826
+ "campaigns:update": {
800
827
  "aliases": [],
801
- "args": {},
802
- "description": "Send batch SMS messages (uploads CSV to cloud for audit trail)",
828
+ "args": {
829
+ "id": {
830
+ "description": "Campaign ID",
831
+ "name": "id",
832
+ "required": true
833
+ }
834
+ },
835
+ "description": "Update a campaign",
803
836
  "examples": [
804
- "<%= config.bin %> sms batch --file recipients.csv",
805
- "<%= config.bin %> sms batch --file phones.csv --text \"Hello everyone!\"",
806
- "<%= config.bin %> sms batch --to +15551234567,+15559876543 --text \"Hello!\"",
807
- "<%= config.bin %> sms batch --file recipients.csv --dry-run",
808
- "<%= config.bin %> sms batch --file phones.csv --text \"Code: 123\" --type transactional",
809
- "<%= config.bin %> sms batch --reuse abc123-def456",
810
- "<%= config.bin %> sms batch --history"
837
+ "<%= config.bin %> campaigns update cmp_xxx --name \"New Name\"",
838
+ "<%= config.bin %> campaigns update cmp_xxx --text \"Updated message\"",
839
+ "<%= config.bin %> campaigns update cmp_xxx --list lst_xxx",
840
+ "<%= config.bin %> campaigns update cmp_xxx --name \"Sale\" --text \"50% off!\""
811
841
  ],
812
842
  "flags": {
813
843
  "json": {
@@ -823,94 +853,41 @@
823
853
  "allowNo": false,
824
854
  "type": "boolean"
825
855
  },
826
- "file": {
827
- "char": "F",
828
- "description": "CSV file with phone numbers (and optional message text)",
829
- "exclusive": [
830
- "to",
831
- "reuse",
832
- "history"
833
- ],
834
- "name": "file",
835
- "hasDynamicHelp": false,
836
- "multiple": false,
837
- "type": "option"
838
- },
839
- "to": {
840
- "char": "t",
841
- "description": "Comma-separated recipient phone numbers (E.164 format)",
842
- "exclusive": [
843
- "file",
844
- "reuse",
845
- "history"
846
- ],
847
- "name": "to",
856
+ "name": {
857
+ "char": "n",
858
+ "description": "Campaign name",
859
+ "name": "name",
848
860
  "hasDynamicHelp": false,
849
861
  "multiple": false,
850
862
  "type": "option"
851
863
  },
852
864
  "text": {
853
- "char": "m",
854
- "description": "Message text (required with --to, optional with --file if CSV has text column)",
865
+ "char": "t",
866
+ "description": "Message text (supports {{variables}})",
855
867
  "name": "text",
856
868
  "hasDynamicHelp": false,
857
869
  "multiple": false,
858
870
  "type": "option"
859
871
  },
860
- "from": {
861
- "char": "f",
862
- "description": "Sender ID or phone number for all messages",
863
- "name": "from",
864
- "hasDynamicHelp": false,
865
- "multiple": false,
866
- "type": "option"
867
- },
868
- "type": {
869
- "description": "Message type: marketing (default) or transactional. Transactional bypasses quiet hours.",
870
- "name": "type",
871
- "default": "marketing",
872
+ "list": {
873
+ "char": "l",
874
+ "description": "Contact list ID",
875
+ "name": "list",
872
876
  "hasDynamicHelp": false,
873
877
  "multiple": false,
874
- "options": [
875
- "marketing",
876
- "transactional"
877
- ],
878
878
  "type": "option"
879
879
  },
880
- "dry-run": {
881
- "char": "d",
882
- "description": "Preview batch without sending (validates access, shows cost and compliance breakdown)",
883
- "name": "dry-run",
884
- "allowNo": false,
885
- "type": "boolean"
886
- },
887
- "reuse": {
888
- "description": "Re-use a previous batch upload by ID (see --history)",
889
- "exclusive": [
890
- "file",
891
- "to",
892
- "history"
893
- ],
894
- "name": "reuse",
880
+ "template": {
881
+ "description": "Template ID",
882
+ "name": "template",
895
883
  "hasDynamicHelp": false,
896
884
  "multiple": false,
897
885
  "type": "option"
898
- },
899
- "history": {
900
- "description": "Show recent batch upload history",
901
- "exclusive": [
902
- "file",
903
- "to",
904
- "reuse"
905
- ],
906
- "name": "history",
907
- "allowNo": false,
908
- "type": "boolean"
909
886
  }
910
887
  },
911
888
  "hasDynamicHelp": false,
912
889
  "hiddenAliases": [],
913
- "id": "sms:batch",
890
+ "id": "campaigns:update",
914
891
  "pluginAlias": "@sendly/cli",
915
892
  "pluginName": "@sendly/cli",
916
893
  "pluginType": "core",
@@ -919,23 +896,29 @@
919
896
  "relativePath": [
920
897
  "dist",
921
898
  "commands",
922
- "sms",
923
- "batch.js"
899
+ "campaigns",
900
+ "update.js"
924
901
  ]
925
902
  },
926
- "sms:cancel": {
903
+ "config:get": {
927
904
  "aliases": [],
928
905
  "args": {
929
- "id": {
930
- "description": "Scheduled message ID to cancel",
931
- "name": "id",
906
+ "key": {
907
+ "description": "Configuration key",
908
+ "name": "key",
909
+ "options": [
910
+ "environment",
911
+ "baseUrl",
912
+ "defaultFormat",
913
+ "colorEnabled"
914
+ ],
932
915
  "required": true
933
916
  }
934
917
  },
935
- "description": "Cancel a scheduled message",
918
+ "description": "Get a configuration value",
936
919
  "examples": [
937
- "<%= config.bin %> sms cancel sched_abc123",
938
- "<%= config.bin %> sms cancel sched_abc123 --json"
920
+ "<%= config.bin %> config get environment",
921
+ "<%= config.bin %> config get baseUrl"
939
922
  ],
940
923
  "flags": {
941
924
  "json": {
@@ -954,32 +937,27 @@
954
937
  },
955
938
  "hasDynamicHelp": false,
956
939
  "hiddenAliases": [],
957
- "id": "sms:cancel",
940
+ "id": "config:get",
958
941
  "pluginAlias": "@sendly/cli",
959
942
  "pluginName": "@sendly/cli",
960
943
  "pluginType": "core",
961
944
  "strict": true,
945
+ "enableJsonFlag": false,
962
946
  "isESM": true,
963
947
  "relativePath": [
964
948
  "dist",
965
949
  "commands",
966
- "sms",
967
- "cancel.js"
950
+ "config",
951
+ "get.js"
968
952
  ]
969
953
  },
970
- "sms:get": {
954
+ "config:list": {
971
955
  "aliases": [],
972
- "args": {
973
- "id": {
974
- "description": "Message ID",
975
- "name": "id",
976
- "required": true
977
- }
978
- },
979
- "description": "Get details of a specific message",
956
+ "args": {},
957
+ "description": "List all configuration values",
980
958
  "examples": [
981
- "<%= config.bin %> sms get msg_abc123",
982
- "<%= config.bin %> sms get msg_abc123 --json"
959
+ "<%= config.bin %> config list",
960
+ "<%= config.bin %> config list --json"
983
961
  ],
984
962
  "flags": {
985
963
  "json": {
@@ -998,30 +976,45 @@
998
976
  },
999
977
  "hasDynamicHelp": false,
1000
978
  "hiddenAliases": [],
1001
- "id": "sms:get",
979
+ "id": "config:list",
1002
980
  "pluginAlias": "@sendly/cli",
1003
981
  "pluginName": "@sendly/cli",
1004
982
  "pluginType": "core",
1005
983
  "strict": true,
984
+ "enableJsonFlag": false,
1006
985
  "isESM": true,
1007
986
  "relativePath": [
1008
987
  "dist",
1009
988
  "commands",
1010
- "sms",
1011
- "get.js"
989
+ "config",
990
+ "list.js"
1012
991
  ]
1013
992
  },
1014
- "sms:list": {
993
+ "config:set": {
1015
994
  "aliases": [],
1016
- "args": {},
1017
- "description": "List sent messages",
995
+ "args": {
996
+ "key": {
997
+ "description": "Configuration key",
998
+ "name": "key",
999
+ "options": [
1000
+ "environment",
1001
+ "baseUrl",
1002
+ "defaultFormat",
1003
+ "colorEnabled"
1004
+ ],
1005
+ "required": true
1006
+ },
1007
+ "value": {
1008
+ "description": "Configuration value",
1009
+ "name": "value",
1010
+ "required": true
1011
+ }
1012
+ },
1013
+ "description": "Set a configuration value",
1018
1014
  "examples": [
1019
- "<%= config.bin %> sms list",
1020
- "<%= config.bin %> sms list --limit 10",
1021
- "<%= config.bin %> sms list --page 2",
1022
- "<%= config.bin %> sms list --status delivered",
1023
- "<%= config.bin %> sms list --sandbox",
1024
- "<%= config.bin %> sms list --json"
1015
+ "<%= config.bin %> config set environment live",
1016
+ "<%= config.bin %> config set defaultFormat json",
1017
+ "<%= config.bin %> config set baseUrl https://api.sendly.live"
1025
1018
  ],
1026
1019
  "flags": {
1027
1020
  "json": {
@@ -1036,70 +1029,33 @@
1036
1029
  "name": "quiet",
1037
1030
  "allowNo": false,
1038
1031
  "type": "boolean"
1039
- },
1040
- "limit": {
1041
- "char": "l",
1042
- "description": "Number of messages per page",
1043
- "name": "limit",
1044
- "default": 20,
1045
- "hasDynamicHelp": false,
1046
- "multiple": false,
1047
- "type": "option"
1048
- },
1049
- "page": {
1050
- "char": "p",
1051
- "description": "Page number (starts at 1)",
1052
- "name": "page",
1053
- "hasDynamicHelp": false,
1054
- "multiple": false,
1055
- "type": "option"
1056
- },
1057
- "offset": {
1058
- "description": "Offset from start (alternative to --page)",
1059
- "name": "offset",
1060
- "hasDynamicHelp": false,
1061
- "multiple": false,
1062
- "type": "option"
1063
- },
1064
- "status": {
1065
- "char": "s",
1066
- "description": "Filter by status (queued, sent, delivered, failed)",
1067
- "name": "status",
1068
- "hasDynamicHelp": false,
1069
- "multiple": false,
1070
- "type": "option"
1071
- },
1072
- "sandbox": {
1073
- "description": "Show sandbox/test messages (live keys only)",
1074
- "name": "sandbox",
1075
- "allowNo": false,
1076
- "type": "boolean"
1077
1032
  }
1078
1033
  },
1079
1034
  "hasDynamicHelp": false,
1080
1035
  "hiddenAliases": [],
1081
- "id": "sms:list",
1036
+ "id": "config:set",
1082
1037
  "pluginAlias": "@sendly/cli",
1083
1038
  "pluginName": "@sendly/cli",
1084
1039
  "pluginType": "core",
1085
1040
  "strict": true,
1041
+ "enableJsonFlag": false,
1086
1042
  "isESM": true,
1087
1043
  "relativePath": [
1088
1044
  "dist",
1089
1045
  "commands",
1090
- "sms",
1091
- "list.js"
1046
+ "config",
1047
+ "set.js"
1092
1048
  ]
1093
1049
  },
1094
- "sms:schedule": {
1050
+ "contacts:create": {
1095
1051
  "aliases": [],
1096
1052
  "args": {},
1097
- "description": "Schedule an SMS message for future delivery",
1053
+ "description": "Create a new contact",
1098
1054
  "examples": [
1099
- "<%= config.bin %> sms schedule --to +15551234567 --text \"Reminder!\" --at \"2025-01-20T10:00:00Z\"",
1100
- "<%= config.bin %> sms schedule --to +15551234567 --text \"Meeting in 1 hour\" --at \"2025-01-15T14:00:00Z\" --from \"Sendly\"",
1101
- "<%= config.bin %> sms schedule --to +15551234567 --text \"Your code: 123456\" --at \"2025-01-20T10:00:00Z\" --type transactional",
1102
- "<%= config.bin %> sms schedule --to +15551234567 --text \"Hello!\" --at \"2025-01-20T10:00:00Z\" --json"
1055
+ "<%= config.bin %> contacts create --phone +15551234567",
1056
+ "<%= config.bin %> contacts create --phone +15551234567 --name \"John Doe\"",
1057
+ "<%= config.bin %> contacts create --phone +15551234567 --name \"John\" --email john@example.com",
1058
+ "<%= config.bin %> contacts create --phone +15551234567 --json"
1103
1059
  ],
1104
1060
  "flags": {
1105
1061
  "json": {
@@ -1115,27 +1071,1178 @@
1115
1071
  "allowNo": false,
1116
1072
  "type": "boolean"
1117
1073
  },
1118
- "to": {
1119
- "char": "t",
1120
- "description": "Recipient phone number (E.164 format)",
1121
- "name": "to",
1074
+ "phone": {
1075
+ "char": "p",
1076
+ "description": "Phone number in E.164 format (e.g., +15551234567)",
1077
+ "name": "phone",
1122
1078
  "required": true,
1123
1079
  "hasDynamicHelp": false,
1124
1080
  "multiple": false,
1125
1081
  "type": "option"
1126
1082
  },
1127
- "text": {
1128
- "char": "m",
1129
- "description": "Message text",
1130
- "name": "text",
1131
- "required": true,
1083
+ "name": {
1084
+ "char": "n",
1085
+ "description": "Contact name",
1086
+ "name": "name",
1132
1087
  "hasDynamicHelp": false,
1133
1088
  "multiple": false,
1134
1089
  "type": "option"
1135
1090
  },
1136
- "at": {
1137
- "char": "a",
1138
- "description": "Scheduled time (ISO 8601 format, e.g., 2025-01-20T10:00:00Z)",
1091
+ "email": {
1092
+ "char": "e",
1093
+ "description": "Contact email",
1094
+ "name": "email",
1095
+ "hasDynamicHelp": false,
1096
+ "multiple": false,
1097
+ "type": "option"
1098
+ }
1099
+ },
1100
+ "hasDynamicHelp": false,
1101
+ "hiddenAliases": [],
1102
+ "id": "contacts:create",
1103
+ "pluginAlias": "@sendly/cli",
1104
+ "pluginName": "@sendly/cli",
1105
+ "pluginType": "core",
1106
+ "strict": true,
1107
+ "isESM": true,
1108
+ "relativePath": [
1109
+ "dist",
1110
+ "commands",
1111
+ "contacts",
1112
+ "create.js"
1113
+ ]
1114
+ },
1115
+ "contacts:delete": {
1116
+ "aliases": [],
1117
+ "args": {
1118
+ "id": {
1119
+ "description": "Contact ID to delete",
1120
+ "name": "id",
1121
+ "required": true
1122
+ }
1123
+ },
1124
+ "description": "Delete a contact",
1125
+ "examples": [
1126
+ "<%= config.bin %> contacts delete cnt_xxx",
1127
+ "<%= config.bin %> contacts delete cnt_xxx --yes"
1128
+ ],
1129
+ "flags": {
1130
+ "json": {
1131
+ "description": "Output in JSON format",
1132
+ "name": "json",
1133
+ "allowNo": false,
1134
+ "type": "boolean"
1135
+ },
1136
+ "quiet": {
1137
+ "char": "q",
1138
+ "description": "Minimal output",
1139
+ "name": "quiet",
1140
+ "allowNo": false,
1141
+ "type": "boolean"
1142
+ },
1143
+ "yes": {
1144
+ "char": "y",
1145
+ "description": "Skip confirmation prompt",
1146
+ "name": "yes",
1147
+ "allowNo": false,
1148
+ "type": "boolean"
1149
+ }
1150
+ },
1151
+ "hasDynamicHelp": false,
1152
+ "hiddenAliases": [],
1153
+ "id": "contacts:delete",
1154
+ "pluginAlias": "@sendly/cli",
1155
+ "pluginName": "@sendly/cli",
1156
+ "pluginType": "core",
1157
+ "strict": true,
1158
+ "isESM": true,
1159
+ "relativePath": [
1160
+ "dist",
1161
+ "commands",
1162
+ "contacts",
1163
+ "delete.js"
1164
+ ]
1165
+ },
1166
+ "contacts:get": {
1167
+ "aliases": [],
1168
+ "args": {
1169
+ "id": {
1170
+ "description": "Contact ID",
1171
+ "name": "id",
1172
+ "required": true
1173
+ }
1174
+ },
1175
+ "description": "Get contact details",
1176
+ "examples": [
1177
+ "<%= config.bin %> contacts get cnt_xxx",
1178
+ "<%= config.bin %> contacts get cnt_xxx --json"
1179
+ ],
1180
+ "flags": {
1181
+ "json": {
1182
+ "description": "Output in JSON format",
1183
+ "name": "json",
1184
+ "allowNo": false,
1185
+ "type": "boolean"
1186
+ },
1187
+ "quiet": {
1188
+ "char": "q",
1189
+ "description": "Minimal output",
1190
+ "name": "quiet",
1191
+ "allowNo": false,
1192
+ "type": "boolean"
1193
+ }
1194
+ },
1195
+ "hasDynamicHelp": false,
1196
+ "hiddenAliases": [],
1197
+ "id": "contacts:get",
1198
+ "pluginAlias": "@sendly/cli",
1199
+ "pluginName": "@sendly/cli",
1200
+ "pluginType": "core",
1201
+ "strict": true,
1202
+ "isESM": true,
1203
+ "relativePath": [
1204
+ "dist",
1205
+ "commands",
1206
+ "contacts",
1207
+ "get.js"
1208
+ ]
1209
+ },
1210
+ "contacts:import": {
1211
+ "aliases": [],
1212
+ "args": {
1213
+ "file": {
1214
+ "description": "Path to CSV file (columns: phone, name, email)",
1215
+ "name": "file",
1216
+ "required": true
1217
+ }
1218
+ },
1219
+ "description": "Import contacts from a CSV file",
1220
+ "examples": [
1221
+ "<%= config.bin %> contacts import contacts.csv",
1222
+ "<%= config.bin %> contacts import contacts.csv --list lst_xxx",
1223
+ "<%= config.bin %> contacts import contacts.csv --list lst_xxx --json"
1224
+ ],
1225
+ "flags": {
1226
+ "json": {
1227
+ "description": "Output in JSON format",
1228
+ "name": "json",
1229
+ "allowNo": false,
1230
+ "type": "boolean"
1231
+ },
1232
+ "quiet": {
1233
+ "char": "q",
1234
+ "description": "Minimal output",
1235
+ "name": "quiet",
1236
+ "allowNo": false,
1237
+ "type": "boolean"
1238
+ },
1239
+ "list": {
1240
+ "char": "l",
1241
+ "description": "Contact list ID to add imported contacts to",
1242
+ "name": "list",
1243
+ "hasDynamicHelp": false,
1244
+ "multiple": false,
1245
+ "type": "option"
1246
+ }
1247
+ },
1248
+ "hasDynamicHelp": false,
1249
+ "hiddenAliases": [],
1250
+ "id": "contacts:import",
1251
+ "pluginAlias": "@sendly/cli",
1252
+ "pluginName": "@sendly/cli",
1253
+ "pluginType": "core",
1254
+ "strict": true,
1255
+ "isESM": true,
1256
+ "relativePath": [
1257
+ "dist",
1258
+ "commands",
1259
+ "contacts",
1260
+ "import.js"
1261
+ ]
1262
+ },
1263
+ "contacts:list": {
1264
+ "aliases": [],
1265
+ "args": {},
1266
+ "description": "List contacts",
1267
+ "examples": [
1268
+ "<%= config.bin %> contacts list",
1269
+ "<%= config.bin %> contacts list --search john",
1270
+ "<%= config.bin %> contacts list --list lst_xxx",
1271
+ "<%= config.bin %> contacts list --limit 50",
1272
+ "<%= config.bin %> contacts list --json"
1273
+ ],
1274
+ "flags": {
1275
+ "json": {
1276
+ "description": "Output in JSON format",
1277
+ "name": "json",
1278
+ "allowNo": false,
1279
+ "type": "boolean"
1280
+ },
1281
+ "quiet": {
1282
+ "char": "q",
1283
+ "description": "Minimal output",
1284
+ "name": "quiet",
1285
+ "allowNo": false,
1286
+ "type": "boolean"
1287
+ },
1288
+ "limit": {
1289
+ "char": "l",
1290
+ "description": "Number of contacts to show",
1291
+ "name": "limit",
1292
+ "default": 50,
1293
+ "hasDynamicHelp": false,
1294
+ "multiple": false,
1295
+ "type": "option"
1296
+ },
1297
+ "offset": {
1298
+ "description": "Offset for pagination",
1299
+ "name": "offset",
1300
+ "default": 0,
1301
+ "hasDynamicHelp": false,
1302
+ "multiple": false,
1303
+ "type": "option"
1304
+ },
1305
+ "search": {
1306
+ "char": "s",
1307
+ "description": "Search by name, phone, or email",
1308
+ "name": "search",
1309
+ "hasDynamicHelp": false,
1310
+ "multiple": false,
1311
+ "type": "option"
1312
+ },
1313
+ "list": {
1314
+ "description": "Filter by contact list ID",
1315
+ "name": "list",
1316
+ "hasDynamicHelp": false,
1317
+ "multiple": false,
1318
+ "type": "option"
1319
+ }
1320
+ },
1321
+ "hasDynamicHelp": false,
1322
+ "hiddenAliases": [],
1323
+ "id": "contacts:list",
1324
+ "pluginAlias": "@sendly/cli",
1325
+ "pluginName": "@sendly/cli",
1326
+ "pluginType": "core",
1327
+ "strict": true,
1328
+ "isESM": true,
1329
+ "relativePath": [
1330
+ "dist",
1331
+ "commands",
1332
+ "contacts",
1333
+ "list.js"
1334
+ ]
1335
+ },
1336
+ "contacts:update": {
1337
+ "aliases": [],
1338
+ "args": {
1339
+ "id": {
1340
+ "description": "Contact ID",
1341
+ "name": "id",
1342
+ "required": true
1343
+ }
1344
+ },
1345
+ "description": "Update a contact",
1346
+ "examples": [
1347
+ "<%= config.bin %> contacts update cnt_xxx --name \"John Doe\"",
1348
+ "<%= config.bin %> contacts update cnt_xxx --email john@example.com",
1349
+ "<%= config.bin %> contacts update cnt_xxx --name \"John\" --email john@example.com"
1350
+ ],
1351
+ "flags": {
1352
+ "json": {
1353
+ "description": "Output in JSON format",
1354
+ "name": "json",
1355
+ "allowNo": false,
1356
+ "type": "boolean"
1357
+ },
1358
+ "quiet": {
1359
+ "char": "q",
1360
+ "description": "Minimal output",
1361
+ "name": "quiet",
1362
+ "allowNo": false,
1363
+ "type": "boolean"
1364
+ },
1365
+ "name": {
1366
+ "char": "n",
1367
+ "description": "Contact name",
1368
+ "name": "name",
1369
+ "hasDynamicHelp": false,
1370
+ "multiple": false,
1371
+ "type": "option"
1372
+ },
1373
+ "email": {
1374
+ "char": "e",
1375
+ "description": "Contact email",
1376
+ "name": "email",
1377
+ "hasDynamicHelp": false,
1378
+ "multiple": false,
1379
+ "type": "option"
1380
+ }
1381
+ },
1382
+ "hasDynamicHelp": false,
1383
+ "hiddenAliases": [],
1384
+ "id": "contacts:update",
1385
+ "pluginAlias": "@sendly/cli",
1386
+ "pluginName": "@sendly/cli",
1387
+ "pluginType": "core",
1388
+ "strict": true,
1389
+ "isESM": true,
1390
+ "relativePath": [
1391
+ "dist",
1392
+ "commands",
1393
+ "contacts",
1394
+ "update.js"
1395
+ ]
1396
+ },
1397
+ "credits:balance": {
1398
+ "aliases": [],
1399
+ "args": {},
1400
+ "description": "Check your credit balance",
1401
+ "examples": [
1402
+ "<%= config.bin %> credits balance",
1403
+ "<%= config.bin %> credits balance --json"
1404
+ ],
1405
+ "flags": {
1406
+ "json": {
1407
+ "description": "Output in JSON format",
1408
+ "name": "json",
1409
+ "allowNo": false,
1410
+ "type": "boolean"
1411
+ },
1412
+ "quiet": {
1413
+ "char": "q",
1414
+ "description": "Minimal output",
1415
+ "name": "quiet",
1416
+ "allowNo": false,
1417
+ "type": "boolean"
1418
+ }
1419
+ },
1420
+ "hasDynamicHelp": false,
1421
+ "hiddenAliases": [],
1422
+ "id": "credits:balance",
1423
+ "pluginAlias": "@sendly/cli",
1424
+ "pluginName": "@sendly/cli",
1425
+ "pluginType": "core",
1426
+ "strict": true,
1427
+ "isESM": true,
1428
+ "relativePath": [
1429
+ "dist",
1430
+ "commands",
1431
+ "credits",
1432
+ "balance.js"
1433
+ ]
1434
+ },
1435
+ "credits:history": {
1436
+ "aliases": [],
1437
+ "args": {},
1438
+ "description": "View credit transaction history",
1439
+ "examples": [
1440
+ "<%= config.bin %> credits history",
1441
+ "<%= config.bin %> credits history --limit 10",
1442
+ "<%= config.bin %> credits history --json"
1443
+ ],
1444
+ "flags": {
1445
+ "json": {
1446
+ "description": "Output in JSON format",
1447
+ "name": "json",
1448
+ "allowNo": false,
1449
+ "type": "boolean"
1450
+ },
1451
+ "quiet": {
1452
+ "char": "q",
1453
+ "description": "Minimal output",
1454
+ "name": "quiet",
1455
+ "allowNo": false,
1456
+ "type": "boolean"
1457
+ },
1458
+ "limit": {
1459
+ "char": "l",
1460
+ "description": "Number of transactions to show",
1461
+ "name": "limit",
1462
+ "default": 20,
1463
+ "hasDynamicHelp": false,
1464
+ "multiple": false,
1465
+ "type": "option"
1466
+ }
1467
+ },
1468
+ "hasDynamicHelp": false,
1469
+ "hiddenAliases": [],
1470
+ "id": "credits:history",
1471
+ "pluginAlias": "@sendly/cli",
1472
+ "pluginName": "@sendly/cli",
1473
+ "pluginType": "core",
1474
+ "strict": true,
1475
+ "isESM": true,
1476
+ "relativePath": [
1477
+ "dist",
1478
+ "commands",
1479
+ "credits",
1480
+ "history.js"
1481
+ ]
1482
+ },
1483
+ "keys:create": {
1484
+ "aliases": [],
1485
+ "args": {},
1486
+ "description": "Create a new API key",
1487
+ "examples": [
1488
+ "<%= config.bin %> keys create --name \"Production\"",
1489
+ "<%= config.bin %> keys create --name \"CI Testing\" --type test",
1490
+ "<%= config.bin %> keys create --name \"Backend\" --type live --json"
1491
+ ],
1492
+ "flags": {
1493
+ "json": {
1494
+ "description": "Output in JSON format",
1495
+ "name": "json",
1496
+ "allowNo": false,
1497
+ "type": "boolean"
1498
+ },
1499
+ "quiet": {
1500
+ "char": "q",
1501
+ "description": "Minimal output",
1502
+ "name": "quiet",
1503
+ "allowNo": false,
1504
+ "type": "boolean"
1505
+ },
1506
+ "name": {
1507
+ "char": "n",
1508
+ "description": "Name for the API key",
1509
+ "name": "name",
1510
+ "required": true,
1511
+ "hasDynamicHelp": false,
1512
+ "multiple": false,
1513
+ "type": "option"
1514
+ },
1515
+ "type": {
1516
+ "char": "t",
1517
+ "description": "Key type (test or live)",
1518
+ "name": "type",
1519
+ "default": "test",
1520
+ "hasDynamicHelp": false,
1521
+ "multiple": false,
1522
+ "options": [
1523
+ "test",
1524
+ "live"
1525
+ ],
1526
+ "type": "option"
1527
+ }
1528
+ },
1529
+ "hasDynamicHelp": false,
1530
+ "hiddenAliases": [],
1531
+ "id": "keys:create",
1532
+ "pluginAlias": "@sendly/cli",
1533
+ "pluginName": "@sendly/cli",
1534
+ "pluginType": "core",
1535
+ "strict": true,
1536
+ "isESM": true,
1537
+ "relativePath": [
1538
+ "dist",
1539
+ "commands",
1540
+ "keys",
1541
+ "create.js"
1542
+ ]
1543
+ },
1544
+ "keys:get": {
1545
+ "aliases": [],
1546
+ "args": {
1547
+ "id": {
1548
+ "description": "API key ID",
1549
+ "name": "id",
1550
+ "required": true
1551
+ }
1552
+ },
1553
+ "description": "Get details of a specific API key",
1554
+ "examples": [
1555
+ "<%= config.bin %> keys get KEY_ID",
1556
+ "<%= config.bin %> keys get KEY_ID --json"
1557
+ ],
1558
+ "flags": {
1559
+ "json": {
1560
+ "description": "Output in JSON format",
1561
+ "name": "json",
1562
+ "allowNo": false,
1563
+ "type": "boolean"
1564
+ },
1565
+ "quiet": {
1566
+ "char": "q",
1567
+ "description": "Minimal output",
1568
+ "name": "quiet",
1569
+ "allowNo": false,
1570
+ "type": "boolean"
1571
+ }
1572
+ },
1573
+ "hasDynamicHelp": false,
1574
+ "hiddenAliases": [],
1575
+ "id": "keys:get",
1576
+ "pluginAlias": "@sendly/cli",
1577
+ "pluginName": "@sendly/cli",
1578
+ "pluginType": "core",
1579
+ "strict": true,
1580
+ "isESM": true,
1581
+ "relativePath": [
1582
+ "dist",
1583
+ "commands",
1584
+ "keys",
1585
+ "get.js"
1586
+ ]
1587
+ },
1588
+ "keys:list": {
1589
+ "aliases": [],
1590
+ "args": {},
1591
+ "description": "List your API keys",
1592
+ "examples": [
1593
+ "<%= config.bin %> keys list",
1594
+ "<%= config.bin %> keys list --json"
1595
+ ],
1596
+ "flags": {
1597
+ "json": {
1598
+ "description": "Output in JSON format",
1599
+ "name": "json",
1600
+ "allowNo": false,
1601
+ "type": "boolean"
1602
+ },
1603
+ "quiet": {
1604
+ "char": "q",
1605
+ "description": "Minimal output",
1606
+ "name": "quiet",
1607
+ "allowNo": false,
1608
+ "type": "boolean"
1609
+ }
1610
+ },
1611
+ "hasDynamicHelp": false,
1612
+ "hiddenAliases": [],
1613
+ "id": "keys:list",
1614
+ "pluginAlias": "@sendly/cli",
1615
+ "pluginName": "@sendly/cli",
1616
+ "pluginType": "core",
1617
+ "strict": true,
1618
+ "isESM": true,
1619
+ "relativePath": [
1620
+ "dist",
1621
+ "commands",
1622
+ "keys",
1623
+ "list.js"
1624
+ ]
1625
+ },
1626
+ "keys:rename": {
1627
+ "aliases": [],
1628
+ "args": {
1629
+ "keyId": {
1630
+ "description": "Key ID to rename (e.g., key_abc123)",
1631
+ "name": "keyId",
1632
+ "required": true
1633
+ }
1634
+ },
1635
+ "description": "Rename an API key",
1636
+ "examples": [
1637
+ "<%= config.bin %> keys rename key_abc123 --name \"Production Key\"",
1638
+ "<%= config.bin %> keys rename key_abc123 -n \"Staging\""
1639
+ ],
1640
+ "flags": {
1641
+ "json": {
1642
+ "description": "Output in JSON format",
1643
+ "name": "json",
1644
+ "allowNo": false,
1645
+ "type": "boolean"
1646
+ },
1647
+ "quiet": {
1648
+ "char": "q",
1649
+ "description": "Minimal output",
1650
+ "name": "quiet",
1651
+ "allowNo": false,
1652
+ "type": "boolean"
1653
+ },
1654
+ "name": {
1655
+ "char": "n",
1656
+ "description": "New name for the API key",
1657
+ "name": "name",
1658
+ "required": true,
1659
+ "hasDynamicHelp": false,
1660
+ "multiple": false,
1661
+ "type": "option"
1662
+ }
1663
+ },
1664
+ "hasDynamicHelp": false,
1665
+ "hiddenAliases": [],
1666
+ "id": "keys:rename",
1667
+ "pluginAlias": "@sendly/cli",
1668
+ "pluginName": "@sendly/cli",
1669
+ "pluginType": "core",
1670
+ "strict": true,
1671
+ "isESM": true,
1672
+ "relativePath": [
1673
+ "dist",
1674
+ "commands",
1675
+ "keys",
1676
+ "rename.js"
1677
+ ]
1678
+ },
1679
+ "keys:revoke": {
1680
+ "aliases": [],
1681
+ "args": {
1682
+ "keyId": {
1683
+ "description": "Key ID to revoke (e.g., key_abc123)",
1684
+ "name": "keyId",
1685
+ "required": true
1686
+ }
1687
+ },
1688
+ "description": "Revoke an API key",
1689
+ "examples": [
1690
+ "<%= config.bin %> keys revoke key_abc123",
1691
+ "<%= config.bin %> keys revoke key_abc123 --reason \"Compromised\"",
1692
+ "<%= config.bin %> keys revoke key_abc123 --yes"
1693
+ ],
1694
+ "flags": {
1695
+ "json": {
1696
+ "description": "Output in JSON format",
1697
+ "name": "json",
1698
+ "allowNo": false,
1699
+ "type": "boolean"
1700
+ },
1701
+ "quiet": {
1702
+ "char": "q",
1703
+ "description": "Minimal output",
1704
+ "name": "quiet",
1705
+ "allowNo": false,
1706
+ "type": "boolean"
1707
+ },
1708
+ "reason": {
1709
+ "char": "r",
1710
+ "description": "Reason for revoking the key",
1711
+ "name": "reason",
1712
+ "hasDynamicHelp": false,
1713
+ "multiple": false,
1714
+ "type": "option"
1715
+ },
1716
+ "yes": {
1717
+ "char": "y",
1718
+ "description": "Skip confirmation prompt",
1719
+ "name": "yes",
1720
+ "allowNo": false,
1721
+ "type": "boolean"
1722
+ }
1723
+ },
1724
+ "hasDynamicHelp": false,
1725
+ "hiddenAliases": [],
1726
+ "id": "keys:revoke",
1727
+ "pluginAlias": "@sendly/cli",
1728
+ "pluginName": "@sendly/cli",
1729
+ "pluginType": "core",
1730
+ "strict": true,
1731
+ "isESM": true,
1732
+ "relativePath": [
1733
+ "dist",
1734
+ "commands",
1735
+ "keys",
1736
+ "revoke.js"
1737
+ ]
1738
+ },
1739
+ "keys:rotate": {
1740
+ "aliases": [],
1741
+ "args": {
1742
+ "keyId": {
1743
+ "description": "Key ID to rotate (e.g., key_abc123)",
1744
+ "name": "keyId",
1745
+ "required": true
1746
+ }
1747
+ },
1748
+ "description": "Rotate an API key (generate new key, optionally keep old one active)",
1749
+ "examples": [
1750
+ "<%= config.bin %> keys rotate key_abc123",
1751
+ "<%= config.bin %> keys rotate key_abc123 --grace-period 24",
1752
+ "<%= config.bin %> keys rotate key_abc123 --yes"
1753
+ ],
1754
+ "flags": {
1755
+ "json": {
1756
+ "description": "Output in JSON format",
1757
+ "name": "json",
1758
+ "allowNo": false,
1759
+ "type": "boolean"
1760
+ },
1761
+ "quiet": {
1762
+ "char": "q",
1763
+ "description": "Minimal output",
1764
+ "name": "quiet",
1765
+ "allowNo": false,
1766
+ "type": "boolean"
1767
+ },
1768
+ "grace-period": {
1769
+ "char": "g",
1770
+ "description": "Hours to keep old key active (0 = immediate revocation)",
1771
+ "name": "grace-period",
1772
+ "hasDynamicHelp": false,
1773
+ "multiple": false,
1774
+ "type": "option"
1775
+ },
1776
+ "yes": {
1777
+ "char": "y",
1778
+ "description": "Skip confirmation prompt",
1779
+ "name": "yes",
1780
+ "allowNo": false,
1781
+ "type": "boolean"
1782
+ }
1783
+ },
1784
+ "hasDynamicHelp": false,
1785
+ "hiddenAliases": [],
1786
+ "id": "keys:rotate",
1787
+ "pluginAlias": "@sendly/cli",
1788
+ "pluginName": "@sendly/cli",
1789
+ "pluginType": "core",
1790
+ "strict": true,
1791
+ "isESM": true,
1792
+ "relativePath": [
1793
+ "dist",
1794
+ "commands",
1795
+ "keys",
1796
+ "rotate.js"
1797
+ ]
1798
+ },
1799
+ "keys:usage": {
1800
+ "aliases": [],
1801
+ "args": {
1802
+ "id": {
1803
+ "description": "API key ID",
1804
+ "name": "id",
1805
+ "required": true
1806
+ }
1807
+ },
1808
+ "description": "Get usage statistics for an API key",
1809
+ "examples": [
1810
+ "<%= config.bin %> keys usage KEY_ID",
1811
+ "<%= config.bin %> keys usage KEY_ID --json"
1812
+ ],
1813
+ "flags": {
1814
+ "json": {
1815
+ "description": "Output in JSON format",
1816
+ "name": "json",
1817
+ "allowNo": false,
1818
+ "type": "boolean"
1819
+ },
1820
+ "quiet": {
1821
+ "char": "q",
1822
+ "description": "Minimal output",
1823
+ "name": "quiet",
1824
+ "allowNo": false,
1825
+ "type": "boolean"
1826
+ }
1827
+ },
1828
+ "hasDynamicHelp": false,
1829
+ "hiddenAliases": [],
1830
+ "id": "keys:usage",
1831
+ "pluginAlias": "@sendly/cli",
1832
+ "pluginName": "@sendly/cli",
1833
+ "pluginType": "core",
1834
+ "strict": true,
1835
+ "isESM": true,
1836
+ "relativePath": [
1837
+ "dist",
1838
+ "commands",
1839
+ "keys",
1840
+ "usage.js"
1841
+ ]
1842
+ },
1843
+ "logs:tail": {
1844
+ "aliases": [],
1845
+ "args": {},
1846
+ "description": "Tail logs in real-time (like stripe logs tail)",
1847
+ "examples": [
1848
+ "<%= config.bin %> logs tail",
1849
+ "<%= config.bin %> logs tail --status failed",
1850
+ "<%= config.bin %> logs tail --since 1h"
1851
+ ],
1852
+ "flags": {
1853
+ "json": {
1854
+ "description": "Output in JSON format",
1855
+ "name": "json",
1856
+ "allowNo": false,
1857
+ "type": "boolean"
1858
+ },
1859
+ "quiet": {
1860
+ "char": "q",
1861
+ "description": "Minimal output",
1862
+ "name": "quiet",
1863
+ "allowNo": false,
1864
+ "type": "boolean"
1865
+ },
1866
+ "status": {
1867
+ "char": "s",
1868
+ "description": "Filter by status (sent, delivered, failed)",
1869
+ "name": "status",
1870
+ "hasDynamicHelp": false,
1871
+ "multiple": false,
1872
+ "type": "option"
1873
+ },
1874
+ "since": {
1875
+ "description": "Show logs since (e.g., 1h, 30m, 1d)",
1876
+ "name": "since",
1877
+ "default": "1h",
1878
+ "hasDynamicHelp": false,
1879
+ "multiple": false,
1880
+ "type": "option"
1881
+ },
1882
+ "type": {
1883
+ "char": "t",
1884
+ "description": "Filter by type (message, api_call, webhook)",
1885
+ "name": "type",
1886
+ "hasDynamicHelp": false,
1887
+ "multiple": false,
1888
+ "type": "option"
1889
+ }
1890
+ },
1891
+ "hasDynamicHelp": false,
1892
+ "hiddenAliases": [],
1893
+ "id": "logs:tail",
1894
+ "pluginAlias": "@sendly/cli",
1895
+ "pluginName": "@sendly/cli",
1896
+ "pluginType": "core",
1897
+ "strict": true,
1898
+ "isESM": true,
1899
+ "relativePath": [
1900
+ "dist",
1901
+ "commands",
1902
+ "logs",
1903
+ "tail.js"
1904
+ ]
1905
+ },
1906
+ "sms:batch": {
1907
+ "aliases": [],
1908
+ "args": {},
1909
+ "description": "Send batch SMS messages (uploads CSV to cloud for audit trail)",
1910
+ "examples": [
1911
+ "<%= config.bin %> sms batch --file recipients.csv",
1912
+ "<%= config.bin %> sms batch --file phones.csv --text \"Hello everyone!\"",
1913
+ "<%= config.bin %> sms batch --to +15551234567,+15559876543 --text \"Hello!\"",
1914
+ "<%= config.bin %> sms batch --file recipients.csv --dry-run",
1915
+ "<%= config.bin %> sms batch --file phones.csv --text \"Code: 123\" --type transactional",
1916
+ "<%= config.bin %> sms batch --reuse abc123-def456",
1917
+ "<%= config.bin %> sms batch --history"
1918
+ ],
1919
+ "flags": {
1920
+ "json": {
1921
+ "description": "Output in JSON format",
1922
+ "name": "json",
1923
+ "allowNo": false,
1924
+ "type": "boolean"
1925
+ },
1926
+ "quiet": {
1927
+ "char": "q",
1928
+ "description": "Minimal output",
1929
+ "name": "quiet",
1930
+ "allowNo": false,
1931
+ "type": "boolean"
1932
+ },
1933
+ "file": {
1934
+ "char": "F",
1935
+ "description": "CSV file with phone numbers (and optional message text)",
1936
+ "exclusive": [
1937
+ "to",
1938
+ "reuse",
1939
+ "history"
1940
+ ],
1941
+ "name": "file",
1942
+ "hasDynamicHelp": false,
1943
+ "multiple": false,
1944
+ "type": "option"
1945
+ },
1946
+ "to": {
1947
+ "char": "t",
1948
+ "description": "Comma-separated recipient phone numbers (E.164 format)",
1949
+ "exclusive": [
1950
+ "file",
1951
+ "reuse",
1952
+ "history"
1953
+ ],
1954
+ "name": "to",
1955
+ "hasDynamicHelp": false,
1956
+ "multiple": false,
1957
+ "type": "option"
1958
+ },
1959
+ "text": {
1960
+ "char": "m",
1961
+ "description": "Message text (required with --to, optional with --file if CSV has text column)",
1962
+ "name": "text",
1963
+ "hasDynamicHelp": false,
1964
+ "multiple": false,
1965
+ "type": "option"
1966
+ },
1967
+ "from": {
1968
+ "char": "f",
1969
+ "description": "Sender ID or phone number for all messages",
1970
+ "name": "from",
1971
+ "hasDynamicHelp": false,
1972
+ "multiple": false,
1973
+ "type": "option"
1974
+ },
1975
+ "type": {
1976
+ "description": "Message type: marketing (default) or transactional. Transactional bypasses quiet hours.",
1977
+ "name": "type",
1978
+ "default": "marketing",
1979
+ "hasDynamicHelp": false,
1980
+ "multiple": false,
1981
+ "options": [
1982
+ "marketing",
1983
+ "transactional"
1984
+ ],
1985
+ "type": "option"
1986
+ },
1987
+ "dry-run": {
1988
+ "char": "d",
1989
+ "description": "Preview batch without sending (validates access, shows cost and compliance breakdown)",
1990
+ "name": "dry-run",
1991
+ "allowNo": false,
1992
+ "type": "boolean"
1993
+ },
1994
+ "reuse": {
1995
+ "description": "Re-use a previous batch upload by ID (see --history)",
1996
+ "exclusive": [
1997
+ "file",
1998
+ "to",
1999
+ "history"
2000
+ ],
2001
+ "name": "reuse",
2002
+ "hasDynamicHelp": false,
2003
+ "multiple": false,
2004
+ "type": "option"
2005
+ },
2006
+ "history": {
2007
+ "description": "Show recent batch upload history",
2008
+ "exclusive": [
2009
+ "file",
2010
+ "to",
2011
+ "reuse"
2012
+ ],
2013
+ "name": "history",
2014
+ "allowNo": false,
2015
+ "type": "boolean"
2016
+ }
2017
+ },
2018
+ "hasDynamicHelp": false,
2019
+ "hiddenAliases": [],
2020
+ "id": "sms:batch",
2021
+ "pluginAlias": "@sendly/cli",
2022
+ "pluginName": "@sendly/cli",
2023
+ "pluginType": "core",
2024
+ "strict": true,
2025
+ "isESM": true,
2026
+ "relativePath": [
2027
+ "dist",
2028
+ "commands",
2029
+ "sms",
2030
+ "batch.js"
2031
+ ]
2032
+ },
2033
+ "sms:cancel": {
2034
+ "aliases": [],
2035
+ "args": {
2036
+ "id": {
2037
+ "description": "Scheduled message ID to cancel",
2038
+ "name": "id",
2039
+ "required": true
2040
+ }
2041
+ },
2042
+ "description": "Cancel a scheduled message",
2043
+ "examples": [
2044
+ "<%= config.bin %> sms cancel sched_abc123",
2045
+ "<%= config.bin %> sms cancel sched_abc123 --json"
2046
+ ],
2047
+ "flags": {
2048
+ "json": {
2049
+ "description": "Output in JSON format",
2050
+ "name": "json",
2051
+ "allowNo": false,
2052
+ "type": "boolean"
2053
+ },
2054
+ "quiet": {
2055
+ "char": "q",
2056
+ "description": "Minimal output",
2057
+ "name": "quiet",
2058
+ "allowNo": false,
2059
+ "type": "boolean"
2060
+ }
2061
+ },
2062
+ "hasDynamicHelp": false,
2063
+ "hiddenAliases": [],
2064
+ "id": "sms:cancel",
2065
+ "pluginAlias": "@sendly/cli",
2066
+ "pluginName": "@sendly/cli",
2067
+ "pluginType": "core",
2068
+ "strict": true,
2069
+ "isESM": true,
2070
+ "relativePath": [
2071
+ "dist",
2072
+ "commands",
2073
+ "sms",
2074
+ "cancel.js"
2075
+ ]
2076
+ },
2077
+ "sms:get": {
2078
+ "aliases": [],
2079
+ "args": {
2080
+ "id": {
2081
+ "description": "Message ID",
2082
+ "name": "id",
2083
+ "required": true
2084
+ }
2085
+ },
2086
+ "description": "Get details of a specific message",
2087
+ "examples": [
2088
+ "<%= config.bin %> sms get msg_abc123",
2089
+ "<%= config.bin %> sms get msg_abc123 --json"
2090
+ ],
2091
+ "flags": {
2092
+ "json": {
2093
+ "description": "Output in JSON format",
2094
+ "name": "json",
2095
+ "allowNo": false,
2096
+ "type": "boolean"
2097
+ },
2098
+ "quiet": {
2099
+ "char": "q",
2100
+ "description": "Minimal output",
2101
+ "name": "quiet",
2102
+ "allowNo": false,
2103
+ "type": "boolean"
2104
+ }
2105
+ },
2106
+ "hasDynamicHelp": false,
2107
+ "hiddenAliases": [],
2108
+ "id": "sms:get",
2109
+ "pluginAlias": "@sendly/cli",
2110
+ "pluginName": "@sendly/cli",
2111
+ "pluginType": "core",
2112
+ "strict": true,
2113
+ "isESM": true,
2114
+ "relativePath": [
2115
+ "dist",
2116
+ "commands",
2117
+ "sms",
2118
+ "get.js"
2119
+ ]
2120
+ },
2121
+ "sms:list": {
2122
+ "aliases": [],
2123
+ "args": {},
2124
+ "description": "List sent messages",
2125
+ "examples": [
2126
+ "<%= config.bin %> sms list",
2127
+ "<%= config.bin %> sms list --limit 10",
2128
+ "<%= config.bin %> sms list --page 2",
2129
+ "<%= config.bin %> sms list --status delivered",
2130
+ "<%= config.bin %> sms list --sandbox",
2131
+ "<%= config.bin %> sms list --json"
2132
+ ],
2133
+ "flags": {
2134
+ "json": {
2135
+ "description": "Output in JSON format",
2136
+ "name": "json",
2137
+ "allowNo": false,
2138
+ "type": "boolean"
2139
+ },
2140
+ "quiet": {
2141
+ "char": "q",
2142
+ "description": "Minimal output",
2143
+ "name": "quiet",
2144
+ "allowNo": false,
2145
+ "type": "boolean"
2146
+ },
2147
+ "limit": {
2148
+ "char": "l",
2149
+ "description": "Number of messages per page",
2150
+ "name": "limit",
2151
+ "default": 20,
2152
+ "hasDynamicHelp": false,
2153
+ "multiple": false,
2154
+ "type": "option"
2155
+ },
2156
+ "page": {
2157
+ "char": "p",
2158
+ "description": "Page number (starts at 1)",
2159
+ "name": "page",
2160
+ "hasDynamicHelp": false,
2161
+ "multiple": false,
2162
+ "type": "option"
2163
+ },
2164
+ "offset": {
2165
+ "description": "Offset from start (alternative to --page)",
2166
+ "name": "offset",
2167
+ "hasDynamicHelp": false,
2168
+ "multiple": false,
2169
+ "type": "option"
2170
+ },
2171
+ "status": {
2172
+ "char": "s",
2173
+ "description": "Filter by status (queued, sent, delivered, failed)",
2174
+ "name": "status",
2175
+ "hasDynamicHelp": false,
2176
+ "multiple": false,
2177
+ "type": "option"
2178
+ },
2179
+ "sandbox": {
2180
+ "description": "Show sandbox/test messages (live keys only)",
2181
+ "name": "sandbox",
2182
+ "allowNo": false,
2183
+ "type": "boolean"
2184
+ }
2185
+ },
2186
+ "hasDynamicHelp": false,
2187
+ "hiddenAliases": [],
2188
+ "id": "sms:list",
2189
+ "pluginAlias": "@sendly/cli",
2190
+ "pluginName": "@sendly/cli",
2191
+ "pluginType": "core",
2192
+ "strict": true,
2193
+ "isESM": true,
2194
+ "relativePath": [
2195
+ "dist",
2196
+ "commands",
2197
+ "sms",
2198
+ "list.js"
2199
+ ]
2200
+ },
2201
+ "sms:schedule": {
2202
+ "aliases": [],
2203
+ "args": {},
2204
+ "description": "Schedule an SMS message for future delivery",
2205
+ "examples": [
2206
+ "<%= config.bin %> sms schedule --to +15551234567 --text \"Reminder!\" --at \"2025-01-20T10:00:00Z\"",
2207
+ "<%= config.bin %> sms schedule --to +15551234567 --text \"Meeting in 1 hour\" --at \"2025-01-15T14:00:00Z\" --from \"Sendly\"",
2208
+ "<%= config.bin %> sms schedule --to +15551234567 --text \"Your code: 123456\" --at \"2025-01-20T10:00:00Z\" --type transactional",
2209
+ "<%= config.bin %> sms schedule --to +15551234567 --text \"Hello!\" --at \"2025-01-20T10:00:00Z\" --json"
2210
+ ],
2211
+ "flags": {
2212
+ "json": {
2213
+ "description": "Output in JSON format",
2214
+ "name": "json",
2215
+ "allowNo": false,
2216
+ "type": "boolean"
2217
+ },
2218
+ "quiet": {
2219
+ "char": "q",
2220
+ "description": "Minimal output",
2221
+ "name": "quiet",
2222
+ "allowNo": false,
2223
+ "type": "boolean"
2224
+ },
2225
+ "to": {
2226
+ "char": "t",
2227
+ "description": "Recipient phone number (E.164 format)",
2228
+ "name": "to",
2229
+ "required": true,
2230
+ "hasDynamicHelp": false,
2231
+ "multiple": false,
2232
+ "type": "option"
2233
+ },
2234
+ "text": {
2235
+ "char": "m",
2236
+ "description": "Message text",
2237
+ "name": "text",
2238
+ "required": true,
2239
+ "hasDynamicHelp": false,
2240
+ "multiple": false,
2241
+ "type": "option"
2242
+ },
2243
+ "at": {
2244
+ "char": "a",
2245
+ "description": "Scheduled time (ISO 8601 format, e.g., 2025-01-20T10:00:00Z)",
1139
2246
  "name": "at",
1140
2247
  "required": true,
1141
2248
  "hasDynamicHelp": false,
@@ -1150,22 +2257,399 @@
1150
2257
  "multiple": false,
1151
2258
  "type": "option"
1152
2259
  },
1153
- "type": {
1154
- "description": "Message type: marketing (default) or transactional. Transactional messages bypass quiet hours.",
1155
- "name": "type",
1156
- "default": "marketing",
1157
- "hasDynamicHelp": false,
1158
- "multiple": false,
1159
- "options": [
1160
- "marketing",
1161
- "transactional"
1162
- ],
1163
- "type": "option"
2260
+ "type": {
2261
+ "description": "Message type: marketing (default) or transactional. Transactional messages bypass quiet hours.",
2262
+ "name": "type",
2263
+ "default": "marketing",
2264
+ "hasDynamicHelp": false,
2265
+ "multiple": false,
2266
+ "options": [
2267
+ "marketing",
2268
+ "transactional"
2269
+ ],
2270
+ "type": "option"
2271
+ }
2272
+ },
2273
+ "hasDynamicHelp": false,
2274
+ "hiddenAliases": [],
2275
+ "id": "sms:schedule",
2276
+ "pluginAlias": "@sendly/cli",
2277
+ "pluginName": "@sendly/cli",
2278
+ "pluginType": "core",
2279
+ "strict": true,
2280
+ "isESM": true,
2281
+ "relativePath": [
2282
+ "dist",
2283
+ "commands",
2284
+ "sms",
2285
+ "schedule.js"
2286
+ ]
2287
+ },
2288
+ "sms:scheduled": {
2289
+ "aliases": [],
2290
+ "args": {},
2291
+ "description": "List scheduled messages",
2292
+ "examples": [
2293
+ "<%= config.bin %> sms scheduled",
2294
+ "<%= config.bin %> sms scheduled --limit 10",
2295
+ "<%= config.bin %> sms scheduled --status scheduled",
2296
+ "<%= config.bin %> sms scheduled --json"
2297
+ ],
2298
+ "flags": {
2299
+ "json": {
2300
+ "description": "Output in JSON format",
2301
+ "name": "json",
2302
+ "allowNo": false,
2303
+ "type": "boolean"
2304
+ },
2305
+ "quiet": {
2306
+ "char": "q",
2307
+ "description": "Minimal output",
2308
+ "name": "quiet",
2309
+ "allowNo": false,
2310
+ "type": "boolean"
2311
+ },
2312
+ "limit": {
2313
+ "char": "l",
2314
+ "description": "Number of messages to show",
2315
+ "name": "limit",
2316
+ "default": 20,
2317
+ "hasDynamicHelp": false,
2318
+ "multiple": false,
2319
+ "type": "option"
2320
+ },
2321
+ "status": {
2322
+ "char": "s",
2323
+ "description": "Filter by status (scheduled, sent, cancelled, failed)",
2324
+ "name": "status",
2325
+ "hasDynamicHelp": false,
2326
+ "multiple": false,
2327
+ "type": "option"
2328
+ }
2329
+ },
2330
+ "hasDynamicHelp": false,
2331
+ "hiddenAliases": [],
2332
+ "id": "sms:scheduled",
2333
+ "pluginAlias": "@sendly/cli",
2334
+ "pluginName": "@sendly/cli",
2335
+ "pluginType": "core",
2336
+ "strict": true,
2337
+ "isESM": true,
2338
+ "relativePath": [
2339
+ "dist",
2340
+ "commands",
2341
+ "sms",
2342
+ "scheduled.js"
2343
+ ]
2344
+ },
2345
+ "sms:send": {
2346
+ "aliases": [],
2347
+ "args": {},
2348
+ "description": "Send an SMS message",
2349
+ "examples": [
2350
+ "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\"",
2351
+ "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --from \"Sendly\"",
2352
+ "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --type transactional",
2353
+ "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --json"
2354
+ ],
2355
+ "flags": {
2356
+ "json": {
2357
+ "description": "Output in JSON format",
2358
+ "name": "json",
2359
+ "allowNo": false,
2360
+ "type": "boolean"
2361
+ },
2362
+ "quiet": {
2363
+ "char": "q",
2364
+ "description": "Minimal output",
2365
+ "name": "quiet",
2366
+ "allowNo": false,
2367
+ "type": "boolean"
2368
+ },
2369
+ "to": {
2370
+ "char": "t",
2371
+ "description": "Recipient phone number (E.164 format)",
2372
+ "name": "to",
2373
+ "required": true,
2374
+ "hasDynamicHelp": false,
2375
+ "multiple": false,
2376
+ "type": "option"
2377
+ },
2378
+ "text": {
2379
+ "char": "m",
2380
+ "description": "Message text",
2381
+ "name": "text",
2382
+ "required": true,
2383
+ "hasDynamicHelp": false,
2384
+ "multiple": false,
2385
+ "type": "option"
2386
+ },
2387
+ "from": {
2388
+ "char": "f",
2389
+ "description": "Sender ID or phone number",
2390
+ "name": "from",
2391
+ "hasDynamicHelp": false,
2392
+ "multiple": false,
2393
+ "type": "option"
2394
+ },
2395
+ "type": {
2396
+ "description": "Message type: marketing (default) or transactional",
2397
+ "name": "type",
2398
+ "default": "marketing",
2399
+ "hasDynamicHelp": false,
2400
+ "multiple": false,
2401
+ "options": [
2402
+ "marketing",
2403
+ "transactional"
2404
+ ],
2405
+ "type": "option"
2406
+ }
2407
+ },
2408
+ "hasDynamicHelp": false,
2409
+ "hiddenAliases": [],
2410
+ "id": "sms:send",
2411
+ "pluginAlias": "@sendly/cli",
2412
+ "pluginName": "@sendly/cli",
2413
+ "pluginType": "core",
2414
+ "strict": true,
2415
+ "isESM": true,
2416
+ "relativePath": [
2417
+ "dist",
2418
+ "commands",
2419
+ "sms",
2420
+ "send.js"
2421
+ ]
2422
+ },
2423
+ "templates:clone": {
2424
+ "aliases": [],
2425
+ "args": {
2426
+ "id": {
2427
+ "description": "Template ID to clone",
2428
+ "name": "id",
2429
+ "required": true
2430
+ }
2431
+ },
2432
+ "description": "Clone a template",
2433
+ "examples": [
2434
+ "<%= config.bin %> templates clone tpl_preset_otp",
2435
+ "<%= config.bin %> templates clone tpl_preset_otp --name \"My Custom OTP\"",
2436
+ "<%= config.bin %> templates clone tpl_xxx --json"
2437
+ ],
2438
+ "flags": {
2439
+ "json": {
2440
+ "description": "Output in JSON format",
2441
+ "name": "json",
2442
+ "allowNo": false,
2443
+ "type": "boolean"
2444
+ },
2445
+ "quiet": {
2446
+ "char": "q",
2447
+ "description": "Minimal output",
2448
+ "name": "quiet",
2449
+ "allowNo": false,
2450
+ "type": "boolean"
2451
+ },
2452
+ "name": {
2453
+ "char": "n",
2454
+ "description": "Name for the cloned template",
2455
+ "name": "name",
2456
+ "hasDynamicHelp": false,
2457
+ "multiple": false,
2458
+ "type": "option"
2459
+ }
2460
+ },
2461
+ "hasDynamicHelp": false,
2462
+ "hiddenAliases": [],
2463
+ "id": "templates:clone",
2464
+ "pluginAlias": "@sendly/cli",
2465
+ "pluginName": "@sendly/cli",
2466
+ "pluginType": "core",
2467
+ "strict": true,
2468
+ "isESM": true,
2469
+ "relativePath": [
2470
+ "dist",
2471
+ "commands",
2472
+ "templates",
2473
+ "clone.js"
2474
+ ]
2475
+ },
2476
+ "templates:create": {
2477
+ "aliases": [],
2478
+ "args": {},
2479
+ "description": "Create a new SMS template",
2480
+ "examples": [
2481
+ "<%= config.bin %> templates create --name \"My OTP\" --text \"Your code is {{code}}\"",
2482
+ "<%= config.bin %> templates create --name \"Login\" --text \"{{code}} is your {{app_name}} login code\""
2483
+ ],
2484
+ "flags": {
2485
+ "json": {
2486
+ "description": "Output in JSON format",
2487
+ "name": "json",
2488
+ "allowNo": false,
2489
+ "type": "boolean"
2490
+ },
2491
+ "quiet": {
2492
+ "char": "q",
2493
+ "description": "Minimal output",
2494
+ "name": "quiet",
2495
+ "allowNo": false,
2496
+ "type": "boolean"
2497
+ },
2498
+ "name": {
2499
+ "char": "n",
2500
+ "description": "Template name",
2501
+ "name": "name",
2502
+ "required": true,
2503
+ "hasDynamicHelp": false,
2504
+ "multiple": false,
2505
+ "type": "option"
2506
+ },
2507
+ "text": {
2508
+ "char": "t",
2509
+ "description": "Message text (use {{code}} and {{app_name}} variables)",
2510
+ "name": "text",
2511
+ "required": true,
2512
+ "hasDynamicHelp": false,
2513
+ "multiple": false,
2514
+ "type": "option"
2515
+ }
2516
+ },
2517
+ "hasDynamicHelp": false,
2518
+ "hiddenAliases": [],
2519
+ "id": "templates:create",
2520
+ "pluginAlias": "@sendly/cli",
2521
+ "pluginName": "@sendly/cli",
2522
+ "pluginType": "core",
2523
+ "strict": true,
2524
+ "isESM": true,
2525
+ "relativePath": [
2526
+ "dist",
2527
+ "commands",
2528
+ "templates",
2529
+ "create.js"
2530
+ ]
2531
+ },
2532
+ "templates:delete": {
2533
+ "aliases": [],
2534
+ "args": {
2535
+ "id": {
2536
+ "description": "Template ID",
2537
+ "name": "id",
2538
+ "required": true
2539
+ }
2540
+ },
2541
+ "description": "Delete a template",
2542
+ "examples": [
2543
+ "<%= config.bin %> templates delete tpl_xxx",
2544
+ "<%= config.bin %> templates delete tpl_xxx --force"
2545
+ ],
2546
+ "flags": {
2547
+ "json": {
2548
+ "description": "Output in JSON format",
2549
+ "name": "json",
2550
+ "allowNo": false,
2551
+ "type": "boolean"
2552
+ },
2553
+ "quiet": {
2554
+ "char": "q",
2555
+ "description": "Minimal output",
2556
+ "name": "quiet",
2557
+ "allowNo": false,
2558
+ "type": "boolean"
2559
+ },
2560
+ "force": {
2561
+ "char": "f",
2562
+ "description": "Skip confirmation",
2563
+ "name": "force",
2564
+ "allowNo": false,
2565
+ "type": "boolean"
2566
+ }
2567
+ },
2568
+ "hasDynamicHelp": false,
2569
+ "hiddenAliases": [],
2570
+ "id": "templates:delete",
2571
+ "pluginAlias": "@sendly/cli",
2572
+ "pluginName": "@sendly/cli",
2573
+ "pluginType": "core",
2574
+ "strict": true,
2575
+ "isESM": true,
2576
+ "relativePath": [
2577
+ "dist",
2578
+ "commands",
2579
+ "templates",
2580
+ "delete.js"
2581
+ ]
2582
+ },
2583
+ "templates:get": {
2584
+ "aliases": [],
2585
+ "args": {
2586
+ "id": {
2587
+ "description": "Template ID",
2588
+ "name": "id",
2589
+ "required": true
2590
+ }
2591
+ },
2592
+ "description": "Get template details",
2593
+ "examples": [
2594
+ "<%= config.bin %> templates get tpl_xxx",
2595
+ "<%= config.bin %> templates get tpl_preset_2fa"
2596
+ ],
2597
+ "flags": {
2598
+ "json": {
2599
+ "description": "Output in JSON format",
2600
+ "name": "json",
2601
+ "allowNo": false,
2602
+ "type": "boolean"
2603
+ },
2604
+ "quiet": {
2605
+ "char": "q",
2606
+ "description": "Minimal output",
2607
+ "name": "quiet",
2608
+ "allowNo": false,
2609
+ "type": "boolean"
2610
+ }
2611
+ },
2612
+ "hasDynamicHelp": false,
2613
+ "hiddenAliases": [],
2614
+ "id": "templates:get",
2615
+ "pluginAlias": "@sendly/cli",
2616
+ "pluginName": "@sendly/cli",
2617
+ "pluginType": "core",
2618
+ "strict": true,
2619
+ "isESM": true,
2620
+ "relativePath": [
2621
+ "dist",
2622
+ "commands",
2623
+ "templates",
2624
+ "get.js"
2625
+ ]
2626
+ },
2627
+ "templates:list": {
2628
+ "aliases": [],
2629
+ "args": {},
2630
+ "description": "List your SMS templates",
2631
+ "examples": [
2632
+ "<%= config.bin %> templates list",
2633
+ "<%= config.bin %> templates list --json"
2634
+ ],
2635
+ "flags": {
2636
+ "json": {
2637
+ "description": "Output in JSON format",
2638
+ "name": "json",
2639
+ "allowNo": false,
2640
+ "type": "boolean"
2641
+ },
2642
+ "quiet": {
2643
+ "char": "q",
2644
+ "description": "Minimal output",
2645
+ "name": "quiet",
2646
+ "allowNo": false,
2647
+ "type": "boolean"
1164
2648
  }
1165
2649
  },
1166
2650
  "hasDynamicHelp": false,
1167
2651
  "hiddenAliases": [],
1168
- "id": "sms:schedule",
2652
+ "id": "templates:list",
1169
2653
  "pluginAlias": "@sendly/cli",
1170
2654
  "pluginName": "@sendly/cli",
1171
2655
  "pluginType": "core",
@@ -1174,19 +2658,17 @@
1174
2658
  "relativePath": [
1175
2659
  "dist",
1176
2660
  "commands",
1177
- "sms",
1178
- "schedule.js"
2661
+ "templates",
2662
+ "list.js"
1179
2663
  ]
1180
2664
  },
1181
- "sms:scheduled": {
2665
+ "templates:presets": {
1182
2666
  "aliases": [],
1183
2667
  "args": {},
1184
- "description": "List scheduled messages",
2668
+ "description": "List available preset templates",
1185
2669
  "examples": [
1186
- "<%= config.bin %> sms scheduled",
1187
- "<%= config.bin %> sms scheduled --limit 10",
1188
- "<%= config.bin %> sms scheduled --status scheduled",
1189
- "<%= config.bin %> sms scheduled --json"
2670
+ "<%= config.bin %> templates presets",
2671
+ "<%= config.bin %> templates presets --json"
1190
2672
  ],
1191
2673
  "flags": {
1192
2674
  "json": {
@@ -1201,28 +2683,11 @@
1201
2683
  "name": "quiet",
1202
2684
  "allowNo": false,
1203
2685
  "type": "boolean"
1204
- },
1205
- "limit": {
1206
- "char": "l",
1207
- "description": "Number of messages to show",
1208
- "name": "limit",
1209
- "default": 20,
1210
- "hasDynamicHelp": false,
1211
- "multiple": false,
1212
- "type": "option"
1213
- },
1214
- "status": {
1215
- "char": "s",
1216
- "description": "Filter by status (scheduled, sent, cancelled, failed)",
1217
- "name": "status",
1218
- "hasDynamicHelp": false,
1219
- "multiple": false,
1220
- "type": "option"
1221
2686
  }
1222
2687
  },
1223
2688
  "hasDynamicHelp": false,
1224
2689
  "hiddenAliases": [],
1225
- "id": "sms:scheduled",
2690
+ "id": "templates:presets",
1226
2691
  "pluginAlias": "@sendly/cli",
1227
2692
  "pluginName": "@sendly/cli",
1228
2693
  "pluginType": "core",
@@ -1231,19 +2696,22 @@
1231
2696
  "relativePath": [
1232
2697
  "dist",
1233
2698
  "commands",
1234
- "sms",
1235
- "scheduled.js"
2699
+ "templates",
2700
+ "presets.js"
1236
2701
  ]
1237
2702
  },
1238
- "sms:send": {
2703
+ "templates:publish": {
1239
2704
  "aliases": [],
1240
- "args": {},
1241
- "description": "Send an SMS message",
2705
+ "args": {
2706
+ "id": {
2707
+ "description": "Template ID",
2708
+ "name": "id",
2709
+ "required": true
2710
+ }
2711
+ },
2712
+ "description": "Publish a draft template (locks it for use)",
1242
2713
  "examples": [
1243
- "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\"",
1244
- "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --from \"Sendly\"",
1245
- "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --type transactional",
1246
- "<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --json"
2714
+ "<%= config.bin %> templates publish tpl_xxx"
1247
2715
  ],
1248
2716
  "flags": {
1249
2717
  "json": {
@@ -1258,49 +2726,11 @@
1258
2726
  "name": "quiet",
1259
2727
  "allowNo": false,
1260
2728
  "type": "boolean"
1261
- },
1262
- "to": {
1263
- "char": "t",
1264
- "description": "Recipient phone number (E.164 format)",
1265
- "name": "to",
1266
- "required": true,
1267
- "hasDynamicHelp": false,
1268
- "multiple": false,
1269
- "type": "option"
1270
- },
1271
- "text": {
1272
- "char": "m",
1273
- "description": "Message text",
1274
- "name": "text",
1275
- "required": true,
1276
- "hasDynamicHelp": false,
1277
- "multiple": false,
1278
- "type": "option"
1279
- },
1280
- "from": {
1281
- "char": "f",
1282
- "description": "Sender ID or phone number",
1283
- "name": "from",
1284
- "hasDynamicHelp": false,
1285
- "multiple": false,
1286
- "type": "option"
1287
- },
1288
- "type": {
1289
- "description": "Message type: marketing (default) or transactional",
1290
- "name": "type",
1291
- "default": "marketing",
1292
- "hasDynamicHelp": false,
1293
- "multiple": false,
1294
- "options": [
1295
- "marketing",
1296
- "transactional"
1297
- ],
1298
- "type": "option"
1299
2729
  }
1300
2730
  },
1301
2731
  "hasDynamicHelp": false,
1302
2732
  "hiddenAliases": [],
1303
- "id": "sms:send",
2733
+ "id": "templates:publish",
1304
2734
  "pluginAlias": "@sendly/cli",
1305
2735
  "pluginName": "@sendly/cli",
1306
2736
  "pluginType": "core",
@@ -1309,8 +2739,8 @@
1309
2739
  "relativePath": [
1310
2740
  "dist",
1311
2741
  "commands",
1312
- "sms",
1313
- "send.js"
2742
+ "templates",
2743
+ "publish.js"
1314
2744
  ]
1315
2745
  },
1316
2746
  "verify:check": {
@@ -1373,6 +2803,8 @@
1373
2803
  "examples": [
1374
2804
  "<%= config.bin %> verify list",
1375
2805
  "<%= config.bin %> verify list --limit 10",
2806
+ "<%= config.bin %> verify list --page 2",
2807
+ "<%= config.bin %> verify list --status verified",
1376
2808
  "<%= config.bin %> verify list --json"
1377
2809
  ],
1378
2810
  "flags": {
@@ -1390,13 +2822,36 @@
1390
2822
  "type": "boolean"
1391
2823
  },
1392
2824
  "limit": {
1393
- "char": "n",
1394
- "description": "Number of verifications to show",
2825
+ "char": "l",
2826
+ "description": "Number of verifications per page",
1395
2827
  "name": "limit",
1396
2828
  "default": 20,
1397
2829
  "hasDynamicHelp": false,
1398
2830
  "multiple": false,
1399
2831
  "type": "option"
2832
+ },
2833
+ "page": {
2834
+ "char": "p",
2835
+ "description": "Page number (starts at 1)",
2836
+ "name": "page",
2837
+ "hasDynamicHelp": false,
2838
+ "multiple": false,
2839
+ "type": "option"
2840
+ },
2841
+ "offset": {
2842
+ "description": "Offset from start (alternative to --page)",
2843
+ "name": "offset",
2844
+ "hasDynamicHelp": false,
2845
+ "multiple": false,
2846
+ "type": "option"
2847
+ },
2848
+ "status": {
2849
+ "char": "s",
2850
+ "description": "Filter by status (pending, verified, expired, failed)",
2851
+ "name": "status",
2852
+ "hasDynamicHelp": false,
2853
+ "multiple": false,
2854
+ "type": "option"
1400
2855
  }
1401
2856
  },
1402
2857
  "hasDynamicHelp": false,
@@ -1500,39 +2955,162 @@
1500
2955
  "multiple": false,
1501
2956
  "type": "option"
1502
2957
  },
1503
- "template": {
1504
- "description": "Template ID to use (defaults to tpl_preset_otp)",
1505
- "name": "template",
2958
+ "template": {
2959
+ "description": "Template ID to use (defaults to tpl_preset_otp)",
2960
+ "name": "template",
2961
+ "hasDynamicHelp": false,
2962
+ "multiple": false,
2963
+ "type": "option"
2964
+ },
2965
+ "profile": {
2966
+ "char": "p",
2967
+ "description": "Verify profile ID for preconfigured settings",
2968
+ "name": "profile",
2969
+ "hasDynamicHelp": false,
2970
+ "multiple": false,
2971
+ "type": "option"
2972
+ },
2973
+ "code-length": {
2974
+ "description": "Length of OTP code (4-10, default: 6)",
2975
+ "name": "code-length",
2976
+ "hasDynamicHelp": false,
2977
+ "multiple": false,
2978
+ "type": "option"
2979
+ },
2980
+ "timeout": {
2981
+ "description": "Code validity in seconds (60-3600, default: 300)",
2982
+ "name": "timeout",
2983
+ "hasDynamicHelp": false,
2984
+ "multiple": false,
2985
+ "type": "option"
2986
+ }
2987
+ },
2988
+ "hasDynamicHelp": false,
2989
+ "hiddenAliases": [],
2990
+ "id": "verify:send",
2991
+ "pluginAlias": "@sendly/cli",
2992
+ "pluginName": "@sendly/cli",
2993
+ "pluginType": "core",
2994
+ "strict": true,
2995
+ "isESM": true,
2996
+ "relativePath": [
2997
+ "dist",
2998
+ "commands",
2999
+ "verify",
3000
+ "send.js"
3001
+ ]
3002
+ },
3003
+ "verify:status": {
3004
+ "aliases": [],
3005
+ "args": {
3006
+ "id": {
3007
+ "description": "Verification ID",
3008
+ "name": "id",
3009
+ "required": true
3010
+ }
3011
+ },
3012
+ "description": "Get verification status",
3013
+ "examples": [
3014
+ "<%= config.bin %> verify status ver_xxx",
3015
+ "<%= config.bin %> verify status ver_xxx --json"
3016
+ ],
3017
+ "flags": {
3018
+ "json": {
3019
+ "description": "Output in JSON format",
3020
+ "name": "json",
3021
+ "allowNo": false,
3022
+ "type": "boolean"
3023
+ },
3024
+ "quiet": {
3025
+ "char": "q",
3026
+ "description": "Minimal output",
3027
+ "name": "quiet",
3028
+ "allowNo": false,
3029
+ "type": "boolean"
3030
+ }
3031
+ },
3032
+ "hasDynamicHelp": false,
3033
+ "hiddenAliases": [],
3034
+ "id": "verify:status",
3035
+ "pluginAlias": "@sendly/cli",
3036
+ "pluginName": "@sendly/cli",
3037
+ "pluginType": "core",
3038
+ "strict": true,
3039
+ "isESM": true,
3040
+ "relativePath": [
3041
+ "dist",
3042
+ "commands",
3043
+ "verify",
3044
+ "status.js"
3045
+ ]
3046
+ },
3047
+ "webhooks:create": {
3048
+ "aliases": [],
3049
+ "args": {},
3050
+ "description": "Create a webhook",
3051
+ "examples": [
3052
+ "<%= config.bin %> webhooks create --url https://myapp.com/webhook --events message.delivered",
3053
+ "<%= config.bin %> webhooks create --url https://myapp.com/webhook --events message.delivered,message.failed --description \"Production webhook\"",
3054
+ "<%= config.bin %> webhooks create --url https://webhook.site/abc123 --events message.sent --json"
3055
+ ],
3056
+ "flags": {
3057
+ "json": {
3058
+ "description": "Output in JSON format",
3059
+ "name": "json",
3060
+ "allowNo": false,
3061
+ "type": "boolean"
3062
+ },
3063
+ "quiet": {
3064
+ "char": "q",
3065
+ "description": "Minimal output",
3066
+ "name": "quiet",
3067
+ "allowNo": false,
3068
+ "type": "boolean"
3069
+ },
3070
+ "url": {
3071
+ "char": "u",
3072
+ "description": "Webhook URL (must be HTTPS)",
3073
+ "name": "url",
3074
+ "required": true,
1506
3075
  "hasDynamicHelp": false,
1507
3076
  "multiple": false,
1508
3077
  "type": "option"
1509
3078
  },
1510
- "profile": {
1511
- "char": "p",
1512
- "description": "Verify profile ID for preconfigured settings",
1513
- "name": "profile",
3079
+ "events": {
3080
+ "char": "e",
3081
+ "description": "Comma-separated list of events to listen for",
3082
+ "name": "events",
3083
+ "required": true,
1514
3084
  "hasDynamicHelp": false,
1515
3085
  "multiple": false,
1516
3086
  "type": "option"
1517
3087
  },
1518
- "code-length": {
1519
- "description": "Length of OTP code (4-10, default: 6)",
1520
- "name": "code-length",
3088
+ "description": {
3089
+ "char": "d",
3090
+ "description": "Description for the webhook",
3091
+ "name": "description",
1521
3092
  "hasDynamicHelp": false,
1522
3093
  "multiple": false,
1523
3094
  "type": "option"
1524
3095
  },
1525
- "timeout": {
1526
- "description": "Code validity in seconds (60-3600, default: 300)",
1527
- "name": "timeout",
3096
+ "mode": {
3097
+ "char": "m",
3098
+ "description": "Event mode filter: all (default), test (sandbox only), live (production only)",
3099
+ "name": "mode",
3100
+ "default": "all",
1528
3101
  "hasDynamicHelp": false,
1529
3102
  "multiple": false,
3103
+ "options": [
3104
+ "all",
3105
+ "test",
3106
+ "live"
3107
+ ],
1530
3108
  "type": "option"
1531
3109
  }
1532
3110
  },
1533
3111
  "hasDynamicHelp": false,
1534
3112
  "hiddenAliases": [],
1535
- "id": "verify:send",
3113
+ "id": "webhooks:create",
1536
3114
  "pluginAlias": "@sendly/cli",
1537
3115
  "pluginName": "@sendly/cli",
1538
3116
  "pluginType": "core",
@@ -1541,23 +3119,24 @@
1541
3119
  "relativePath": [
1542
3120
  "dist",
1543
3121
  "commands",
1544
- "verify",
1545
- "send.js"
3122
+ "webhooks",
3123
+ "create.js"
1546
3124
  ]
1547
3125
  },
1548
- "verify:status": {
3126
+ "webhooks:delete": {
1549
3127
  "aliases": [],
1550
3128
  "args": {
1551
3129
  "id": {
1552
- "description": "Verification ID",
3130
+ "description": "Webhook ID to delete",
1553
3131
  "name": "id",
1554
3132
  "required": true
1555
3133
  }
1556
3134
  },
1557
- "description": "Get verification status",
3135
+ "description": "Delete a webhook",
1558
3136
  "examples": [
1559
- "<%= config.bin %> verify status ver_xxx",
1560
- "<%= config.bin %> verify status ver_xxx --json"
3137
+ "<%= config.bin %> webhooks delete whk_abc123",
3138
+ "<%= config.bin %> webhooks delete whk_abc123 --yes",
3139
+ "<%= config.bin %> webhooks delete whk_abc123 --json"
1561
3140
  ],
1562
3141
  "flags": {
1563
3142
  "json": {
@@ -1572,11 +3151,18 @@
1572
3151
  "name": "quiet",
1573
3152
  "allowNo": false,
1574
3153
  "type": "boolean"
3154
+ },
3155
+ "yes": {
3156
+ "char": "y",
3157
+ "description": "Skip confirmation prompt",
3158
+ "name": "yes",
3159
+ "allowNo": false,
3160
+ "type": "boolean"
1575
3161
  }
1576
3162
  },
1577
3163
  "hasDynamicHelp": false,
1578
3164
  "hiddenAliases": [],
1579
- "id": "verify:status",
3165
+ "id": "webhooks:delete",
1580
3166
  "pluginAlias": "@sendly/cli",
1581
3167
  "pluginName": "@sendly/cli",
1582
3168
  "pluginType": "core",
@@ -1585,17 +3171,25 @@
1585
3171
  "relativePath": [
1586
3172
  "dist",
1587
3173
  "commands",
1588
- "verify",
1589
- "status.js"
3174
+ "webhooks",
3175
+ "delete.js"
1590
3176
  ]
1591
3177
  },
1592
- "templates:create": {
3178
+ "webhooks:deliveries": {
1593
3179
  "aliases": [],
1594
- "args": {},
1595
- "description": "Create a new SMS template",
3180
+ "args": {
3181
+ "id": {
3182
+ "description": "Webhook ID",
3183
+ "name": "id",
3184
+ "required": true
3185
+ }
3186
+ },
3187
+ "description": "View webhook delivery history",
1596
3188
  "examples": [
1597
- "<%= config.bin %> templates create --name \"My OTP\" --text \"Your code is {{code}}\"",
1598
- "<%= config.bin %> templates create --name \"Login\" --text \"{{code}} is your {{app_name}} login code\""
3189
+ "<%= config.bin %> webhooks deliveries whk_abc123",
3190
+ "<%= config.bin %> webhooks deliveries whk_abc123 --limit 20",
3191
+ "<%= config.bin %> webhooks deliveries whk_abc123 --failed-only",
3192
+ "<%= config.bin %> webhooks deliveries whk_abc123 --json"
1599
3193
  ],
1600
3194
  "flags": {
1601
3195
  "json": {
@@ -1611,28 +3205,25 @@
1611
3205
  "allowNo": false,
1612
3206
  "type": "boolean"
1613
3207
  },
1614
- "name": {
1615
- "char": "n",
1616
- "description": "Template name",
1617
- "name": "name",
1618
- "required": true,
3208
+ "limit": {
3209
+ "char": "l",
3210
+ "description": "Number of deliveries to show",
3211
+ "name": "limit",
3212
+ "default": 10,
1619
3213
  "hasDynamicHelp": false,
1620
3214
  "multiple": false,
1621
3215
  "type": "option"
1622
3216
  },
1623
- "text": {
1624
- "char": "t",
1625
- "description": "Message text (use {{code}} and {{app_name}} variables)",
1626
- "name": "text",
1627
- "required": true,
1628
- "hasDynamicHelp": false,
1629
- "multiple": false,
1630
- "type": "option"
3217
+ "failed-only": {
3218
+ "description": "Show only failed deliveries",
3219
+ "name": "failed-only",
3220
+ "allowNo": false,
3221
+ "type": "boolean"
1631
3222
  }
1632
3223
  },
1633
3224
  "hasDynamicHelp": false,
1634
3225
  "hiddenAliases": [],
1635
- "id": "templates:create",
3226
+ "id": "webhooks:deliveries",
1636
3227
  "pluginAlias": "@sendly/cli",
1637
3228
  "pluginName": "@sendly/cli",
1638
3229
  "pluginType": "core",
@@ -1641,23 +3232,23 @@
1641
3232
  "relativePath": [
1642
3233
  "dist",
1643
3234
  "commands",
1644
- "templates",
1645
- "create.js"
3235
+ "webhooks",
3236
+ "deliveries.js"
1646
3237
  ]
1647
3238
  },
1648
- "templates:delete": {
3239
+ "webhooks:get": {
1649
3240
  "aliases": [],
1650
3241
  "args": {
1651
3242
  "id": {
1652
- "description": "Template ID",
3243
+ "description": "Webhook ID",
1653
3244
  "name": "id",
1654
3245
  "required": true
1655
3246
  }
1656
3247
  },
1657
- "description": "Delete a template",
3248
+ "description": "Get webhook details",
1658
3249
  "examples": [
1659
- "<%= config.bin %> templates delete tpl_xxx",
1660
- "<%= config.bin %> templates delete tpl_xxx --force"
3250
+ "<%= config.bin %> webhooks get whk_abc123",
3251
+ "<%= config.bin %> webhooks get whk_abc123 --json"
1661
3252
  ],
1662
3253
  "flags": {
1663
3254
  "json": {
@@ -1672,18 +3263,11 @@
1672
3263
  "name": "quiet",
1673
3264
  "allowNo": false,
1674
3265
  "type": "boolean"
1675
- },
1676
- "force": {
1677
- "char": "f",
1678
- "description": "Skip confirmation",
1679
- "name": "force",
1680
- "allowNo": false,
1681
- "type": "boolean"
1682
3266
  }
1683
3267
  },
1684
3268
  "hasDynamicHelp": false,
1685
3269
  "hiddenAliases": [],
1686
- "id": "templates:delete",
3270
+ "id": "webhooks:get",
1687
3271
  "pluginAlias": "@sendly/cli",
1688
3272
  "pluginName": "@sendly/cli",
1689
3273
  "pluginType": "core",
@@ -1692,23 +3276,17 @@
1692
3276
  "relativePath": [
1693
3277
  "dist",
1694
3278
  "commands",
1695
- "templates",
1696
- "delete.js"
3279
+ "webhooks",
3280
+ "get.js"
1697
3281
  ]
1698
3282
  },
1699
- "templates:get": {
3283
+ "webhooks:list": {
1700
3284
  "aliases": [],
1701
- "args": {
1702
- "id": {
1703
- "description": "Template ID",
1704
- "name": "id",
1705
- "required": true
1706
- }
1707
- },
1708
- "description": "Get template details",
3285
+ "args": {},
3286
+ "description": "List configured webhooks",
1709
3287
  "examples": [
1710
- "<%= config.bin %> templates get tpl_xxx",
1711
- "<%= config.bin %> templates get tpl_preset_2fa"
3288
+ "<%= config.bin %> webhooks list",
3289
+ "<%= config.bin %> webhooks list --json"
1712
3290
  ],
1713
3291
  "flags": {
1714
3292
  "json": {
@@ -1727,7 +3305,7 @@
1727
3305
  },
1728
3306
  "hasDynamicHelp": false,
1729
3307
  "hiddenAliases": [],
1730
- "id": "templates:get",
3308
+ "id": "webhooks:list",
1731
3309
  "pluginAlias": "@sendly/cli",
1732
3310
  "pluginName": "@sendly/cli",
1733
3311
  "pluginType": "core",
@@ -1736,17 +3314,18 @@
1736
3314
  "relativePath": [
1737
3315
  "dist",
1738
3316
  "commands",
1739
- "templates",
1740
- "get.js"
3317
+ "webhooks",
3318
+ "list.js"
1741
3319
  ]
1742
3320
  },
1743
- "templates:list": {
3321
+ "webhooks:listen": {
1744
3322
  "aliases": [],
1745
3323
  "args": {},
1746
- "description": "List your SMS templates",
3324
+ "description": "Listen for webhooks locally. Receives events in real-time via WebSocket and forwards them to your local server.",
1747
3325
  "examples": [
1748
- "<%= config.bin %> templates list",
1749
- "<%= config.bin %> templates list --json"
3326
+ "<%= config.bin %> webhooks listen",
3327
+ "<%= config.bin %> webhooks listen --forward http://localhost:3000/webhook",
3328
+ "<%= config.bin %> webhooks listen --events message.delivered,message.failed"
1750
3329
  ],
1751
3330
  "flags": {
1752
3331
  "json": {
@@ -1761,11 +3340,29 @@
1761
3340
  "name": "quiet",
1762
3341
  "allowNo": false,
1763
3342
  "type": "boolean"
3343
+ },
3344
+ "forward": {
3345
+ "char": "f",
3346
+ "description": "Local URL to forward events to",
3347
+ "name": "forward",
3348
+ "default": "http://localhost:3000/webhook",
3349
+ "hasDynamicHelp": false,
3350
+ "multiple": false,
3351
+ "type": "option"
3352
+ },
3353
+ "events": {
3354
+ "char": "e",
3355
+ "description": "Comma-separated list of events to listen for",
3356
+ "name": "events",
3357
+ "default": "message.sent,message.delivered,message.failed,message.bounced",
3358
+ "hasDynamicHelp": false,
3359
+ "multiple": false,
3360
+ "type": "option"
1764
3361
  }
1765
3362
  },
1766
3363
  "hasDynamicHelp": false,
1767
3364
  "hiddenAliases": [],
1768
- "id": "templates:list",
3365
+ "id": "webhooks:listen",
1769
3366
  "pluginAlias": "@sendly/cli",
1770
3367
  "pluginName": "@sendly/cli",
1771
3368
  "pluginType": "core",
@@ -1774,17 +3371,24 @@
1774
3371
  "relativePath": [
1775
3372
  "dist",
1776
3373
  "commands",
1777
- "templates",
1778
- "list.js"
3374
+ "webhooks",
3375
+ "listen.js"
1779
3376
  ]
1780
3377
  },
1781
- "templates:presets": {
3378
+ "webhooks:rotate-secret": {
1782
3379
  "aliases": [],
1783
- "args": {},
1784
- "description": "List available preset templates",
3380
+ "args": {
3381
+ "id": {
3382
+ "description": "Webhook ID",
3383
+ "name": "id",
3384
+ "required": true
3385
+ }
3386
+ },
3387
+ "description": "Rotate webhook secret",
1785
3388
  "examples": [
1786
- "<%= config.bin %> templates presets",
1787
- "<%= config.bin %> templates presets --json"
3389
+ "<%= config.bin %> webhooks rotate-secret whk_abc123",
3390
+ "<%= config.bin %> webhooks rotate-secret whk_abc123 --yes",
3391
+ "<%= config.bin %> webhooks rotate-secret whk_abc123 --json"
1788
3392
  ],
1789
3393
  "flags": {
1790
3394
  "json": {
@@ -1799,11 +3403,18 @@
1799
3403
  "name": "quiet",
1800
3404
  "allowNo": false,
1801
3405
  "type": "boolean"
3406
+ },
3407
+ "yes": {
3408
+ "char": "y",
3409
+ "description": "Skip confirmation prompt",
3410
+ "name": "yes",
3411
+ "allowNo": false,
3412
+ "type": "boolean"
1802
3413
  }
1803
3414
  },
1804
3415
  "hasDynamicHelp": false,
1805
3416
  "hiddenAliases": [],
1806
- "id": "templates:presets",
3417
+ "id": "webhooks:rotate-secret",
1807
3418
  "pluginAlias": "@sendly/cli",
1808
3419
  "pluginName": "@sendly/cli",
1809
3420
  "pluginType": "core",
@@ -1812,22 +3423,23 @@
1812
3423
  "relativePath": [
1813
3424
  "dist",
1814
3425
  "commands",
1815
- "templates",
1816
- "presets.js"
3426
+ "webhooks",
3427
+ "rotate-secret.js"
1817
3428
  ]
1818
3429
  },
1819
- "templates:publish": {
3430
+ "webhooks:test": {
1820
3431
  "aliases": [],
1821
3432
  "args": {
1822
3433
  "id": {
1823
- "description": "Template ID",
3434
+ "description": "Webhook ID to test",
1824
3435
  "name": "id",
1825
3436
  "required": true
1826
3437
  }
1827
3438
  },
1828
- "description": "Publish a draft template (locks it for use)",
3439
+ "description": "Send a test event to a webhook",
1829
3440
  "examples": [
1830
- "<%= config.bin %> templates publish tpl_xxx"
3441
+ "<%= config.bin %> webhooks test whk_abc123",
3442
+ "<%= config.bin %> webhooks test whk_abc123 --json"
1831
3443
  ],
1832
3444
  "flags": {
1833
3445
  "json": {
@@ -1846,7 +3458,7 @@
1846
3458
  },
1847
3459
  "hasDynamicHelp": false,
1848
3460
  "hiddenAliases": [],
1849
- "id": "templates:publish",
3461
+ "id": "webhooks:test",
1850
3462
  "pluginAlias": "@sendly/cli",
1851
3463
  "pluginName": "@sendly/cli",
1852
3464
  "pluginType": "core",
@@ -1855,18 +3467,26 @@
1855
3467
  "relativePath": [
1856
3468
  "dist",
1857
3469
  "commands",
1858
- "templates",
1859
- "publish.js"
3470
+ "webhooks",
3471
+ "test.js"
1860
3472
  ]
1861
3473
  },
1862
- "webhooks:create": {
3474
+ "webhooks:update": {
1863
3475
  "aliases": [],
1864
- "args": {},
1865
- "description": "Create a webhook",
3476
+ "args": {
3477
+ "id": {
3478
+ "description": "Webhook ID to update",
3479
+ "name": "id",
3480
+ "required": true
3481
+ }
3482
+ },
3483
+ "description": "Update a webhook",
1866
3484
  "examples": [
1867
- "<%= config.bin %> webhooks create --url https://myapp.com/webhook --events message.delivered",
1868
- "<%= config.bin %> webhooks create --url https://myapp.com/webhook --events message.delivered,message.failed --description \"Production webhook\"",
1869
- "<%= config.bin %> webhooks create --url https://webhook.site/abc123 --events message.sent --json"
3485
+ "<%= config.bin %> webhooks update whk_abc123 --url https://newdomain.com/webhook",
3486
+ "<%= config.bin %> webhooks update whk_abc123 --events message.delivered,message.failed",
3487
+ "<%= config.bin %> webhooks update whk_abc123 --description \"Updated production webhook\"",
3488
+ "<%= config.bin %> webhooks update whk_abc123 --active false",
3489
+ "<%= config.bin %> webhooks update whk_abc123 --url https://newdomain.com/webhook --events message.sent --json"
1870
3490
  ],
1871
3491
  "flags": {
1872
3492
  "json": {
@@ -1884,35 +3504,39 @@
1884
3504
  },
1885
3505
  "url": {
1886
3506
  "char": "u",
1887
- "description": "Webhook URL (must be HTTPS)",
3507
+ "description": "Update webhook URL (must be HTTPS)",
1888
3508
  "name": "url",
1889
- "required": true,
1890
3509
  "hasDynamicHelp": false,
1891
3510
  "multiple": false,
1892
3511
  "type": "option"
1893
3512
  },
1894
3513
  "events": {
1895
3514
  "char": "e",
1896
- "description": "Comma-separated list of events to listen for",
3515
+ "description": "Update events list (comma-separated)",
1897
3516
  "name": "events",
1898
- "required": true,
1899
3517
  "hasDynamicHelp": false,
1900
3518
  "multiple": false,
1901
3519
  "type": "option"
1902
3520
  },
1903
3521
  "description": {
1904
3522
  "char": "d",
1905
- "description": "Description for the webhook",
3523
+ "description": "Update description",
1906
3524
  "name": "description",
1907
3525
  "hasDynamicHelp": false,
1908
3526
  "multiple": false,
1909
3527
  "type": "option"
1910
3528
  },
3529
+ "active": {
3530
+ "char": "a",
3531
+ "description": "Enable or disable the webhook",
3532
+ "name": "active",
3533
+ "allowNo": true,
3534
+ "type": "boolean"
3535
+ },
1911
3536
  "mode": {
1912
3537
  "char": "m",
1913
- "description": "Event mode filter: all (default), test (sandbox only), live (production only)",
3538
+ "description": "Update event mode filter: all, test (sandbox only), live (production only)",
1914
3539
  "name": "mode",
1915
- "default": "all",
1916
3540
  "hasDynamicHelp": false,
1917
3541
  "multiple": false,
1918
3542
  "options": [
@@ -1925,7 +3549,7 @@
1925
3549
  },
1926
3550
  "hasDynamicHelp": false,
1927
3551
  "hiddenAliases": [],
1928
- "id": "webhooks:create",
3552
+ "id": "webhooks:update",
1929
3553
  "pluginAlias": "@sendly/cli",
1930
3554
  "pluginName": "@sendly/cli",
1931
3555
  "pluginType": "core",
@@ -1935,23 +3559,22 @@
1935
3559
  "dist",
1936
3560
  "commands",
1937
3561
  "webhooks",
1938
- "create.js"
3562
+ "update.js"
1939
3563
  ]
1940
3564
  },
1941
- "webhooks:delete": {
3565
+ "contacts:lists:add": {
1942
3566
  "aliases": [],
1943
3567
  "args": {
1944
- "id": {
1945
- "description": "Webhook ID to delete",
1946
- "name": "id",
3568
+ "listId": {
3569
+ "description": "Contact list ID",
3570
+ "name": "listId",
1947
3571
  "required": true
1948
3572
  }
1949
3573
  },
1950
- "description": "Delete a webhook",
3574
+ "description": "Add contacts to a list",
1951
3575
  "examples": [
1952
- "<%= config.bin %> webhooks delete whk_abc123",
1953
- "<%= config.bin %> webhooks delete whk_abc123 --yes",
1954
- "<%= config.bin %> webhooks delete whk_abc123 --json"
3576
+ "<%= config.bin %> contacts lists add lst_xxx --contacts cnt_abc,cnt_def",
3577
+ "<%= config.bin %> contacts lists add lst_xxx --contacts cnt_abc --contacts cnt_def"
1955
3578
  ],
1956
3579
  "flags": {
1957
3580
  "json": {
@@ -1967,17 +3590,19 @@
1967
3590
  "allowNo": false,
1968
3591
  "type": "boolean"
1969
3592
  },
1970
- "yes": {
1971
- "char": "y",
1972
- "description": "Skip confirmation prompt",
1973
- "name": "yes",
1974
- "allowNo": false,
1975
- "type": "boolean"
3593
+ "contacts": {
3594
+ "char": "c",
3595
+ "description": "Contact IDs to add (comma-separated or multiple flags)",
3596
+ "name": "contacts",
3597
+ "required": true,
3598
+ "hasDynamicHelp": false,
3599
+ "multiple": true,
3600
+ "type": "option"
1976
3601
  }
1977
3602
  },
1978
3603
  "hasDynamicHelp": false,
1979
3604
  "hiddenAliases": [],
1980
- "id": "webhooks:delete",
3605
+ "id": "contacts:lists:add",
1981
3606
  "pluginAlias": "@sendly/cli",
1982
3607
  "pluginName": "@sendly/cli",
1983
3608
  "pluginType": "core",
@@ -1986,25 +3611,18 @@
1986
3611
  "relativePath": [
1987
3612
  "dist",
1988
3613
  "commands",
1989
- "webhooks",
1990
- "delete.js"
3614
+ "contacts",
3615
+ "lists",
3616
+ "add.js"
1991
3617
  ]
1992
3618
  },
1993
- "webhooks:deliveries": {
3619
+ "contacts:lists:create": {
1994
3620
  "aliases": [],
1995
- "args": {
1996
- "id": {
1997
- "description": "Webhook ID",
1998
- "name": "id",
1999
- "required": true
2000
- }
2001
- },
2002
- "description": "View webhook delivery history",
3621
+ "args": {},
3622
+ "description": "Create a new contact list",
2003
3623
  "examples": [
2004
- "<%= config.bin %> webhooks deliveries whk_abc123",
2005
- "<%= config.bin %> webhooks deliveries whk_abc123 --limit 20",
2006
- "<%= config.bin %> webhooks deliveries whk_abc123 --failed-only",
2007
- "<%= config.bin %> webhooks deliveries whk_abc123 --json"
3624
+ "<%= config.bin %> contacts lists create --name \"VIP Customers\"",
3625
+ "<%= config.bin %> contacts lists create --name \"Newsletter\" --description \"Weekly newsletter subscribers\""
2008
3626
  ],
2009
3627
  "flags": {
2010
3628
  "json": {
@@ -2020,25 +3638,27 @@
2020
3638
  "allowNo": false,
2021
3639
  "type": "boolean"
2022
3640
  },
2023
- "limit": {
2024
- "char": "l",
2025
- "description": "Number of deliveries to show",
2026
- "name": "limit",
2027
- "default": 10,
3641
+ "name": {
3642
+ "char": "n",
3643
+ "description": "List name",
3644
+ "name": "name",
3645
+ "required": true,
2028
3646
  "hasDynamicHelp": false,
2029
3647
  "multiple": false,
2030
3648
  "type": "option"
2031
3649
  },
2032
- "failed-only": {
2033
- "description": "Show only failed deliveries",
2034
- "name": "failed-only",
2035
- "allowNo": false,
2036
- "type": "boolean"
3650
+ "description": {
3651
+ "char": "d",
3652
+ "description": "List description",
3653
+ "name": "description",
3654
+ "hasDynamicHelp": false,
3655
+ "multiple": false,
3656
+ "type": "option"
2037
3657
  }
2038
3658
  },
2039
3659
  "hasDynamicHelp": false,
2040
3660
  "hiddenAliases": [],
2041
- "id": "webhooks:deliveries",
3661
+ "id": "contacts:lists:create",
2042
3662
  "pluginAlias": "@sendly/cli",
2043
3663
  "pluginName": "@sendly/cli",
2044
3664
  "pluginType": "core",
@@ -2047,23 +3667,24 @@
2047
3667
  "relativePath": [
2048
3668
  "dist",
2049
3669
  "commands",
2050
- "webhooks",
2051
- "deliveries.js"
3670
+ "contacts",
3671
+ "lists",
3672
+ "create.js"
2052
3673
  ]
2053
3674
  },
2054
- "webhooks:get": {
3675
+ "contacts:lists:delete": {
2055
3676
  "aliases": [],
2056
3677
  "args": {
2057
3678
  "id": {
2058
- "description": "Webhook ID",
3679
+ "description": "Contact list ID to delete",
2059
3680
  "name": "id",
2060
3681
  "required": true
2061
3682
  }
2062
3683
  },
2063
- "description": "Get webhook details",
3684
+ "description": "Delete a contact list (does not delete the contacts)",
2064
3685
  "examples": [
2065
- "<%= config.bin %> webhooks get whk_abc123",
2066
- "<%= config.bin %> webhooks get whk_abc123 --json"
3686
+ "<%= config.bin %> contacts lists delete lst_xxx",
3687
+ "<%= config.bin %> contacts lists delete lst_xxx --yes"
2067
3688
  ],
2068
3689
  "flags": {
2069
3690
  "json": {
@@ -2078,49 +3699,18 @@
2078
3699
  "name": "quiet",
2079
3700
  "allowNo": false,
2080
3701
  "type": "boolean"
2081
- }
2082
- },
2083
- "hasDynamicHelp": false,
2084
- "hiddenAliases": [],
2085
- "id": "webhooks:get",
2086
- "pluginAlias": "@sendly/cli",
2087
- "pluginName": "@sendly/cli",
2088
- "pluginType": "core",
2089
- "strict": true,
2090
- "isESM": true,
2091
- "relativePath": [
2092
- "dist",
2093
- "commands",
2094
- "webhooks",
2095
- "get.js"
2096
- ]
2097
- },
2098
- "webhooks:list": {
2099
- "aliases": [],
2100
- "args": {},
2101
- "description": "List configured webhooks",
2102
- "examples": [
2103
- "<%= config.bin %> webhooks list",
2104
- "<%= config.bin %> webhooks list --json"
2105
- ],
2106
- "flags": {
2107
- "json": {
2108
- "description": "Output in JSON format",
2109
- "name": "json",
2110
- "allowNo": false,
2111
- "type": "boolean"
2112
3702
  },
2113
- "quiet": {
2114
- "char": "q",
2115
- "description": "Minimal output",
2116
- "name": "quiet",
3703
+ "yes": {
3704
+ "char": "y",
3705
+ "description": "Skip confirmation prompt",
3706
+ "name": "yes",
2117
3707
  "allowNo": false,
2118
3708
  "type": "boolean"
2119
3709
  }
2120
3710
  },
2121
3711
  "hasDynamicHelp": false,
2122
3712
  "hiddenAliases": [],
2123
- "id": "webhooks:list",
3713
+ "id": "contacts:lists:delete",
2124
3714
  "pluginAlias": "@sendly/cli",
2125
3715
  "pluginName": "@sendly/cli",
2126
3716
  "pluginType": "core",
@@ -2129,18 +3719,24 @@
2129
3719
  "relativePath": [
2130
3720
  "dist",
2131
3721
  "commands",
2132
- "webhooks",
2133
- "list.js"
3722
+ "contacts",
3723
+ "lists",
3724
+ "delete.js"
2134
3725
  ]
2135
3726
  },
2136
- "webhooks:listen": {
3727
+ "contacts:lists:get": {
2137
3728
  "aliases": [],
2138
- "args": {},
2139
- "description": "Listen for webhooks locally. Receives events in real-time via WebSocket and forwards them to your local server.",
3729
+ "args": {
3730
+ "id": {
3731
+ "description": "Contact list ID",
3732
+ "name": "id",
3733
+ "required": true
3734
+ }
3735
+ },
3736
+ "description": "Get contact list details",
2140
3737
  "examples": [
2141
- "<%= config.bin %> webhooks listen",
2142
- "<%= config.bin %> webhooks listen --forward http://localhost:3000/webhook",
2143
- "<%= config.bin %> webhooks listen --events message.delivered,message.failed"
3738
+ "<%= config.bin %> contacts lists get lst_xxx",
3739
+ "<%= config.bin %> contacts lists get lst_xxx --json"
2144
3740
  ],
2145
3741
  "flags": {
2146
3742
  "json": {
@@ -2155,29 +3751,11 @@
2155
3751
  "name": "quiet",
2156
3752
  "allowNo": false,
2157
3753
  "type": "boolean"
2158
- },
2159
- "forward": {
2160
- "char": "f",
2161
- "description": "Local URL to forward events to",
2162
- "name": "forward",
2163
- "default": "http://localhost:3000/webhook",
2164
- "hasDynamicHelp": false,
2165
- "multiple": false,
2166
- "type": "option"
2167
- },
2168
- "events": {
2169
- "char": "e",
2170
- "description": "Comma-separated list of events to listen for",
2171
- "name": "events",
2172
- "default": "message.sent,message.delivered,message.failed,message.bounced",
2173
- "hasDynamicHelp": false,
2174
- "multiple": false,
2175
- "type": "option"
2176
3754
  }
2177
3755
  },
2178
3756
  "hasDynamicHelp": false,
2179
3757
  "hiddenAliases": [],
2180
- "id": "webhooks:listen",
3758
+ "id": "contacts:lists:get",
2181
3759
  "pluginAlias": "@sendly/cli",
2182
3760
  "pluginName": "@sendly/cli",
2183
3761
  "pluginType": "core",
@@ -2186,24 +3764,18 @@
2186
3764
  "relativePath": [
2187
3765
  "dist",
2188
3766
  "commands",
2189
- "webhooks",
2190
- "listen.js"
3767
+ "contacts",
3768
+ "lists",
3769
+ "get.js"
2191
3770
  ]
2192
3771
  },
2193
- "webhooks:rotate-secret": {
3772
+ "contacts:lists": {
2194
3773
  "aliases": [],
2195
- "args": {
2196
- "id": {
2197
- "description": "Webhook ID",
2198
- "name": "id",
2199
- "required": true
2200
- }
2201
- },
2202
- "description": "Rotate webhook secret",
3774
+ "args": {},
3775
+ "description": "List all contact lists",
2203
3776
  "examples": [
2204
- "<%= config.bin %> webhooks rotate-secret whk_abc123",
2205
- "<%= config.bin %> webhooks rotate-secret whk_abc123 --yes",
2206
- "<%= config.bin %> webhooks rotate-secret whk_abc123 --json"
3777
+ "<%= config.bin %> contacts lists",
3778
+ "<%= config.bin %> contacts lists --json"
2207
3779
  ],
2208
3780
  "flags": {
2209
3781
  "json": {
@@ -2218,18 +3790,11 @@
2218
3790
  "name": "quiet",
2219
3791
  "allowNo": false,
2220
3792
  "type": "boolean"
2221
- },
2222
- "yes": {
2223
- "char": "y",
2224
- "description": "Skip confirmation prompt",
2225
- "name": "yes",
2226
- "allowNo": false,
2227
- "type": "boolean"
2228
3793
  }
2229
3794
  },
2230
3795
  "hasDynamicHelp": false,
2231
3796
  "hiddenAliases": [],
2232
- "id": "webhooks:rotate-secret",
3797
+ "id": "contacts:lists",
2233
3798
  "pluginAlias": "@sendly/cli",
2234
3799
  "pluginName": "@sendly/cli",
2235
3800
  "pluginType": "core",
@@ -2238,23 +3803,28 @@
2238
3803
  "relativePath": [
2239
3804
  "dist",
2240
3805
  "commands",
2241
- "webhooks",
2242
- "rotate-secret.js"
3806
+ "contacts",
3807
+ "lists",
3808
+ "index.js"
2243
3809
  ]
2244
3810
  },
2245
- "webhooks:test": {
3811
+ "contacts:lists:remove": {
2246
3812
  "aliases": [],
2247
3813
  "args": {
2248
- "id": {
2249
- "description": "Webhook ID to test",
2250
- "name": "id",
3814
+ "listId": {
3815
+ "description": "Contact list ID",
3816
+ "name": "listId",
3817
+ "required": true
3818
+ },
3819
+ "contactId": {
3820
+ "description": "Contact ID to remove",
3821
+ "name": "contactId",
2251
3822
  "required": true
2252
3823
  }
2253
3824
  },
2254
- "description": "Send a test event to a webhook",
3825
+ "description": "Remove a contact from a list",
2255
3826
  "examples": [
2256
- "<%= config.bin %> webhooks test whk_abc123",
2257
- "<%= config.bin %> webhooks test whk_abc123 --json"
3827
+ "<%= config.bin %> contacts lists remove lst_xxx cnt_abc"
2258
3828
  ],
2259
3829
  "flags": {
2260
3830
  "json": {
@@ -2273,7 +3843,7 @@
2273
3843
  },
2274
3844
  "hasDynamicHelp": false,
2275
3845
  "hiddenAliases": [],
2276
- "id": "webhooks:test",
3846
+ "id": "contacts:lists:remove",
2277
3847
  "pluginAlias": "@sendly/cli",
2278
3848
  "pluginName": "@sendly/cli",
2279
3849
  "pluginType": "core",
@@ -2282,26 +3852,24 @@
2282
3852
  "relativePath": [
2283
3853
  "dist",
2284
3854
  "commands",
2285
- "webhooks",
2286
- "test.js"
3855
+ "contacts",
3856
+ "lists",
3857
+ "remove.js"
2287
3858
  ]
2288
3859
  },
2289
- "webhooks:update": {
3860
+ "contacts:lists:update": {
2290
3861
  "aliases": [],
2291
3862
  "args": {
2292
3863
  "id": {
2293
- "description": "Webhook ID to update",
3864
+ "description": "Contact list ID",
2294
3865
  "name": "id",
2295
3866
  "required": true
2296
3867
  }
2297
3868
  },
2298
- "description": "Update a webhook",
3869
+ "description": "Update a contact list",
2299
3870
  "examples": [
2300
- "<%= config.bin %> webhooks update whk_abc123 --url https://newdomain.com/webhook",
2301
- "<%= config.bin %> webhooks update whk_abc123 --events message.delivered,message.failed",
2302
- "<%= config.bin %> webhooks update whk_abc123 --description \"Updated production webhook\"",
2303
- "<%= config.bin %> webhooks update whk_abc123 --active false",
2304
- "<%= config.bin %> webhooks update whk_abc123 --url https://newdomain.com/webhook --events message.sent --json"
3871
+ "<%= config.bin %> contacts lists update lst_xxx --name \"VIP Customers\"",
3872
+ "<%= config.bin %> contacts lists update lst_xxx --description \"Updated desc\""
2305
3873
  ],
2306
3874
  "flags": {
2307
3875
  "json": {
@@ -2317,54 +3885,26 @@
2317
3885
  "allowNo": false,
2318
3886
  "type": "boolean"
2319
3887
  },
2320
- "url": {
2321
- "char": "u",
2322
- "description": "Update webhook URL (must be HTTPS)",
2323
- "name": "url",
2324
- "hasDynamicHelp": false,
2325
- "multiple": false,
2326
- "type": "option"
2327
- },
2328
- "events": {
2329
- "char": "e",
2330
- "description": "Update events list (comma-separated)",
2331
- "name": "events",
3888
+ "name": {
3889
+ "char": "n",
3890
+ "description": "List name",
3891
+ "name": "name",
2332
3892
  "hasDynamicHelp": false,
2333
3893
  "multiple": false,
2334
3894
  "type": "option"
2335
3895
  },
2336
3896
  "description": {
2337
3897
  "char": "d",
2338
- "description": "Update description",
3898
+ "description": "List description",
2339
3899
  "name": "description",
2340
3900
  "hasDynamicHelp": false,
2341
3901
  "multiple": false,
2342
3902
  "type": "option"
2343
- },
2344
- "active": {
2345
- "char": "a",
2346
- "description": "Enable or disable the webhook",
2347
- "name": "active",
2348
- "allowNo": true,
2349
- "type": "boolean"
2350
- },
2351
- "mode": {
2352
- "char": "m",
2353
- "description": "Update event mode filter: all, test (sandbox only), live (production only)",
2354
- "name": "mode",
2355
- "hasDynamicHelp": false,
2356
- "multiple": false,
2357
- "options": [
2358
- "all",
2359
- "test",
2360
- "live"
2361
- ],
2362
- "type": "option"
2363
3903
  }
2364
3904
  },
2365
3905
  "hasDynamicHelp": false,
2366
3906
  "hiddenAliases": [],
2367
- "id": "webhooks:update",
3907
+ "id": "contacts:lists:update",
2368
3908
  "pluginAlias": "@sendly/cli",
2369
3909
  "pluginName": "@sendly/cli",
2370
3910
  "pluginType": "core",
@@ -2373,10 +3913,11 @@
2373
3913
  "relativePath": [
2374
3914
  "dist",
2375
3915
  "commands",
2376
- "webhooks",
3916
+ "contacts",
3917
+ "lists",
2377
3918
  "update.js"
2378
3919
  ]
2379
3920
  }
2380
3921
  },
2381
- "version": "3.12.0"
3922
+ "version": "3.13.1"
2382
3923
  }