AtlatestRepositorysigil-forgejo

sigil-forgejo / tree / src / forgejoclient.sgl

1;;; (forgejo client) - Shared Forgejo API client utilities.
2;;;
3;;; Provides authentication headers and URL construction used by all
4;;; other forgejo modules.
5
6(define-library (forgejo client)
7 (import (sigil core)
8 (sigil dict)
9 (sigil string)
10 (sigil json)
11 (sigil http client))
13 (export forgejo-auth-headers
14 forgejo-api-url
15 forgejo-get/json
16 forgejo-post/json
17 forgejo-put/json
18 forgejo-patch/json
19 forgejo-delete)
21 (begin
23 ;;; Build authorization headers for the Forgejo API.
24 (define (forgejo-auth-headers token)
25 #{ authorization: (string-append "token " token) })
27 ;;; Build an API URL from a base URL and path segments.
28 ;;;
29 ;;; (forgejo-api-url "https://codeberg.org" "repos" "sigil" "kiln")
30 ;;; => "https://codeberg.org/api/v1/repos/sigil/kiln"
31 (define (forgejo-api-url base-url . parts)
32 (apply build-api-url base-url "api" "v1" parts))
34 ;;; Response checker for the Forgejo API.
35 (define check-response
36 (make-response-checker name: "Forgejo API"))
38 ;; JSON headers for requests with a body.
39 (define (forgejo-json-headers token)
40 (dict-merge (forgejo-auth-headers token)
41 #{ content-type: "application/json" }))
43 ;;; Authenticated JSON GET request.
44 (define (forgejo-get/json token url)
45 (check-response
46 (http-get url headers: (forgejo-auth-headers token))))
48 ;;; Authenticated JSON POST request.
49 (define (forgejo-post/json token url body)
50 (check-response
51 (http-post url (json-encode body)
52 headers: (forgejo-json-headers token))))
54 ;;; Authenticated JSON PUT request.
55 (define (forgejo-put/json token url body)
56 (check-response
57 (http-put url (json-encode body)
58 headers: (forgejo-json-headers token))))
60 ;;; Authenticated JSON PATCH request.
61 (define (forgejo-patch/json token url body)
62 (check-response
63 (http-patch url (json-encode body)
64 headers: (forgejo-json-headers token))))
66 ;;; Authenticated DELETE request.
67 (define (forgejo-delete token url)
68 (check-response
69 (http-delete url headers: (forgejo-auth-headers token))))
71 ))