Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,4 @@
fipp {:mvn/version "0.6.18"}
aysylu/loom {:mvn/version "1.0.2"}
thheller/shadow-cljs {:mvn/version "2.15.12"}

;; Requires xmlhttprequest from NPM
cljs-ajax {:mvn/version "0.7.5"}}}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}}}
4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,9 @@
},
"dependencies": {
"chalk": "^2.4.2",
"form-data": "^2.5.1",
"inquirer": "^6.2.2",
"mkdirp": "^0.5.1",
"open": "6.4.0",
"rimraf": "^3.0.0",
"xmlhttprequest": "^1.8.0"
"rimraf": "^3.0.0"
}
}
134 changes: 81 additions & 53 deletions src/sharetribe/flex_cli/api/client.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns sharetribe.flex-cli.api.client
(:require [ajax.core :as ajax]
(:require [cognitect.transit :as t]
[clojure.core.async :as async :refer [put! chan <! go]]
[chalk]
[goog.object]
Expand Down Expand Up @@ -99,67 +99,95 @@
[ex-data]
(-> ex-data :res :response :errors first))

(def transit-reader (t/reader :json))
(def transit-writer (t/writer :json))

(defn- to-query-param [v]
(clj->js v))

(defn- construct-url [url query-params]
(let [url (js/URL. url)]
(doseq [[k v] query-params]
(.set (.-searchParams url) (name k) (to-query-param v)))
url))

(defn read-transit [s]
(try
{:success true
:data (t/read transit-reader s)}
(catch js/Error _e
{:success false})))

(defn- handle-response [out-chan response req]
(->
(.text response)
(.then
(fn [body-str]
(let [parsed (read-transit body-str)]
(put! out-chan
(if (.-ok response)
(:data parsed)
(let [parsed (read-transit body-str)]
(handle-error req
(cond-> {:status (.-status response)
:status-text (.-statusText response)}
(:success parsed) (assoc :response (:data parsed))
(not (:success parsed)) (assoc :original-text body-str)))))))))))

(defn do-get [client path query]
(let [c (chan)]
(ajax/ajax-request
{:uri (str (config/value :api-base-url) path)
:method :get
:params query
:headers {"Authorization" (str "Apikey " (::api-key client))
"User-Agent" user-agent}
:handler (fn [[ok? response]]
(put! c
(if ok?
response
(handle-error {:client client
:path path
:query query}
response))))
:format (ajax/transit-request-format)
:response-format (ajax/transit-response-format)})
(-> (js/fetch
(construct-url (str (config/value :api-base-url) path) query)
(clj->js
{:method "GET"
:headers {"Authorization" (str "Apikey " (::api-key client))
"User-Agent" user-agent
"Accept" "application/transit+json"}}))
(.then (fn [response]
(handle-response c response {:client client
:path path
:query query})))
;; Unknown failure
(.catch (fn [error] (put! c (exception/exception :client/api-request-failed error)))))
c))

(defn do-post [client path query body]
(let [c (chan)]
(ajax/ajax-request
{:uri (str (config/value :api-base-url) path)
:method :post
:url-params query
:params body
:headers {"Authorization" (str "Apikey " (::api-key client))
"User-Agent" user-agent}
:handler (fn [[ok? response]]
(put! c
(if ok?
response
(handle-error {:client client
:path path
:query query}
response))))
:format (ajax/transit-request-format)
:response-format (ajax/transit-response-format)})
(-> (js/fetch
(construct-url (str (config/value :api-base-url) path) query)
(clj->js
{:method "POST"
:body (t/write transit-writer body)
:headers {"Authorization" (str "Apikey " (::api-key client))
"Content-Type" "application/transit+json"
"User-Agent" user-agent
"Accept" "application/transit+json"}}))
(.then (fn [response]
(handle-response c response {:client client
:path path
:query query})))

;; Unknown failure
(.catch (fn [error] (put! c (exception/exception :client/api-request-failed error)))))
c))

(defn do-multipart-post [client path query ^js form-data]
(defn do-multipart-post [client path query form-data]
(let [c (chan)]
(ajax/ajax-request
{:uri (str (config/value :api-base-url) path)
:method :post
:url-params query
:params form-data
:headers {"Authorization" (str "Apikey " (::api-key client))
"User-Agent" user-agent}
:handler (fn [[ok? response]]
(put! c
(if ok?
response
(handle-error {:client client
:path path
:query query}
response))))
:format {:write (fn [^js form-data] (.getBuffer form-data))
:content-type (goog.object/get (.getHeaders form-data) "content-type")}
:response-format (ajax/transit-response-format)})
(-> (js/fetch
(construct-url (str (config/value :api-base-url) path) query)
(clj->js
{:method "POST"
:body form-data
:headers {"Authorization" (str "Apikey " (::api-key client))
"User-Agent" user-agent
"Accept" "application/transit+json"}}))
(.then (fn [response]
(handle-response c response {:client client
:path path
:query query})))

;; Unknown failure
(.catch (fn [error] (put! c (exception/exception :client/api-request-failed error)))))
c))

(defn new-client [api-key]
Expand Down
5 changes: 2 additions & 3 deletions src/sharetribe/flex_cli/commands/assets.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
[clojure.set :as set]
[clojure.string :as str]
[chalk]
[form-data :as FormData]
[sharetribe.flex-cli.api.client :as api.client :refer [do-multipart-post do-get]]
[sharetribe.flex-cli.async-util :refer [<? go-try]]
[sharetribe.flex-cli.exception :as exception]
Expand Down Expand Up @@ -66,9 +65,9 @@
(doto form-data
(.append (str "path-" i) path)
(.append (str "op-" i) "upsert")
(.append (str "data-raw-" i) data-raw filename)))
(.append (str "data-raw-" i) (js/Blob. (array data-raw)) filename)))
:i (inc i)})
{:form-data (doto (FormData.)
{:form-data (doto (js/FormData.)
(.append "current-version" current-version))
:i 0}
assets)))
Expand Down
3 changes: 1 addition & 2 deletions src/sharetribe/flex_cli/process_util.cljs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
(ns sharetribe.flex-cli.process-util
(:require [clojure.set :as set]
[chalk]
[form-data :as FormData]
[sharetribe.flex-cli.io-util :as io-util]
[sharetribe.flex-cli.api.client :as api.client]
[sharetribe.flex-cli.exception :as exception]))
Expand Down Expand Up @@ -95,7 +94,7 @@
(doto form-data
(.append (str "template-html-" (clojure.core/name (:name tmpl))) (:html tmpl))
(.append (str "template-subject-" (clojure.core/name (:name tmpl))) (:subject tmpl))))
(doto (FormData.)
(doto (js/FormData.)
(.append "name" name)
(.append "definition" definition))
templates))