diff --git a/packages/poster/.nrepl-port b/packages/poster/.nrepl-port deleted file mode 100644 index 811dfb2..0000000 --- a/packages/poster/.nrepl-port +++ /dev/null @@ -1 +0,0 @@ -57733 \ No newline at end of file diff --git a/packages/poster/package.json b/packages/poster/package.json index 90a935f..b26ad30 100644 --- a/packages/poster/package.json +++ b/packages/poster/package.json @@ -4,7 +4,10 @@ "description": "", "main": "dist/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "build:debug": "shadow-cljs compile poster", + "build:release": "shadow-cljs release poster", + "repl": "shadow-cljs node-repl" }, "devDependencies": { "shadow-cljs": "^2.8.52", diff --git a/packages/poster/shadow-cljs.edn b/packages/poster/shadow-cljs.edn index 5ceb8bd..e1224f2 100644 --- a/packages/poster/shadow-cljs.edn +++ b/packages/poster/shadow-cljs.edn @@ -8,4 +8,4 @@ :builds {:poster {:target :node-library :output-to "dist/index.js" - :exports-var core.poster/add}}} + :exports-var core.poster/poster}}} diff --git a/packages/poster/src/core/actions.cljs b/packages/poster/src/core/actions.cljs new file mode 100644 index 0000000..195adfe --- /dev/null +++ b/packages/poster/src/core/actions.cljs @@ -0,0 +1,40 @@ +(ns core.actions + (:require [cljs.spec.alpha :as s])) + +(defn create-validator [schema] + { :valid #(s/valid? schema %) + :explain #(s/explain schema %) }) + +#_(s/def ::http-verb (s/enum "POST" "PATCH" "PUT" "GET")) + +(s/def :global/put some?) + +(def routes { +; :GlobalGetAll "/applications/{application.id}/commands" +; :GlobalGet "/applications/{application.id}/commands/commands/{command.id}" +; :GlobalPost "/applications/{application.id}/commands" +; :GlobalEdit "/applications/{application.id}/commands/{command.id}" +; :GlobalDelete "/applications/{application.id}/commands/{command.id}" + :global/put #js["GET" "/applications/{application.id}/commands"] +; :GuildGetAll "/applications/{application.id}/guilds/{guild.id}/commands" +; :GuildPost "/applications/{application.id}/guilds/{guild.id}/commands" +; :GuildGet "/applications/{application.id}/guilds/{guild.id}/commands/{command.id}" +; :GuildEdit "/applications/{application.id}/guilds/{guild.id}/commands/{command.id}" +; :GuildDelete "/applications/{application.id}/guilds/{guild.id}/commands/{command.id}" +; :GuildPut "/applications/{application.id}/guilds/{guild.id}/commands" + }) +(defn parseurl + [appid] + + + ) + +(defn request-init [spec] + (fn [body] + #js { "method" (first (routes 'spec)) + "body" body })) + +(def validators { + "global/put" [(request-init :global/put) + (create-validator :global/put)] +}) diff --git a/packages/poster/src/core/poster.cljs b/packages/poster/src/core/poster.cljs index dd4c45d..86ded2e 100644 --- a/packages/poster/src/core/poster.cljs +++ b/packages/poster/src/core/poster.cljs @@ -1,16 +1,20 @@ -(ns core.poster) +(ns core.poster + (:use [core.actions :only [validators]])) (def base-url (new js/URL "https://discord.com/api/v10/applications/")) -(def excluded-keys #{ "command" "absPath" }) +(def excluded-keys #js { "command" "absPath" }) (defn make-global [appid token] "makes a url which posts to global" (new js/URL (str appid "/commands") base-url)) -(defn poster [ appid token] - (let [global-url (make-global appid token)] - #js { - - - })) +(defn poster [token, appid] + (let [header #js{ "Content-Type" "application/json" + "Authorization" (str "Bot " token) }] + (fn [action body] + (let [ [request-init validator] (validators action) + { is-valid? :valid explain :explain } validator] + (if (is-valid? body) + (js/fetch base-url (request-init body)) + (explain body)))))) diff --git a/packages/poster/test/spec.mjs b/packages/poster/test/spec.mjs new file mode 100644 index 0000000..879f655 --- /dev/null +++ b/packages/poster/test/spec.mjs @@ -0,0 +1,6 @@ +import poster from '../dist/index.js'; + +const client = poster("token", "appid"); + + +const req = await client("global/put", { });