summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-09-27 21:48:52 +0800
committereltrac <hi@eltr.ac>2026-09-27 21:48:52 +0800
commita52b1c74af318b7550711d360d202a3cc4e02805 (patch)
tree438ffb5042ddf086c26abe39d808945d0f2cb58e /src
parentcb8be6a76807107cb3bed7c600ad9cd973bb2af1 (diff)
webhook: fix AssertionError when event keys are not complete in user's config
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/webhook.clj14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/weepinbell/webhook.clj b/src/weepinbell/webhook.clj
index c9679aa..ae0d12b 100644
--- a/src/weepinbell/webhook.clj
+++ b/src/weepinbell/webhook.clj
@@ -1,7 +1,5 @@
(ns weepinbell.webhook
- "Makes hooks for sending webhook requests to certain endpoints on certain events.
- This component does not care about specific event types or endpoints.
- It takes them from its caller (core.clj) and makes a map of hook functions."
+ "Makes hooks for sending webhook requests to certain endpoints on certain events."
(:require [taoensso.timbre :as timbre]
[clojure.string :as string]
[clojure.spec.alpha :as s]
@@ -10,6 +8,9 @@
[weepinbell.http.client :as client]
[weepinbell.webhook-presets :refer [request-presets]]))
+(s/def ::hooks-map
+ (s/keys :req-un [::on-create ::on-update ::on-delete ::on-receive]))
+
;; utilities
(defn- send-webhook [url opts]
(if (valid-http-url? url)
@@ -72,10 +73,14 @@
(make-request event-key data (:request-fn %))))
doall))
+(def empty-hooks
+ (zipmap [:on-receive :on-create :on-delete :on-update]
+ (repeat 4 (fn [& _]))))
(defn make-hooks
"Given config (:webhook and :webhook-request-fn), it makes a vtable of hook functions
that processor calls when certain events are triggered."
[config]
+ {:post [(s/valid? ::hooks-map %)]}
(let [webhooks (:webhook config)
event-keys (keys webhooks)
default-request-fn (:webhook-request-fn config)]
@@ -85,5 +90,6 @@
event-actions (make-actions
default-request-fn (last webhook))]
(partial trigger event-key event-actions))))
- (zipmap event-keys))))
+ (zipmap event-keys)
+ (merge empty-hooks))))