-
Notifications
You must be signed in to change notification settings - Fork 1
/
defaults.cljs
48 lines (41 loc) · 1.5 KB
/
defaults.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(ns serverless.interceptors.defaults
(:require [serverless.aws.api-gateway :as api]
[serverless.aws.dynamo-db :as ddb]
[serverless.env :refer [env->hash-map]]
[serverless.logger :as logger]))
(def assoc-raw-event
{:name :assoc-raw-event
:enter (fn [event] {:raw-event event})})
(def assoc-ws-event
{:name :assoc-ws-event
:enter (fn [{:keys [raw-event] :as ctx}]
(let [sub (api/sub raw-event)]
(assoc ctx :event
{:body (try (api/body raw-event) (catch :default e nil))
:connection-id (api/connection-id raw-event)
:route (api/route-key raw-event)
:sub (when (not= sub "anonymous") sub)})))
:leave (fn [_] {:statusCode 200})})
(def assoc-env
{:name :assoc-env
:enter #(assoc % :env (env->hash-map))})
(def merge-logger-deps
{:name :merge-logger-deps
:enter #(update % :deps merge (logger/context->deps %))})
(def merge-dynamo-db-deps
{:name :merge-dynamo-db-deps
:enter (fn [{:keys [env] :as context}]
(update context :deps merge
(ddb/table-name->deps (:table-name env))))})
(def merge-web-socket-deps
{:name :merge-web-socket-deps
:enter (fn [{:keys [raw-event] :as context}]
(update context :deps merge
(api/ws-event->deps raw-event)))})
(def ws-interceptors
[assoc-raw-event
assoc-ws-event
assoc-env
merge-logger-deps
merge-dynamo-db-deps
merge-web-socket-deps])