From a856296339fd0f780b7634b1daebbbbf1e77d229 Mon Sep 17 00:00:00 2001 From: LilyRose2798 Date: Wed, 18 Jun 2025 15:05:43 +1000 Subject: [PATCH] Add dependencies and placeholder logic --- .gitignore | 1 + gleam.toml | 13 +++++-- manifest.toml | 25 +++++++++++-- src/env.gleam | 55 +++++++++++++++++++++++++++++ src/spacetraders_client.gleam | 12 +++++-- test/spacetraders_client_test.gleam | 8 ----- 6 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 src/env.gleam diff --git a/.gitignore b/.gitignore index 599be4e..dac4107 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.ez /build erl_crash.dump +.env \ No newline at end of file diff --git a/gleam.toml b/gleam.toml index 10f8b7b..35124e1 100644 --- a/gleam.toml +++ b/gleam.toml @@ -1,12 +1,21 @@ name = "spacetraders_client" version = "1.0.0" +gleam = ">= 1.11.0" description = "A Gleam client for the spacetraders.io game" licences = ["MIT"] repository = { type = "forgejo", host = "7cs.dev", user = "lily", repo = "gleam-spacetraders-client" } # links = [{ title = "Website", href = "" }] [dependencies] -gleam_stdlib = ">= 0.44.0 and < 2.0.0" +gleam_stdlib = ">= 0.60.0 and < 1.0.0" +gleam_json = ">= 3.0.1 and < 4.0.0" +gleam_http = ">= 4.0.0 and < 5.0.0" +gleam_httpc = ">= 4.1.1 and < 5.0.0" +birl = ">= 1.8.0 and < 2.0.0" +dot_env = ">= 1.2.0 and < 2.0.0" +gleam_erlang = ">= 1.0.0 and < 2.0.0" +gleam_otp = ">= 1.0.0 and < 2.0.0" +spacetraders_sdk = ">= 1.1.0 and < 2.0.0" [dev-dependencies] -gleeunit = ">= 1.0.0 and < 2.0.0" +gleeunit = ">= 1.5.1 and < 2.0.0" diff --git a/manifest.toml b/manifest.toml index 6430ad1..c9bc974 100644 --- a/manifest.toml +++ b/manifest.toml @@ -2,10 +2,31 @@ # You typically do not need to edit this file packages = [ + { name = "birl", version = "1.8.0", build_tools = ["gleam"], requirements = ["gleam_regexp", "gleam_stdlib", "ranger"], otp_app = "birl", source = "hex", outer_checksum = "2AC7BA26F998E3DFADDB657148BD5DDFE966958AD4D6D6957DD0D22E5B56C400" }, + { name = "dot_env", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "simplifile"], otp_app = "dot_env", source = "hex", outer_checksum = "F2B4815F1B5AF8F20A6EADBB393E715C4C35203EBD5BE8200F766EA83A0B18DE" }, + { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, + { name = "gleam_erlang", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "7E6A5234F927C4B24F8054AB1E4572206C41F9E6D5C6C02273CB7531E7E5CED0" }, + { name = "gleam_http", version = "4.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_http", source = "hex", outer_checksum = "0A62451FC85B98062E0907659D92E6A89F5F3C0FBE4AB8046C99936BF6F91DBC" }, + { name = "gleam_httpc", version = "4.1.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gleam_httpc", source = "hex", outer_checksum = "C670EBD46FC1472AD5F1F74F1D3938D1D0AC1C7531895ED1D4DDCB6F07279F43" }, + { name = "gleam_json", version = "3.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "5BA154440B22D9800955B1AB854282FA37B97F30F409D76B0824D0A60C934188" }, + { name = "gleam_otp", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "7020E652D18F9ABAC9C877270B14160519FA0856EE80126231C505D719AD68DA" }, + { name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" }, { name = "gleam_stdlib", version = "0.60.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "621D600BB134BC239CB2537630899817B1A42E60A1D46C5E9F3FAE39F88C800B" }, + { name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" }, { name = "gleeunit", version = "1.5.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "D33B7736CF0766ED3065F64A1EBB351E72B2E8DE39BAFC8ADA0E35E92A6A934F" }, + { name = "ranger", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_yielder"], otp_app = "ranger", source = "hex", outer_checksum = "C8988E8F8CDBD3E7F4D8F2E663EF76490390899C2B2885A6432E942495B3E854" }, + { name = "simplifile", version = "2.2.1", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "C88E0EE2D509F6D86EB55161D631657675AA7684DAB83822F7E59EB93D9A60E3" }, + { name = "spacetraders_sdk", version = "1.1.0", build_tools = ["gleam"], requirements = ["birl", "gleam_http", "gleam_httpc", "gleam_json", "gleam_stdlib"], otp_app = "spacetraders_sdk", source = "hex", outer_checksum = "F2DD78EAE717D525B985419AA2F7EDFCADEBE5B537A550F0B2C2BFA56E0F2D7B" }, ] [requirements] -gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } -gleeunit = { version = ">= 1.0.0 and < 2.0.0" } +birl = { version = ">= 1.8.0 and < 2.0.0" } +dot_env = { version = ">= 1.2.0 and < 2.0.0" } +gleam_erlang = { version = ">= 1.0.0 and < 2.0.0" } +gleam_http = { version = ">= 4.0.0 and < 5.0.0" } +gleam_httpc = { version = ">= 4.1.1 and < 5.0.0" } +gleam_json = { version = ">= 3.0.1 and < 4.0.0" } +gleam_otp = { version = ">= 1.0.0 and < 2.0.0" } +gleam_stdlib = { version = ">= 0.60.0 and < 1.0.0" } +gleeunit = { version = ">= 1.5.1 and < 2.0.0" } +spacetraders_sdk = { version = ">= 1.1.0 and < 2.0.0" } diff --git a/src/env.gleam b/src/env.gleam new file mode 100644 index 0000000..ec28e53 --- /dev/null +++ b/src/env.gleam @@ -0,0 +1,55 @@ +import dot_env +import dot_env/env +import gleam/result +import utils/auth.{type AccountToken, type AgentToken} + +pub type Env { + Env(account_token: AccountToken, agent_token: AgentToken) +} + +pub type EnvError { + MissingVar(name: String) + InvalidVar(name: String) +} + +pub fn get_account_token() -> Result(AccountToken, EnvError) { + env.get_string("ACCOUNT_TOKEN") + |> result.replace_error(MissingVar("ACCOUNT_TOKEN")) + |> result.then(fn(value) { + auth.parse_account_token(value) + |> result.replace_error(InvalidVar("ACCOUNT_TOKEN")) + }) +} + +pub fn get_agent_token() -> Result(AgentToken, EnvError) { + env.get_string("AGENT_TOKEN") + |> result.replace_error(MissingVar("AGENT_TOKEN")) + |> result.then(fn(value) { + auth.parse_agent_token(value) + |> result.replace_error(InvalidVar("AGENT_TOKEN")) + }) +} + +pub fn load_env() -> Result(Env, EnvError) { + use account_token <- result.try(get_account_token()) + use agent_token <- result.try(get_agent_token()) + Ok(Env(account_token:, agent_token:)) +} + +pub fn load_dotenv() -> Result(Env, EnvError) { + dot_env.load_default() + load_env() +} + +pub fn load_env_unsafe() -> Env { + let assert Ok(account_token) = get_account_token() + as "Missing or invalid account token" + let assert Ok(agent_token) = get_agent_token() + as "Missing or invalid agent token" + Env(account_token:, agent_token:) +} + +pub fn load_dotenv_unsafe() -> Env { + dot_env.load_default() + load_env_unsafe() +} diff --git a/src/spacetraders_client.gleam b/src/spacetraders_client.gleam index ce8be9c..c869843 100644 --- a/src/spacetraders_client.gleam +++ b/src/spacetraders_client.gleam @@ -1,5 +1,13 @@ -import gleam/io +import env +import spacetraders_sdk pub fn main() -> Nil { - io.println("Hello from spacetraders_client!") + let assert Ok(env.Env(agent_token:, ..)) = env.load_dotenv() + let assert Ok(server_status) = spacetraders_sdk.get_server_status() + echo server_status + let assert Ok(account) = spacetraders_sdk.get_account(agent_token) + echo account + let assert Ok(agent) = spacetraders_sdk.get_agent(agent_token) + echo agent + Nil } diff --git a/test/spacetraders_client_test.gleam b/test/spacetraders_client_test.gleam index fba3c88..902c4da 100644 --- a/test/spacetraders_client_test.gleam +++ b/test/spacetraders_client_test.gleam @@ -3,11 +3,3 @@ import gleeunit pub fn main() -> Nil { gleeunit.main() } - -// gleeunit test functions end in `_test` -pub fn hello_world_test() { - let name = "Joe" - let greeting = "Hello, " <> name <> "!" - - assert greeting == "Hello, Joe!" -}