From ec1ddf50b43f675f78800d7d267b20bec99b0912 Mon Sep 17 00:00:00 2001 From: niten Date: Thu, 7 Jul 2022 16:04:23 -0700 Subject: [PATCH] Initial checkin --- .gitignore | 10 + deps-lock.json | 1088 +++++++++++++++++++++++++++++++++++++++++ deps.edn | 43 ++ flake.lock | 117 +++++ flake.nix | 35 ++ src/chute/harness.clj | 251 ++++++++++ 6 files changed, 1544 insertions(+) create mode 100644 .gitignore create mode 100644 deps-lock.json create mode 100644 deps.edn create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 src/chute/harness.clj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..640ed86 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.idea +*.log +tmp/ + +.cpcache/ +.nrepl-port +target/ +result +.clj-kondo diff --git a/deps-lock.json b/deps-lock.json new file mode 100644 index 0000000..e69fc04 --- /dev/null +++ b/deps-lock.json @@ -0,0 +1,1088 @@ +{ + "lock-version": 3, + "git-deps": [ + { + "lib": "org.fudo/bebot", + "url": "https://git.fudo.org/fudo-public/bebot.git", + "rev": "6cda6ea9d4f2e0b751e88072134264fb888c8114", + "git-dir": "https/git.fudo.org/fudo-public/bebot", + "hash": "sha256-DU2YYQICLyNvF18C4Zo+TvjWRWGM2f47HMJuBof2L5g=" + }, + { + "lib": "org.fudo/coinbase-pro-client", + "url": "https://git.fudo.org/fudo-public/coinbase-pro-client.git", + "rev": "d6f2884c23508d5f9d13ef13004cfb32b94f8ece", + "git-dir": "https/git.fudo.org/fudo-public/coinbase-pro-client", + "hash": "sha256-mcESZk4C6NrYL2f4bs6khI2atZJntlQlxt/XLLKlP4k=" + }, + { + "lib": "org.fudo/fudo-clojure", + "url": "https://git.fudo.org/fudo-public/fudo-clojure.git", + "rev": "c6a1ebef2e5b64d432a46ac48639c674e62b7cee", + "git-dir": "https/git.fudo.org/fudo-public/fudo-clojure", + "hash": "sha256-x89zORUUSq02Aqar0HCMb8xn7MrPbpOS7qrGK0Ubdp0=" + } + ], + "mvn-deps": [ + { + "mvn-path": "babashka/fs/0.1.2/fs-0.1.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-tnySIrHkZLcKSAFrmXLqsKFhEVManw2TkErWH5Oedws=" + }, + { + "mvn-path": "babashka/fs/0.1.2/fs-0.1.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-4T7gZFNiTTMP9eP4JnKLkMZMNDyw6Bqoi2WNLsGlmCc=" + }, + { + "mvn-path": "borkdude/edamame/0.0.19/edamame-0.0.19.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-DFO1vXj652r3KEklEuxcmyEsjxC2biwx/3RlZ1zzn48=" + }, + { + "mvn-path": "borkdude/edamame/0.0.19/edamame-0.0.19.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-B4FvN6YLPV8uDVq7mdfBPIsKTSXrLOa+cj/HKB0Xc3w=" + }, + { + "mvn-path": "borkdude/sci.impl.reflector/0.0.1/sci.impl.reflector-0.0.1.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-fLpuqNfUj1ZEyQ0WvhfjCZcd2OmEHruSD4D9iWTtryg=" + }, + { + "mvn-path": "borkdude/sci.impl.reflector/0.0.1/sci.impl.reflector-0.0.1.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-JezOPysastKFP6SSVze/8ZvwYnbr/uu5PhHvdTc7ea8=" + }, + { + "mvn-path": "camel-snake-kebab/camel-snake-kebab/0.4.2/camel-snake-kebab-0.4.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-p7hxVjg5GmkjD1D8Nh6W+zt/vAWXj5zMdO+veamBdrs=" + }, + { + "mvn-path": "camel-snake-kebab/camel-snake-kebab/0.4.2/camel-snake-kebab-0.4.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-q0kp6YUZCevRFA1J6OSnV3922+u4eHSlO/wa65suEyc=" + }, + { + "mvn-path": "cheshire/cheshire/5.10.2/cheshire-5.10.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-9flKGgmTx/yyUTK5YAFbFwERvAbyqug6igOnSxpK3h4=" + }, + { + "mvn-path": "cheshire/cheshire/5.10.2/cheshire-5.10.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-F7vNJXvbviEm94QkUPSb4DoDXCOgTwje5vke7TW9/b0=" + }, + { + "mvn-path": "clj-http/clj-http/3.12.3/clj-http-3.12.3.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-OJ0pdhKo6KzGbF0NZKbJO99lDe1iXG9q4Wk7kzaKkaU=" + }, + { + "mvn-path": "clj-http/clj-http/3.12.3/clj-http-3.12.3.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-Jx0VRYS9iV/S4w9jEVAE8ce4xySq6tLLKpl8XFWEBfA=" + }, + { + "mvn-path": "clj-kondo/clj-kondo/2022.04.25/clj-kondo-2022.04.25.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-R9X6v40VNq+vZnP5KLMN8BkDNoX/jWQf/zSSEcws+XY=" + }, + { + "mvn-path": "clj-kondo/clj-kondo/2022.04.25/clj-kondo-2022.04.25.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-50EIEVmnfOoj0exG5D2uf2ZzAs0/3NcpbuIqzz9a0B4=" + }, + { + "mvn-path": "clj-tuple/clj-tuple/0.2.2/clj-tuple-0.2.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-WNv3Pai8403EmN5sNH+HLvmPMBo6KdyVeX1k+A5ra0c=" + }, + { + "mvn-path": "clj-tuple/clj-tuple/0.2.2/clj-tuple-0.2.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-ahZELYfCkwwDImtKo9KYkVfVi5TtPnyNZ2aLDrZYOJs=" + }, + { + "mvn-path": "com/cognitect/transit-clj/1.0.324/transit-clj-1.0.324.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-W7OrnSRQkevGWkWLeUF0uV195ZMWdAQJOWYnx386HPM=" + }, + { + "mvn-path": "com/cognitect/transit-clj/1.0.324/transit-clj-1.0.324.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-2KiGaliPynFU05XvzSsW3xy7WHRrUofA/tZ+XcIVPiM=" + }, + { + "mvn-path": "com/cognitect/transit-java/1.0.343/transit-java-1.0.343.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-lbX8MSVmBSvdadyHWd9zh6RY/MThrYAEbjp97Tfx25g=" + }, + { + "mvn-path": "com/cognitect/transit-java/1.0.343/transit-java-1.0.343.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-n3B2zwEVioKorScnBtCtwSMN22AFs+VZ/Yb7Q6N9JwA=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-annotations/2.10.5/jackson-annotations-2.10.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Z8XVKyG085Cn5MXD3p+KFCY15RC0uciTFBKPHnNs+vs=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-annotations/2.12.2/jackson-annotations-2.12.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-VYVheGwHGvIC6Em2rj05yH7UF+zIPUXjmMEus7/6VXs=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-annotations/2.12.2/jackson-annotations-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-6uSvNPfO9iD68HeeLTd52fUQSjl/DTSaviAmmp0qstQ=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-core/2.10.5/jackson-core-2.10.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-jwFchFbiTN29W4/kQqTQRjXe2PzGKgcAXKFRin0+FTo=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-core/2.12.2/jackson-core-2.12.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-eIMzF2Nym3JzX92KEX8y630iaVur+zfMmd+DksGW78M=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-core/2.12.2/jackson-core-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-AluGje2VeDJciP0YU3g5NELyiyZL4mYhHbrT7VErzas=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-core/2.12.4/jackson-core-2.12.4.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-NQbOR+wmBK4tgNeVBffLN09xgGBjlBXAfRRK2t0taKM=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-core/2.12.4/jackson-core-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-B1AFGuFEwR9yMJdB540BNNE7KU9M5PeQCjogNWQyQxE=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-databind/2.10.5.1/jackson-databind-2.10.5.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-6+BMyKASvPz4670CsmqwqMsHjSDItgNzK9KhqCSa1MI=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-databind/2.12.2/jackson-databind-2.12.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-xAAvhh2NM/MgK/jv+rtTrMMgxSdsxQwb+q5zw2zo2zI=" + }, + { + "mvn-path": "com/fasterxml/jackson/core/jackson-databind/2.12.2/jackson-databind-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-aiFs+0OZCzlNcmM9eGBKkTNZKi485qOphL1tirMFyM0=" + }, + { + "mvn-path": "com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.12.4/jackson-dataformat-cbor-2.12.4.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-xpFy2QEl4dUh55AUzgOueyVcIoNGuAdPK6G3l4P+yCc=" + }, + { + "mvn-path": "com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.12.4/jackson-dataformat-cbor-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-/WGct8Jkztc9nxg28yBi901UmHuYym8kA4EPRiRTiM8=" + }, + { + "mvn-path": "com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.12.4/jackson-dataformat-smile-2.12.4.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-r69Qn/Z+mcd2KhC5TL85idwrv3m+EbUMActgIS8qspo=" + }, + { + "mvn-path": "com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.12.4/jackson-dataformat-smile-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-C51/GFtYIctOQ/Q6IbV9bv11jSbZ/6rBexR0BLAwFhE=" + }, + { + "mvn-path": "com/fasterxml/jackson/dataformat/jackson-dataformats-binary/2.12.4/jackson-dataformats-binary-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-LM0+oMFZqAvlgQw2R3upsdNZ+ARcRzVV6OwTEKZZenk=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-base/2.10.5.20201202/jackson-base-2.10.5.20201202.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-5X0lRwzGnvFHoZG1iuGLeOEaG6Q+bN3YqODCpQBJviU=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-base/2.10.5/jackson-base-2.10.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-jk4z/HpvAQwunIhdtc9LMv6O4yA1lCa6orKnX7LasTg=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-base/2.12.2/jackson-base-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-E4ElBqs155veonWUU2fUN+sp7xrqmgy4SA70bb7IawE=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-base/2.12.4/jackson-base-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-GSGu6Fvrq/AW6lBYOrm0EdUQt3VY9Wgj3LS6V8W5f/k=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-bom/2.10.5.20201202/jackson-bom-2.10.5.20201202.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-fnYHu+oRA4m/+yQ6vKkIFxEEnA1bxtb8WkflmyiW9ms=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-bom/2.10.5/jackson-bom-2.10.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Yentz0KAF97iWPEwHMt3f+6cstA9xPOJer5JQ+YXT4Q=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-bom/2.12.2/jackson-bom-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-SaILDa2ydh5RsQTt/QLTQDop2cAx3+rACx3Kn7cK0Rw=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-bom/2.12.4/jackson-bom-2.12.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-6z5zvu64rKlVZDw4uZTdpvsM68MZZ2+A6tX7nsr/bj0=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-parent/2.10/jackson-parent-2.10.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-pQ24CCnE+JfG0OfpVHLLtDsOvs4TWmjjnCe4pv4z5IE=" + }, + { + "mvn-path": "com/fasterxml/jackson/jackson-parent/2.12/jackson-parent-2.12.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-YqocFnmt4J8XPb8bbDLTXFXnWAAjj9XkjxOqQzfAh1s=" + }, + { + "mvn-path": "com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.12.2/jackson-module-jaxb-annotations-2.12.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-tqygZm78O0micV54dS4o016tgMZx2JhwYJGUXi6hkJ8=" + }, + { + "mvn-path": "com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.12.2/jackson-module-jaxb-annotations-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-G00MW2FREWaF0j7zlf+SPIfhZaZR9+NEPJmxfC8Bdzw=" + }, + { + "mvn-path": "com/fasterxml/jackson/module/jackson-modules-base/2.12.2/jackson-modules-base-2.12.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-xC8fDKx7NaCkAoiZShmTZkCLIQG0QzcSlYar+hdqvAw=" + }, + { + "mvn-path": "com/fasterxml/oss-parent/38/oss-parent-38.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-yD+PRd/cqNC2s2YcYLP4R4D2cbEuBvka1dHBodH5Zug=" + }, + { + "mvn-path": "com/fasterxml/oss-parent/41/oss-parent-41.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-r2UPpN1AC8V2kyC87wjtk4E/NJyr6CE9RprK+72UXYo=" + }, + { + "mvn-path": "com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-TmlpaJK4i0HFXUmrL9zCHurZK/VKzFiMAFBZbDt1GZw=" + }, + { + "mvn-path": "com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Zl9jWQ3vtj1irdIdNSU2LPk3z2ocBeSwFFuujailf4M=" + }, + { + "mvn-path": "com/sun/activation/all/1.2.0/all-1.2.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-HYUY46x1MqEE5Pe+d97zfJguUwcjxr2z1ncIzOKwwsQ=" + }, + { + "mvn-path": "commons-codec/commons-codec/1.10/commons-codec-1.10.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-QkHfqU5xHUNfKaRgSj4t5cSqPBZeI70Ga+b8H8QwlWk=" + }, + { + "mvn-path": "commons-codec/commons-codec/1.10/commons-codec-1.10.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-vbjbcBLREqbj6o/bfFELMA2Z7/CBnSfd26nEM5fqTPs=" + }, + { + "mvn-path": "commons-codec/commons-codec/1.15/commons-codec-1.15.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-s+n21jp5AQm/DQVmEfvtHPaQVYJt7+uYlKcTadJG7WM=" + }, + { + "mvn-path": "commons-codec/commons-codec/1.15/commons-codec-1.15.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-yG7hmKNaNxVIeGD0Gcv2Qufk2ehxR3eUfb5qTjogq1g=" + }, + { + "mvn-path": "commons-io/commons-io/2.8.0/commons-io-2.8.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-AvKR5dEkPcFDSW48u7QKHO1Hqljy1jPT44eAzQaNUHQ=" + }, + { + "mvn-path": "commons-io/commons-io/2.8.0/commons-io-2.8.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-18hkGjfW5282+56B/BQg4moJ1j+jLwD3R2TeBnyoNH0=" + }, + { + "mvn-path": "commons-logging/commons-logging/1.2/commons-logging-1.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-2t3qHqC+D1aXirMAa4rJKDSv7vvZt+TmMW/KV98PpjY=" + }, + { + "mvn-path": "commons-logging/commons-logging/1.2/commons-logging-1.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-yRq1qlcNhvb9B8wVjsa8LFAIBAKXLukXn+JBAHOfuyA=" + }, + { + "mvn-path": "io/lambdaforge/datalog-parser/0.1.9/datalog-parser-0.1.9.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-4XezrXYvlJJRN/muJMLo4f4V12eyof9goGAShcKIzec=" + }, + { + "mvn-path": "io/lambdaforge/datalog-parser/0.1.9/datalog-parser-0.1.9.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-OkH/pEK7yj18ouRfn82DUFhfHXoai/8pHzOPEzkLQe0=" + }, + { + "mvn-path": "jakarta/annotation/jakarta.annotation-api/2.0.0/jakarta.annotation-api-2.0.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-LwoKKl/mU3lL2xuVMbyb6lPJLBHgtpPnTPjjlqov8yU=" + }, + { + "mvn-path": "jakarta/annotation/jakarta.annotation-api/2.0.0/jakarta.annotation-api-2.0.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-7PnlX7abrQMJBv6P57n1WEmJww0qAccJ8pGCDiOEWTQ=" + }, + { + "mvn-path": "jakarta/inject/jakarta.inject-api/2.0.0/jakarta.inject-api-2.0.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-hCzPO4kqyj+9OEyZ0VFqi3xEjFXO5WCrJyRIgBYZhwY=" + }, + { + "mvn-path": "jakarta/inject/jakarta.inject-api/2.0.0/jakarta.inject-api-2.0.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-1/6dFe0x4/ZWy8lz+Di9X3CABv13DxUTRIgR4ZdPf94=" + }, + { + "mvn-path": "jakarta/ws/rs/jakarta.ws.rs-api/3.0.0/jakarta.ws.rs-api-3.0.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-C8ss9FIoMa2DzH6Ta422Dir7JYLRnWcusX0B2ix3cyI=" + }, + { + "mvn-path": "jakarta/ws/rs/jakarta.ws.rs-api/3.0.0/jakarta.ws.rs-api-3.0.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-zn/Vz4SRGSR4kxNTjYExIP4eIBn8oEX2K9hDqCcdlDI=" + }, + { + "mvn-path": "javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Q/3vC1ts6zGwQksgi5MMdKtY+sLO63s/b9OuuLXKQ5M=" + }, + { + "mvn-path": "javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-2ikm88i+iYZDzBCs3sbeCwNRpX+yc1dw+gF3sGrecbk=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api-parent/2.3.0/jaxb-api-parent-2.3.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-dreqxkEyadC920e4uON7sxRXicmppC34CSeuta7v+3I=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api-parent/2.3.1/jaxb-api-parent-2.3.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-zRvqpFYNxN/bgmudgJ5GTbIlJt+1QmS654pv9++wjh8=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-iDAHmJ03PRnzUrqXkrJd7CHcfQ4gWnEKk6OBUQG7PQM=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Rm9ue5kB6VKuGtJPDpSUpWgJYfBOQiObWuZOjcr2KXo=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-iLlVoN9XiAomp0cIvDT3Tcr46/TniEOii1Dq6UVzKwY=" + }, + { + "mvn-path": "javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-ErIM+SJ3NEXDRFwog8v2cfqYIRHpv5+HUCD5MTs4FLE=" + }, + { + "mvn-path": "net/bis5/mattermost4j/mattermost-models/0.24.0/mattermost-models-0.24.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-76BHeYAHrYxoAJZVTNaH6pGM9COTFQyBCUC+RSwNzOU=" + }, + { + "mvn-path": "net/bis5/mattermost4j/mattermost-models/0.24.0/mattermost-models-0.24.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-ExhO0/JhgphBuJehJhoFH9+V0bcdxT+kjm3FWa7F8w4=" + }, + { + "mvn-path": "net/bis5/mattermost4j/mattermost4j-core/0.24.0/mattermost4j-core-0.24.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-N21aHbb8HJC1yBifW1PQGp5DpE71Od67ixKSjRQMbV4=" + }, + { + "mvn-path": "net/bis5/mattermost4j/mattermost4j-core/0.24.0/mattermost4j-core-0.24.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-+iYaBIQjt0wfAJVhyLFzN+6fCxd+2JLJ5q2rYwBpaxQ=" + }, + { + "mvn-path": "net/bis5/mattermost4j/mattermost4j-parent/0.24.0/mattermost4j-parent-0.24.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-yJRfVrfCG48VwO3WJSpWfG3wJ+A/ZuHgTA72fWoi8e8=" + }, + { + "mvn-path": "net/bis5/opengraph4j/opengraph4j/0.1.0/opengraph4j-0.1.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Kg0aq29eJm+oDD7FU0ng7nwE/uT2daMX6/Z/7jZj/dQ=" + }, + { + "mvn-path": "net/bis5/opengraph4j/opengraph4j/0.1.0/opengraph4j-0.1.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-jO2AFcJlzr8pNEopG0/Jr6KVcbHpEuDHOZKBKZA4/DM=" + }, + { + "mvn-path": "net/java/jvnet-parent/1/jvnet-parent-1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-KBRAgRJo5l2eJms8yJgpfiFOBPCXQNA4bO60qJI9Y78=" + }, + { + "mvn-path": "net/java/jvnet-parent/5/jvnet-parent-5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-GvaZ+Nndq2f5oNIC+9eRXrA2Klpt/V/8VMr6NGXJywo=" + }, + { + "mvn-path": "nrepl/bencode/1.1.0/bencode-1.1.0.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-V1TadyGxNfKjVRpn8/pGqYe/6Tyi5zt2jp2aM7rG3ms=" + }, + { + "mvn-path": "nrepl/bencode/1.1.0/bencode-1.1.0.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-o3pFBButfzw3yua864SedMbz58atvnYFR5VghPuua3I=" + }, + { + "mvn-path": "org/apache/apache/13/apache-13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-/1E9sDYf1BI3vvR4SWi8FarkeNTsCpSW+BEHLMrzhB0=" + }, + { + "mvn-path": "org/apache/apache/15/apache-15.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-NsLy+XmsZ7RQwMtIDk6br2tA86aB8iupaSKH0ROa1JQ=" + }, + { + "mvn-path": "org/apache/apache/18/apache-18.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-eDEwcoX9R1u8NrIK4454gvEcMVOx1ZMPhS1E7ajzPBc=" + }, + { + "mvn-path": "org/apache/apache/21/apache-21.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-rxDBCNoBTxfK+se1KytLWjocGCZfoq+XoyXZFDU3s4A=" + }, + { + "mvn-path": "org/apache/apache/23/apache-23.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-vBBiTgYj82V3+sVjnKKTbTJA7RUvttjVM6tNJwVDSRw=" + }, + { + "mvn-path": "org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-2RnZBEhsA3+NGTQS2gyS4iqfokIwudZ6V4VcXDHH6U4=" + }, + { + "mvn-path": "org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-gtMfHcxFg+/9dE6XkWWxbaZL+GvKYj/F0bA+2U9FyFo=" + }, + { + "mvn-path": "org/apache/commons/commons-parent/34/commons-parent-34.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Oi5p0G1kHR87KTEm3J4uTqZWO/jDbIfgq2+kKS0Et5w=" + }, + { + "mvn-path": "org/apache/commons/commons-parent/35/commons-parent-35.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-cJihq4M27NTJ3CHLvKyGn4LGb2S4rE95iNQbT8tE5Jo=" + }, + { + "mvn-path": "org/apache/commons/commons-parent/52/commons-parent-52.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-ddvo806Y5MP/QtquSi+etMvNO18QR9VEYKzpBtu0UC4=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpasyncclient/4.1.4/httpasyncclient-4.1.4.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-UOmBqOVnoW69rRBGBbFWVAqGNFn6EnuLpkfzEN/IPvg=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpasyncclient/4.1.4/httpasyncclient-4.1.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-NPJO+Ya4nVG4CgkDh6o9DIJNQPCHrlzPrUf/PCYsLkc=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpclient-cache/4.5.13/httpclient-cache-4.5.13.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Zs797nR1mFJWr2gL86581dfULo/euTmmJ3ki4b3u1Do=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpclient-cache/4.5.13/httpclient-cache-4.5.13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-o1h75UcWw7gKMonBHfhlqWK8cr5HiRReQgxpSL9FpKQ=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-b+kCalZsalABYIzz/DIZZkH2weXhmG0QN8zb1fMe90M=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-eOua2nSSn81j0HrcT0kjaEGkXMKdX4F79FgB9RP9fmw=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-asyncclient/4.1.4/httpcomponents-asyncclient-4.1.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-6WXrNprx2LWmi31LeGHVOlJhaugD4TFi6N+EImFwAYA=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-client/4.5.13/httpcomponents-client-4.5.13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-nLpZTAjbcnHQwg6YRdYiuznmlYORC0Xn1d+C9gWNTdk=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-core/4.4.10/httpcomponents-core-4.4.10.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-YelCfUvjJsMHp/FrqCjRyzsUcTybBPyLqZKljzdsMTY=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-core/4.4.14/httpcomponents-core-4.4.14.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-IJ7ZMctXmYJS3+AnyqnAOtpiBhNkIylnkTEWX4scutE=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-parent/10/httpcomponents-parent-10.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-yq+WfZSvshdT82CCxghiBr0fSIJf9ZaTLM66crZdOfo=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcomponents-parent/11/httpcomponents-parent-11.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-qQH4exFcVQcMfuQ+//Y+IOewLTCvJEOuKSvx9OUy06o=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcore-nio/4.4.10/httpcore-nio-4.4.10.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-3r7n6VcsAqFs4Mqk9WWp7OsSkNM816HjKXCHvUZ9r/Q=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcore-nio/4.4.10/httpcore-nio-4.4.10.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-pMmVtzjRBLdcyLEWTbYAUzFWwEfsy0yO5dknshoX7HM=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-+VYgnkUMsdDFF3bfvSPlPp3Y25oSmO1itwvwlEumOyg=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-VXFjmKl48QID+eJciu/AWA2vfwkHxu0K6tgexftrf9g=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpmime/4.5.13/httpmime-4.5.13.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-BudU2ZJFuY3MKGDctD0g5zfWUNor8gd6EF9orMvVxcw=" + }, + { + "mvn-path": "org/apache/httpcomponents/httpmime/4.5.13/httpmime-4.5.13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-k0GN8hCu7VBQJUjbzysXwPHZFEMDDnL+++7RZSscKN0=" + }, + { + "mvn-path": "org/apache/httpcomponents/project/7/project-7.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-PW66QoVVpVjeBGtddurMH1pUtPXyC4TWNu16/xiqSMM=" + }, + { + "mvn-path": "org/babashka/sci/0.3.2/sci-0.3.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-Y4iLjBGxwUMf1VPV1SHSjJLl6nEJcP5Qdc7bJhHSoio=" + }, + { + "mvn-path": "org/babashka/sci/0.3.2/sci-0.3.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-neutGiOLhwJX+Y+CefwezwsSzHZanMPM8LoP28MjdkU=" + }, + { + "mvn-path": "org/clojure/clojure/1.10.3/clojure-1.10.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-fxJHLa7Y9rUXSYqqKrE6ViR1w+31FHjkWBzHYemJeaM=" + }, + { + "mvn-path": "org/clojure/clojure/1.10.3/clojure-1.10.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-GJwAxDNAdJai+7DsyzeQjJSVXZHq0b5IFWdE7MGBbZQ=" + }, + { + "mvn-path": "org/clojure/clojure/1.11.0/clojure-1.11.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-PiH6daB+yd278bK1A1bPGAcQ0DmN6qT0TpHNYwRVWUc=" + }, + { + "mvn-path": "org/clojure/clojure/1.11.0/clojure-1.11.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-SQjMS0yeYsmoFJb5PLWsb2lBd8xkXc87jOXkkavOHro=" + }, + { + "mvn-path": "org/clojure/clojure/1.11.1/clojure-1.11.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-I4G26UI6tGUVFFWUSQPROlYkPWAGuRlK/Bv0+HEMtN4=" + }, + { + "mvn-path": "org/clojure/clojure/1.11.1/clojure-1.11.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-IMRaGr7b2L4grvk2BQrjGgjBZ0CzL4dAuIOM3pb/y4o=" + }, + { + "mvn-path": "org/clojure/core.async/1.5.648/core.async-1.5.648.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Tbqwb7/HyUrn4vZoNBpl8nF19tCuigELisqwOdnNMyw=" + }, + { + "mvn-path": "org/clojure/core.async/1.5.648/core.async-1.5.648.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-kxoMFZ+/PdzwK2321gPQVcTbfGgWXcbOt4KHEzq4Iaw=" + }, + { + "mvn-path": "org/clojure/core.cache/1.0.225/core.cache-1.0.225.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-wVOqlH7aXNvYqTiCyPur1QN9StcxGAK0vNgBVGn2pbE=" + }, + { + "mvn-path": "org/clojure/core.cache/1.0.225/core.cache-1.0.225.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-OeNB9nv+85PkeDkNSYjxGad5ykSQZssNM/gLQv8E9D0=" + }, + { + "mvn-path": "org/clojure/core.memoize/1.0.253/core.memoize-1.0.253.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-SpEFhRgqsybB0KINNDFb4VY7WlhDfUHAId1/6ZEeHtY=" + }, + { + "mvn-path": "org/clojure/core.memoize/1.0.253/core.memoize-1.0.253.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-hML6t6Mso8HkDEGm7Mm9U26UezBYDne41dwjKjSSXqw=" + }, + { + "mvn-path": "org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-/PRCveArBKhj8vzFjuaiowxM8Mlw99q4VjTwq3ERZrY=" + }, + { + "mvn-path": "org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-AarxdIP/HHSCySoHKV1+e8bjszIt9EsptXONAg/wB0A=" + }, + { + "mvn-path": "org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Bu6owHC75FwVhWfkQ0OWgbyMRukSNBT4G/oyukLWy8g=" + }, + { + "mvn-path": "org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-F3i70Ti9GFkLgFS+nZGdG+toCfhbduXGKFtn1Ad9MA4=" + }, + { + "mvn-path": "org/clojure/data.json/2.4.0/data.json-2.4.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-7D8vmU4e7dQgMTxFK6VRjF9cl75RUt/tVlC8ZhFIat8=" + }, + { + "mvn-path": "org/clojure/data.json/2.4.0/data.json-2.4.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-pC6nDxe1F2Zq2EkqG/qRfeXe+se0fFFvbQ1NicJ4DPQ=" + }, + { + "mvn-path": "org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-/lGvRHL6Dxv9ZvOHHeVQdkAv9mFadLyxezfEAqDqb0w=" + }, + { + "mvn-path": "org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-RlIA+U9W2IaOD9eqC+zGL/sCz69CCkmtEXkQ5jr13/4=" + }, + { + "mvn-path": "org/clojure/math.numeric-tower/0.0.5/math.numeric-tower-0.0.5.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-5NIRNXlWkT5DvcbD/csjExqWLjHX6G16GnTTFRm9+/8=" + }, + { + "mvn-path": "org/clojure/math.numeric-tower/0.0.5/math.numeric-tower-0.0.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-w/lnehWxSPzvMAsGC29fn2fToTWUMhq+svIFpau+qZE=" + }, + { + "mvn-path": "org/clojure/pom.contrib/0.2.2/pom.contrib-0.2.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-4OoifEnFw+MHVM0m/MV75+Telz/kOqXMZmdAHsXBAyM=" + }, + { + "mvn-path": "org/clojure/pom.contrib/0.3.0/pom.contrib-0.3.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-fxgrOypUPgV0YL+T/8XpzvasUn3xoTdqfZki6+ee8Rk=" + }, + { + "mvn-path": "org/clojure/pom.contrib/1.0.0/pom.contrib-1.0.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-EBH6rlyeSWhY5MZQujNxOr1Gml1S4Arrf1sBoryvR+k=" + }, + { + "mvn-path": "org/clojure/pom.contrib/1.1.0/pom.contrib-1.1.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-EOzku1+YKQENwWVh9C67g7ry9HYFtR+RBbkvPKoIlxU=" + }, + { + "mvn-path": "org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-z2iZ+YUpjGSxPqEplGrZAo3uja3w6rmuGORVAn04JJw=" + }, + { + "mvn-path": "org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-WhHw4eizwFLmUcSYxpRbRNs1Nb8sGHGf3PZd8fiLE+Y=" + }, + { + "mvn-path": "org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Z+yJjrVcZqlXpVJ53YXRN2u5lL2HZosrDeHrO5foquA=" + }, + { + "mvn-path": "org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-bY3hTDrIdXYMX/kJVi/5hzB3AxxquTnxyxOeFp/pB1g=" + }, + { + "mvn-path": "org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-kQz/AjiTHtiIYstmWmd+ldk+hIDyIzIAiG0zHX7QDl4=" + }, + { + "mvn-path": "org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-EOGi60Q6PFfsGd7e8ylC63SbrmnyFZiI/lYLpnuwj0c=" + }, + { + "mvn-path": "org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-E2i2vDvd98OY1XhNEFSPRMTtLXwB6hBawO/enPXg3yE=" + }, + { + "mvn-path": "org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-NyBxL7knYaNclNDuQV1r8VhB70afBzZGd2h1553JtwY=" + }, + { + "mvn-path": "org/clojure/tools.cli/1.0.206/tools.cli-1.0.206.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-a5fSaRkZueqUSomP7HmKkOy4GhdzKRbtvHOm9a/R9hY=" + }, + { + "mvn-path": "org/clojure/tools.cli/1.0.206/tools.cli-1.0.206.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-/QDNC4q1yffBaViwVlAtuvcqR6TLiG6AArWw27s49J4=" + }, + { + "mvn-path": "org/clojure/tools.reader/1.3.4/tools.reader-1.3.4.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-o6I8B7TIjnvx2Jw2esqFG3CZRdcCfpHT29pIgNz5kXk=" + }, + { + "mvn-path": "org/clojure/tools.reader/1.3.4/tools.reader-1.3.4.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-ShJn32aM7BwpKtBs5bp8PMSS0M/Xsf2TnoeOc4/5WV4=" + }, + { + "mvn-path": "org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-EdGzHyxlwzVbKSu5tEuPyv2lS0TaY+NKuXt5qKs7uOA=" + }, + { + "mvn-path": "org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-rvXugot8sUocWPRbn4oQ/zQMV2mSXqDvXDXR5J2SC+o=" + }, + { + "mvn-path": "org/eclipse/ee4j/project/1.0.5/project-1.0.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-kWtHlNjYIgpZo/32pk2+eUrrIzleiIuBrjaptaLFkaY=" + }, + { + "mvn-path": "org/eclipse/ee4j/project/1.0.6/project-1.0.6.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-Tn2DKdjafc8wd52CQkG+FF8nEIky9aWiTrkHZ3vI1y0=" + }, + { + "mvn-path": "org/glassfish/hk2/external/3.0.1/external-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-mz87PuiAQ4wE2Yr9Mzkujhx7Ismes5zMeF8BkV2X2kc=" + }, + { + "mvn-path": "org/glassfish/hk2/external/aopalliance-repackaged/3.0.1/aopalliance-repackaged-3.0.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-bGnZWtJWL0SnYR6rNWxKWVWntVxdouPLD0Lm1TDgLzY=" + }, + { + "mvn-path": "org/glassfish/hk2/external/aopalliance-repackaged/3.0.1/aopalliance-repackaged-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-AvZ+MS9w+3M3r2PjKvcUfRZB6mBLazxUekW9zTmDVvw=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-api/3.0.1/hk2-api-3.0.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-QoaE5K3g2IHaA0wqnzAd78aG4OzAm+YGcIGR9gyJrFg=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-api/3.0.1/hk2-api-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-A2SfShKJANDJ3ehTgX3egY3rm+sW5ywYPv7QUIMp+uE=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-locator/3.0.1/hk2-locator-3.0.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-3dyv4MRfQ4tEndlL4z/D4MD/PWPydkDARZGFJGTGnOk=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-locator/3.0.1/hk2-locator-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-ZsSbW53F3PSJRKegkhbGPhzEwajN23gURBlmwgZDlpA=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-parent/3.0.1/hk2-parent-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-djisReI16/0kKVqVHajH3zZnZsavgFqFPwVflzLFqww=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-utils/3.0.1/hk2-utils-3.0.1.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-c8bAxhSO3gGQAoGUrsNwkyrErdOsGtcyUMBdaCorE/s=" + }, + { + "mvn-path": "org/glassfish/hk2/hk2-utils/3.0.1/hk2-utils-3.0.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-7+5yAdWxxB8s9xt4HgNoV9q6t2UUS2kIg2CQyC7bE+o=" + }, + { + "mvn-path": "org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-qrXXhJ98/Nosx8VBuhvTZRUdQidvFRyCU4ckXf3j3XQ=" + }, + { + "mvn-path": "org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-i2Yi64HlVymfvZqoVLxax20wf3rl53BYZImli7Uziyo=" + }, + { + "mvn-path": "org/glassfish/jersey/core/jersey-client/3.0.3/jersey-client-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-H3mntvRlKWJ/G84RrmkCCNthhp4yJw7sDit+ZoHMPFQ=" + }, + { + "mvn-path": "org/glassfish/jersey/core/jersey-client/3.0.3/jersey-client-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-E2I45K0lebi3R4HPH0JnFd18OeCtlh7L6S82o7RWci4=" + }, + { + "mvn-path": "org/glassfish/jersey/core/jersey-common/3.0.3/jersey-common-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-SsEk7fCYbZ1Z9+/XTY6kw0m9dZ6zBec7cIWcv6chQbg=" + }, + { + "mvn-path": "org/glassfish/jersey/core/jersey-common/3.0.3/jersey-common-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-pvBANne0QdUdooKK9bfD+Z9MiidSLPbkZHOQhUHnz0s=" + }, + { + "mvn-path": "org/glassfish/jersey/ext/jersey-entity-filtering/3.0.3/jersey-entity-filtering-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-fcA/Juo0/qB4r4+hVUdXOXR8fbdQmYUdhOlAqyMoNjE=" + }, + { + "mvn-path": "org/glassfish/jersey/ext/jersey-entity-filtering/3.0.3/jersey-entity-filtering-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-DyC0pLhyiTAz4EisJ7EhlAD7KSa3HkoPp3YtITdcqAc=" + }, + { + "mvn-path": "org/glassfish/jersey/ext/project/3.0.3/project-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-GBUvhAAH2660TM7sjDvlW9SFap87oiXIJQ+h1Tpe1PQ=" + }, + { + "mvn-path": "org/glassfish/jersey/inject/jersey-hk2/3.0.3/jersey-hk2-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-K2PcesLnIS7ru65T8XIy1jg1WBZ0llLRGY658BCgmto=" + }, + { + "mvn-path": "org/glassfish/jersey/inject/jersey-hk2/3.0.3/jersey-hk2-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-pBRkjgi9ZzuIBh98slRivvrpWhOByVv4D++Bef5iNhM=" + }, + { + "mvn-path": "org/glassfish/jersey/inject/project/3.0.3/project-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-QBgRUf+N4y2rOy+ay17ieuMxmtVy4YAhHYSRoK8VzeA=" + }, + { + "mvn-path": "org/glassfish/jersey/jersey-bom/3.0.3/jersey-bom-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-L4gWY3RRdIzRSg22Tz812lEdr6gJpQzd2JpOWUZhg9Y=" + }, + { + "mvn-path": "org/glassfish/jersey/media/jersey-media-json-jackson/3.0.3/jersey-media-json-jackson-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-E8IVT7NblV2xqlHT7Kdv4/jXpiZtLnWzHUyPo3sZUrg=" + }, + { + "mvn-path": "org/glassfish/jersey/media/jersey-media-json-jackson/3.0.3/jersey-media-json-jackson-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-F+OxAwdDQkeIGMyknnYC1KAMiaKi8HJUcTK29Wp1ho0=" + }, + { + "mvn-path": "org/glassfish/jersey/media/jersey-media-multipart/3.0.3/jersey-media-multipart-3.0.3.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-R74+vAUy7Vmy5n4g2QsT2f4JqAdzX4U02gntiHzYZ+E=" + }, + { + "mvn-path": "org/glassfish/jersey/media/jersey-media-multipart/3.0.3/jersey-media-multipart-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-BCZss2q2O7qW+fPsHb7wyyHNXTowKrnD+Q+OT2F8g9U=" + }, + { + "mvn-path": "org/glassfish/jersey/media/project/3.0.3/project-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-x5b0UmDbxRiKRE3U3eqxIcD6pWK0JqGuGTp/5CF4ly8=" + }, + { + "mvn-path": "org/glassfish/jersey/project/3.0.3/project-3.0.3.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-LHYxky7t+D4EEwnXdi+TsTDTaHQG0/2NlUDkPyjeCQI=" + }, + { + "mvn-path": "org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-P7cSMa/QmLsPk/Xrl6qCkcjQVWN5El5Zb5Lsj5RMYWI=" + }, + { + "mvn-path": "org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-WrGVb+jEXzXUal5H8yB0TZ/E9YV82pMRs3GJxdNT2g8=" + }, + { + "mvn-path": "org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-XUmr0CmXE0+ABBZF6WaOH/l6/WnSwsVa6fvUDcBz+Xs=" + }, + { + "mvn-path": "org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-7QKa3nwPkHakTAWLAu60HO5Qq7eq8I0y6o23Gpplcjo=" + }, + { + "mvn-path": "org/junit/junit-bom/5.7.1/junit-bom-5.7.1.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-C5sUo9YhBvr+jGinF7h7h60YaFiZRRt1PAT6QbaFd4Q=" + }, + { + "mvn-path": "org/jvnet/mimepull/mimepull/1.9.13/mimepull-1.9.13.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-VRi9PF2IvqOzA5UrImGDE9a/DKfxMfeDaBCKBOu6Pxc=" + }, + { + "mvn-path": "org/jvnet/mimepull/mimepull/1.9.13/mimepull-1.9.13.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-byZt9bdrf4Oh8lD4bopNbw5x3IXu5h5vB3HRTVAE1Eg=" + }, + { + "mvn-path": "org/msgpack/msgpack/0.6.12/msgpack-0.6.12.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-4JymXYUgSI6ApdxCaEior8z9QPSi6zuWRgQlldO9m14=" + }, + { + "mvn-path": "org/msgpack/msgpack/0.6.12/msgpack-0.6.12.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-lEl9jwL43oFZpbfVE24BD1f12axliGES7O2GlcUFbe4=" + }, + { + "mvn-path": "org/ow2/asm/asm/9.2/asm-9.2.jar", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-udT+TXGTjfOIOfDspCqqpkz4sxPWeNoDbwyzyhmbR/U=" + }, + { + "mvn-path": "org/ow2/asm/asm/9.2/asm-9.2.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-37EqGyJL8Bvh/WBAIEZviUJBvLZF3M45Xt2M1vilDfQ=" + }, + { + "mvn-path": "org/ow2/ow2/1.5/ow2-1.5.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-D4obEW52C4/mOJxRuE5LB6cPwRCC1Pk25FO1g91QtDs=" + }, + { + "mvn-path": "org/sonatype/oss/oss-parent/7/oss-parent-7.pom", + "mvn-repo": "https://repo1.maven.org/maven2/", + "hash": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ=" + }, + { + "mvn-path": "potemkin/potemkin/0.4.5/potemkin-0.4.5.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-KzZsg02Hy26mMbpoaXvDdNDRr4H23rQsKECUTaMgvZk=" + }, + { + "mvn-path": "potemkin/potemkin/0.4.5/potemkin-0.4.5.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-3tL5YlDzDlqPmI60YeMvKzDzbBy0Qz+6qHu82kJRTDo=" + }, + { + "mvn-path": "riddley/riddley/0.1.12/riddley-0.1.12.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-OY9h+kgluPhskWrlgMfhM7fEd9C3Kn07KY04EDJ0C64=" + }, + { + "mvn-path": "riddley/riddley/0.1.12/riddley-0.1.12.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-At+3ryDvgcJTZQVfYCjoscwpBdCyaLuJzEKM2nIwo2U=" + }, + { + "mvn-path": "slingshot/slingshot/0.12.2/slingshot-0.12.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-porCK/LqPNVM4023D9aYRNYx71SfZFDCeMMOb3nfY/M=" + }, + { + "mvn-path": "slingshot/slingshot/0.12.2/slingshot-0.12.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-SrxOK5ppxzvTc+gy0/AOWQZ4Q/+DUe/V7rsfOCTbnFE=" + }, + { + "mvn-path": "tigris/tigris/0.1.2/tigris-0.1.2.jar", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-SapkjttsFOVwlaEbOR6u5gZXgyP7eXVfkjMaxjAPl6A=" + }, + { + "mvn-path": "tigris/tigris/0.1.2/tigris-0.1.2.pom", + "mvn-repo": "https://repo.clojars.org/", + "hash": "sha256-H9VZA1l1INzUrnbmoz7/XjWmFUIrutKo7ZrDMqr75KA=" + } + ] +} diff --git a/deps.edn b/deps.edn new file mode 100644 index 0000000..1251d53 --- /dev/null +++ b/deps.edn @@ -0,0 +1,43 @@ +{ + :paths ["src"] + :deps { + org.clojure/clojure { :mvn/version "1.11.1" } + + org.fudo/bebot { + :git/url "https://git.fudo.org/fudo-public/bebot.git" + :sha "6cda6ea9d4f2e0b751e88072134264fb888c8114" + } + org.fudo/fudo-clojure { + :git/url "https://git.fudo.org/fudo-public/fudo-clojure.git" + :sha "c6a1ebef2e5b64d432a46ac48639c674e62b7cee" + } + + org.fudo/coinbase-pro-client { + :git/url "https://git.fudo.org/fudo-public/coinbase-pro-client.git" + :sha "968c4aeeebe42a574a622b955d0c981ea6b5dc36" + } + + org.clojure/math.numeric-tower { :mvn/version "0.0.5" } + + org.clojure/tools.cli { :mvn/version "1.0.206" } + + camel-snake-kebab/camel-snake-kebab { :mvn/version "0.4.2" } + } + :aliases { + :run { + :main-opts ["-m" "chute.core"] + } + :lint { + :replace-deps { clj-kondo/clj-kondo {:mvn/version "2022.04.25" } } + :main-opts ["-m" "clj-kondo.main" "--lint" "src"] + } + :cache-lint { + :replace-deps { clj-kondo/clj-kondo { :mvn/version "2022.04.25" } } + :main-opts ["-m" "clj-kondo.main" + "--lint" "src" + "--dependencies" + "--parallel" + "--copy-configs"] + } + } + } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..5399e31 --- /dev/null +++ b/flake.lock @@ -0,0 +1,117 @@ +{ + "nodes": { + "clj-nix": { + "inputs": { + "devshell": "devshell", + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1655801580, + "narHash": "sha256-4XUFDP1ES1KNWwDukQEixCe4uV7Z951kgaVAFhXI2ew=", + "owner": "jlesquembre", + "repo": "clj-nix", + "rev": "579141e009200fcd28d251731e9ac5ba46a1ec2a", + "type": "github" + }, + "original": { + "owner": "jlesquembre", + "repo": "clj-nix", + "type": "github" + } + }, + "devshell": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "clj-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1644227066, + "narHash": "sha256-FHcFZtpZEWnUh62xlyY3jfXAXHzJNEDLDzLsJxn+ve0=", + "owner": "numtide", + "repo": "devshell", + "rev": "7033f64dd9ef8d9d8644c5030c73913351d2b660", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1642700792, + "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1655643053, + "narHash": "sha256-8PMDEr44DwH45PbBijtQcAPyC4Ap+sOO5wK0y5lFvyY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5afb1b7dcf46c4ded5719525a42879b35363862c", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-22.05", + "type": "indirect" + } + }, + "root": { + "inputs": { + "clj-nix": "clj-nix", + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "utils": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..0a8fa00 --- /dev/null +++ b/flake.nix @@ -0,0 +1,35 @@ +{ + description = "Chute - Cryptocurrency Parachute."; + + inputs = { + nixpkgs.url = "nixpkgs/nixos-22.05"; + utils.url = "github:numtide/flake-utils"; + clj-nix = { + url = "github:jlesquembre/clj-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, utils, clj-nix, ... }: + (utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + mkCljBin = clj-nix.packages."${system}".mkCljBin; + update-deps = pkgs.writeShellScriptBin "update-deps.sh" '' + ${clj-nix.packages."${system}".deps-lock}/bin/deps-lock + ''; + in { + packages.chute = mkCljBin { + projectSrc = ./.; + name = "org.fudo/chute"; + main-ns = "chute.core"; + jdkRunner = pkgs.jdk17_headless; + version = "0.1"; + }; + + devShell = + pkgs.mkShell { buildInputs = with pkgs; [ clojure update-deps ]; }; + })) // { + nixosModule = { }; + }; +} diff --git a/src/chute/harness.clj b/src/chute/harness.clj new file mode 100644 index 0000000..4f50ddf --- /dev/null +++ b/src/chute/harness.clj @@ -0,0 +1,251 @@ +(ns chute.harness + (:require [fudo-clojure.logging :as log] + [fudo-clojure.result :refer [dispatch-result let-result success map-success failure]] + [exchange.client :as client] + [exchange.order :as order] + [exchange.account :as acct] + [clojure.spec.alpha :as s]) + (:import java.time.Duration)) + +(s/def ::stage + #{::initialize + ::get-historical-sticky-price + ::create-order + ::create-buy-order + ::create-sell-order + ::create-stop-loss + ::create-stop-gain + ::alert-market-price-too-high + ::alert-market-price-too-low + ::reconsider-stop-loss + ::cancel-order + ::ensure-order-cancelled + ::handle-error}) + +(s/def ::prev-stage ::stage) + +(s/def ::stage-args + (s/keys :opt [::order-id ::order ::market-price ::currency-balance ::base-balance])) + +(s/def ::order-id uuid?) + +(s/def ::order order/order?) + +(s/def ::market-price decimal?) + +(s/def ::currency-balance decimal?) + +(s/def ::base-balance decimal?) + +(s/def ::sticky-price (s/nilable decimal?)) + +(s/def ::state + (s/keys :req [::stage + ::prev-stage + ::stage-args + ::client + ::sticky-price + ::currency + ::base-currency + ::logger + ::stop-loss-percentile + ::format-$ + ::delay])) + +(s/def ::delay (partial instance? Duration)) + +(defn- next-stage [state stage & remaining-args] + (let [args (apply hash-map remaining-args) + stage-delay (get args ::delay (Duration/ofSeconds 30))] + (-> state + (assoc ::prev-stage (::stage state) + ::delay stage-delay + ::stage stage + ::stage-args (dissoc args ::delay)) + (success)))) + +(defn- handle-error [state e] + (next-stage state ::handle-error :error e)) + +(defn- with-sticky-price [state price] + (assoc state ::sticky-price price)) + +(defn- get-state [state k] + (if-let [val (get state k)] + val + (throw (ex-info (str "missing state key: " k) + {::state state + ::key k})))) + +(defn- get-arg [state arg] + (if-let [val (get-in state [::stage-args arg])] + val + (throw (ex-info (str "missing argument: " arg) + {::args (::stage-args state) + ::key arg})))) + +;; TODO: add explicit namespace to get-state +(defmacro with-state [state bindings & body] + (let [namespace-key (fn [sym] (keyword (str *ns*) (name sym))) + fetch-key (fn [k] `(get-state ~state ~(namespace-key k))) + bind-clause (vec (mapcat (juxt identity fetch-key) bindings))] + `(let ~bind-clause + ~@body))) + +;; TODO: add explicit namespace to get-arg +(defmacro with-args [state bindings & body] + (let [fetch-key (fn [k] `(get-arg ~state ~k)) + bind-clause (vec (mapcat (fn [[k v]] [k (fetch-key v)]) bindings))] + `(let ~bind-clause + ~@body))) + +(defmulti stage:execute ::stage) + +(defn execute! [init-state] + (loop [state init-state] + (let [delay (::delay state)] + (Thread/sleep (.getSeconds delay)) + (dispatch-result (stage:execute (dissoc state ::delay)) + ([next-state] (recur next-state)) + ([err] (recur (handle-error state err))))))) + +(defmethod stage:execute ::initialize [state] + (with-state state [sticky-price] + (if (nil? sticky-price) + (next-stage state ::get-historical-sticky-price) + (next-stage state ::create-order)))) + +(defmethod stage:execute ::get-historical-sticky-price [state] + (with-state state [client currency] + (let-result [orders (client/get-completed-limit-orders! client currency)] + (let [price (-> orders first order/price)] + (next-stage (with-sticky-price state price) + ::create-order))))) + +(defmethod stage:execute ::create-order [state] + (with-state state [client currency base-currency] + (let-result [accts (client/get-accounts! client) + market-price (client/get-market-price! client currency)] + (let [currency-balance (acct/account-balance accts currency) + base-value (acct/account-balance accts base-currency) + currency-value (* market-price currency-balance)] + (if (> currency-value base-value) + (next-stage state ::create-sell-order + ::market-price market-price + ::currency-balance currency-balance) + (next-stage state ::create-buy-order + ::market-price market-price + ::base-balance base-value)))))) + +(defmethod stage:execute ::create-sell-order [state] + (with-state state [client sticky-price] + (with-args state {market-price ::market-price + currency-balance ::currency-balance} + (if (> market-price sticky-price) + (next-stage state ::create-stop-loss + ::currency-balance currency-balance) + (next-stage state ::alert-market-price-too-low + ::currency-balance currency-balance + ::market-price market-price))))) + +(defmethod stage:execute ::create-buy-order [state] + (with-state state [client sticky-price] + (with-args state {market-price ::market-price + base-balance ::base-balance} + (if (> market-price sticky-price) + (next-stage state ::create-immediate-buy + ::base-balance base-balance + ::market-price market-price) + (next-stage state ::alert-market-price-too-high + ::base-balance base-balance + ::market-price market-price))))) + +(defmethod stage:execute ::create-stop-loss [state] + (with-state state [client currency sticky-price] + (with-args state {currency-balance ::currency-balance} + (let-result [order-id (client/create-stop-loss-order! client currency stop-price sticky-price currency-balance)] + (next-stage state ::watch-stop-loss ::order-id order-id))))) + +(defmethod stage:execute ::alert-market-price-too-low [state] + (with-state state [logger sticky-price format-$] + (with-args state {market-price ::market-price} + (log/alert! logger (str "FAILED TO CREATE STOP LOSS!" + \newline + " Market price too low!" + \newline + " Current market price: " (format-$ market-price) + \newline + " Sticky price: " (format-$ sticky-price))) + (next-stage state ::create-order)))) + +(defmethod stage:execute ::alert-market-price-too-high [state] + (with-state state [logger sticky-price format-$] + (with-args state {market-price ::market-price} + (log/alert! logger (str "FAILED TO CREATE STOP GAIN!" + \newline + " Market price too high!" + \newline + " Current market price: " (format-$ market-price) + \newline + " Sticky price: " (format-$ sticky-price))) + (next-stage state ::create-order)))) + +(defmethod stage:execute ::create-stop-gain [state] + (with-state state [client currency sticky-price] + (with-args state {base-balance ::base-balance} + (let-result [order-id (client/create-stop-gain-order! client currency stop-price sticky-price base-balance)])))) + +(defmethod stage:execute ::watch-stop-loss [state] + (with-state state [client] + (with-args state {order-id ::order-id} + (let-result [order (client/get-order! client order-id)] + (if (order/filled? order) + (next-stage state ::create-order) + (next-stage state ::reconsider-stop-loss + ::order order)))))) + +(defmethod stage:execute ::calculate-sticky-price [state] + (with-args state {txn-price ::transaction-price + txn-quantity ::txn-quantity + fees ::fees} + (let [fee-share (/ fees txn-quantity)] + (next-stage (with-sticky-price state (+ txn-price fee-share)) + ::create-order)))) + +(defmethod stage:execute ::reconsider-stop-loss [state] + (with-state state [client currency stop-loss-percentile sticky-price] + (with-args state {order ::order} + (let-result [market-price (client/get-market-price! client currency)] + (let [target-price (* market-price stop-loss-percentile) + order-id (order/id order)] + (if (> target-price sticky-price) + (next-stage (with-sticky-price state target-price) ::cancel-order + ::order-id order-id) + (next-stage state ::watch-stop-loss + ::order-id order-id))))))) + +(defmethod stage:execute ::cancel-order [state] + (with-state state [client] + (with-args state {order-id ::order-id} + (dispatch-result (client/cancel-order! client order-id) + ([order-id] (next-stage state ::ensure-order-cancelled + ::order-id order-id)) + ([error] (if (http/not-found-error? error) + (next-stage state ::create-order) + error)))))) + +(defmethod stage:execute ::ensure-order-cancelled [state] + (with-state state [client] + (with-args state {order-id ::order-id} + (dispatch-result (client/get-order! client order-id) + ([order] (if (order/cancelled? order) + (next-stage state ::create-order) + (next-stage state ::cancel-order + ::order-id order-id))) + ([error] (if (http/not-found-error? error) + (next-stage state ::create-order) + error)))))) + +(defmethod stage:execute :default [state] + (failure (str "stage:execute reached unexpected state: " state) + { :state state }))