Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 36s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 lines
1.1 KiB
Plaintext
32 lines
1.1 KiB
Plaintext
; feed/normalize — coerce arbitrary input into the canonical activity record.
|
|
; An activity is a small dict {:actor :verb :object :at :tags}; a stream is an
|
|
; APL vector of such dicts (see stream.sx). Extra keys on the raw input survive
|
|
; (e.g. :visible-to for ACL, peer metadata for federation) — :tags is the
|
|
; flexible bag but the record is not closed.
|
|
|
|
(define feed/activity-keys (list :actor :verb :object :at :tags))
|
|
|
|
(define
|
|
feed/normalize
|
|
(fn
|
|
(raw)
|
|
(let
|
|
((d (if (= (type-of raw) "dict") raw {})))
|
|
(merge d {:actor (get d :actor "") :object (get d :object nil) :at (get d :at 0) :tags (let ((t (get d :tags (list)))) (if (list? t) t (list t))) :verb (get d :verb "post")}))))
|
|
|
|
(define
|
|
feed/activity
|
|
(fn (actor verb object at tags) (feed/normalize {:actor actor :object object :at at :tags tags :verb verb})))
|
|
|
|
(define feed/actor (fn (a) (get a :actor)))
|
|
(define feed/verb (fn (a) (get a :verb)))
|
|
(define feed/object (fn (a) (get a :object)))
|
|
(define feed/at (fn (a) (get a :at)))
|
|
(define feed/tags (fn (a) (get a :tags)))
|
|
|
|
(define
|
|
feed/activity?
|
|
(fn
|
|
(a)
|
|
(and (= (type-of a) "dict") (has-key? a :actor) (has-key? a :verb))))
|