diff options
Diffstat (limited to 'lib/Matrix/Client/Requester.pm6')
-rw-r--r-- | lib/Matrix/Client/Requester.pm6 | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/Matrix/Client/Requester.pm6 b/lib/Matrix/Client/Requester.pm6 new file mode 100644 index 0000000..c2ba865 --- /dev/null +++ b/lib/Matrix/Client/Requester.pm6 @@ -0,0 +1,52 @@ +use HTTP::UserAgent; +use HTTP::Request::Common; +use URI::Encode; +use JSON::Tiny; + +unit role Matrix::Client::Requester; + +has $!ua = HTTP::UserAgent.new; +has $.home-server is required; +has $!client-endpoint = "/_matrix/client/r0"; +has $!url-prefix = ""; +has $!access-token = ""; +has $!sync-since = ""; + +method get(Str $path, *%data) { + my $q = "$path?access_token=$!access-token"; + for %data.kv -> $k,$v { + $q ~= "&$k=$v" unless $v eq ""; + } + my $uri = uri_encode($.base-url ~ $q); + + $!ua.history = []; + $!ua.get($uri) +} + +method base-url(--> Str) { + "$.home-server$!client-endpoint$!url-prefix" +} + +multi method post(Str $path, Str $json) { + my $req = HTTP::Request.new(POST => $.base-url() ~ $path ~ "?access_token=$!access-token", + Content-Type => 'application/json'); + $req.add-content($json); + $!ua.history = []; + $!ua.request($req) +} + +multi method post(Str $path, *%params) { + self.post($path, to-json(%params)) +} + +multi method put(Str $path,Str $json) { + my $req = HTTP::Request.new(PUT => $.base-url() ~ $path ~ "?access_token=$!access-token", + Content-Type => 'application/json'); + $req.add-content($json); + $!ua.history = []; + $!ua.request($req) +} + +multi method put(Str $path, *%params) { + self.put($path, to-json(%params)) +} |