@@ -3,7 +3,8 @@ import * as Schema from "effect/Schema"
33import {
44 activityStreamsJsonLdContext ,
55 forgeFedJsonLdContext ,
6- securityJsonLdContext
6+ securityJsonLdContext ,
7+ socialWebWebfingerJsonLdContext
78} from "./contracts.js"
89
910export type JsonPrimitive = boolean | number | string | null
@@ -25,18 +26,59 @@ const OptionalString = Schema.optional(Schema.String)
2526const OptionalBoolean = Schema . optional ( Schema . Boolean )
2627const JsonObjectSchema = Schema . Record ( { key : Schema . String , value : JsonValueSchema } )
2728const JsonLdContextEntrySchema = Schema . Union ( Schema . String , JsonObjectSchema )
29+ const JsonLdIdMappingSchema = Schema . Struct ( {
30+ "@id" : Schema . String ,
31+ "@type" : OptionalString
32+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
2833
2934export const ActivityForgeFedJsonLdContextSchema = Schema . Tuple (
3035 Schema . Literal ( activityStreamsJsonLdContext ) ,
3136 Schema . Literal ( forgeFedJsonLdContext )
3237)
3338
34- export const ActorJsonLdContextSchema = Schema . Tuple (
39+ export const LocalActorJsonLdContextSchema = Schema . Tuple (
3540 Schema . Literal ( activityStreamsJsonLdContext ) ,
3641 Schema . Literal ( securityJsonLdContext ) ,
3742 Schema . Literal ( forgeFedJsonLdContext )
3843)
3944
45+ export const MastodonActorContextExtensionsSchema = Schema . Struct ( {
46+ manuallyApprovesFollowers : OptionalString ,
47+ toot : OptionalString ,
48+ featured : Schema . optional ( JsonLdIdMappingSchema ) ,
49+ featuredTags : Schema . optional ( JsonLdIdMappingSchema ) ,
50+ alsoKnownAs : Schema . optional ( JsonLdIdMappingSchema ) ,
51+ movedTo : Schema . optional ( JsonLdIdMappingSchema ) ,
52+ schema : OptionalString ,
53+ PropertyValue : OptionalString ,
54+ value : OptionalString ,
55+ discoverable : OptionalString ,
56+ suspended : OptionalString ,
57+ memorial : OptionalString ,
58+ indexable : OptionalString ,
59+ attributionDomains : Schema . optional ( JsonLdIdMappingSchema ) ,
60+ showFeatured : OptionalString ,
61+ showMedia : OptionalString ,
62+ showRepliesInMedia : OptionalString ,
63+ gts : OptionalString ,
64+ interactionPolicy : Schema . optional ( JsonLdIdMappingSchema ) ,
65+ canQuote : Schema . optional ( JsonLdIdMappingSchema ) ,
66+ automaticApproval : Schema . optional ( JsonLdIdMappingSchema ) ,
67+ manualApproval : Schema . optional ( JsonLdIdMappingSchema )
68+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
69+
70+ export const MastodonActorJsonLdContextSchema = Schema . Tuple (
71+ Schema . Literal ( activityStreamsJsonLdContext ) ,
72+ Schema . Literal ( securityJsonLdContext ) ,
73+ Schema . Literal ( socialWebWebfingerJsonLdContext ) ,
74+ MastodonActorContextExtensionsSchema
75+ )
76+
77+ export const ActorJsonLdContextSchema = Schema . Union (
78+ LocalActorJsonLdContextSchema ,
79+ MastodonActorJsonLdContextSchema
80+ )
81+
4082export const JsonLdContextSchema = Schema . Union (
4183 Schema . String ,
4284 JsonObjectSchema ,
@@ -60,8 +102,8 @@ export const ForgeFedTicketSchema = Schema.Struct({
60102 url : OptionalString ,
61103 context : OptionalString ,
62104 workType : OptionalString ,
63- attachment : Schema . optional ( Schema . Array ( Schema . Unknown ) ) ,
64- raw : Schema . optional ( Schema . Unknown )
105+ attachment : Schema . optional ( Schema . Array ( JsonValueSchema ) ) ,
106+ raw : Schema . optional ( JsonValueSchema )
65107} )
66108
67109export const ActivityPubPublicKeySchema = Schema . Struct ( {
@@ -79,11 +121,43 @@ const ActivityPubInteractionPolicySchema = Schema.Record({
79121 value : JsonValueSchema
80122} )
81123
124+ const ActivityPubImageSchema = Schema . Struct ( {
125+ type : OptionalString ,
126+ mediaType : OptionalString ,
127+ url : OptionalString ,
128+ name : OptionalString
129+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
130+
131+ const ActivityPubActorAttachmentSchema = Schema . Struct ( {
132+ type : OptionalString ,
133+ name : OptionalString ,
134+ value : OptionalString
135+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
136+
137+ const ActivityPubActorTagSchema = Schema . Struct ( {
138+ type : OptionalString ,
139+ name : OptionalString ,
140+ href : OptionalString ,
141+ id : OptionalString ,
142+ icon : Schema . optional ( ActivityPubImageSchema ) ,
143+ updated : OptionalString
144+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
145+
146+ const ActivityPubInteractionApprovalSchema = Schema . Struct ( {
147+ automaticApproval : Schema . optional ( Schema . Array ( Schema . String ) ) ,
148+ manualApproval : Schema . optional ( Schema . Array ( Schema . String ) )
149+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
150+
151+ const MastodonInteractionPolicySchema = Schema . Struct ( {
152+ canFeature : Schema . optional ( ActivityPubInteractionApprovalSchema ) ,
153+ canQuote : Schema . optional ( ActivityPubInteractionApprovalSchema )
154+ } , Schema . Record ( { key : Schema . String , value : JsonValueSchema } ) )
155+
82156export const ActivityPubPersonSchema = Schema . Struct ( {
83- "@context" : JsonLdContextSchema ,
157+ "@context" : ActorJsonLdContextSchema ,
84158 type : Schema . Literal ( "Person" ) ,
85159 id : Schema . String ,
86- name : Schema . String ,
160+ name : OptionalString ,
87161 preferredUsername : Schema . String ,
88162 summary : Schema . String ,
89163 inbox : Schema . String ,
@@ -102,13 +176,20 @@ export const ActivityPubPersonSchema = Schema.Struct({
102176 indexable : OptionalBoolean ,
103177 published : OptionalString ,
104178 memorial : OptionalBoolean ,
179+ alsoKnownAs : Schema . optional ( Schema . Array ( Schema . String ) ) ,
180+ movedTo : OptionalString ,
181+ suspended : OptionalBoolean ,
182+ attributionDomains : Schema . optional ( Schema . Array ( Schema . String ) ) ,
183+ icon : Schema . optional ( ActivityPubImageSchema ) ,
184+ image : Schema . optional ( ActivityPubImageSchema ) ,
185+ devices : OptionalString ,
105186 showFeatured : OptionalBoolean ,
106187 showMedia : OptionalBoolean ,
107188 showRepliesInMedia : OptionalBoolean ,
108- interactionPolicy : Schema . optional ( ActivityPubInteractionPolicySchema ) ,
189+ interactionPolicy : Schema . optional ( Schema . Union ( MastodonInteractionPolicySchema , ActivityPubInteractionPolicySchema ) ) ,
109190 featuredCollections : OptionalString ,
110- tag : Schema . optional ( Schema . Array ( JsonValueSchema ) ) ,
111- attachment : Schema . optional ( Schema . Array ( JsonValueSchema ) )
191+ tag : Schema . optional ( Schema . Array ( ActivityPubActorTagSchema ) ) ,
192+ attachment : Schema . optional ( Schema . Array ( ActivityPubActorAttachmentSchema ) )
112193} )
113194
114195export const ActivityPubFollowActivitySchema = Schema . Struct ( {
@@ -129,7 +210,7 @@ export const ActivityPubOrderedCollectionSchema = Schema.Struct({
129210 first : OptionalString ,
130211 last : OptionalString ,
131212 current : OptionalString ,
132- orderedItems : Schema . optionalWith ( Schema . Array ( Schema . Unknown ) , { default : ( ) => [ ] } )
213+ orderedItems : Schema . optionalWith ( Schema . Array ( JsonValueSchema ) , { default : ( ) => [ ] } )
133214} )
134215
135216export const ActivityPubOrderedCollectionPageSchema = Schema . Struct ( {
@@ -140,5 +221,5 @@ export const ActivityPubOrderedCollectionPageSchema = Schema.Struct({
140221 partOf : Schema . String ,
141222 next : OptionalString ,
142223 prev : OptionalString ,
143- orderedItems : Schema . Array ( Schema . Unknown )
224+ orderedItems : Schema . Array ( JsonValueSchema )
144225} )
0 commit comments