61 lines
2.6 KiB
Clojure
61 lines
2.6 KiB
Clojure
(ns auto-ap.plaid.core
|
|
(:require
|
|
[clj-http.client :as client]
|
|
[clojure.data.json :as json]
|
|
[clojure.tools.logging :as log]
|
|
[config.core :as cfg :refer [env]]
|
|
[auto-ap.time :as atime]))
|
|
|
|
(def base-url (-> env :plaid :base-url))
|
|
|
|
(def client-id (-> env :plaid :client-id))
|
|
(def secret-key (-> env :plaid :secret-key))
|
|
|
|
|
|
(defn get-link-token [client-code]
|
|
(-> (client/post (str base-url "/link/token/create")
|
|
{:as :json
|
|
:headers {"Content-Type" "application/json"}
|
|
:body (json/write-str {"client_id" client-id
|
|
"secret" secret-key
|
|
"client_name" "Integreat Consulting"
|
|
"country_codes" ["US"]
|
|
"language" "en"
|
|
"user" {"client_user_id" client-code}
|
|
"products" ["transactions"]})})
|
|
:body
|
|
:link_token))
|
|
|
|
(defn exchange-public-token [public-token _]
|
|
(-> (client/post (str base-url "/item/public_token/exchange")
|
|
{:as :json
|
|
:headers {"Content-Type" "application/json"}
|
|
:body (json/write-str {"client_id" client-id
|
|
"secret" secret-key
|
|
"public_token" public-token})})
|
|
:body
|
|
(doto println)))
|
|
|
|
(defn get-accounts [access-token ]
|
|
(-> (client/post (str base-url "/accounts/get")
|
|
{:as :json
|
|
:headers {"Content-Type" "application/json"}
|
|
:body (json/write-str {"client_id" client-id
|
|
"secret" secret-key
|
|
"access_token" access-token})})
|
|
:body))
|
|
|
|
(defn get-transactions [access-token account-id start end]
|
|
(log/infof "looking up transactions from %s to %s for %s" start end account-id)
|
|
(-> (client/post (str base-url "/transactions/get")
|
|
{:as :json
|
|
:headers {"Content-Type" "application/json"}
|
|
:body (json/write-str {"client_id" client-id
|
|
"secret" secret-key
|
|
"access_token" access-token
|
|
"start_date" (atime/unparse start atime/iso-date)
|
|
"end_date" (atime/unparse end atime/iso-date)
|
|
"options" {"account_ids" [account-id]}})})
|
|
:body))
|
|
|