Round 378: Twilio ext, SendGrid ext, Mailgun ext, SES/Postmark ext (20 commands)

ober

bcf16ab3d0b01fae277ddc7e478f89c8533350d2

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 0b058fa..2fc9cc9 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 378 — Twilio ext, SendGrid ext, Mailgun ext, SES/Postmark ext
+
+| Feature | Emacs | jemacs | Status |
+|---|---|---|---|
+| Twilio send SMS | — | `twilio-sms` | :orange_circle: Scaffolded |
+| Twilio list calls | — | `twilio-calls` | :orange_circle: Scaffolded |
+| Twilio phone numbers | — | `twilio-numbers` | :orange_circle: Scaffolded |
+| Twilio verification | — | `twilio-verify` | :orange_circle: Scaffolded |
+| SendGrid send email | — | `sendgrid-send` | :orange_circle: Scaffolded |
+| SendGrid templates | — | `sendgrid-templates` | :orange_circle: Scaffolded |
+| SendGrid contacts | — | `sendgrid-contacts` | :orange_circle: Scaffolded |
+| SendGrid stats | — | `sendgrid-stats` | :orange_circle: Scaffolded |
+| Mailgun send email | — | `mailgun-send` | :orange_circle: Scaffolded |
+| Mailgun domains | — | `mailgun-domains` | :orange_circle: Scaffolded |
+| Mailgun routes | — | `mailgun-routes` | :orange_circle: Scaffolded |
+| Mailgun logs | — | `mailgun-logs` | :orange_circle: Scaffolded |
+| SES send email | — | `ses-send` | :orange_circle: Scaffolded |
+| SES templates | — | `ses-templates` | :orange_circle: Scaffolded |
+| SES identities | — | `ses-identities` | :orange_circle: Scaffolded |
+| SES sending stats | — | `ses-stats` | :orange_circle: Scaffolded |
+| Postmark send email | — | `postmark-send` | :orange_circle: Scaffolded |
+| Postmark templates | — | `postmark-templates` | :orange_circle: Scaffolded |
+| Postmark servers | — | `postmark-servers` | :orange_circle: Scaffolded |
+| Postmark delivery stats | — | `postmark-stats` | :orange_circle: Scaffolded |
+
 ### Round 377 — Stripe ext, PayPal ext, Braintree ext, Square/Adyen ext
 
 | Feature | Emacs | jemacs | Status |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index d4a23f0..9f435e2 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -26792,3 +26792,48 @@
 (def (cmd-adyen-reports app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Adyen: listing reports")))
+
+;; Round 378 batch 2 — Mailgun ext, SES/Postmark ext
+(def (cmd-mailgun-routes app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mailgun: listing routes")))
+
+(def (cmd-mailgun-logs app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mailgun: viewing logs")))
+
+(def (cmd-ses-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Recipient: "
+      (lambda (to)
+        (echo-message! echo (str "SES: sending email to " to))))))
+
+(def (cmd-ses-templates app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: listing templates")))
+
+(def (cmd-ses-identities app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: listing verified identities")))
+
+(def (cmd-ses-stats app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: showing sending stats")))
+
+(def (cmd-postmark-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Recipient: "
+      (lambda (to)
+        (echo-message! echo (str "Postmark: sending email to " to))))))
+
+(def (cmd-postmark-templates app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Postmark: listing templates")))
+
+(def (cmd-postmark-servers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Postmark: listing servers")))
+
+(def (cmd-postmark-stats app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Postmark: showing delivery stats")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 30a73a5..3d6b3f0 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -27571,3 +27571,50 @@
 (def (cmd-braintree-customers app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Braintree: listing customers")))
+
+;; Round 378 batch 1 — Twilio ext, SendGrid ext
+(def (cmd-twilio-sms app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "To number: "
+      (lambda (to)
+        (echo-message! echo (str "Twilio: sending SMS to " to))))))
+
+(def (cmd-twilio-calls app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Twilio: listing calls")))
+
+(def (cmd-twilio-numbers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Twilio: listing phone numbers")))
+
+(def (cmd-twilio-verify app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Twilio: sending verification")))
+
+(def (cmd-sendgrid-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Recipient: "
+      (lambda (to)
+        (echo-message! echo (str "SendGrid: sending email to " to))))))
+
+(def (cmd-sendgrid-templates app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SendGrid: listing templates")))
+
+(def (cmd-sendgrid-contacts app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SendGrid: listing contacts")))
+
+(def (cmd-sendgrid-stats app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SendGrid: showing email stats")))
+
+(def (cmd-mailgun-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Recipient: "
+      (lambda (to)
+        (echo-message! echo (str "Mailgun: sending email to " to))))))
+
+(def (cmd-mailgun-domains app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mailgun: listing domains")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 2fc3249..6fb5ae6 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -9398,4 +9398,26 @@
   (register-command! 'adyen-refunds cmd-adyen-refunds)
   (register-command! 'adyen-payouts cmd-adyen-payouts)
   (register-command! 'adyen-reports cmd-adyen-reports)
+
+  ;; Round 378 — Twilio ext, SendGrid ext, Mailgun ext, SES/Postmark ext
+  (register-command! 'twilio-sms cmd-twilio-sms)
+  (register-command! 'twilio-calls cmd-twilio-calls)
+  (register-command! 'twilio-numbers cmd-twilio-numbers)
+  (register-command! 'twilio-verify cmd-twilio-verify)
+  (register-command! 'sendgrid-send cmd-sendgrid-send)
+  (register-command! 'sendgrid-templates cmd-sendgrid-templates)
+  (register-command! 'sendgrid-contacts cmd-sendgrid-contacts)
+  (register-command! 'sendgrid-stats cmd-sendgrid-stats)
+  (register-command! 'mailgun-send cmd-mailgun-send)
+  (register-command! 'mailgun-domains cmd-mailgun-domains)
+  (register-command! 'mailgun-routes cmd-mailgun-routes)
+  (register-command! 'mailgun-logs cmd-mailgun-logs)
+  (register-command! 'ses-send cmd-ses-send)
+  (register-command! 'ses-templates cmd-ses-templates)
+  (register-command! 'ses-identities cmd-ses-identities)
+  (register-command! 'ses-stats cmd-ses-stats)
+  (register-command! 'postmark-send cmd-postmark-send)
+  (register-command! 'postmark-templates cmd-postmark-templates)
+  (register-command! 'postmark-servers cmd-postmark-servers)
+  (register-command! 'postmark-stats cmd-postmark-stats)
 )