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 all4
;;; other forgejo modules.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-headers14
forgejo-api-url15
forgejo-get/json16
forgejo-post/json17
forgejo-put/json18
forgejo-patch/json19
forgejo-delete)21
(begin23
;;; 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-response36
(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-response46
(http-get url headers: (forgejo-auth-headers token))))48
;;; Authenticated JSON POST request.49
(define (forgejo-post/json token url body)50
(check-response51
(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-response57
(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-response63
(http-patch url (json-encode body)64
headers: (forgejo-json-headers token))))66
;;; Authenticated DELETE request.67
(define (forgejo-delete token url)68
(check-response69
(http-delete url headers: (forgejo-auth-headers token))))71
))