diff options
| author | eltrac <hi@eltr.ac> | 2026-09-27 21:48:52 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-09-27 21:48:52 +0800 |
| commit | a52b1c74af318b7550711d360d202a3cc4e02805 (patch) | |
| tree | 438ffb5042ddf086c26abe39d808945d0f2cb58e /src | |
| parent | cb8be6a76807107cb3bed7c600ad9cd973bb2af1 (diff) | |
webhook: fix AssertionError when event keys are not complete in user's config
Diffstat (limited to 'src')
| -rw-r--r-- | src/weepinbell/webhook.clj | 14 |
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)))) |
