An experimental TypeSpec syntax for Lexicon

meh

+1596 -1593
+46 -43
DOCS.md
··· 16 16 17 17 If you already know Lexicon, you can learn the syntax by just opening the Lexicons you're familiar with. 18 18 19 - ## Quick Start 19 + ## Namespaces 20 20 21 21 Every TypeSpec file starts with an import and namespace: 22 22 23 23 ```typescript 24 24 import "@typelex/emitter"; 25 25 26 - /** Common definitions used by other lexicons */ 26 + /** Some docstring */ 27 27 namespace com.example.defs { 28 28 // definitions here 29 29 } ··· 34 34 { 35 35 "lexicon": 1, 36 36 "id": "com.example.defs", 37 - "description": "Common definitions used by other lexicons", 37 + "description": "Some docstring", 38 38 "defs": { ... } 39 39 } 40 40 ``` 41 41 42 42 Use `/** */` doc comments for descriptions (or `@doc()` decorator as alternative). 43 43 44 + Use backticks for TypeScript/TypeSpec reserved words: 45 + 46 + ```typescript 47 + namespace app.bsky.feed.post.`record` { 48 + ... 49 + } 50 + ``` 51 + 52 + The first namespace in the file will be turned into JSON. However, you can put more of them in the same file (if you want to reference them) or `import` other `.tsp` files from it. 53 + 54 + (Currently, we're assuming you write everything in typelex. You can grab common Lexicons from the [Playground](https://playground.typelex.org/)). It should not be hard to also stub out dependencies with namespaces + empty defs, or to add special syntax for a ref (which isn't availeble to resolve). For now, I haven't done that. This needs more thought.) 55 + 44 56 ## Top-Level Lexicon Types 45 57 58 + ### Record 59 + 60 + ```typescript 61 + namespace com.example.post { 62 + @rec("tid") 63 + /** A post record */ 64 + model Main { 65 + @required text: string; 66 + @required createdAt: datetime; 67 + } 68 + } 69 + ``` 70 + 71 + **Maps to:** `{"type": "record", "key": "tid", "record": {...}}` 72 + 73 + **Record key types:** `@rec("tid")`, `@rec("any")`, `@rec("nsid")` 74 + 75 + ### Object (Plain Definition) 76 + 77 + ```typescript 78 + namespace com.example.defs { 79 + /** User metadata */ 80 + model Metadata { 81 + version?: integer = 1; 82 + tags?: string[]; 83 + } 84 + } 85 + ``` 86 + 87 + **Maps to:** `{"type": "object", "properties": {...}}` 88 + 46 89 ### Query (XRPC Query) 47 90 48 91 ```typescript ··· 97 140 ``` 98 141 99 142 **Maps to:** `{"type": "subscription", ...}` with `message` containing union 100 - 101 - ### Record 102 - 103 - ```typescript 104 - namespace com.example.post { 105 - @rec("tid") 106 - /** A post record */ 107 - model Main { 108 - @required text: string; 109 - @required createdAt: datetime; 110 - } 111 - } 112 - ``` 113 - 114 - **Maps to:** `{"type": "record", "key": "tid", "record": {...}}` 115 - 116 - **Record key types:** `@rec("tid")`, `@rec("any")`, `@rec("nsid")` 117 - 118 - ### Object (Plain Definition) 119 - 120 - ```typescript 121 - namespace com.example.defs { 122 - /** User metadata */ 123 - model Metadata { 124 - version?: integer = 1; 125 - tags?: string[]; 126 - } 127 - } 128 - ``` 129 - 130 - **Maps to:** `{"type": "object", "properties": {...}}` 131 - 132 - ## Reserved Keywords 133 - 134 - Use backticks for TypeScript/TypeSpec reserved words: 135 - 136 - ```typescript 137 - namespace app.bsky.feed.post.`record` { ... } 138 - namespace `pub`.leaflet.subscription { ... } 139 - ``` 140 143 141 144 ## Inline vs Definitions 142 145
+47 -47
packages/emitter/test/integration/atproto/input/app/bsky/actor/defs.tsp
··· 90 90 @required allowSubscriptions: "followers" | "mutuals" | "none" | string; 91 91 } 92 92 93 - @doc("Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.") 93 + /** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */ 94 94 model ViewerState { 95 95 muted?: boolean; 96 96 mutedByList?: app.bsky.graph.defs.ListViewBasic; ··· 100 100 following?: atUri; 101 101 followedBy?: atUri; 102 102 103 - @doc("This property is present only in selected cases, as an optimization.") 103 + /** This property is present only in selected cases, as an optimization. */ 104 104 knownFollowers?: KnownFollowers; 105 105 106 - @doc("This property is present only in selected cases, as an optimization.") 106 + /** This property is present only in selected cases, as an optimization. */ 107 107 activitySubscription?: app.bsky.notification.defs.ActivitySubscription; 108 108 } 109 109 110 - @doc("The subject's followers whom you also follow") 110 + /** The subject's followers whom you also follow */ 111 111 model KnownFollowers { 112 112 @required count: integer; 113 113 ··· 117 117 followers: ProfileViewBasic[]; 118 118 } 119 119 120 - @doc("Represents the verification information about the user this object is attached to.") 120 + /** Represents the verification information about the user this object is attached to. */ 121 121 model VerificationState { 122 - @doc("All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included.") 122 + /** All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included. */ 123 123 @required 124 124 verifications: VerificationView[]; 125 125 126 - @doc("The user's status as a verified account.") 126 + /** The user's status as a verified account. */ 127 127 @required 128 128 verifiedStatus: "valid" | "invalid" | "none" | string; 129 129 130 - @doc("The user's status as a trusted verifier.") 130 + /** The user's status as a trusted verifier. */ 131 131 @required 132 132 trustedVerifierStatus: "valid" | "invalid" | "none" | string; 133 133 } 134 134 135 - @doc("An individual verification for an associated subject.") 135 + /** An individual verification for an associated subject. */ 136 136 model VerificationView { 137 - @doc("The user who issued this verification.") 137 + /** The user who issued this verification. */ 138 138 @required 139 139 issuer: did; 140 140 141 - @doc("The AT-URI of the verification record.") 141 + /** The AT-URI of the verification record. */ 142 142 @required 143 143 uri: atUri; 144 144 145 - @doc("True if the verification passes validation, otherwise false.") 145 + /** True if the verification passes validation, otherwise false. */ 146 146 @required 147 147 isValid: boolean; 148 148 149 - @doc("Timestamp when the verification was created.") 149 + /** Timestamp when the verification was created. */ 150 150 @required 151 151 createdAt: datetime; 152 152 } ··· 174 174 } 175 175 176 176 model ContentLabelPref { 177 - @doc("Which labeler does this preference apply to? If undefined, applies globally.") 177 + /** Which labeler does this preference apply to? If undefined, applies globally. */ 178 178 labelerDid?: did; 179 179 180 180 @required label: string; ··· 199 199 } 200 200 201 201 model PersonalDetailsPref { 202 - @doc("The birth date of account owner.") 202 + /** The birth date of account owner. */ 203 203 birthDate?: datetime; 204 204 } 205 205 206 206 model FeedViewPref { 207 - @doc("The URI of the feed, or an identifier which describes the feed.") 207 + /** The URI of the feed, or an identifier which describes the feed. */ 208 208 @required 209 209 feed: string; 210 210 211 - @doc("Hide replies in the feed.") 211 + /** Hide replies in the feed. */ 212 212 hideReplies?: boolean; 213 213 214 - @doc("Hide replies in the feed if they are not by followed users.") 214 + /** Hide replies in the feed if they are not by followed users. */ 215 215 hideRepliesByUnfollowed?: boolean = true; 216 216 217 - @doc("Hide replies in the feed if they do not have this number of likes.") 217 + /** Hide replies in the feed if they do not have this number of likes. */ 218 218 hideRepliesByLikeCount?: integer; 219 219 220 - @doc("Hide reposts in the feed.") 220 + /** Hide reposts in the feed. */ 221 221 hideReposts?: boolean; 222 222 223 - @doc("Hide quote posts in the feed.") 223 + /** Hide quote posts in the feed. */ 224 224 hideQuotePosts?: boolean; 225 225 } 226 226 227 227 model ThreadViewPref { 228 - @doc("Sorting mode for threads.") 228 + /** Sorting mode for threads. */ 229 229 sort?: "oldest" | "newest" | "most-likes" | "random" | "hotness" | string; 230 230 231 - @doc("Show followed users at the top of all replies.") 231 + /** Show followed users at the top of all replies. */ 232 232 prioritizeFollowedUsers?: boolean; 233 233 } 234 234 ··· 237 237 scalar InterestTag extends string; 238 238 239 239 model InterestsPref { 240 - @doc("A list of tags which describe the account owner's interests gathered during onboarding.") 240 + /** A list of tags which describe the account owner's interests gathered during onboarding. */ 241 241 @maxItems(100) 242 242 @required 243 243 tags: InterestTag[]; ··· 251 251 string, 252 252 } 253 253 254 - @doc("A word that the account owner has muted.") 254 + /** A word that the account owner has muted. */ 255 255 model MutedWord { 256 256 id?: string; 257 257 258 - @doc("The muted word itself.") 258 + /** The muted word itself. */ 259 259 @maxGraphemes(1000) 260 260 @maxLength(10000) 261 261 @required 262 262 value: string; 263 263 264 - @doc("The intended targets of the muted word.") 264 + /** The intended targets of the muted word. */ 265 265 @required 266 266 targets: MutedWordTarget[]; 267 267 268 - @doc("Groups of users to apply the muted word to. If undefined, applies to all users.") 268 + /** Groups of users to apply the muted word to. If undefined, applies to all users. */ 269 269 actorTarget?: "all" | "exclude-following" | string = "all"; 270 270 271 - @doc("The date and time at which the muted word will expire and no longer be applied.") 271 + /** The date and time at which the muted word will expire and no longer be applied. */ 272 272 expiresAt?: datetime; 273 273 } 274 274 275 275 model MutedWordsPref { 276 - @doc("A list of words the account owner has muted.") 276 + /** A list of words the account owner has muted. */ 277 277 @required 278 278 items: MutedWord[]; 279 279 } 280 280 281 281 model HiddenPostsPref { 282 - @doc("A list of URIs of posts the account owner has hidden.") 282 + /** A list of URIs of posts the account owner has hidden. */ 283 283 @required 284 284 items: atUri[]; 285 285 } ··· 295 295 @maxLength(100) 296 296 scalar NudgeToken extends string; 297 297 298 - @doc("A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.") 298 + /** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. */ 299 299 model BskyAppStatePref { 300 300 activeProgressGuide?: BskyAppProgressGuide; 301 301 302 - @doc("An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.") 302 + /** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. */ 303 303 @maxItems(1000) 304 304 queuedNudges?: NudgeToken[]; 305 305 306 - @doc("Storage for NUXs the user has encountered.") 306 + /** Storage for NUXs the user has encountered. */ 307 307 @maxItems(100) 308 308 nuxs?: Nux[]; 309 309 } 310 310 311 - @doc("If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.") 311 + /** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. */ 312 312 model BskyAppProgressGuide { 313 313 @maxLength(100) 314 314 @required 315 315 guide: string; 316 316 } 317 317 318 - @doc("A new user experiences (NUX) storage object") 318 + /** A new user experiences (NUX) storage object */ 319 319 model Nux { 320 320 @maxLength(100) 321 321 @required ··· 323 323 324 324 @required completed: boolean = false; 325 325 326 - @doc("Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.") 326 + /** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. */ 327 327 @maxGraphemes(300) 328 328 @maxLength(3000) 329 329 data?: string; 330 330 331 - @doc("The date and time at which the NUX will expire and should be considered completed.") 331 + /** The date and time at which the NUX will expire and should be considered completed. */ 332 332 expiresAt?: datetime; 333 333 } 334 334 335 - @doc("Preferences for how verified accounts appear in the app.") 335 + /** Preferences for how verified accounts appear in the app. */ 336 336 model VerificationPrefs { 337 - @doc("Hide the blue check badges for verified accounts and trusted verifiers.") 337 + /** Hide the blue check badges for verified accounts and trusted verifiers. */ 338 338 hideBadges?: boolean = false; 339 339 } 340 340 341 - @doc("Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.") 341 + /** Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly. */ 342 342 model PostInteractionSettingsPref { 343 - @doc("Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.") 343 + /** Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply. */ 344 344 @maxItems(5) 345 345 threadgateAllowRules?: ( 346 346 | app.bsky.feed.threadgate.MentionRule ··· 350 350 | unknown 351 351 )[]; 352 352 353 - @doc("Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.") 353 + /** Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed. */ 354 354 @maxItems(5) 355 355 postgateEmbeddingRules?: (app.bsky.feed.postgate.DisableRule | unknown)[]; 356 356 } 357 357 358 358 model StatusView { 359 - @doc("The status for the account.") 359 + /** The status for the account. */ 360 360 @required 361 361 status: "app.bsky.actor.status#live" | string; 362 362 363 363 @required record: unknown; 364 364 365 - @doc("An optional embed associated with the status.") 365 + /** An optional embed associated with the status. */ 366 366 embed?: app.bsky.embed.external.View; 367 367 368 - @doc("The date when this status will expire. The application might choose to no longer return the status after expiration.") 368 + /** The date when this status will expire. The application might choose to no longer return the status after expiration. */ 369 369 expiresAt?: datetime; 370 370 371 - @doc("True if the status is not expired, false if it is expired. Only present if expiration was set.") 371 + /** True if the status is not expired, false if it is expired. Only present if expiration was set. */ 372 372 isActive?: boolean; 373 373 } 374 374 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/actor/getPreferences.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.getPreferences { 4 - @doc("Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.") 4 + /** Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth. */ 5 5 @query 6 6 op main(): { 7 7 @required preferences: app.bsky.actor.defs.Preferences;
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/actor/getProfile.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.getProfile { 4 - @doc("Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.") 4 + /** Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth. */ 5 5 @query 6 6 op main( 7 - @doc("Handle or DID of account to fetch profile of.") 7 + /** Handle or DID of account to fetch profile of. */ 8 8 actor: atIdentifier 9 9 ): app.bsky.actor.defs.ProfileViewDetailed; 10 10 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/actor/getProfiles.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.getProfiles { 4 - @doc("Get detailed profile views of multiple actors.") 4 + /** Get detailed profile views of multiple actors. */ 5 5 @query 6 6 op main( 7 7 @maxItems(25)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/actor/getSuggestions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.getSuggestions { 4 - @doc("Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.") 4 + /** Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding. */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 15 15 @required 16 16 actors: app.bsky.actor.defs.ProfileView[]; 17 17 18 - @doc("Snowflake for this recommendation, use when submitting recommendation events.") 18 + /** Snowflake for this recommendation, use when submitting recommendation events. */ 19 19 recId?: int32; 20 20 }; 21 21 }
+6 -6
packages/emitter/test/integration/atproto/input/app/bsky/actor/profile.tsp
··· 2 2 3 3 namespace app.bsky.actor.profile { 4 4 @rec("literal:self") 5 - @doc("A declaration of a Bluesky account profile.") 5 + /** A declaration of a Bluesky account profile. */ 6 6 model Main { 7 7 @maxGraphemes(64) 8 8 @maxLength(640) 9 9 displayName?: string; 10 10 11 - @doc("Free-form profile description text.") 11 + /** Free-form profile description text. */ 12 12 @maxGraphemes(256) 13 13 @maxLength(2560) 14 14 description?: string; 15 15 16 - @doc("Free-form pronouns text.") 16 + /** Free-form pronouns text. */ 17 17 @maxGraphemes(20) 18 18 @maxLength(200) 19 19 pronouns?: string; 20 20 21 21 website?: uri; 22 22 23 - @doc("Small image to be displayed next to posts from account. AKA, 'profile picture'") 23 + /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ 24 24 avatar?: Blob<#["image/png", "image/jpeg"], 1000000>; 25 25 26 - @doc("Larger horizontal image to display behind profile view.") 26 + /** Larger horizontal image to display behind profile view. */ 27 27 banner?: Blob<#["image/png", "image/jpeg"], 1000000>; 28 28 29 - @doc("Self-label values, specific to the Bluesky application, on the overall account.") 29 + /** Self-label values, specific to the Bluesky application, on the overall account. */ 30 30 labels?: (com.atproto.label.defs.SelfLabels | unknown); 31 31 32 32 joinedViaStarterPack?: com.atproto.repo.strongRef.Main;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/actor/putPreferences.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.putPreferences { 4 - @doc("Set the private preferences attached to the account.") 4 + /** Set the private preferences attached to the account. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required preferences: app.bsky.actor.defs.Preferences;
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/actor/searchActors.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.searchActors { 4 - @doc("Find actors (profiles) matching search criteria. Does not require auth.") 4 + /** Find actors (profiles) matching search criteria. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("DEPRECATED: use 'q' instead.") 7 + /** DEPRECATED: use 'q' instead. */ 8 8 term?: string, 9 9 10 - @doc("Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.") 10 + /** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ 11 11 q?: string, 12 12 13 13 @minValue(1)
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/actor/searchActorsTypeahead.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.searchActorsTypeahead { 4 - @doc("Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.") 4 + /** Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("DEPRECATED: use 'q' instead.") 7 + /** DEPRECATED: use 'q' instead. */ 8 8 term?: string, 9 9 10 - @doc("Search query prefix; not a full query string.") 10 + /** Search query prefix; not a full query string. */ 11 11 q?: string, 12 12 13 13 @minValue(1)
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/actor/status.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.actor.status { 4 - @doc("A declaration of a Bluesky account status.") 4 + /** A declaration of a Bluesky account status. */ 5 5 @rec("literal:self") 6 6 model Main { 7 - @doc("The status for the account.") 7 + /** The status for the account. */ 8 8 @required 9 9 status: "app.bsky.actor.status#live" | string; 10 10 11 - @doc("An optional embed associated with the status.") 11 + /** An optional embed associated with the status. */ 12 12 embed?: (app.bsky.embed.external.Main | unknown); 13 13 14 - @doc("The duration of the status in minutes. Applications can choose to impose minimum and maximum limits.") 14 + /** The duration of the status in minutes. Applications can choose to impose minimum and maximum limits. */ 15 15 @minValue(1) 16 16 durationMinutes?: integer; 17 17 18 18 @required createdAt: datetime; 19 19 } 20 20 21 - @doc("Advertises an account as currently offering live content.") 21 + /** Advertises an account as currently offering live content. */ 22 22 @token 23 23 model Live {} 24 24 }
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/bookmark/createBookmark.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.bookmark.createBookmark { 4 - @doc("Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.") 4 + /** Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. */ 5 5 @errors(UnsupportedCollection) 6 6 @procedure 7 7 op main(input: { ··· 9 9 @required cid: cid; 10 10 }): void; 11 11 12 - @doc("The URI to be bookmarked is for an unsupported collection.") 12 + /** The URI to be bookmarked is for an unsupported collection. */ 13 13 model UnsupportedCollection {} 14 14 }
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/bookmark/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.bookmark.defs { 4 - @doc("Object used to store bookmark data in stash.") 4 + /** Object used to store bookmark data in stash. */ 5 5 model Bookmark { 6 - @doc("A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported.") 6 + /** A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported. */ 7 7 @required 8 8 subject: com.atproto.repo.strongRef.Main; 9 9 } 10 10 11 11 model BookmarkView { 12 - @doc("A strong ref to the bookmarked record.") 12 + /** A strong ref to the bookmarked record. */ 13 13 @required 14 14 subject: com.atproto.repo.strongRef.Main; 15 15
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/bookmark/deleteBookmark.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.bookmark.deleteBookmark { 4 - @doc("Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.") 4 + /** Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. */ 5 5 @errors(UnsupportedCollection) 6 6 @procedure 7 7 op main(input: { 8 8 @required uri: atUri; 9 9 }): void; 10 10 11 - @doc("The URI to be bookmarked is for an unsupported collection.") 11 + /** The URI to be bookmarked is for an unsupported collection. */ 12 12 model UnsupportedCollection {} 13 13 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/bookmark/getBookmarks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.bookmark.getBookmarks { 4 - @doc("Gets views of records bookmarked by the authenticated user. Requires authentication.") 4 + /** Gets views of records bookmarked by the authenticated user. Requires authentication. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/embed/defs.tsp
··· 2 2 3 3 namespace app.bsky.embed.defs { 4 4 // Description goes on the model for defs, unlike standalone lexicons where it goes at lexicon level 5 - @doc("width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.") 5 + /** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. */ 6 6 model AspectRatio { 7 7 @minValue(1) 8 8 @required
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/embed/external.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.embed.external { 4 - @doc("A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).") 4 + /** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). */ 5 5 model Main { 6 6 @required external: External; 7 7 }
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/embed/images.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A set of images embedded in a Bluesky record (eg, a post).") 3 + /** A set of images embedded in a Bluesky record (eg, a post). */ 4 4 namespace app.bsky.embed.images { 5 5 model Main { 6 6 @maxItems(4) ··· 11 11 model Image { 12 12 @required image: Blob<#["image/*"], 1000000>; 13 13 14 - @doc("Alt text description of the image, for accessibility.") 14 + /** Alt text description of the image, for accessibility. */ 15 15 @required 16 16 alt: string; 17 17 ··· 25 25 } 26 26 27 27 model ViewImage { 28 - @doc("Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.") 28 + /** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. */ 29 29 @required 30 30 thumb: uri; 31 31 32 - @doc("Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.") 32 + /** Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View. */ 33 33 @required 34 34 fullsize: uri; 35 35 36 - @doc("Alt text description of the image, for accessibility.") 36 + /** Alt text description of the image, for accessibility. */ 37 37 @required 38 38 alt: string; 39 39
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/embed/record.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.") 3 + /** A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record. */ 4 4 namespace app.bsky.embed.`record` { 5 5 model Main { 6 6 @required record: com.atproto.repo.strongRef.Main; ··· 26 26 @required cid: cid; 27 27 @required author: app.bsky.actor.defs.ProfileViewBasic; 28 28 29 - @doc("The record data itself.") 29 + /** The record data itself. */ 30 30 @required 31 31 value: unknown; 32 32
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/embed/recordWithMedia.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.") 3 + /** A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card. */ 4 4 namespace app.bsky.embed.recordWithMedia { 5 5 model Main { 6 6 @required record: app.bsky.embed.record.Main;
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/embed/video.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A video embedded in a Bluesky record (eg, a post).") 3 + /** A video embedded in a Bluesky record (eg, a post). */ 4 4 namespace app.bsky.embed.video { 5 5 model Main { 6 - @doc("The mp4 video file. May be up to 100mb, formerly limited to 50mb.") 6 + /** The mp4 video file. May be up to 100mb, formerly limited to 50mb. */ 7 7 @required 8 8 video: Blob<#["video/mp4"], 100000000>; 9 9 10 10 @maxItems(20) 11 11 captions?: Caption[]; 12 12 13 - @doc("Alt text description of the video, for accessibility.") 13 + /** Alt text description of the video, for accessibility. */ 14 14 @maxGraphemes(1000) 15 15 @maxLength(10000) 16 16 alt?: string;
+22 -22
packages/emitter/test/integration/atproto/input/app/bsky/feed/defs.tsp
··· 29 29 threadgate?: ThreadgateView; 30 30 } 31 31 32 - @doc("Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.") 32 + /** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. */ 33 33 model ViewerState { 34 34 repost?: atUri; 35 35 like?: atUri; ··· 40 40 pinned?: boolean; 41 41 } 42 42 43 - @doc("Metadata about this post within the context of the thread it is in.") 43 + /** Metadata about this post within the context of the thread it is in. */ 44 44 model ThreadContext { 45 45 rootAuthorLike?: atUri; 46 46 } ··· 51 51 reply?: ReplyRef; 52 52 reason?: (ReasonRepost | ReasonPin | unknown); 53 53 54 - @doc("Context provided by feed generator that may be passed back alongside interactions.") 54 + /** Context provided by feed generator that may be passed back alongside interactions. */ 55 55 @maxLength(2000) 56 56 feedContext?: string; 57 57 58 - @doc("Unique identifier per request that may be passed back alongside interactions.") 58 + /** Unique identifier per request that may be passed back alongside interactions. */ 59 59 @maxLength(100) 60 60 reqId?: string; 61 61 } ··· 64 64 @required root: (PostView | NotFoundPost | BlockedPost | unknown); 65 65 @required parent: (PostView | NotFoundPost | BlockedPost | unknown); 66 66 67 - @doc("When parent is a reply to another post, this is the author of that post.") 67 + /** When parent is a reply to another post, this is the author of that post. */ 68 68 grandparentAuthor?: app.bsky.actor.defs.ProfileViewBasic; 69 69 } 70 70 ··· 147 147 148 148 reason?: (SkeletonReasonRepost | SkeletonReasonPin | unknown); 149 149 150 - @doc("Context that will be passed through to client and may be passed to feed generator back alongside interactions.") 150 + /** Context that will be passed through to client and may be passed to feed generator back alongside interactions. */ 151 151 @maxLength(2000) 152 152 feedContext?: string; 153 153 } ··· 181 181 | "app.bsky.feed.defs#interactionShare" 182 182 | string; 183 183 184 - @doc("Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.") 184 + /** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */ 185 185 @maxLength(2000) 186 186 feedContext?: string; 187 187 188 - @doc("Unique identifier per request that may be passed back alongside interactions.") 188 + /** Unique identifier per request that may be passed back alongside interactions. */ 189 189 @maxLength(100) 190 190 reqId?: string; 191 191 } 192 192 193 - @doc("Request that less content like the given feed item be shown in the feed") 193 + /** Request that less content like the given feed item be shown in the feed */ 194 194 @token 195 195 model RequestLess {} 196 196 197 - @doc("Request that more content like the given feed item be shown in the feed") 197 + /** Request that more content like the given feed item be shown in the feed */ 198 198 @token 199 199 model RequestMore {} 200 200 201 - @doc("User clicked through to the feed item") 201 + /** User clicked through to the feed item */ 202 202 @token 203 203 model ClickthroughItem {} 204 204 205 - @doc("User clicked through to the author of the feed item") 205 + /** User clicked through to the author of the feed item */ 206 206 @token 207 207 model ClickthroughAuthor {} 208 208 209 - @doc("User clicked through to the reposter of the feed item") 209 + /** User clicked through to the reposter of the feed item */ 210 210 @token 211 211 model ClickthroughReposter {} 212 212 213 - @doc("User clicked through to the embedded content of the feed item") 213 + /** User clicked through to the embedded content of the feed item */ 214 214 @token 215 215 model ClickthroughEmbed {} 216 216 217 - @doc("Declares the feed generator returns any types of posts.") 217 + /** Declares the feed generator returns any types of posts. */ 218 218 @token 219 219 model ContentModeUnspecified {} 220 220 221 - @doc("Declares the feed generator returns posts containing app.bsky.embed.video embeds.") 221 + /** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ 222 222 @token 223 223 model ContentModeVideo {} 224 224 225 - @doc("Feed item was seen by user") 225 + /** Feed item was seen by user */ 226 226 @token 227 227 model InteractionSeen {} 228 228 229 - @doc("User liked the feed item") 229 + /** User liked the feed item */ 230 230 @token 231 231 model InteractionLike {} 232 232 233 - @doc("User reposted the feed item") 233 + /** User reposted the feed item */ 234 234 @token 235 235 model InteractionRepost {} 236 236 237 - @doc("User replied to the feed item") 237 + /** User replied to the feed item */ 238 238 @token 239 239 model InteractionReply {} 240 240 241 - @doc("User quoted the feed item") 241 + /** User quoted the feed item */ 242 242 @token 243 243 model InteractionQuote {} 244 244 245 - @doc("User shared the feed item") 245 + /** User shared the feed item */ 246 246 @token 247 247 model InteractionShare {} 248 248 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/describeFeedGenerator.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.describeFeedGenerator { 4 - @doc("Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View).") 4 + /** Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View). */ 5 5 @query 6 6 op main(): { 7 7 @required did: did;
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/feed/generator.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.generator { 4 - @doc("Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.") 4 + /** Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository. */ 5 5 @rec("any") 6 6 model Main { 7 7 @required did: did; ··· 19 19 20 20 avatar?: Blob<#["image/png", "image/jpeg"], 1000000>; 21 21 22 - @doc("Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions") 22 + /** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions */ 23 23 acceptsInteractions?: boolean; 24 24 25 - @doc("Self-label values") 25 + /** Self-label values */ 26 26 labels?: (com.atproto.label.defs.SelfLabels | unknown); 27 27 28 28 contentMode?: "app.bsky.feed.defs#contentModeUnspecified" | "app.bsky.feed.defs#contentModeVideo" | string;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/getActorFeeds.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getActorFeeds { 4 - @doc("Get a list of feeds (feed generator records) created by the actor (in the actor's repo).") 4 + /** Get a list of feeds (feed generator records) created by the actor (in the actor's repo). */ 5 5 @query 6 6 op main( 7 7 actor: atIdentifier,
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/getActorLikes.tsp
··· 4 4 model BlockedActor {} 5 5 model BlockedByActor {} 6 6 7 - @doc("Get a list of posts liked by an actor. Requires auth, actor must be the requesting account.") 7 + /** Get a list of posts liked by an actor. Requires auth, actor must be the requesting account. */ 8 8 @query 9 9 @errors(BlockedActor, BlockedByActor) 10 10 op main(
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/feed/getAuthorFeed.tsp
··· 4 4 model BlockedActor {} 5 5 model BlockedByActor {} 6 6 7 - @doc("Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth.") 7 + /** Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth. */ 8 8 @query 9 9 @errors(BlockedActor, BlockedByActor) 10 10 op main( ··· 16 16 17 17 cursor?: string, 18 18 19 - @doc("Combinations of post/repost types to include in response.") 19 + /** Combinations of post/repost types to include in response. */ 20 20 filter?: "posts_with_replies" | "posts_no_replies" | "posts_with_media" | "posts_and_author_threads" | "posts_with_video" | string = "posts_with_replies", 21 21 22 22 includePins?: boolean = false
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/getFeed.tsp
··· 3 3 namespace app.bsky.feed.getFeed { 4 4 model UnknownFeed {} 5 5 6 - @doc("Get a hydrated feed from an actor's selected feed generator. Implemented by App View.") 6 + /** Get a hydrated feed from an actor's selected feed generator. Implemented by App View. */ 7 7 @query 8 8 @errors(UnknownFeed) 9 9 op main(
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/feed/getFeedGenerator.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getFeedGenerator { 4 - @doc("Get information about a feed generator. Implemented by AppView.") 4 + /** Get information about a feed generator. Implemented by AppView. */ 5 5 @query 6 6 op main( 7 - @doc("AT-URI of the feed generator record.") 7 + /** AT-URI of the feed generator record. */ 8 8 feed: atUri 9 9 ): { 10 10 @required view: app.bsky.feed.defs.GeneratorView; 11 11 12 - @doc("Indicates whether the feed generator service has been online recently, or else seems to be inactive.") 12 + /** Indicates whether the feed generator service has been online recently, or else seems to be inactive. */ 13 13 @required 14 14 isOnline: boolean; 15 15 16 - @doc("Indicates whether the feed generator service is compatible with the record declaration.") 16 + /** Indicates whether the feed generator service is compatible with the record declaration. */ 17 17 @required 18 18 isValid: boolean; 19 19 };
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/getFeedGenerators.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getFeedGenerators { 4 - @doc("Get information about a list of feed generators.") 4 + /** Get information about a list of feed generators. */ 5 5 @query 6 6 op main( 7 7 feeds: atUri[]
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/feed/getFeedSkeleton.tsp
··· 3 3 namespace app.bsky.feed.getFeedSkeleton { 4 4 model UnknownFeed {} 5 5 6 - @doc("Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service.") 6 + /** Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service. */ 7 7 @query 8 8 @errors(UnknownFeed) 9 9 op main( 10 - @doc("Reference to feed generator record describing the specific feed being requested.") 10 + /** Reference to feed generator record describing the specific feed being requested. */ 11 11 feed: atUri, 12 12 13 13 @minValue(1) ··· 21 21 @required 22 22 feed: app.bsky.feed.defs.SkeletonFeedPost[]; 23 23 24 - @doc("Unique identifier per request that may be passed back alongside interactions.") 24 + /** Unique identifier per request that may be passed back alongside interactions. */ 25 25 @maxLength(100) 26 26 reqId?: string; 27 27 };
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/feed/getLikes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getLikes { 4 - @doc("Get like records which reference a subject (by AT-URI and CID).") 4 + /** Get like records which reference a subject (by AT-URI and CID). */ 5 5 @query 6 6 op main( 7 - @doc("AT-URI of the subject (eg, a post record).") 7 + /** AT-URI of the subject (eg, a post record). */ 8 8 uri: atUri, 9 9 10 - @doc("CID of the subject record (aka, specific version of record), to filter likes.") 10 + /** CID of the subject record (aka, specific version of record), to filter likes. */ 11 11 cid?: cid, 12 12 13 13 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/feed/getListFeed.tsp
··· 3 3 namespace app.bsky.feed.getListFeed { 4 4 model UnknownList {} 5 5 6 - @doc("Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth.") 6 + /** Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth. */ 7 7 @query 8 8 @errors(UnknownList) 9 9 op main( 10 - @doc("Reference (AT-URI) to the list record.") 10 + /** Reference (AT-URI) to the list record. */ 11 11 list: atUri, 12 12 13 13 @minValue(1)
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/feed/getPostThread.tsp
··· 3 3 namespace app.bsky.feed.getPostThread { 4 4 model NotFound {} 5 5 6 - @doc("Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests.") 6 + /** Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests. */ 7 7 @query 8 8 @errors(NotFound) 9 9 op main( 10 - @doc("Reference (AT-URI) to post record.") 10 + /** Reference (AT-URI) to post record. */ 11 11 uri: atUri, 12 12 13 - @doc("How many levels of reply depth should be included in response.") 13 + /** How many levels of reply depth should be included in response. */ 14 14 @minValue(0) 15 15 @maxValue(1000) 16 16 depth?: int32 = 6, 17 17 18 - @doc("How many levels of parent (and grandparent, etc) post to include.") 18 + /** How many levels of parent (and grandparent, etc) post to include. */ 19 19 @minValue(0) 20 20 @maxValue(1000) 21 21 parentHeight?: int32 = 80
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/feed/getPosts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getPosts { 4 - @doc("Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.") 4 + /** Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'. */ 5 5 @query 6 6 op main( 7 - @doc("List of post AT-URIs to return hydrated views for.") 7 + /** List of post AT-URIs to return hydrated views for. */ 8 8 @maxItems(25) 9 9 uris: atUri[] 10 10 ): {
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/feed/getQuotes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getQuotes { 4 - @doc("Get a list of quotes for a given post.") 4 + /** Get a list of quotes for a given post. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) of post record") 7 + /** Reference (AT-URI) of post record */ 8 8 uri: atUri, 9 9 10 - @doc("If supplied, filters to quotes of specific version (by CID) of the post record.") 10 + /** If supplied, filters to quotes of specific version (by CID) of the post record. */ 11 11 cid?: cid, 12 12 13 13 @minValue(1)
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/feed/getRepostedBy.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getRepostedBy { 4 - @doc("Get a list of reposts for a given post.") 4 + /** Get a list of reposts for a given post. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) of post record") 7 + /** Reference (AT-URI) of post record */ 8 8 uri: atUri, 9 9 10 - @doc("If supplied, filters to reposts of specific version (by CID) of the post record.") 10 + /** If supplied, filters to reposts of specific version (by CID) of the post record. */ 11 11 cid?: cid, 12 12 13 13 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/getSuggestedFeeds.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getSuggestedFeeds { 4 - @doc("Get a list of suggested feeds (feed generators) for the requesting account.") 4 + /** Get a list of suggested feeds (feed generators) for the requesting account. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/feed/getTimeline.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.getTimeline { 4 - @doc("Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed.") 4 + /** Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed. */ 5 5 @query 6 6 op main( 7 - @doc("Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism.") 7 + /** Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. */ 8 8 algorithm?: string, 9 9 10 10 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/like.tsp
··· 2 2 3 3 namespace app.bsky.feed.like { 4 4 @rec("tid") 5 - @doc("Record declaring a 'like' of a piece of subject content.") 5 + /** Record declaring a 'like' of a piece of subject content. */ 6 6 model Main { 7 7 @required 8 8 subject: com.atproto.repo.strongRef.Main;
+11 -11
packages/emitter/test/integration/atproto/input/app/bsky/feed/post.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.post { 4 - @doc("Record containing a Bluesky post.") 4 + /** Record containing a Bluesky post. */ 5 5 @rec("tid") 6 6 model Main { 7 - @doc("The primary post content. May be an empty string, if there are embeds.") 7 + /** The primary post content. May be an empty string, if there are embeds. */ 8 8 @maxGraphemes(300) 9 9 @maxLength(3000) 10 10 @required 11 11 text: string; 12 12 13 - @doc("DEPRECATED: replaced by app.bsky.richtext.facet.") 13 + /** DEPRECATED: replaced by app.bsky.richtext.facet. */ 14 14 entities?: Entity[]; 15 15 16 - @doc("Annotations of text (mentions, URLs, hashtags, etc)") 16 + /** Annotations of text (mentions, URLs, hashtags, etc) */ 17 17 facets?: app.bsky.richtext.facet.Main[]; 18 18 19 19 reply?: ReplyRef; ··· 27 27 | unknown 28 28 ); 29 29 30 - @doc("Indicates human language of post primary text content.") 30 + /** Indicates human language of post primary text content. */ 31 31 @maxItems(3) 32 32 langs?: language[]; 33 33 34 - @doc("Self-label values for this post. Effectively content warnings.") 34 + /** Self-label values for this post. Effectively content warnings. */ 35 35 labels?: (com.atproto.label.defs.SelfLabels | unknown); 36 36 37 - @doc("Additional hashtags, in addition to any included in post text and facets.") 37 + /** Additional hashtags, in addition to any included in post text and facets. */ 38 38 @maxItems(8) 39 39 tags?: PostTag[]; 40 40 41 - @doc("Client-declared timestamp when this post was originally created.") 41 + /** Client-declared timestamp when this post was originally created. */ 42 42 @required 43 43 createdAt: datetime; 44 44 } ··· 48 48 @required parent: com.atproto.repo.strongRef.Main; 49 49 } 50 50 51 - @doc("Deprecated: use facets instead.") 51 + /** Deprecated: use facets instead. */ 52 52 model Entity { 53 53 @required index: TextSlice; 54 54 55 - @doc("Expected values are 'mention' and 'link'.") 55 + /** Expected values are 'mention' and 'link'. */ 56 56 @required 57 57 type: string; 58 58 59 59 @required value: string; 60 60 } 61 61 62 - @doc("Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings.") 62 + /** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. */ 63 63 model TextSlice { 64 64 @minValue(0) 65 65 @required
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/feed/postgate.tsp
··· 2 2 3 3 namespace app.bsky.feed.postgate { 4 4 @rec("tid") 5 - @doc("Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository.") 5 + /** Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository. */ 6 6 model Main { 7 - @doc("Reference (AT-URI) to the post record.") 7 + /** Reference (AT-URI) to the post record. */ 8 8 @required 9 9 post: atUri; 10 10 11 11 @required createdAt: datetime; 12 12 13 - @doc("List of AT-URIs embedding this post that the author has detached from.") 13 + /** List of AT-URIs embedding this post that the author has detached from. */ 14 14 @maxItems(50) 15 15 detachedEmbeddingUris?: atUri[]; 16 16 17 - @doc("List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed.") 17 + /** List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed. */ 18 18 @maxItems(5) 19 19 embeddingRules?: (DisableRule | unknown)[]; 20 20 } 21 21 22 - @doc("Disables embedding of this post.") 22 + /** Disables embedding of this post. */ 23 23 model DisableRule {} 24 24 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/repost.tsp
··· 2 2 3 3 namespace app.bsky.feed.repost { 4 4 @rec("tid") 5 - @doc("Record representing a 'repost' of an existing Bluesky post.") 5 + /** Record representing a 'repost' of an existing Bluesky post. */ 6 6 model Main { 7 7 @required subject: com.atproto.repo.strongRef.Main; 8 8 @required createdAt: datetime;
+13 -13
packages/emitter/test/integration/atproto/input/app/bsky/feed/searchPosts.tsp
··· 7 7 namespace app.bsky.feed.searchPosts { 8 8 model BadQueryString {} 9 9 10 - @doc("Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations.") 10 + /** Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations. */ 11 11 @query 12 12 @errors(BadQueryString) 13 13 op main( 14 - @doc("Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.") 14 + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ 15 15 q: string, 16 16 17 - @doc("Specifies the ranking order of results.") 17 + /** Specifies the ranking order of results. */ 18 18 sort?: "top" | "latest" | string = "latest", 19 19 20 - @doc("Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).") 20 + /** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). */ 21 21 since?: string, 22 22 23 - @doc("Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).") 23 + /** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). */ 24 24 until?: string, 25 25 26 - @doc("Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.") 26 + /** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. */ 27 27 mentions?: atIdentifier, 28 28 29 - @doc("Filter to posts by the given account. Handles are resolved to DID before query-time.") 29 + /** Filter to posts by the given account. Handles are resolved to DID before query-time. */ 30 30 author?: atIdentifier, 31 31 32 - @doc("Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.") 32 + /** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. */ 33 33 lang?: language, 34 34 35 - @doc("Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.") 35 + /** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. */ 36 36 domain?: string, 37 37 38 - @doc("Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.") 38 + /** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. */ 39 39 url?: uri, 40 40 41 - @doc("Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.") 41 + /** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. */ 42 42 tag?: TagString[], 43 43 44 44 @minValue(1) 45 45 @maxValue(100) 46 46 limit?: int32 = 25, 47 47 48 - @doc("Optional pagination mechanism; may not necessarily allow scrolling through entire result set.") 48 + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ 49 49 cursor?: string 50 50 ): { 51 51 cursor?: string; 52 52 53 - @doc("Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.") 53 + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ 54 54 hitsTotal?: int32; 55 55 56 56 @required posts: app.bsky.feed.defs.PostView[];
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/feed/sendInteractions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.feed.sendInteractions { 4 - @doc("Send information about interactions with feed items back to the feed generator that served them.") 4 + /** Send information about interactions with feed items back to the feed generator that served them. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required interactions: app.bsky.feed.defs.Interaction[];
+8 -8
packages/emitter/test/integration/atproto/input/app/bsky/feed/threadgate.tsp
··· 2 2 3 3 namespace app.bsky.feed.threadgate { 4 4 @rec("tid") 5 - @doc("Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.") 5 + /** Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository. */ 6 6 model Main { 7 - @doc("Reference (AT-URI) to the post record.") 7 + /** Reference (AT-URI) to the post record. */ 8 8 @required 9 9 post: atUri; 10 10 11 - @doc("List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply.") 11 + /** List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply. */ 12 12 @maxItems(5) 13 13 allow?: (MentionRule | FollowerRule | FollowingRule | ListRule | unknown)[]; 14 14 15 15 @required createdAt: datetime; 16 16 17 - @doc("List of hidden reply URIs.") 17 + /** List of hidden reply URIs. */ 18 18 @maxItems(50) 19 19 hiddenReplies?: atUri[]; 20 20 } 21 21 22 - @doc("Allow replies from actors mentioned in your post.") 22 + /** Allow replies from actors mentioned in your post. */ 23 23 model MentionRule {} 24 24 25 - @doc("Allow replies from actors who follow you.") 25 + /** Allow replies from actors who follow you. */ 26 26 model FollowerRule {} 27 27 28 - @doc("Allow replies from actors you follow.") 28 + /** Allow replies from actors you follow. */ 29 29 model FollowingRule {} 30 30 31 - @doc("Allow replies from actors on a list.") 31 + /** Allow replies from actors on a list. */ 32 32 model ListRule { 33 33 @required list: atUri; 34 34 }
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/graph/block.tsp
··· 2 2 3 3 namespace app.bsky.graph.block { 4 4 @rec("tid") 5 - @doc("Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details.") 5 + /** Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details. */ 6 6 model Main { 7 - @doc("DID of the account to be blocked.") 7 + /** DID of the account to be blocked. */ 8 8 @required 9 9 subject: did; 10 10
+7 -7
packages/emitter/test/integration/atproto/input/app/bsky/graph/defs.tsp
··· 103 103 Referencelist: "app.bsky.graph.defs#referencelist", 104 104 } 105 105 106 - @doc("A list of actors to apply an aggregate moderation action (mute/block) on.") 106 + /** A list of actors to apply an aggregate moderation action (mute/block) on. */ 107 107 @token 108 108 model Modlist {} 109 109 110 - @doc("A list of actors used for curation purposes such as list feeds or interaction gating.") 110 + /** A list of actors used for curation purposes such as list feeds or interaction gating. */ 111 111 @token 112 112 model Curatelist {} 113 113 114 - @doc("A list of actors used for only for reference purposes such as within a starter pack.") 114 + /** A list of actors used for only for reference purposes such as within a starter pack. */ 115 115 @token 116 116 model Referencelist {} 117 117 ··· 120 120 blocked?: atUri; 121 121 } 122 122 123 - @doc("indicates that a handle or DID could not be resolved") 123 + /** indicates that a handle or DID could not be resolved */ 124 124 model NotFoundActor { 125 125 @required actor: atIdentifier; 126 126 ··· 129 129 notFound: boolean = true; 130 130 } 131 131 132 - @doc("lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)") 132 + /** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) */ 133 133 model Relationship { 134 134 @required did: did; 135 135 136 - @doc("if the actor follows this DID, this is the AT-URI of the follow record") 136 + /** if the actor follows this DID, this is the AT-URI of the follow record */ 137 137 following?: atUri; 138 138 139 - @doc("if the actor is followed by this DID, contains the AT-URI of the follow record") 139 + /** if the actor is followed by this DID, contains the AT-URI of the follow record */ 140 140 followedBy?: atUri; 141 141 } 142 142 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/follow.tsp
··· 2 2 3 3 namespace app.bsky.graph.follow { 4 4 @rec("tid") 5 - @doc("Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView.") 5 + /** Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView. */ 6 6 model Main { 7 7 @required subject: did; 8 8 @required createdAt: datetime;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getActorStarterPacks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getActorStarterPacks { 4 - @doc("Get a list of starter packs created by the actor.") 4 + /** Get a list of starter packs created by the actor. */ 5 5 @query 6 6 op main( 7 7 @required actor: atIdentifier,
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getBlocks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getBlocks { 4 - @doc("Enumerates which accounts the requesting account is currently blocking. Requires auth.") 4 + /** Enumerates which accounts the requesting account is currently blocking. Requires auth. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getFollowers.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getFollowers { 4 - @doc("Enumerates accounts which follow a specified account (actor).") 4 + /** Enumerates accounts which follow a specified account (actor). */ 5 5 @query 6 6 op main( 7 7 actor: atIdentifier,
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getFollows.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getFollows { 4 - @doc("Enumerates accounts which a specified account (actor) follows.") 4 + /** Enumerates accounts which a specified account (actor) follows. */ 5 5 @query 6 6 op main( 7 7 actor: atIdentifier,
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getKnownFollowers.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getKnownFollowers { 4 - @doc("Enumerates accounts which follow a specified account (actor) and are followed by the viewer.") 4 + /** Enumerates accounts which follow a specified account (actor) and are followed by the viewer. */ 5 5 @query 6 6 op main( 7 7 actor: atIdentifier,
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/graph/getList.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getList { 4 - @doc("Gets a 'view' (with additional context) of a specified list.") 4 + /** Gets a 'view' (with additional context) of a specified list. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) of the list record to hydrate.") 7 + /** Reference (AT-URI) of the list record to hydrate. */ 8 8 list: atUri, 9 9 10 10 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getListBlocks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getListBlocks { 4 - @doc("Get mod lists that the requesting account (actor) is blocking. Requires auth.") 4 + /** Get mod lists that the requesting account (actor) is blocking. Requires auth. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getListMutes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getListMutes { 4 - @doc("Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth.") 4 + /** Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/getLists.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getLists { 4 - @doc("Enumerates the lists created by a specified account (actor).") 4 + /** Enumerates the lists created by a specified account (actor). */ 5 5 @query 6 6 op main( 7 - @doc("The account (actor) to enumerate lists from.") 7 + /** The account (actor) to enumerate lists from. */ 8 8 actor: atIdentifier, 9 9 10 10 @minValue(1) ··· 13 13 14 14 cursor?: string, 15 15 16 - @doc("Optional filter by list purpose. If not specified, all supported types are returned.") 16 + /** Optional filter by list purpose. If not specified, all supported types are returned. */ 17 17 purposes?: ("modlist" | "curatelist" | string)[] 18 18 ): { 19 19 cursor?: string;
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/graph/getListsWithMembership.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getListsWithMembership { 4 - @doc("Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth.") 4 + /** Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth. */ 5 5 @query 6 6 op main( 7 - @doc("The account (actor) to check for membership.") 7 + /** The account (actor) to check for membership. */ 8 8 @required 9 9 actor: atIdentifier, 10 10 ··· 14 14 15 15 cursor?: string, 16 16 17 - @doc("Optional filter by list purpose. If not specified, all supported types are returned.") 17 + /** Optional filter by list purpose. If not specified, all supported types are returned. */ 18 18 purposes?: ("modlist" | "curatelist" | string)[] 19 19 ): { 20 20 cursor?: string; 21 21 @required listsWithMembership: ListWithMembership[]; 22 22 }; 23 23 24 - @doc("A list and an optional list item indicating membership of a target user to that list.") 24 + /** A list and an optional list item indicating membership of a target user to that list. */ 25 25 model ListWithMembership { 26 26 @required list: app.bsky.graph.defs.ListView; 27 27 listItem?: app.bsky.graph.defs.ListItemView;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getMutes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getMutes { 4 - @doc("Enumerates accounts that the requesting account (actor) currently has muted. Requires auth.") 4 + /** Enumerates accounts that the requesting account (actor) currently has muted. Requires auth. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/graph/getRelationships.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getRelationships { 4 - @doc("Enumerates public relationships between one account, and a list of other accounts. Does not require auth.") 4 + /** Enumerates public relationships between one account, and a list of other accounts. Does not require auth. */ 5 5 @query 6 6 @errors(ActorNotFound) 7 7 op main( 8 - @doc("Primary account requesting relationships for.") 8 + /** Primary account requesting relationships for. */ 9 9 @required 10 10 actor: atIdentifier, 11 11 12 - @doc("List of 'other' accounts to be related back to the primary.") 12 + /** List of 'other' accounts to be related back to the primary. */ 13 13 @maxItems(30) 14 14 others?: atIdentifier[] 15 15 ): { ··· 23 23 )[]; 24 24 }; 25 25 26 - @doc("the primary actor at-identifier could not be resolved") 26 + /** the primary actor at-identifier could not be resolved */ 27 27 model ActorNotFound {} 28 28 }
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/graph/getStarterPack.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getStarterPack { 4 - @doc("Gets a view of a starter pack.") 4 + /** Gets a view of a starter pack. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) of the starter pack record.") 7 + /** Reference (AT-URI) of the starter pack record. */ 8 8 @required 9 9 starterPack: atUri 10 10 ): {
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/getStarterPacks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getStarterPacks { 4 - @doc("Get views for a list of starter packs.") 4 + /** Get views for a list of starter packs. */ 5 5 @query 6 6 op main( 7 7 @maxItems(25)
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/getStarterPacksWithMembership.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getStarterPacksWithMembership { 4 - @doc("Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth.") 4 + /** Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth. */ 5 5 @query 6 6 op main( 7 - @doc("The account (actor) to check for membership.") 7 + /** The account (actor) to check for membership. */ 8 8 @required 9 9 actor: atIdentifier, 10 10 ··· 18 18 @required starterPacksWithMembership: StarterPackWithMembership[]; 19 19 }; 20 20 21 - @doc("A starter pack and an optional list item indicating membership of a target user to that starter pack.") 21 + /** A starter pack and an optional list item indicating membership of a target user to that starter pack. */ 22 22 model StarterPackWithMembership { 23 23 @required starterPack: app.bsky.graph.defs.StarterPackView; 24 24 listItem?: app.bsky.graph.defs.ListItemView;
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/getSuggestedFollowsByActor.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.getSuggestedFollowsByActor { 4 - @doc("Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account.") 4 + /** Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account. */ 5 5 @query 6 6 op main( 7 7 actor: atIdentifier ··· 9 9 @required 10 10 suggestions: app.bsky.actor.defs.ProfileView[]; 11 11 12 - @doc("If true, response has fallen-back to generic results, and is not scoped using relativeToDid") 12 + /** If true, response has fallen-back to generic results, and is not scoped using relativeToDid */ 13 13 isFallback?: boolean = false; 14 14 15 - @doc("Snowflake for this recommendation, use when submitting recommendation events.") 15 + /** Snowflake for this recommendation, use when submitting recommendation events. */ 16 16 recId?: int32; 17 17 }; 18 18 }
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/list.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.list { 4 - @doc("Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists.") 4 + /** Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists. */ 5 5 @rec("tid") 6 6 model Main { 7 - @doc("Display name for list; can not be empty.") 7 + /** Display name for list; can not be empty. */ 8 8 @minLength(1) 9 9 @maxLength(64) 10 10 @required 11 11 name: string; 12 12 13 - @doc("Defines the purpose of the list (aka, moderation-oriented or curration-oriented)") 13 + /** Defines the purpose of the list (aka, moderation-oriented or curration-oriented) */ 14 14 @required 15 15 purpose: app.bsky.graph.defs.ListPurpose; 16 16
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/graph/listblock.tsp
··· 2 2 3 3 namespace app.bsky.graph.listblock { 4 4 @rec("tid") 5 - @doc("Record representing a block relationship against an entire an entire list of accounts (actors).") 5 + /** Record representing a block relationship against an entire an entire list of accounts (actors). */ 6 6 model Main { 7 - @doc("Reference (AT-URI) to the mod list record.") 7 + /** Reference (AT-URI) to the mod list record. */ 8 8 @required 9 9 subject: atUri; 10 10
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/listitem.tsp
··· 2 2 3 3 namespace app.bsky.graph.listitem { 4 4 @rec("tid") 5 - @doc("Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records.") 5 + /** Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records. */ 6 6 model Main { 7 - @doc("The account which is included on the list.") 7 + /** The account which is included on the list. */ 8 8 @required 9 9 subject: did; 10 10 11 - @doc("Reference (AT-URI) to the list record (app.bsky.graph.list).") 11 + /** Reference (AT-URI) to the list record (app.bsky.graph.list). */ 12 12 @required 13 13 list: atUri; 14 14
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/muteActor.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.muteActor { 4 - @doc("Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth.") 4 + /** Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required actor: atIdentifier;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/muteActorList.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.muteActorList { 4 - @doc("Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth.") 4 + /** Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required list: atUri;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/muteThread.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.muteThread { 4 - @doc("Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.") 4 + /** Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required root: atUri;
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/graph/searchStarterPacks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.searchStarterPacks { 4 - @doc("Find starter packs matching search criteria. Does not require auth.") 4 + /** Find starter packs matching search criteria. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.") 7 + /** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ 8 8 @required 9 9 q: string, 10 10
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/graph/starterpack.tsp
··· 2 2 3 3 namespace app.bsky.graph.starterpack { 4 4 @rec("tid") 5 - @doc("Record defining a starter pack of actors and feeds for new users.") 5 + /** Record defining a starter pack of actors and feeds for new users. */ 6 6 model Main { 7 - @doc("Display name for starter pack; can not be empty.") 7 + /** Display name for starter pack; can not be empty. */ 8 8 @minLength(1) 9 9 @maxLength(500) 10 10 @maxGraphemes(50) ··· 17 17 18 18 descriptionFacets?: app.bsky.richtext.facet.Main[]; 19 19 20 - @doc("Reference (AT-URI) to the list record.") 20 + /** Reference (AT-URI) to the list record. */ 21 21 @required 22 22 list: atUri; 23 23
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/unmuteActor.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.unmuteActor { 4 - @doc("Unmutes the specified account. Requires auth.") 4 + /** Unmutes the specified account. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required actor: atIdentifier;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/unmuteActorList.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.unmuteActorList { 4 - @doc("Unmutes the specified list of accounts. Requires auth.") 4 + /** Unmutes the specified list of accounts. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required list: atUri;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/graph/unmuteThread.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.graph.unmuteThread { 4 - @doc("Unmutes the specified thread. Requires auth.") 4 + /** Unmutes the specified thread. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required root: atUri;
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/graph/verification.tsp
··· 2 2 3 3 namespace app.bsky.graph.verification { 4 4 @rec("tid") 5 - @doc("Record declaring a verification relationship between two accounts. Verifications are only considered valid by an app if issued by an account the app considers trusted.") 5 + /** Record declaring a verification relationship between two accounts. Verifications are only considered valid by an app if issued by an account the app considers trusted. */ 6 6 model Main { 7 - @doc("DID of the subject the verification applies to.") 7 + /** DID of the subject the verification applies to. */ 8 8 @required 9 9 subject: did; 10 10 11 - @doc("Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying.") 11 + /** Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying. */ 12 12 @required 13 13 handle: handle; 14 14 15 - @doc("Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying.") 15 + /** Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying. */ 16 16 @required 17 17 displayName: string; 18 18 19 - @doc("Date of when the verification was created.") 19 + /** Date of when the verification was created. */ 20 20 @required 21 21 createdAt: datetime; 22 22 }
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/labeler/defs.tsp
··· 31 31 32 32 labels?: com.atproto.label.defs.Label[]; 33 33 34 - @doc("The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.") 34 + /** The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed. */ 35 35 reasonTypes?: com.atproto.moderation.defs.ReasonType[]; 36 36 37 - @doc("The set of subject types (account, record, etc) this service accepts reports on.") 37 + /** The set of subject types (account, record, etc) this service accepts reports on. */ 38 38 subjectTypes?: com.atproto.moderation.defs.SubjectType[]; 39 39 40 - @doc("Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.") 40 + /** Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type. */ 41 41 subjectCollections?: nsid[]; 42 42 } 43 43 ··· 46 46 } 47 47 48 48 model LabelerPolicies { 49 - @doc("The label values which this labeler publishes. May include global or custom labels.") 49 + /** The label values which this labeler publishes. May include global or custom labels. */ 50 50 @required 51 51 labelValues: com.atproto.label.defs.LabelValue[]; 52 52 53 - @doc("Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.") 53 + /** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. */ 54 54 labelValueDefinitions?: com.atproto.label.defs.LabelValueDefinition[]; 55 55 } 56 56 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/labeler/getServices.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.labeler.getServices { 4 - @doc("Get information about a list of labeler services.") 4 + /** Get information about a list of labeler services. */ 5 5 @query 6 6 op main( 7 7 @required dids: did[],
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/labeler/service.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.labeler.service { 4 - @doc("A declaration of the existence of labeler service.") 4 + /** A declaration of the existence of labeler service. */ 5 5 @rec("literal:self") 6 6 model Main { 7 7 @required policies: app.bsky.labeler.defs.LabelerPolicies; ··· 10 10 11 11 @required createdAt: datetime; 12 12 13 - @doc("The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.") 13 + /** The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed. */ 14 14 reasonTypes?: com.atproto.moderation.defs.ReasonType[]; 15 15 16 - @doc("The set of subject types (account, record, etc) this service accepts reports on.") 16 + /** The set of subject types (account, record, etc) this service accepts reports on. */ 17 17 subjectTypes?: com.atproto.moderation.defs.SubjectType[]; 18 18 19 - @doc("Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.") 19 + /** Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type. */ 20 20 subjectCollections?: nsid[]; 21 21 } 22 22 }
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/notification/declaration.tsp
··· 2 2 3 3 namespace app.bsky.notification.declaration { 4 4 @rec("literal:self") 5 - @doc("A declaration of the user's choices related to notifications that can be produced by them.") 5 + /** A declaration of the user's choices related to notifications that can be produced by them. */ 6 6 model Main { 7 - @doc("A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'.") 7 + /** A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'. */ 8 8 @required 9 9 allowSubscriptions: "followers" | "mutuals" | "none" | string; 10 10 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/defs.tsp
··· 40 40 @required reply: boolean; 41 41 } 42 42 43 - @doc("Object used to store activity subscription data in stash.") 43 + /** Object used to store activity subscription data in stash. */ 44 44 model SubjectActivitySubscription { 45 45 @required subject: did; 46 46 @required activitySubscription: ActivitySubscription;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/getPreferences.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.getPreferences { 4 - @doc("Get notification-related preferences for an account. Requires auth.") 4 + /** Get notification-related preferences for an account. Requires auth. */ 5 5 @query 6 6 op main(): { 7 7 @required preferences: app.bsky.notification.defs.Preferences;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/getUnreadCount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.getUnreadCount { 4 - @doc("Count the number of unread notifications for the requesting account. Requires auth.") 4 + /** Count the number of unread notifications for the requesting account. Requires auth. */ 5 5 @query 6 6 op main( 7 7 priority?: boolean,
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/listActivitySubscriptions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.listActivitySubscriptions { 4 - @doc("Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.") 4 + /** Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/notification/listNotifications.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A reason that matches the reason property of #notification.") 3 + /** A reason that matches the reason property of #notification. */ 4 4 scalar ReasonString extends string; 5 5 6 6 namespace app.bsky.notification.listNotifications { 7 - @doc("Enumerate notifications for the requesting account. Requires auth.") 7 + /** Enumerate notifications for the requesting account. Requires auth. */ 8 8 @query 9 9 op main( 10 - @doc("Notification reasons to include in response.") 10 + /** Notification reasons to include in response. */ 11 11 reasons?: ReasonString[], 12 12 13 13 @minValue(1) ··· 29 29 @required cid: cid; 30 30 @required author: app.bsky.actor.defs.ProfileView; 31 31 32 - @doc("The reason why this notification was delivered - e.g. your post was liked, or you received a new follower.") 32 + /** The reason why this notification was delivered - e.g. your post was liked, or you received a new follower. */ 33 33 @required 34 34 reason: "like" | "repost" | "follow" | "mention" | "reply" | "quote" | "starterpack-joined" | "verified" | "unverified" | "like-via-repost" | "repost-via-repost" | "subscribed-post" | string; 35 35
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/putActivitySubscription.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.putActivitySubscription { 4 - @doc("Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.") 4 + /** Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required subject: did;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/putPreferences.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.putPreferences { 4 - @doc("Set notification-related preferences for an account. Requires auth.") 4 + /** Set notification-related preferences for an account. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required priority: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/putPreferencesV2.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.putPreferencesV2 { 4 - @doc("Set notification-related preferences for an account. Requires auth.") 4 + /** Set notification-related preferences for an account. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 chat?: app.bsky.notification.defs.ChatPreference;
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/notification/registerPush.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.registerPush { 4 - @doc("Register to receive push notifications, via a specified service, for the requesting account. Requires auth.") 4 + /** Register to receive push notifications, via a specified service, for the requesting account. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required serviceDid: did; ··· 9 9 @required platform: "ios" | "android" | "web" | string; 10 10 @required appId: string; 11 11 12 - @doc("Set to true when the actor is age restricted") 12 + /** Set to true when the actor is age restricted */ 13 13 ageRestricted?: boolean; 14 14 }): void; 15 15 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/unregisterPush.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.unregisterPush { 4 - @doc("The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.") 4 + /** The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required serviceDid: did;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/notification/updateSeen.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.notification.updateSeen { 4 - @doc("Notify server that the requesting account has seen notifications. Requires auth.") 4 + /** Notify server that the requesting account has seen notifications. Requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required seenAt: datetime;
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/richtext/facet.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.richtext.facet { 4 - @doc("Annotation of a sub-string within rich text.") 4 + /** Annotation of a sub-string within rich text. */ 5 5 model Main { 6 6 @required index: ByteSlice; 7 7 8 8 @required features: (Mention | Link | Tag | unknown)[]; 9 9 } 10 10 11 - @doc("Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.") 11 + /** Facet feature for mention of another account. The text is usually a handle, including a `@` prefix, but the facet reference is a DID. */ 12 12 model Mention { 13 13 @required did: did; 14 14 } 15 15 16 - @doc("Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.") 16 + /** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. */ 17 17 model Link { 18 18 @required uri: uri; 19 19 } 20 20 21 - @doc("Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').") 21 + /** Facet feature for a hashtag. The text usually includes a `#` prefix, but the facet reference should not (except in the case of 'double hash tags'). */ 22 22 model Tag { 23 23 @maxLength(640) 24 24 @maxGraphemes(64) ··· 26 26 tag: string; 27 27 } 28 28 29 - @doc("Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.") 29 + /** Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets. */ 30 30 model ByteSlice { 31 31 @minValue(0) 32 32 @required
+17 -17
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/defs.tsp
··· 45 45 model ThreadItemPost { 46 46 @required post: app.bsky.feed.defs.PostView; 47 47 48 - @doc("This post has more parents that were not present in the response. This is just a boolean, without the number of parents.") 48 + /** This post has more parents that were not present in the response. This is just a boolean, without the number of parents. */ 49 49 @required 50 50 moreParents: boolean; 51 51 52 - @doc("This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate.") 52 + /** This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate. */ 53 53 @required 54 54 moreReplies: integer; 55 55 56 - @doc("This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread.") 56 + /** This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread. */ 57 57 @required 58 58 opThread: boolean; 59 59 60 - @doc("The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread.") 60 + /** The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread. */ 61 61 @required 62 62 hiddenByThreadgate: boolean; 63 63 64 - @doc("This is by an account muted by the viewer requesting it.") 64 + /** This is by an account muted by the viewer requesting it. */ 65 65 @required 66 66 mutedByViewer: boolean; 67 67 } ··· 74 74 @required author: app.bsky.feed.defs.BlockedAuthor; 75 75 } 76 76 77 - @doc("The computed state of the age assurance process, returned to the user in question on certain authenticated requests.") 77 + /** The computed state of the age assurance process, returned to the user in question on certain authenticated requests. */ 78 78 model AgeAssuranceState { 79 - @doc("The timestamp when this state was last updated.") 79 + /** The timestamp when this state was last updated. */ 80 80 lastInitiatedAt?: datetime; 81 81 82 - @doc("The status of the age assurance process.") 82 + /** The status of the age assurance process. */ 83 83 @required 84 84 status: "unknown" | "pending" | "assured" | "blocked" | string; 85 85 } 86 86 87 - @doc("Object used to store age assurance data in stash.") 87 + /** Object used to store age assurance data in stash. */ 88 88 model AgeAssuranceEvent { 89 - @doc("The date and time of this write operation.") 89 + /** The date and time of this write operation. */ 90 90 @required 91 91 createdAt: datetime; 92 92 93 - @doc("The status of the age assurance process.") 93 + /** The status of the age assurance process. */ 94 94 @required 95 95 status: "unknown" | "pending" | "assured" | string; 96 96 97 - @doc("The unique identifier for this instance of the age assurance flow, in UUID format.") 97 + /** The unique identifier for this instance of the age assurance flow, in UUID format. */ 98 98 @required 99 99 attemptId: string; 100 100 101 - @doc("The email used for AA.") 101 + /** The email used for AA. */ 102 102 email?: string; 103 103 104 - @doc("The IP address used when initiating the AA flow.") 104 + /** The IP address used when initiating the AA flow. */ 105 105 initIp?: string; 106 106 107 - @doc("The user agent used when initiating the AA flow.") 107 + /** The user agent used when initiating the AA flow. */ 108 108 initUa?: string; 109 109 110 - @doc("The IP address used when completing the AA flow.") 110 + /** The IP address used when completing the AA flow. */ 111 111 completeIp?: string; 112 112 113 - @doc("The user agent used when completing the AA flow.") 113 + /** The user agent used when completing the AA flow. */ 114 114 completeUa?: string; 115 115 } 116 116 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getAgeAssuranceState.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getAgeAssuranceState { 4 - @doc("Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required.") 4 + /** Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required. */ 5 5 @query 6 6 op main(): app.bsky.unspecced.defs.AgeAssuranceState; 7 7 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getConfig.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getConfig { 4 - @doc("Get miscellaneous runtime configuration.") 4 + /** Get miscellaneous runtime configuration. */ 5 5 @query 6 6 op main(): { 7 7 checkEmailConfirmed?: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacks { 4 - @doc("Get a list of suggested starterpacks for onboarding") 4 + /** Get a list of suggested starterpacks for onboarding */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton { 4 - @doc("Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks") 4 + /** Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 8 8 viewer?: did, 9 9 10 10 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getPopularFeedGenerators.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getPopularFeedGenerators { 4 - @doc("An unspecced view of globally popular feed generators.") 4 + /** An unspecced view of globally popular feed generators. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getPostThreadOtherV2.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getPostThreadOtherV2 { 4 - @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.") 4 + /** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) to post record. This is the anchor post.") 7 + /** Reference (AT-URI) to post record. This is the anchor post. */ 8 8 @required 9 9 anchor: atUri, 10 10 11 - @doc("Whether to prioritize posts from followed users. It only has effect when the user is authenticated.") 11 + /** Whether to prioritize posts from followed users. It only has effect when the user is authenticated. */ 12 12 prioritizeFollowedUsers?: boolean = false 13 13 ): { 14 - @doc("A flat list of other thread items. The depth of each item is indicated by the depth property inside the item.") 14 + /** A flat list of other thread items. The depth of each item is indicated by the depth property inside the item. */ 15 15 @required 16 16 thread: ThreadItem[]; 17 17 }; ··· 19 19 model ThreadItem { 20 20 @required uri: atUri; 21 21 22 - @doc("The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths.") 22 + /** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. */ 23 23 @required 24 24 depth: integer; 25 25
+10 -10
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getPostThreadV2.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getPostThreadV2 { 4 - @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests.") 4 + /** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests. */ 5 5 @query 6 6 op main( 7 - @doc("Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post.") 7 + /** Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post. */ 8 8 @required 9 9 anchor: atUri, 10 10 11 - @doc("Whether to include parents above the anchor.") 11 + /** Whether to include parents above the anchor. */ 12 12 above?: boolean = true, 13 13 14 - @doc("How many levels of replies to include below the anchor.") 14 + /** How many levels of replies to include below the anchor. */ 15 15 @minValue(0) 16 16 @maxValue(20) 17 17 below?: int32 = 6, 18 18 19 - @doc("Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated).") 19 + /** Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated). */ 20 20 @minValue(0) 21 21 @maxValue(100) 22 22 branchingFactor?: int32 = 10, 23 23 24 - @doc("Whether to prioritize posts from followed users. It only has effect when the user is authenticated.") 24 + /** Whether to prioritize posts from followed users. It only has effect when the user is authenticated. */ 25 25 prioritizeFollowedUsers?: boolean = false, 26 26 27 - @doc("Sorting for the thread replies.") 27 + /** Sorting for the thread replies. */ 28 28 sort?: "newest" | "oldest" | "top" | string = "oldest" 29 29 ): { 30 - @doc("A flat list of thread items. The depth of each item is indicated by the depth property inside the item.") 30 + /** A flat list of thread items. The depth of each item is indicated by the depth property inside the item. */ 31 31 @required 32 32 thread: ThreadItem[]; 33 33 34 34 threadgate?: app.bsky.feed.defs.ThreadgateView; 35 35 36 - @doc("Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them.") 36 + /** Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. */ 37 37 @required 38 38 hasOtherReplies: boolean; 39 39 }; ··· 41 41 model ThreadItem { 42 42 @required uri: atUri; 43 43 44 - @doc("The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths.") 44 + /** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. */ 45 45 @required 46 46 depth: integer; 47 47
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedFeeds.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedFeeds { 4 - @doc("Get a list of suggested feeds") 4 + /** Get a list of suggested feeds */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedFeedsSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedFeedsSkeleton { 4 - @doc("Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds") 4 + /** Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 8 8 viewer?: did, 9 9 10 10 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedStarterPacks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedStarterPacks { 4 - @doc("Get a list of suggested starterpacks") 4 + /** Get a list of suggested starterpacks */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedStarterPacksSkeleton { 4 - @doc("Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks") 4 + /** Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 8 8 viewer?: did, 9 9 10 10 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedUsers.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedUsers { 4 - @doc("Get a list of suggested users") 4 + /** Get a list of suggested users */ 5 5 @query 6 6 op main( 7 - @doc("Category of users to get suggestions for.") 7 + /** Category of users to get suggestions for. */ 8 8 category?: string, 9 9 10 10 @minValue(1)
+3 -3
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestedUsersSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestedUsersSkeleton { 4 - @doc("Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers") 4 + /** Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 8 8 viewer?: did, 9 9 10 - @doc("Category of users to get suggestions for.") 10 + /** Category of users to get suggestions for. */ 11 11 category?: string, 12 12 13 13 @minValue(1)
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getSuggestionsSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getSuggestionsSkeleton { 4 - @doc("Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions") 4 + /** Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. */ 8 8 viewer?: did, 9 9 10 10 @minValue(1) ··· 13 13 14 14 cursor?: string, 15 15 16 - @doc("DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer.") 16 + /** DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer. */ 17 17 relativeToDid?: did 18 18 ): { 19 19 cursor?: string; 20 20 @required actors: app.bsky.unspecced.defs.SkeletonSearchActor[]; 21 21 22 - @doc("DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer.") 22 + /** DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer. */ 23 23 relativeToDid?: did; 24 24 25 - @doc("Snowflake for this recommendation, use when submitting recommendation events.") 25 + /** Snowflake for this recommendation, use when submitting recommendation events. */ 26 26 recId?: integer; 27 27 }; 28 28 }
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getTaggedSuggestions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getTaggedSuggestions { 4 - @doc("Get a list of suggestions (feeds and users) tagged with categories") 4 + /** Get a list of suggestions (feeds and users) tagged with categories */ 5 5 @query 6 6 op main(): { 7 7 @required suggestions: Suggestion[];
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getTrendingTopics.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getTrendingTopics { 4 - @doc("Get a list of trending topics") 4 + /** Get a list of trending topics */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. */ 8 8 viewer?: did, 9 9 10 10 @minValue(1)
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getTrends.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getTrends { 4 - @doc("Get the current trends on the network") 4 + /** Get the current trends on the network */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/getTrendsSkeleton.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.unspecced.getTrendsSkeleton { 4 - @doc("Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends") 4 + /** Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends */ 5 5 @query 6 6 op main( 7 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 7 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 8 8 viewer?: did, 9 9 10 10 @minValue(1)
+4 -4
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/initAgeAssurance.tsp
··· 5 5 model DidTooLong {} 6 6 model InvalidInitiation {} 7 7 8 - @doc("Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age.") 8 + /** Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age. */ 9 9 @procedure 10 10 @errors(InvalidEmail, DidTooLong, InvalidInitiation) 11 11 op main(input: { 12 - @doc("The user's email address to receive assurance instructions.") 12 + /** The user's email address to receive assurance instructions. */ 13 13 @required 14 14 email: string; 15 15 16 - @doc("The user's preferred language for communication during the assurance process.") 16 + /** The user's preferred language for communication during the assurance process. */ 17 17 @required 18 18 language: string; 19 19 20 - @doc("An ISO 3166-1 alpha-2 code of the user's location.") 20 + /** An ISO 3166-1 alpha-2 code of the user's location. */ 21 21 @required 22 22 countryCode: string; 23 23 }): app.bsky.unspecced.defs.AgeAssuranceState;
+6 -6
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/searchActorsSkeleton.tsp
··· 3 3 namespace app.bsky.unspecced.searchActorsSkeleton { 4 4 model BadQueryString {} 5 5 6 - @doc("Backend Actors (profile) search, returns only skeleton.") 6 + /** Backend Actors (profile) search, returns only skeleton. */ 7 7 @query 8 8 @errors(BadQueryString) 9 9 op main( 10 - @doc("Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax.") 10 + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax. */ 11 11 q: string, 12 12 13 - @doc("DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.") 13 + /** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. */ 14 14 viewer?: did, 15 15 16 - @doc("If true, acts as fast/simple 'typeahead' query.") 16 + /** If true, acts as fast/simple 'typeahead' query. */ 17 17 typeahead?: boolean, 18 18 19 19 @minValue(1) 20 20 @maxValue(100) 21 21 limit?: integer = 25, 22 22 23 - @doc("Optional pagination mechanism; may not necessarily allow scrolling through entire result set.") 23 + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ 24 24 cursor?: string 25 25 ): { 26 26 cursor?: string; 27 27 28 - @doc("Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.") 28 + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ 29 29 hitsTotal?: integer; 30 30 31 31 @required actors: app.bsky.unspecced.defs.SkeletonSearchActor[];
+14 -14
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/searchPostsSkeleton.tsp
··· 7 7 namespace app.bsky.unspecced.searchPostsSkeleton { 8 8 model BadQueryString {} 9 9 10 - @doc("Backend Posts search, returns only skeleton") 10 + /** Backend Posts search, returns only skeleton */ 11 11 @query 12 12 @errors(BadQueryString) 13 13 op main( 14 - @doc("Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.") 14 + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ 15 15 q: string, 16 16 17 - @doc("Specifies the ranking order of results.") 17 + /** Specifies the ranking order of results. */ 18 18 sort?: "top" | "latest" | string = "latest", 19 19 20 - @doc("Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).") 20 + /** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). */ 21 21 since?: string, 22 22 23 - @doc("Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).") 23 + /** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). */ 24 24 until?: string, 25 25 26 - @doc("Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.") 26 + /** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. */ 27 27 mentions?: atIdentifier, 28 28 29 - @doc("Filter to posts by the given account. Handles are resolved to DID before query-time.") 29 + /** Filter to posts by the given account. Handles are resolved to DID before query-time. */ 30 30 author?: atIdentifier, 31 31 32 - @doc("Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.") 32 + /** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. */ 33 33 lang?: language, 34 34 35 - @doc("Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.") 35 + /** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. */ 36 36 domain?: string, 37 37 38 - @doc("Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.") 38 + /** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. */ 39 39 url?: uri, 40 40 41 - @doc("Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.") 41 + /** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. */ 42 42 tag?: SkeletonSearchTagString[], 43 43 44 - @doc("DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries.") 44 + /** DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries. */ 45 45 viewer?: did, 46 46 47 47 @minValue(1) 48 48 @maxValue(100) 49 49 limit?: integer = 25, 50 50 51 - @doc("Optional pagination mechanism; may not necessarily allow scrolling through entire result set.") 51 + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ 52 52 cursor?: string 53 53 ): { 54 54 cursor?: string; 55 55 56 - @doc("Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.") 56 + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ 57 57 hitsTotal?: integer; 58 58 59 59 @required posts: app.bsky.unspecced.defs.SkeletonSearchPost[];
+5 -5
packages/emitter/test/integration/atproto/input/app/bsky/unspecced/searchStarterPacksSkeleton.tsp
··· 3 3 namespace app.bsky.unspecced.searchStarterPacksSkeleton { 4 4 model BadQueryString {} 5 5 6 - @doc("Backend Starter Pack search, returns only skeleton.") 6 + /** Backend Starter Pack search, returns only skeleton. */ 7 7 @query 8 8 @errors(BadQueryString) 9 9 op main( 10 - @doc("Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.") 10 + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ 11 11 q: string, 12 12 13 - @doc("DID of the account making the request (not included for public/unauthenticated queries).") 13 + /** DID of the account making the request (not included for public/unauthenticated queries). */ 14 14 viewer?: did, 15 15 16 16 @minValue(1) 17 17 @maxValue(100) 18 18 limit?: integer = 25, 19 19 20 - @doc("Optional pagination mechanism; may not necessarily allow scrolling through entire result set.") 20 + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ 21 21 cursor?: string 22 22 ): { 23 23 cursor?: string; 24 24 25 - @doc("Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.") 25 + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ 26 26 hitsTotal?: integer; 27 27 28 28 @required starterPacks: app.bsky.unspecced.defs.SkeletonSearchStarterPack[];
+2 -2
packages/emitter/test/integration/atproto/input/app/bsky/video/defs.tsp
··· 5 5 @required jobId: string; 6 6 @required did: did; 7 7 8 - @doc("The state of the video processing job. All values not listed as a known value indicate that the job is in process.") 8 + /** The state of the video processing job. All values not listed as a known value indicate that the job is in process. */ 9 9 @required 10 10 state: "JOB_STATE_COMPLETED" | "JOB_STATE_FAILED" | string; 11 11 12 - @doc("Progress within the current processing state.") 12 + /** Progress within the current processing state. */ 13 13 @minValue(0) 14 14 @maxValue(100) 15 15 progress?: integer;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/video/getJobStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.video.getJobStatus { 4 - @doc("Get status details for a video processing job.") 4 + /** Get status details for a video processing job. */ 5 5 @query 6 6 op main( 7 7 @required jobId: string
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/video/getUploadLimits.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.video.getUploadLimits { 4 - @doc("Get video upload limits for the authenticated user.") 4 + /** Get video upload limits for the authenticated user. */ 5 5 @query 6 6 op main(): { 7 7 @required canUpload: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/app/bsky/video/uploadVideo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace app.bsky.video.uploadVideo { 4 - @doc("Upload a video to be processed then stored on the PDS.") 4 + /** Upload a video to be processed then stored on the PDS. */ 5 5 @procedure 6 6 op main( 7 7 @encoding("video/mp4")
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/actor/declaration.tsp
··· 2 2 3 3 namespace chat.bsky.actor.declaration { 4 4 @rec("literal:self") 5 - @doc("A declaration of a Bluesky chat account.") 5 + /** A declaration of a Bluesky chat account. */ 6 6 model Main { 7 7 @required allowIncoming: "all" | "none" | "following" | string; 8 8 }
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/actor/defs.tsp
··· 14 14 viewer?: app.bsky.actor.defs.ViewerState; 15 15 labels?: com.atproto.label.defs.Label[]; 16 16 17 - @doc("Set to true when the actor cannot actively participate in conversations") 17 + /** Set to true when the actor cannot actively participate in conversations */ 18 18 chatDisabled?: boolean; 19 19 20 20 verification?: app.bsky.actor.defs.VerificationState;
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/convo/acceptConvo.tsp
··· 5 5 op main(input: { 6 6 @required convoId: string; 7 7 }): { 8 - @doc("Rev when the convo was accepted. If not present, the convo was already accepted.") 8 + /** Rev when the convo was accepted. If not present, the convo was already accepted. */ 9 9 rev?: string; 10 10 }; 11 11 }
+4 -4
packages/emitter/test/integration/atproto/input/chat/bsky/convo/addReaction.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace chat.bsky.convo.addReaction { 4 - @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.") 4 + /** Indicates that the message has been deleted and reactions can no longer be added/removed. */ 5 5 model ReactionMessageDeleted {} 6 6 7 - @doc("Indicates that the message has the maximum number of reactions allowed for a single user, and the requested reaction wasn't yet present. If it was already present, the request will not fail since it is idempotent.") 7 + /** Indicates that the message has the maximum number of reactions allowed for a single user, and the requested reaction wasn't yet present. If it was already present, the request will not fail since it is idempotent. */ 8 8 model ReactionLimitReached {} 9 9 10 - @doc("Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji.") 10 + /** Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji. */ 11 11 model ReactionInvalidValue {} 12 12 13 - @doc("Adds an emoji reaction to a message. Requires authentication. It is idempotent, so multiple calls from the same user with the same emoji result in a single reaction.") 13 + /** Adds an emoji reaction to a message. Requires authentication. It is idempotent, so multiple calls from the same user with the same emoji result in a single reaction. */ 14 14 @procedure 15 15 @errors(ReactionMessageDeleted, ReactionLimitReached, ReactionInvalidValue) 16 16 op main(input: {
+3 -3
packages/emitter/test/integration/atproto/input/chat/bsky/convo/defs.tsp
··· 13 13 @required 14 14 text: string; 15 15 16 - @doc("Annotations of text (mentions, URLs, hashtags, etc)") 16 + /** Annotations of text (mentions, URLs, hashtags, etc) */ 17 17 facets?: app.bsky.richtext.facet.Main[]; 18 18 19 19 embed?: (app.bsky.embed.record.Main | unknown); ··· 28 28 @required 29 29 text: string; 30 30 31 - @doc("Annotations of text (mentions, URLs, hashtags, etc)") 31 + /** Annotations of text (mentions, URLs, hashtags, etc) */ 32 32 facets?: app.bsky.richtext.facet.Main[]; 33 33 34 34 embed?: (app.bsky.embed.record.View | unknown); 35 35 36 - @doc("Reactions to this message, in ascending order of creation time.") 36 + /** Reactions to this message, in ascending order of creation time. */ 37 37 reactions?: ReactionView[]; 38 38 39 39 @required sender: MessageViewSender;
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/convo/getConvoAvailability.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace chat.bsky.convo.getConvoAvailability { 4 - @doc("Get whether the requester and the other members can chat. If an existing convo is found for these members, it is returned.") 4 + /** Get whether the requester and the other members can chat. If an existing convo is found for these members, it is returned. */ 5 5 @query 6 6 op main( 7 7 @minItems(1)
+3 -3
packages/emitter/test/integration/atproto/input/chat/bsky/convo/removeReaction.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace chat.bsky.convo.removeReaction { 4 - @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.") 4 + /** Indicates that the message has been deleted and reactions can no longer be added/removed. */ 5 5 model ReactionMessageDeleted {} 6 6 7 - @doc("Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji.") 7 + /** Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji. */ 8 8 model ReactionInvalidValue {} 9 9 10 - @doc("Removes an emoji reaction from a message. Requires authentication. It is idempotent, so multiple calls from the same user with the same emoji result in that reaction not being present, even if it already wasn't.") 10 + /** Removes an emoji reaction from a message. Requires authentication. It is idempotent, so multiple calls from the same user with the same emoji result in that reaction not being present, even if it already wasn't. */ 11 11 @procedure 12 12 @errors(ReactionMessageDeleted, ReactionInvalidValue) 13 13 op main(input: {
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/convo/updateAllRead.tsp
··· 5 5 op main(input: { 6 6 status?: "request" | "accepted" | string; 7 7 }): { 8 - @doc("The count of updated convos.") 8 + /** The count of updated convos. */ 9 9 @required 10 10 updatedCount: integer; 11 11 };
+1 -1
packages/emitter/test/integration/atproto/input/chat/bsky/moderation/getMessageContext.tsp
··· 3 3 namespace chat.bsky.moderation.getMessageContext { 4 4 @query 5 5 op main( 6 - @doc("Conversation that the message is from. NOTE: this field will eventually be required.") 6 + /** Conversation that the message is from. NOTE: this field will eventually be required. */ 7 7 convoId?: string, 8 8 9 9 @required messageId: string,
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/deleteAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.deleteAccount { 4 - @doc("Delete a user account as an administrator.") 4 + /** Delete a user account as an administrator. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/admin/disableAccountInvites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.disableAccountInvites { 4 - @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.") 4 + /** Disable an account from receiving new invite codes, but does not invalidate existing codes. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required account: did; 8 8 9 - @doc("Optional reason for disabled invites.") 9 + /** Optional reason for disabled invites. */ 10 10 note?: string; 11 11 }): void; 12 12 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/disableInviteCodes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.disableInviteCodes { 4 - @doc("Disable some set of codes and/or all codes associated with a set of users.") 4 + /** Disable some set of codes and/or all codes associated with a set of users. */ 5 5 @procedure 6 6 op main(input: { 7 7 codes?: string[];
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/admin/enableAccountInvites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.enableAccountInvites { 4 - @doc("Re-enable an account's ability to receive invite codes.") 4 + /** Re-enable an account's ability to receive invite codes. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required account: did; 8 8 9 - @doc("Optional reason for enabled invites.") 9 + /** Optional reason for enabled invites. */ 10 10 note?: string; 11 11 }): void; 12 12 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/getAccountInfo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getAccountInfo { 4 - @doc("Get details about an account.") 4 + /** Get details about an account. */ 5 5 @query 6 6 op main( 7 7 @required did: did
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/getAccountInfos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getAccountInfos { 4 - @doc("Get details about some accounts.") 4 + /** Get details about some accounts. */ 5 5 @query 6 6 op main( 7 7 @required dids: did[]
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/getInviteCodes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getInviteCodes { 4 - @doc("Get an admin view of invite codes.") 4 + /** Get an admin view of invite codes. */ 5 5 @query 6 6 op main( 7 7 sort?: "recent" | "usage" | string = "recent",
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/getSubjectStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getSubjectStatus { 4 - @doc("Get the service-specific admin status of a subject (account, record, or blob).") 4 + /** Get the service-specific admin status of a subject (account, record, or blob). */ 5 5 @query 6 6 op main( 7 7 did?: did,
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/searchAccounts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.searchAccounts { 4 - @doc("Get list of accounts that matches your search query.") 4 + /** Get list of accounts that matches your search query. */ 5 5 @query 6 6 op main( 7 7 email?: string,
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/admin/sendEmail.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.sendEmail { 4 - @doc("Send email to a user's account email address.") 4 + /** Send email to a user's account email address. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required recipientDid: did; ··· 9 9 subject?: string; 10 10 @required senderDid: did; 11 11 12 - @doc("Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers") 12 + /** Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers */ 13 13 comment?: string; 14 14 }): { 15 15 @required sent: boolean;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/admin/updateAccountEmail.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountEmail { 4 - @doc("Administrative action to update an account's email.") 4 + /** Administrative action to update an account's email. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 account: atIdentifier; 10 10
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/updateAccountHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountHandle { 4 - @doc("Administrative action to update an account's handle.") 4 + /** Administrative action to update an account's handle. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/updateAccountPassword.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountPassword { 4 - @doc("Update the password for a user account as an administrator.") 4 + /** Update the password for a user account as an administrator. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/admin/updateAccountSigningKey.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountSigningKey { 4 - @doc("Administrative action to update an account's signing key in their Did document.") 4 + /** Administrative action to update an account's signing key in their Did document. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did; 8 8 9 - @doc("Did-key formatted public key") 9 + /** Did-key formatted public key */ 10 10 @required 11 11 signingKey: did; 12 12 }): void;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/admin/updateSubjectStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateSubjectStatus { 4 - @doc("Update the service-specific admin status of a subject (account, record, or blob).") 4 + /** Update the service-specific admin status of a subject (account, record, or blob). */ 5 5 @procedure 6 6 op main(input: { 7 7 @required
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/identity/defs.tsp
··· 4 4 model IdentityInfo { 5 5 @required did: did; 6 6 7 - @doc("The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document.") 7 + /** The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document. */ 8 8 @required 9 9 handle: handle; 10 10 11 - @doc("The complete DID document for the identity.") 11 + /** The complete DID document for the identity. */ 12 12 @required 13 13 didDoc: unknown; 14 14 }
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/identity/getRecommendedDidCredentials.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.getRecommendedDidCredentials { 4 - @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.") 4 + /** Describe the credentials that should be included in the DID doc of an account that is migrating to this service. */ 5 5 @query 6 6 op main(): { 7 - @doc("Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs.") 7 + /** Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs. */ 8 8 rotationKeys?: string[]; 9 9 10 10 alsoKnownAs?: string[];
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/identity/refreshIdentity.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.refreshIdentity { 4 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 4 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 5 5 model HandleNotFound {} 6 6 7 - @doc("The DID resolution process confirmed that there is no current DID.") 7 + /** The DID resolution process confirmed that there is no current DID. */ 8 8 model DidNotFound {} 9 9 10 - @doc("The DID previously existed, but has been deactivated.") 10 + /** The DID previously existed, but has been deactivated. */ 11 11 model DidDeactivated {} 12 12 13 - @doc("Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server.") 13 + /** Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server. */ 14 14 @procedure 15 15 @errors(HandleNotFound, DidNotFound, DidDeactivated) 16 16 op main(input: {
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/identity/requestPlcOperationSignature.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.requestPlcOperationSignature { 4 - @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.") 4 + /** Request an email with a code to in order to request a signed PLC operation. Requires Auth. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/identity/resolveDid.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveDid { 4 - @doc("Resolves DID to DID document. Does not bi-directionally verify handle.") 4 + /** Resolves DID to DID document. Does not bi-directionally verify handle. */ 5 5 @query 6 6 @errors(DidNotFound, DidDeactivated) 7 7 op main( 8 - @doc("DID to resolve.") 8 + /** DID to resolve. */ 9 9 @required 10 10 did: did 11 11 ): { 12 - @doc("The complete DID document for the identity.") 12 + /** The complete DID document for the identity. */ 13 13 @required 14 14 didDoc: unknown; 15 15 }; 16 16 17 - @doc("The DID resolution process confirmed that there is no current DID.") 17 + /** The DID resolution process confirmed that there is no current DID. */ 18 18 model DidNotFound {} 19 19 20 - @doc("The DID previously existed, but has been deactivated.") 20 + /** The DID previously existed, but has been deactivated. */ 21 21 model DidDeactivated {} 22 22 }
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/identity/resolveHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveHandle { 4 - @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.") 4 + /** Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document. */ 5 5 @query 6 6 @errors(HandleNotFound) 7 7 op main( 8 - @doc("The handle to resolve.") 8 + /** The handle to resolve. */ 9 9 @required 10 10 handle: handle 11 11 ): { 12 12 @required did: did; 13 13 }; 14 14 15 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 15 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 16 16 model HandleNotFound {} 17 17 }
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/identity/resolveIdentity.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveIdentity { 4 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 4 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 5 5 model HandleNotFound {} 6 6 7 - @doc("The DID resolution process confirmed that there is no current DID.") 7 + /** The DID resolution process confirmed that there is no current DID. */ 8 8 model DidNotFound {} 9 9 10 - @doc("The DID previously existed, but has been deactivated.") 10 + /** The DID previously existed, but has been deactivated. */ 11 11 model DidDeactivated {} 12 12 13 - @doc("Resolves an identity (DID or Handle) to a full identity (DID document and verified handle).") 13 + /** Resolves an identity (DID or Handle) to a full identity (DID document and verified handle). */ 14 14 @query 15 15 @errors(HandleNotFound, DidNotFound, DidDeactivated) 16 16 op main( 17 - @doc("Handle or DID to resolve.") 17 + /** Handle or DID to resolve. */ 18 18 @required 19 19 identifier: atIdentifier 20 20 ): com.atproto.identity.defs.IdentityInfo;
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/identity/signPlcOperation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.signPlcOperation { 4 - @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.") 4 + /** Signs a PLC operation to update some value(s) in the requesting DID's document. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("A token received through com.atproto.identity.requestPlcOperationSignature") 7 + /** A token received through com.atproto.identity.requestPlcOperationSignature */ 8 8 token?: string; 9 9 10 10 rotationKeys?: string[]; ··· 15 15 16 16 services?: unknown; 17 17 }): { 18 - @doc("A signed DID PLC operation.") 18 + /** A signed DID PLC operation. */ 19 19 @required 20 20 operation: unknown; 21 21 };
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/identity/submitPlcOperation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.submitPlcOperation { 4 - @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry") 4 + /** Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry */ 5 5 @procedure 6 6 op main(input: { 7 7 @required operation: unknown;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/identity/updateHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.updateHandle { 4 - @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.") 4 + /** Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The new handle.") 7 + /** The new handle. */ 8 8 @required 9 9 handle: handle; 10 10 }): void;
+23 -23
packages/emitter/test/integration/atproto/input/com/atproto/label/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.label.defs { 4 - @doc("Metadata tag on an atproto resource (eg, repo or record).") 4 + /** Metadata tag on an atproto resource (eg, repo or record). */ 5 5 model Label { 6 - @doc("The AT Protocol version of the label object.") 6 + /** The AT Protocol version of the label object. */ 7 7 ver?: integer; 8 8 9 - @doc("DID of the actor who created this label.") 9 + /** DID of the actor who created this label. */ 10 10 @required 11 11 src: did; 12 12 13 - @doc("AT URI of the record, repository (account), or other resource that this label applies to.") 13 + /** AT URI of the record, repository (account), or other resource that this label applies to. */ 14 14 @required 15 15 uri: uri; 16 16 17 - @doc("Optionally, CID specifying the specific version of 'uri' resource this label applies to.") 17 + /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ 18 18 cid?: cid; 19 19 20 - @doc("The short string name of the value or type of this label.") 20 + /** The short string name of the value or type of this label. */ 21 21 @maxLength(128) 22 22 @required 23 23 val: string; 24 24 25 - @doc("If true, this is a negation label, overwriting a previous label.") 25 + /** If true, this is a negation label, overwriting a previous label. */ 26 26 neg?: boolean; 27 27 28 - @doc("Timestamp when this label was created.") 28 + /** Timestamp when this label was created. */ 29 29 @required 30 30 cts: datetime; 31 31 32 - @doc("Timestamp at which this label expires (no longer applies).") 32 + /** Timestamp at which this label expires (no longer applies). */ 33 33 exp?: datetime; 34 34 35 - @doc("Signature of dag-cbor encoded label.") 35 + /** Signature of dag-cbor encoded label. */ 36 36 sig?: bytes; 37 37 } 38 38 39 - @doc("Metadata tags on an atproto record, published by the author within the record.") 39 + /** Metadata tags on an atproto record, published by the author within the record. */ 40 40 model SelfLabels { 41 41 @maxItems(10) 42 42 @required 43 43 values: SelfLabel[]; 44 44 } 45 45 46 - @doc("Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.") 46 + /** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */ 47 47 model SelfLabel { 48 - @doc("The short string name of the value or type of this label.") 48 + /** The short string name of the value or type of this label. */ 49 49 @maxLength(128) 50 50 @required 51 51 val: string; 52 52 } 53 53 54 - @doc("Declares a label value and its expected interpretations and behaviors.") 54 + /** Declares a label value and its expected interpretations and behaviors. */ 55 55 model LabelValueDefinition { 56 - @doc("The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).") 56 + /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */ 57 57 @maxLength(100) 58 58 @maxGraphemes(100) 59 59 @required 60 60 identifier: string; 61 61 62 - @doc("How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.") 62 + /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */ 63 63 @required 64 64 severity: "inform" | "alert" | "none" | string; 65 65 66 - @doc("What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.") 66 + /** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */ 67 67 @required 68 68 blurs: "content" | "media" | "none" | string; 69 69 70 - @doc("The default setting for this label.") 70 + /** The default setting for this label. */ 71 71 defaultSetting?: "ignore" | "warn" | "hide" | string = "warn"; 72 72 73 - @doc("Does the user need to have adult content enabled in order to configure this label?") 73 + /** Does the user need to have adult content enabled in order to configure this label? */ 74 74 adultOnly?: boolean; 75 75 76 76 @required 77 77 locales: LabelValueDefinitionStrings[]; 78 78 } 79 79 80 - @doc("Strings which describe the label in the UI, localized into a specific language.") 80 + /** Strings which describe the label in the UI, localized into a specific language. */ 81 81 model LabelValueDefinitionStrings { 82 - @doc("The code of the language these strings are written in.") 82 + /** The code of the language these strings are written in. */ 83 83 @required 84 84 lang: language; 85 85 86 - @doc("A short human-readable name for the label.") 86 + /** A short human-readable name for the label. */ 87 87 @maxGraphemes(64) 88 88 @maxLength(640) 89 89 @required 90 90 name: string; 91 91 92 - @doc("A longer description of what the label means and why it might be applied.") 92 + /** A longer description of what the label means and why it might be applied. */ 93 93 @maxGraphemes(10000) 94 94 @maxLength(100000) 95 95 @required
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/label/queryLabels.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.label.queryLabels { 4 - @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.") 4 + /** Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth. */ 5 5 @query 6 6 op main( 7 - @doc("List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.") 7 + /** List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. */ 8 8 @required 9 9 uriPatterns: string[], 10 10 11 - @doc("Optional list of label sources (DIDs) to filter on.") 11 + /** Optional list of label sources (DIDs) to filter on. */ 12 12 sources?: did[], 13 13 14 14 @minValue(1)
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/label/subscribeLabels.tsp
··· 13 13 message?: string; 14 14 } 15 15 16 - @doc("Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream.") 16 + /** Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream. */ 17 17 @subscription 18 18 @errors(FutureCursor) 19 19 op main( 20 - @doc("The last known event seq number to backfill from.") 20 + /** The last known event seq number to backfill from. */ 21 21 cursor?: integer 22 22 ): (Labels | Info); 23 23 }
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/lexicon/schema.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.lexicon.schema { 4 - @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).") 4 + /** Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc). */ 5 5 @rec("nsid") 6 6 model Main { 7 - @doc("Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system.") 7 + /** Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system. */ 8 8 @required 9 9 lexicon: integer; 10 10 }
+6 -6
packages/emitter/test/integration/atproto/input/com/atproto/moderation/createReport.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.moderation.createReport { 4 - @doc("Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth.") 4 + /** Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Indicates the broad category of violation the report is for.") 7 + /** Indicates the broad category of violation the report is for. */ 8 8 @required 9 9 reasonType: com.atproto.moderation.defs.ReasonType; 10 10 11 11 @maxGraphemes(2000) 12 12 @maxLength(20000) 13 - @doc("Additional context about the content and violation.") 13 + /** Additional context about the content and violation. */ 14 14 reason?: string; 15 15 16 16 @required ··· 40 40 @required createdAt: datetime; 41 41 }; 42 42 43 - @doc("Moderation tool information for tracing the source of the action") 43 + /** Moderation tool information for tracing the source of the action */ 44 44 model ModTool { 45 - @doc("Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome')") 45 + /** Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome') */ 46 46 @required 47 47 name: string; 48 48 49 - @doc("Additional arbitrary metadata about the source") 49 + /** Additional arbitrary metadata about the source */ 50 50 meta?: unknown; 51 51 } 52 52 }
+8 -8
packages/emitter/test/integration/atproto/input/com/atproto/moderation/defs.tsp
··· 66 66 ToolsOzoneReportReasonCivicImpersonation: "tools.ozone.report.defs#reasonCivicImpersonation", 67 67 } 68 68 69 - @doc("Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`.") 69 + /** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. */ 70 70 @token 71 71 model ReasonSpam {} 72 72 73 - @doc("Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`.") 73 + /** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. */ 74 74 @token 75 75 model ReasonViolation {} 76 76 77 - @doc("Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`.") 77 + /** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. */ 78 78 @token 79 79 model ReasonMisleading {} 80 80 81 - @doc("Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`.") 81 + /** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. */ 82 82 @token 83 83 model ReasonSexual {} 84 84 85 - @doc("Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`.") 85 + /** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. */ 86 86 @token 87 87 model ReasonRude {} 88 88 89 - @doc("Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`.") 89 + /** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. */ 90 90 @token 91 91 model ReasonOther {} 92 92 93 - @doc("Appeal a previously taken moderation action") 93 + /** Appeal a previously taken moderation action */ 94 94 @token 95 95 model ReasonAppeal {} 96 96 97 - @doc("Tag describing a type of subject that might be reported.") 97 + /** Tag describing a type of subject that might be reported. */ 98 98 union SubjectType { 99 99 "account", 100 100 "record",
+9 -9
packages/emitter/test/integration/atproto/input/com/atproto/repo/applyWrites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.applyWrites { 4 - @doc("Indicates that the 'swapCommit' parameter did not match current commit.") 4 + /** Indicates that the 'swapCommit' parameter did not match current commit. */ 5 5 model InvalidSwap {} 6 6 7 7 @closed ··· 20 20 DeleteResult, 21 21 } 22 22 23 - @doc("Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.") 23 + /** Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS. */ 24 24 @procedure 25 25 @errors(InvalidSwap) 26 26 op main(input: { 27 - @doc("The handle or DID of the repo (aka, current account).") 27 + /** The handle or DID of the repo (aka, current account). */ 28 28 @required 29 29 repo: atIdentifier; 30 30 31 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.") 31 + /** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */ 32 32 validate?: boolean; 33 33 34 34 @required 35 35 writes: WriteAction[]; 36 36 37 - @doc("If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.") 37 + /** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */ 38 38 swapCommit?: cid; 39 39 }): { 40 40 commit?: com.atproto.repo.defs.CommitMeta; 41 41 results?: WriteResult[]; 42 42 }; 43 43 44 - @doc("Operation which creates a new record.") 44 + /** Operation which creates a new record. */ 45 45 model Create { 46 46 @required collection: nsid; 47 47 48 - @doc("NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.") 48 + /** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */ 49 49 @maxLength(512) 50 50 rkey?: recordKey; 51 51 52 52 @required value: unknown; 53 53 } 54 54 55 - @doc("Operation which updates an existing record.") 55 + /** Operation which updates an existing record. */ 56 56 model Update { 57 57 @required collection: nsid; 58 58 @required rkey: recordKey; 59 59 @required value: unknown; 60 60 } 61 61 62 - @doc("Operation which deletes an existing record.") 62 + /** Operation which deletes an existing record. */ 63 63 model Delete { 64 64 @required collection: nsid; 65 65 @required rkey: recordKey;
+8 -8
packages/emitter/test/integration/atproto/input/com/atproto/repo/createRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.createRecord { 4 - @doc("Create a single new repository record. Requires auth, implemented by PDS.") 4 + /** Create a single new repository record. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @maxLength(512) 18 18 rkey?: recordKey; 19 19 20 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.") 20 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 21 21 validate?: boolean; 22 22 23 - @doc("The record itself. Must contain a $type field.") 23 + /** The record itself. Must contain a $type field. */ 24 24 @required 25 25 record: unknown; 26 26 27 - @doc("Compare and swap with the previous commit by CID.") 27 + /** Compare and swap with the previous commit by CID. */ 28 28 swapCommit?: cid; 29 29 }): { 30 30 @required uri: atUri; ··· 33 33 validationStatus?: "valid" | "unknown" | string; 34 34 }; 35 35 36 - @doc("Indicates that 'swapCommit' didn't match current repo commit.") 36 + /** Indicates that 'swapCommit' didn't match current repo commit. */ 37 37 model InvalidSwap {} 38 38 }
+6 -6
packages/emitter/test/integration/atproto/input/com/atproto/repo/deleteRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.deleteRecord { 4 - @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.") 4 + /** Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @required 18 18 rkey: recordKey; 19 19 20 - @doc("Compare and swap with the previous record by CID.") 20 + /** Compare and swap with the previous record by CID. */ 21 21 swapRecord?: cid; 22 22 23 - @doc("Compare and swap with the previous commit by CID.") 23 + /** Compare and swap with the previous commit by CID. */ 24 24 swapCommit?: cid; 25 25 }): { 26 26 commit?: com.atproto.repo.defs.CommitMeta;
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/repo/describeRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.describeRepo { 4 - @doc("Get information about an account and repository, including the list of collections. Does not require auth.") 4 + /** Get information about an account and repository, including the list of collections. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 repo: atIdentifier 10 10 ): { 11 11 @required handle: handle; 12 12 @required did: did; 13 13 14 - @doc("The complete DID document for this account.") 14 + /** The complete DID document for this account. */ 15 15 @required 16 16 didDoc: unknown; 17 17 18 - @doc("List of all the collections (NSIDs) for which this repo contains at least one record.") 18 + /** List of all the collections (NSIDs) for which this repo contains at least one record. */ 19 19 @required 20 20 collections: nsid[]; 21 21 22 - @doc("Indicates if handle is currently valid (resolves bi-directionally)") 22 + /** Indicates if handle is currently valid (resolves bi-directionally) */ 23 23 @required 24 24 handleIsCorrect: boolean; 25 25 };
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/repo/getRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.getRecord { 4 - @doc("Get a single record from a repository. Does not require auth.") 4 + /** Get a single record from a repository. Does not require auth. */ 5 5 @query 6 6 @errors(RecordNotFound) 7 7 op main( 8 - @doc("The handle or DID of the repo.") 8 + /** The handle or DID of the repo. */ 9 9 @required 10 10 repo: atIdentifier, 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid, 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @required 18 18 rkey: recordKey, 19 19 20 - @doc("The CID of the version of the record. If not specified, then return the most recent version.") 20 + /** The CID of the version of the record. If not specified, then return the most recent version. */ 21 21 cid?: cid 22 22 ): { 23 23 @required uri: atUri;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/repo/importRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.importRepo { 4 - @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.") 4 + /** Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set. */ 5 5 @procedure 6 6 op main( 7 7 @encoding("application/vnd.ipld.car")
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/repo/listMissingBlobs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.listMissingBlobs { 4 - @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.") 4 + /** Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/repo/listRecords.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.listRecords { 4 - @doc("List a range of records in a repository, matching a specific collection. Does not require auth.") 4 + /** List a range of records in a repository, matching a specific collection. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 repo: atIdentifier, 10 10 11 - @doc("The NSID of the record type.") 11 + /** The NSID of the record type. */ 12 12 @required 13 13 collection: nsid, 14 14 15 - @doc("The number of records to return.") 15 + /** The number of records to return. */ 16 16 @minValue(1) 17 17 @maxValue(100) 18 18 limit?: int32 = 50, 19 19 20 20 cursor?: string, 21 21 22 - @doc("Flag to reverse the order of the returned records.") 22 + /** Flag to reverse the order of the returned records. */ 23 23 reverse?: boolean 24 24 ): { 25 25 cursor?: string;
+8 -8
packages/emitter/test/integration/atproto/input/com/atproto/repo/putRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.putRecord { 4 - @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.") 4 + /** Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @maxLength(512) 18 18 @required 19 19 rkey: recordKey; 20 20 21 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.") 21 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 22 22 validate?: boolean; 23 23 24 - @doc("The record to write.") 24 + /** The record to write. */ 25 25 @required 26 26 record: unknown; 27 27 28 - @doc("Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation") 28 + /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */ 29 29 swapRecord?: cid | null; 30 30 31 - @doc("Compare and swap with the previous commit by CID.") 31 + /** Compare and swap with the previous commit by CID. */ 32 32 swapCommit?: cid; 33 33 }): { 34 34 @required uri: atUri;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/repo/strongRef.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A URI with a content-hash fingerprint.") 3 + /** A URI with a content-hash fingerprint. */ 4 4 namespace com.atproto.repo.strongRef { 5 5 model Main { 6 6 @required uri: atUri;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/repo/uploadBlob.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.uploadBlob { 4 - @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.") 4 + /** Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS. */ 5 5 @procedure 6 6 op main( 7 7 @encoding("*/*")
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/activateAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.activateAccount { 4 - @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.") 4 + /** Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/checkAccountStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.checkAccountStatus { 4 - @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.") 4 + /** Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself. */ 5 5 @query 6 6 op main(): { 7 7 @required activated: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/confirmEmail.tsp
··· 6 6 model InvalidToken {} 7 7 model InvalidEmail {} 8 8 9 - @doc("Confirm an email using a token from com.atproto.server.requestEmailConfirmation.") 9 + /** Confirm an email using a token from com.atproto.server.requestEmailConfirmation. */ 10 10 @procedure 11 11 @errors(AccountNotFound, ExpiredToken, InvalidToken, InvalidEmail) 12 12 op main(input: {
+9 -9
packages/emitter/test/integration/atproto/input/com/atproto/server/createAccount.tsp
··· 9 9 model UnresolvableDid {} 10 10 model IncompatibleDidDoc {} 11 11 12 - @doc("Account login session returned on successful account creation.") 12 + /** Account login session returned on successful account creation. */ 13 13 @inline 14 14 model Output { 15 15 @required accessJwt: string; 16 16 @required refreshJwt: string; 17 17 @required handle: handle; 18 18 19 - @doc("The DID of the new account.") 19 + /** The DID of the new account. */ 20 20 @required 21 21 did: did; 22 22 23 - @doc("Complete DID document.") 23 + /** Complete DID document. */ 24 24 didDoc?: unknown; 25 25 } 26 26 27 - @doc("Create an account. Implemented by PDS.") 27 + /** Create an account. Implemented by PDS. */ 28 28 @procedure 29 29 @errors(InvalidHandle, InvalidPassword, InvalidInviteCode, HandleNotAvailable, UnsupportedDomain, UnresolvableDid, IncompatibleDidDoc) 30 30 op main(input: { 31 31 email?: string; 32 32 33 - @doc("Requested handle for the account.") 33 + /** Requested handle for the account. */ 34 34 @required 35 35 handle: handle; 36 36 37 - @doc("Pre-existing atproto DID, being imported to a new account.") 37 + /** Pre-existing atproto DID, being imported to a new account. */ 38 38 did?: did; 39 39 40 40 inviteCode?: string; 41 41 verificationCode?: string; 42 42 verificationPhone?: string; 43 43 44 - @doc("Initial account password. May need to meet instance-specific password strength requirements.") 44 + /** Initial account password. May need to meet instance-specific password strength requirements. */ 45 45 password?: string; 46 46 47 - @doc("DID PLC rotation key (aka, recovery key) to be included in PLC creation operation.") 47 + /** DID PLC rotation key (aka, recovery key) to be included in PLC creation operation. */ 48 48 recoveryKey?: string; 49 49 50 - @doc("A signed DID PLC operation to be submitted as part of importing an existing account to this instance. NOTE: this optional field may be updated when full account migration is implemented.") 50 + /** A signed DID PLC operation to be submitted as part of importing an existing account to this instance. NOTE: this optional field may be updated when full account migration is implemented. */ 51 51 plcOp?: unknown; 52 52 }): Output; 53 53 }
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/server/createAppPassword.tsp
··· 10 10 privileged?: boolean; 11 11 } 12 12 13 - @doc("Create an App Password.") 13 + /** Create an App Password. */ 14 14 @procedure 15 15 @errors(AccountTakedown) 16 16 op main(input: { 17 - @doc("A short name for the App Password, to help distinguish them.") 17 + /** A short name for the App Password, to help distinguish them. */ 18 18 @required 19 19 name: string; 20 20 21 - @doc("If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients.") 21 + /** If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients. */ 22 22 privileged?: boolean; 23 23 }): AppPassword; 24 24 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/createInviteCode.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.createInviteCode { 4 - @doc("Create an invite code.") 4 + /** Create an invite code. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required useCount: integer;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/createInviteCodes.tsp
··· 6 6 @required codes: string[]; 7 7 } 8 8 9 - @doc("Create invite codes.") 9 + /** Create invite codes. */ 10 10 @procedure 11 11 op main(input: { 12 12 @required codeCount: integer = 1;
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/server/createSession.tsp
··· 5 5 6 6 model AuthFactorTokenRequired {} 7 7 8 - @doc("Create an authentication session.") 8 + /** Create an authentication session. */ 9 9 @procedure 10 10 @errors(AccountTakedown, AuthFactorTokenRequired) 11 11 op main(input: { 12 - @doc("Handle or other identifier supported by the server for the authenticating user.") 12 + /** Handle or other identifier supported by the server for the authenticating user. */ 13 13 @required 14 14 identifier: string; 15 15 ··· 17 17 18 18 authFactorToken?: string; 19 19 20 - @doc("When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned") 20 + /** When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned */ 21 21 allowTakendown?: boolean; 22 22 }): { 23 23 @required accessJwt: string; ··· 30 30 emailAuthFactor?: boolean; 31 31 active?: boolean; 32 32 33 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 33 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 34 34 status?: "takendown" | "suspended" | "deactivated" | string; 35 35 }; 36 36 }
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/server/deactivateAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.deactivateAccount { 4 - @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.") 4 + /** Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("A recommendation to server as to how long they should hold onto the deactivated account before deleting.") 7 + /** A recommendation to server as to how long they should hold onto the deactivated account before deleting. */ 8 8 deleteAfter?: datetime; 9 9 }): void; 10 10 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/deleteAccount.tsp
··· 4 4 model ExpiredToken {} 5 5 model InvalidToken {} 6 6 7 - @doc("Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth.") 7 + /** Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth. */ 8 8 @procedure 9 9 @errors(ExpiredToken, InvalidToken) 10 10 op main(input: {
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/deleteSession.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.deleteSession { 4 - @doc("Delete the current session. Requires auth.") 4 + /** Delete the current session. Requires auth. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+6 -6
packages/emitter/test/integration/atproto/input/com/atproto/server/describeServer.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.describeServer { 4 - @doc("Describes the server's account creation requirements and capabilities. Implemented by PDS.") 4 + /** Describes the server's account creation requirements and capabilities. Implemented by PDS. */ 5 5 @query 6 6 op main(): { 7 7 @required did: did; 8 8 9 - @doc("If true, an invite code must be supplied to create an account on this instance.") 9 + /** If true, an invite code must be supplied to create an account on this instance. */ 10 10 inviteCodeRequired?: boolean; 11 11 12 - @doc("If true, a phone verification token must be supplied to create an account on this instance.") 12 + /** If true, a phone verification token must be supplied to create an account on this instance. */ 13 13 phoneVerificationRequired?: boolean; 14 14 15 - @doc("List of domain suffixes that can be used in account handles.") 15 + /** List of domain suffixes that can be used in account handles. */ 16 16 @required 17 17 availableUserDomains: string[]; 18 18 19 - @doc("URLs of service policy documents.") 19 + /** URLs of service policy documents. */ 20 20 links?: Links; 21 21 22 - @doc("Contact information") 22 + /** Contact information */ 23 23 contact?: Contact; 24 24 }; 25 25
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/server/getAccountInviteCodes.tsp
··· 3 3 namespace com.atproto.server.getAccountInviteCodes { 4 4 model DuplicateCreate {} 5 5 6 - @doc("Get all invite codes for the current account. Requires auth.") 6 + /** Get all invite codes for the current account. Requires auth. */ 7 7 @query 8 8 @errors(DuplicateCreate) 9 9 op main( 10 10 includeUsed?: boolean = true, 11 11 12 - @doc("Controls whether any new 'earned' but not 'created' invites should be created.") 12 + /** Controls whether any new 'earned' but not 'created' invites should be created. */ 13 13 createAvailable?: boolean = true 14 14 ): { 15 15 @required codes: com.atproto.server.defs.InviteCode[];
+5 -5
packages/emitter/test/integration/atproto/input/com/atproto/server/getServiceAuth.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.getServiceAuth { 4 - @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.") 4 + /** Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes. */ 5 5 model BadExpiration {} 6 6 7 - @doc("Get a signed token on behalf of the requesting DID for the requested service.") 7 + /** Get a signed token on behalf of the requesting DID for the requested service. */ 8 8 @query 9 9 @errors(BadExpiration) 10 10 op main( 11 - @doc("The DID of the service that the token will be used to authenticate with") 11 + /** The DID of the service that the token will be used to authenticate with */ 12 12 @required 13 13 aud: did, 14 14 15 - @doc("The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope.") 15 + /** The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope. */ 16 16 exp?: integer, 17 17 18 - @doc("Lexicon (XRPC) method to bind the requested token to") 18 + /** Lexicon (XRPC) method to bind the requested token to */ 19 19 lxm?: nsid 20 20 ): { 21 21 @required token: string;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/server/getSession.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.getSession { 4 - @doc("Get information about the current auth session. Requires auth.") 4 + /** Get information about the current auth session. Requires auth. */ 5 5 @query 6 6 op main(): { 7 7 @required handle: handle; ··· 12 12 didDoc?: unknown; 13 13 active?: boolean; 14 14 15 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 15 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 16 16 status?: "takendown" | "suspended" | "deactivated" | string; 17 17 }; 18 18 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/listAppPasswords.tsp
··· 9 9 privileged?: boolean; 10 10 } 11 11 12 - @doc("List all App Passwords.") 12 + /** List all App Passwords. */ 13 13 @query 14 14 @errors(AccountTakedown) 15 15 op main(): {
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/server/refreshSession.tsp
··· 3 3 namespace com.atproto.server.refreshSession { 4 4 model AccountTakedown {} 5 5 6 - @doc("Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt').") 6 + /** Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt'). */ 7 7 @procedure 8 8 @errors(AccountTakedown) 9 9 op main(): { ··· 14 14 didDoc?: unknown; 15 15 active?: boolean; 16 16 17 - @doc("Hosting status of the account. If not specified, then assume 'active'.") 17 + /** Hosting status of the account. If not specified, then assume 'active'. */ 18 18 status?: "takendown" | "suspended" | "deactivated" | string; 19 19 }; 20 20 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/requestAccountDelete.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestAccountDelete { 4 - @doc("Initiate a user account deletion via email.") 4 + /** Initiate a user account deletion via email. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/requestEmailConfirmation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestEmailConfirmation { 4 - @doc("Request an email with a code to confirm ownership of email.") 4 + /** Request an email with a code to confirm ownership of email. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/requestEmailUpdate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestEmailUpdate { 4 - @doc("Request a token in order to update email.") 4 + /** Request a token in order to update email. */ 5 5 @procedure 6 6 op main(): { 7 7 @required tokenRequired: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/requestPasswordReset.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestPasswordReset { 4 - @doc("Initiate a user account password reset via email.") 4 + /** Initiate a user account password reset via email. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required email: string;
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/server/reserveSigningKey.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.reserveSigningKey { 4 - @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.") 4 + /** Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The DID to reserve a key for.") 7 + /** The DID to reserve a key for. */ 8 8 did?: did; 9 9 }): { 10 - @doc("The public key for the reserved signing key, in did:key serialization.") 10 + /** The public key for the reserved signing key, in did:key serialization. */ 11 11 @required 12 12 signingKey: string; 13 13 };
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/resetPassword.tsp
··· 4 4 model ExpiredToken {} 5 5 model InvalidToken {} 6 6 7 - @doc("Reset a user account password using a token.") 7 + /** Reset a user account password using a token. */ 8 8 @procedure 9 9 @errors(ExpiredToken, InvalidToken) 10 10 op main(input: {
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/server/revokeAppPassword.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.revokeAppPassword { 4 - @doc("Revoke an App Password by name.") 4 + /** Revoke an App Password by name. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required name: string;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/server/updateEmail.tsp
··· 5 5 model InvalidToken {} 6 6 model TokenRequired {} 7 7 8 - @doc("Update an account's email.") 8 + /** Update an account's email. */ 9 9 @procedure 10 10 @errors(ExpiredToken, InvalidToken, TokenRequired) 11 11 op main(input: { 12 12 @required email: string; 13 13 emailAuthFactor?: boolean; 14 14 15 - @doc("Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed.") 15 + /** Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed. */ 16 16 token?: string; 17 17 }): void; 18 18 }
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/sync/getBlob.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getBlob { 4 - @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.") 4 + /** Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("*/*") 7 7 @errors(BlobNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the account.") 9 + /** The DID of the account. */ 10 10 @required 11 11 did: did, 12 12 13 - @doc("The CID of the blob to fetch") 13 + /** The CID of the blob to fetch */ 14 14 @required 15 15 cid: cid 16 16 ): void;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/getBlocks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getBlocks { 4 - @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.") 4 + /** Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(BlockNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/getCheckout.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getCheckout { 4 - @doc("DEPRECATED - please use com.atproto.sync.getRepo instead") 4 + /** DEPRECATED - please use com.atproto.sync.getRepo instead */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): void;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/getHead.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getHead { 4 - @doc("DEPRECATED - please use com.atproto.sync.getLatestCommit instead") 4 + /** DEPRECATED - please use com.atproto.sync.getLatestCommit instead */ 5 5 @query 6 6 @errors(HeadNotFound) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): {
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/sync/getHostStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getHostStatus { 4 - @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.") 4 + /** Returns information about a specified upstream host, as consumed by the server. Implemented by relays. */ 5 5 @query 6 6 @errors(HostNotFound) 7 7 op main( 8 - @doc("Hostname of the host (eg, PDS or relay) being queried.") 8 + /** Hostname of the host (eg, PDS or relay) being queried. */ 9 9 @required 10 10 hostname: string 11 11 ): { 12 12 @required hostname: string; 13 13 14 - @doc("Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor).") 14 + /** Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor). */ 15 15 seq?: integer; 16 16 17 - @doc("Number of accounts on the server which are associated with the upstream host. Note that the upstream may actually have more accounts.") 17 + /** Number of accounts on the server which are associated with the upstream host. Note that the upstream may actually have more accounts. */ 18 18 accountCount?: integer; 19 19 20 20 status?: com.atproto.sync.defs.HostStatus;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/getLatestCommit.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getLatestCommit { 4 - @doc("Get the current commit CID & revision of the specified repo. Does not require auth.") 4 + /** Get the current commit CID & revision of the specified repo. Does not require auth. */ 5 5 @query 6 6 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): {
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/sync/getRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRecord { 4 - @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.") 4 + /** Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(RecordNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12 13 13 @required collection: nsid, 14 14 15 - @doc("Record Key") 15 + /** Record Key */ 16 16 @required 17 17 rkey: recordKey 18 18 ): void;
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/sync/getRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRepo { 4 - @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.") 4 + /** Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12 13 - @doc("The revision ('rev') of the repo to create a diff from.") 13 + /** The revision ('rev') of the repo to create a diff from. */ 14 14 since?: tid 15 15 ): void; 16 16
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/sync/getRepoStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRepoStatus { 4 - @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.") 4 + /** Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay. */ 5 5 @query 6 6 @errors(RepoNotFound) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): { 12 12 @required did: did; 13 13 @required active: boolean; 14 14 15 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 15 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 16 16 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 17 17 18 - @doc("Optional field, the current rev of the repo, if active=true") 18 + /** Optional field, the current rev of the repo, if active=true */ 19 19 rev?: tid; 20 20 }; 21 21
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/sync/listBlobs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listBlobs { 4 - @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.") 4 + /** List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did, 11 11 12 - @doc("Optional revision of the repo to list blobs since.") 12 + /** Optional revision of the repo to list blobs since. */ 13 13 since?: tid, 14 14 15 15 @minValue(1)
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/sync/listHosts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listHosts { 4 - @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.") 4 + /** Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays. */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 12 12 ): { 13 13 cursor?: string; 14 14 15 - @doc("Sort order is not formally specified. Recommended order is by time host was first seen by the server, with oldest first.") 15 + /** Sort order is not formally specified. Recommended order is by time host was first seen by the server, with oldest first. */ 16 16 @required 17 17 hosts: Host[]; 18 18 }; 19 19 20 20 model Host { 21 - @doc("hostname of server; not a URL (no scheme)") 21 + /** hostname of server; not a URL (no scheme) */ 22 22 @required 23 23 hostname: string; 24 24 25 - @doc("Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor).") 25 + /** Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor). */ 26 26 seq?: integer; 27 27 28 28 accountCount?: integer;
+3 -3
packages/emitter/test/integration/atproto/input/com/atproto/sync/listRepos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listRepos { 4 - @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.") 4 + /** Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay. */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 17 17 model Repo { 18 18 @required did: did; 19 19 20 - @doc("Current repo commit CID") 20 + /** Current repo commit CID */ 21 21 @required 22 22 head: cid; 23 23 24 24 @required rev: tid; 25 25 active?: boolean; 26 26 27 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 27 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 28 28 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 29 29 } 30 30 }
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/listReposByCollection.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listReposByCollection { 4 - @doc("Enumerates all the DIDs which have records with the given collection NSID.") 4 + /** Enumerates all the DIDs which have records with the given collection NSID. */ 5 5 @query 6 6 op main( 7 7 @required collection: nsid, 8 8 9 - @doc("Maximum size of response set. Recommend setting a large maximum (1000+) when enumerating large DID lists.") 9 + /** Maximum size of response set. Recommend setting a large maximum (1000+) when enumerating large DID lists. */ 10 10 @minValue(1) 11 11 @maxValue(2000) 12 12 limit?: int32 = 500,
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/notifyOfUpdate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.notifyOfUpdate { 4 - @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl") 4 + /** Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Hostname of the current service (usually a PDS) that is notifying of update.") 7 + /** Hostname of the current service (usually a PDS) that is notifying of update. */ 8 8 @required 9 9 hostname: string; 10 10 }): void;
+2 -2
packages/emitter/test/integration/atproto/input/com/atproto/sync/requestCrawl.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.requestCrawl { 4 - @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.") 4 + /** Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth. */ 5 5 @procedure 6 6 @errors(HostBanned) 7 7 op main(input: { 8 - @doc("Hostname of the current service (eg, PDS) that is requesting to be crawled.") 8 + /** Hostname of the current service (eg, PDS) that is requesting to be crawled. */ 9 9 @required 10 10 hostname: string; 11 11 }): void;
+30 -30
packages/emitter/test/integration/atproto/input/com/atproto/sync/subscribeRepos.tsp
··· 3 3 namespace com.atproto.sync.subscribeRepos { 4 4 @subscription 5 5 @errors(FutureCursor, ConsumerTooSlow) 6 - @doc("Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay.") 6 + /** Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay. */ 7 7 op main( 8 - @doc("The last known event seq number to backfill from.") 8 + /** The last known event seq number to backfill from. */ 9 9 cursor?: integer 10 10 ): (Commit | Sync | Identity | Account | Info | unknown); 11 11 12 12 model FutureCursor {} 13 13 14 - @doc("If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection.") 14 + /** If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection. */ 15 15 model ConsumerTooSlow {} 16 16 17 - @doc("Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature.") 17 + /** Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature. */ 18 18 model Commit { 19 - @doc("The stream sequence number of this message.") 19 + /** The stream sequence number of this message. */ 20 20 @required 21 21 seq: integer; 22 22 23 - @doc("DEPRECATED -- unused") 23 + /** DEPRECATED -- unused */ 24 24 @required 25 25 rebase: boolean; 26 26 27 - @doc("DEPRECATED -- replaced by #sync event and data limits. Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data.") 27 + /** DEPRECATED -- replaced by #sync event and data limits. Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data. */ 28 28 @required 29 29 tooBig: boolean; 30 30 31 - @doc("The repo this event comes from. Note that all other message types name this field 'did'.") 31 + /** The repo this event comes from. Note that all other message types name this field 'did'. */ 32 32 @required 33 33 repo: did; 34 34 35 - @doc("Repo commit object CID.") 35 + /** Repo commit object CID. */ 36 36 @required 37 37 commit: cidLink; 38 38 39 - @doc("The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event.") 39 + /** The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event. */ 40 40 @required 41 41 rev: tid; 42 42 43 - @doc("The rev of the last emitted commit from this repo (if any).") 43 + /** The rev of the last emitted commit from this repo (if any). */ 44 44 @required 45 45 since: tid | null; 46 46 47 - @doc("CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list.") 47 + /** CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list. */ 48 48 @maxBytes(2000000) 49 49 @required 50 50 blocks: bytes; 51 51 52 52 @maxItems(200) 53 53 @required 54 - @doc("List of repo mutation operations in this commit (eg, records created, updated, or deleted).") 54 + /** List of repo mutation operations in this commit (eg, records created, updated, or deleted). */ 55 55 ops: RepoOp[]; 56 56 57 - @doc("DEPRECATED -- will soon always be empty. List of new blobs (by CID) referenced by records in this commit.") 57 + /** DEPRECATED -- will soon always be empty. List of new blobs (by CID) referenced by records in this commit. */ 58 58 @required blobs: cidLink[]; 59 59 60 - @doc("The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose.") 60 + /** The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose. */ 61 61 prevData?: cidLink; 62 62 63 - @doc("Timestamp of when this message was originally broadcast.") 63 + /** Timestamp of when this message was originally broadcast. */ 64 64 @required 65 65 time: datetime; 66 66 } 67 67 68 - @doc("Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository.") 68 + /** Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository. */ 69 69 model Sync { 70 - @doc("The stream sequence number of this message.") 70 + /** The stream sequence number of this message. */ 71 71 @required 72 72 seq: integer; 73 73 74 - @doc("The account this repo event corresponds to. Must match that in the commit object.") 74 + /** The account this repo event corresponds to. Must match that in the commit object. */ 75 75 @required 76 76 did: did; 77 77 78 - @doc("CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'.") 78 + /** CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'. */ 79 79 @maxBytes(10000) 80 80 @required 81 81 blocks: bytes; 82 82 83 - @doc("The rev of the commit. This value must match that in the commit object.") 83 + /** The rev of the commit. This value must match that in the commit object. */ 84 84 @required 85 85 rev: string; 86 86 87 - @doc("Timestamp of when this message was originally broadcast.") 87 + /** Timestamp of when this message was originally broadcast. */ 88 88 @required 89 89 time: datetime; 90 90 } 91 91 92 - @doc("Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache.") 92 + /** Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache. */ 93 93 model Identity { 94 94 @required seq: integer; 95 95 @required did: did; 96 96 @required time: datetime; 97 97 98 - @doc("The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details.") 98 + /** The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details. */ 99 99 handle?: handle; 100 100 } 101 101 102 - @doc("Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active.") 102 + /** Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active. */ 103 103 model Account { 104 104 @required seq: integer; 105 105 @required did: did; 106 106 @required time: datetime; 107 107 108 - @doc("Indicates that the account has a repository which can be fetched from the host that emitted this event.") 108 + /** Indicates that the account has a repository which can be fetched from the host that emitted this event. */ 109 109 @required 110 110 active: boolean; 111 111 112 - @doc("If active=false, this optional field indicates a reason for why the account is not active.") 112 + /** If active=false, this optional field indicates a reason for why the account is not active. */ 113 113 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 114 114 } 115 115 ··· 118 118 message?: string; 119 119 } 120 120 121 - @doc("A repo operation, ie a mutation of a single record.") 121 + /** A repo operation, ie a mutation of a single record. */ 122 122 model RepoOp { 123 123 @required action: "create" | "update" | "delete" | string; 124 124 @required path: string; 125 125 126 - @doc("For creates and updates, the new record CID. For deletions, null.") 126 + /** For creates and updates, the new record CID. For deletions, null. */ 127 127 @required 128 128 cid: cidLink | null; 129 129 130 - @doc("For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined.") 130 + /** For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined. */ 131 131 prev?: cidLink; 132 132 } 133 133 }
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/temp/addReservedHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.addReservedHandle { 4 - @doc("Add a handle to the set of reserved handles.") 4 + /** Add a handle to the set of reserved handles. */ 5 5 @procedure 6 6 op main( 7 7 input: {
+10 -10
packages/emitter/test/integration/atproto/input/com/atproto/temp/checkHandleAvailability.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.checkHandleAvailability { 4 - @doc("An invalid email was provided.") 4 + /** An invalid email was provided. */ 5 5 model InvalidEmail {} 6 6 7 - @doc("Indicates the provided handle is available.") 7 + /** Indicates the provided handle is available. */ 8 8 model ResultAvailable {} 9 9 10 - @doc("Indicates the provided handle is unavailable and gives suggestions of available handles.") 10 + /** Indicates the provided handle is unavailable and gives suggestions of available handles. */ 11 11 model ResultUnavailable { 12 - @doc("List of suggested handles based on the provided inputs.") 12 + /** List of suggested handles based on the provided inputs. */ 13 13 @required 14 14 suggestions: Suggestion[]; 15 15 } ··· 17 17 model Suggestion { 18 18 @required handle: handle; 19 19 20 - @doc("Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics.") 20 + /** Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics. */ 21 21 @required 22 22 method: string; 23 23 } 24 24 25 - @doc("Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions.") 25 + /** Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions. */ 26 26 @query 27 27 @errors(InvalidEmail) 28 28 op main( 29 - @doc("Tentative handle. Will be checked for availability or used to build handle suggestions.") 29 + /** Tentative handle. Will be checked for availability or used to build handle suggestions. */ 30 30 handle: handle, 31 31 32 - @doc("User-provided email. Might be used to build handle suggestions.") 32 + /** User-provided email. Might be used to build handle suggestions. */ 33 33 email?: string, 34 34 35 - @doc("User-provided birth date. Might be used to build handle suggestions.") 35 + /** User-provided birth date. Might be used to build handle suggestions. */ 36 36 birthDate?: datetime 37 37 ): { 38 - @doc("Echo of the input handle.") 38 + /** Echo of the input handle. */ 39 39 @required 40 40 handle: handle; 41 41
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/temp/checkSignupQueue.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.checkSignupQueue { 4 - @doc("Check accounts location in signup queue.") 4 + /** Check accounts location in signup queue. */ 5 5 @query 6 6 op main(): { 7 7 @required activated: boolean;
+4 -4
packages/emitter/test/integration/atproto/input/com/atproto/temp/dereferenceScope.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.dereferenceScope { 4 - @doc("An invalid scope reference was provided.") 4 + /** An invalid scope reference was provided. */ 5 5 model InvalidScopeReference {} 6 6 7 - @doc("Allows finding the oauth permission scope from a reference") 7 + /** Allows finding the oauth permission scope from a reference */ 8 8 @query 9 9 @errors(InvalidScopeReference) 10 10 op main( 11 - @doc("The scope reference (starts with 'ref:')") 11 + /** The scope reference (starts with 'ref:') */ 12 12 scope: string 13 13 ): { 14 - @doc("The full oauth permission scope") 14 + /** The full oauth permission scope */ 15 15 @required 16 16 scope: string; 17 17 };
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/temp/fetchLabels.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.fetchLabels { 4 - @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.") 4 + /** DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date. */ 5 5 @query 6 6 op main( 7 7 since?: integer,
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/temp/requestPhoneVerification.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.requestPhoneVerification { 4 - @doc("Request a verification code to be sent to the supplied phone number") 4 + /** Request a verification code to be sent to the supplied phone number */ 5 5 @procedure 6 6 op main( 7 7 input: {
+1 -1
packages/emitter/test/integration/atproto/input/com/atproto/temp/revokeAccountCredentials.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.revokeAccountCredentials { 4 - @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.") 4 + /** Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset. */ 5 5 @procedure 6 6 op main( 7 7 input: {
+6 -6
packages/emitter/test/integration/atproto/input/tools/ozone/communication/createTemplate.tsp
··· 3 3 namespace tools.ozone.communication.createTemplate { 4 4 model DuplicateTemplateName {} 5 5 6 - @doc("Administrative action to create a new, re-usable communication (email for now) template.") 6 + /** Administrative action to create a new, re-usable communication (email for now) template. */ 7 7 @procedure 8 8 @errors(DuplicateTemplateName) 9 9 op main(input: { 10 - @doc("Subject of the message, used in emails.") 10 + /** Subject of the message, used in emails. */ 11 11 @required 12 12 subject: string; 13 13 14 - @doc("Content of the template, markdown supported, can contain variable placeholders.") 14 + /** Content of the template, markdown supported, can contain variable placeholders. */ 15 15 @required 16 16 contentMarkdown: string; 17 17 18 - @doc("Name of the template.") 18 + /** Name of the template. */ 19 19 @required 20 20 name: string; 21 21 22 - @doc("Message language.") 22 + /** Message language. */ 23 23 lang?: language; 24 24 25 - @doc("DID of the user who is creating the template.") 25 + /** DID of the user who is creating the template. */ 26 26 createdBy?: did; 27 27 }): tools.ozone.communication.defs.TemplateView; 28 28 }
+5 -5
packages/emitter/test/integration/atproto/input/tools/ozone/communication/defs.tsp
··· 4 4 model TemplateView { 5 5 @required id: string; 6 6 7 - @doc("Name of the template.") 7 + /** Name of the template. */ 8 8 @required 9 9 name: string; 10 10 11 - @doc("Content of the template, can contain markdown and variable placeholders.") 11 + /** Content of the template, can contain markdown and variable placeholders. */ 12 12 subject?: string; 13 13 14 - @doc("Subject of the message, used in emails.") 14 + /** Subject of the message, used in emails. */ 15 15 @required 16 16 contentMarkdown: string; 17 17 18 18 @required disabled: boolean; 19 19 20 - @doc("Message language.") 20 + /** Message language. */ 21 21 lang?: language; 22 22 23 - @doc("DID of the user who last updated the template.") 23 + /** DID of the user who last updated the template. */ 24 24 @required 25 25 lastUpdatedBy: did; 26 26
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/communication/deleteTemplate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.communication.deleteTemplate { 4 - @doc("Delete a communication template.") 4 + /** Delete a communication template. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required id: string;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/communication/listTemplates.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.communication.listTemplates { 4 - @doc("Get list of all communication templates.") 4 + /** Get list of all communication templates. */ 5 5 @query 6 6 op main(): { 7 7 @required communicationTemplates: tools.ozone.communication.defs.TemplateView[];
+7 -7
packages/emitter/test/integration/atproto/input/tools/ozone/communication/updateTemplate.tsp
··· 3 3 namespace tools.ozone.communication.updateTemplate { 4 4 model DuplicateTemplateName {} 5 5 6 - @doc("Administrative action to update an existing communication template. Allows passing partial fields to patch specific fields only.") 6 + /** Administrative action to update an existing communication template. Allows passing partial fields to patch specific fields only. */ 7 7 @procedure 8 8 @errors(DuplicateTemplateName) 9 9 op main(input: { 10 - @doc("ID of the template to be updated.") 10 + /** ID of the template to be updated. */ 11 11 @required 12 12 id: string; 13 13 14 - @doc("Name of the template.") 14 + /** Name of the template. */ 15 15 name?: string; 16 16 17 - @doc("Message language.") 17 + /** Message language. */ 18 18 lang?: language; 19 19 20 - @doc("Content of the template, markdown supported, can contain variable placeholders.") 20 + /** Content of the template, markdown supported, can contain variable placeholders. */ 21 21 contentMarkdown?: string; 22 22 23 - @doc("Subject of the message, used in emails.") 23 + /** Subject of the message, used in emails. */ 24 24 subject?: string; 25 25 26 - @doc("DID of the user who is updating the template.") 26 + /** DID of the user who is updating the template. */ 27 27 updatedBy?: did; 28 28 29 29 disabled?: boolean;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/hosting/getAccountHistory.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.hosting.getAccountHistory { 4 - @doc("Get account history, e.g. log of updated email addresses or other identity information.") 4 + /** Get account history, e.g. log of updated email addresses or other identity information. */ 5 5 @query 6 6 op main( 7 7 @required did: did,
+92 -92
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/defs.tsp
··· 94 94 subjectBlobCids?: cid[]; 95 95 subjectRepoHandle?: string; 96 96 97 - @doc("Timestamp referencing the first moderation status impacting event was emitted on the subject") 97 + /** Timestamp referencing the first moderation status impacting event was emitted on the subject */ 98 98 @required 99 99 createdAt: datetime; 100 100 101 - @doc("Timestamp referencing when the last update was made to the moderation status of the subject") 101 + /** Timestamp referencing when the last update was made to the moderation status of the subject */ 102 102 @required 103 103 updatedAt: datetime; 104 104 105 105 @required reviewState: SubjectReviewState; 106 106 107 - @doc("Sticky comment on the subject.") 107 + /** Sticky comment on the subject. */ 108 108 comment?: string; 109 109 110 - @doc("Numeric value representing the level of priority. Higher score means higher priority.") 110 + /** Numeric value representing the level of priority. Higher score means higher priority. */ 111 111 @minValue(0) 112 112 @maxValue(100) 113 113 priorityScore?: int32; ··· 118 118 lastReviewedAt?: datetime; 119 119 lastReportedAt?: datetime; 120 120 121 - @doc("Timestamp referencing when the author of the subject appealed a moderation action") 121 + /** Timestamp referencing when the author of the subject appealed a moderation action */ 122 122 lastAppealedAt?: datetime; 123 123 124 124 takendown?: boolean; 125 125 126 - @doc("True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators.") 126 + /** True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators. */ 127 127 appealed?: boolean; 128 128 129 129 suspendUntil?: datetime; 130 130 tags?: string[]; 131 131 132 - @doc("Statistics related to the account subject") 132 + /** Statistics related to the account subject */ 133 133 accountStats?: AccountStats; 134 134 135 - @doc("Statistics related to the record subjects authored by the subject's account") 135 + /** Statistics related to the record subjects authored by the subject's account */ 136 136 recordsStats?: RecordsStats; 137 137 138 - @doc("Current age assurance state of the subject.") 138 + /** Current age assurance state of the subject. */ 139 139 ageAssuranceState?: "pending" | "assured" | "unknown" | "reset" | "blocked" | string; 140 140 141 - @doc("Whether or not the last successful update to age assurance was made by the user or admin.") 141 + /** Whether or not the last successful update to age assurance was made by the user or admin. */ 142 142 ageAssuranceUpdatedBy?: "admin" | "user" | string; 143 143 } 144 144 145 - @doc("Detailed view of a subject. For record subjects, the author's repo and profile will be returned.") 145 + /** Detailed view of a subject. For record subjects, the author's repo and profile will be returned. */ 146 146 model SubjectView { 147 147 @required type: com.atproto.moderation.defs.SubjectType; 148 148 @required subject: string; ··· 152 152 record?: RecordViewDetail; 153 153 } 154 154 155 - @doc("Statistics about a particular account subject") 155 + /** Statistics about a particular account subject */ 156 156 model AccountStats { 157 - @doc("Total number of reports on the account") 157 + /** Total number of reports on the account */ 158 158 reportCount?: int32; 159 159 160 - @doc("Total number of appeals against a moderation action on the account") 160 + /** Total number of appeals against a moderation action on the account */ 161 161 appealCount?: int32; 162 162 163 - @doc("Number of times the account was suspended") 163 + /** Number of times the account was suspended */ 164 164 suspendCount?: int32; 165 165 166 - @doc("Number of times the account was escalated") 166 + /** Number of times the account was escalated */ 167 167 escalateCount?: int32; 168 168 169 - @doc("Number of times the account was taken down") 169 + /** Number of times the account was taken down */ 170 170 takedownCount?: int32; 171 171 } 172 172 173 - @doc("Statistics about a set of record subject items") 173 + /** Statistics about a set of record subject items */ 174 174 model RecordsStats { 175 - @doc("Cumulative sum of the number of reports on the items in the set") 175 + /** Cumulative sum of the number of reports on the items in the set */ 176 176 totalReports?: int32; 177 177 178 - @doc("Number of items that were reported at least once") 178 + /** Number of items that were reported at least once */ 179 179 reportedCount?: int32; 180 180 181 - @doc("Number of items that were escalated at least once") 181 + /** Number of items that were escalated at least once */ 182 182 escalatedCount?: int32; 183 183 184 - @doc("Number of items that were appealed at least once") 184 + /** Number of items that were appealed at least once */ 185 185 appealedCount?: int32; 186 186 187 - @doc("Total number of item in the set") 187 + /** Total number of item in the set */ 188 188 subjectCount?: int32; 189 189 190 190 @doc("Number of item currently in \"reviewOpen\" or \"reviewEscalated\" state") ··· 193 193 @doc("Number of item currently in \"reviewNone\" or \"reviewClosed\" state") 194 194 processedCount?: int32; 195 195 196 - @doc("Number of item currently taken down") 196 + /** Number of item currently taken down */ 197 197 takendownCount?: int32; 198 198 } 199 199 ··· 205 205 string, 206 206 } 207 207 208 - @doc("Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator") 208 + /** Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator */ 209 209 @token 210 210 model ReviewOpen {} 211 211 212 - @doc("Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator") 212 + /** Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator */ 213 213 @token 214 214 model ReviewEscalated {} 215 215 216 - @doc("Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator") 216 + /** Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator */ 217 217 @token 218 218 model ReviewClosed {} 219 219 220 - @doc("Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it") 220 + /** Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it */ 221 221 @token 222 222 model ReviewNone {} 223 223 224 - @doc("Take down a subject permanently or temporarily") 224 + /** Take down a subject permanently or temporarily */ 225 225 model ModEventTakedown { 226 226 comment?: string; 227 227 228 - @doc("Indicates how long the takedown should be in effect before automatically expiring.") 228 + /** Indicates how long the takedown should be in effect before automatically expiring. */ 229 229 durationInHours?: int32; 230 230 231 - @doc("If true, all other reports on content authored by this account will be resolved (acknowledged).") 231 + /** If true, all other reports on content authored by this account will be resolved (acknowledged). */ 232 232 acknowledgeAccountSubjects?: boolean; 233 233 234 - @doc("Names/Keywords of the policies that drove the decision.") 234 + /** Names/Keywords of the policies that drove the decision. */ 235 235 @maxItems(5) 236 236 policies?: string[]; 237 237 } 238 238 239 - @doc("Revert take down action on a subject") 239 + /** Revert take down action on a subject */ 240 240 model ModEventReverseTakedown { 241 - @doc("Describe reasoning behind the reversal.") 241 + /** Describe reasoning behind the reversal. */ 242 242 comment?: string; 243 243 } 244 244 245 - @doc("Resolve appeal on a subject") 245 + /** Resolve appeal on a subject */ 246 246 model ModEventResolveAppeal { 247 - @doc("Describe resolution.") 247 + /** Describe resolution. */ 248 248 comment?: string; 249 249 } 250 250 251 - @doc("Add a comment to a subject. An empty comment will clear any previously set sticky comment.") 251 + /** Add a comment to a subject. An empty comment will clear any previously set sticky comment. */ 252 252 model ModEventComment { 253 253 comment?: string; 254 254 255 - @doc("Make the comment persistent on the subject") 255 + /** Make the comment persistent on the subject */ 256 256 sticky?: boolean; 257 257 } 258 258 259 - @doc("Report a subject") 259 + /** Report a subject */ 260 260 model ModEventReport { 261 261 comment?: string; 262 262 263 - @doc("Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject.") 263 + /** Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject. */ 264 264 isReporterMuted?: boolean; 265 265 266 266 @required reportType: com.atproto.moderation.defs.ReasonType; 267 267 } 268 268 269 - @doc("Apply/Negate labels on a subject") 269 + /** Apply/Negate labels on a subject */ 270 270 model ModEventLabel { 271 271 comment?: string; 272 272 @required createLabelVals: string[]; 273 273 @required negateLabelVals: string[]; 274 274 275 - @doc("Indicates how long the label will remain on the subject. Only applies on labels that are being added.") 275 + /** Indicates how long the label will remain on the subject. Only applies on labels that are being added. */ 276 276 durationInHours?: int32; 277 277 } 278 278 279 - @doc("Set priority score of the subject. Higher score means higher priority.") 279 + /** Set priority score of the subject. Higher score means higher priority. */ 280 280 model ModEventPriorityScore { 281 281 comment?: string; 282 282 ··· 286 286 score: int32; 287 287 } 288 288 289 - @doc("Age assurance info coming directly from users. Only works on DID subjects.") 289 + /** Age assurance info coming directly from users. Only works on DID subjects. */ 290 290 model AgeAssuranceEvent { 291 - @doc("The date and time of this write operation.") 291 + /** The date and time of this write operation. */ 292 292 @required 293 293 createdAt: datetime; 294 294 295 - @doc("The status of the age assurance process.") 295 + /** The status of the age assurance process. */ 296 296 @required 297 297 status: "unknown" | "pending" | "assured" | string; 298 298 299 - @doc("The unique identifier for this instance of the age assurance flow, in UUID format.") 299 + /** The unique identifier for this instance of the age assurance flow, in UUID format. */ 300 300 @required 301 301 attemptId: string; 302 302 303 - @doc("The IP address used when initiating the AA flow.") 303 + /** The IP address used when initiating the AA flow. */ 304 304 initIp?: string; 305 305 306 - @doc("The user agent used when initiating the AA flow.") 306 + /** The user agent used when initiating the AA flow. */ 307 307 initUa?: string; 308 308 309 - @doc("The IP address used when completing the AA flow.") 309 + /** The IP address used when completing the AA flow. */ 310 310 completeIp?: string; 311 311 312 - @doc("The user agent used when completing the AA flow.") 312 + /** The user agent used when completing the AA flow. */ 313 313 completeUa?: string; 314 314 } 315 315 316 - @doc("Age assurance status override by moderators. Only works on DID subjects.") 316 + /** Age assurance status override by moderators. Only works on DID subjects. */ 317 317 model AgeAssuranceOverrideEvent { 318 - @doc("Comment describing the reason for the override.") 318 + /** Comment describing the reason for the override. */ 319 319 @required 320 320 comment: string; 321 321 322 - @doc("The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.") 322 + /** The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state. */ 323 323 @required 324 324 status: "assured" | "reset" | "blocked" | string; 325 325 } 326 326 327 - @doc("Account credentials revocation by moderators. Only works on DID subjects.") 327 + /** Account credentials revocation by moderators. Only works on DID subjects. */ 328 328 model RevokeAccountCredentialsEvent { 329 - @doc("Comment describing the reason for the revocation.") 329 + /** Comment describing the reason for the revocation. */ 330 330 @required 331 331 comment: string; 332 332 } ··· 334 334 model ModEventAcknowledge { 335 335 comment?: string; 336 336 337 - @doc("If true, all other reports on content authored by this account will be resolved (acknowledged).") 337 + /** If true, all other reports on content authored by this account will be resolved (acknowledged). */ 338 338 acknowledgeAccountSubjects?: boolean; 339 339 } 340 340 ··· 342 342 comment?: string; 343 343 } 344 344 345 - @doc("Mute incoming reports on a subject") 345 + /** Mute incoming reports on a subject */ 346 346 model ModEventMute { 347 347 comment?: string; 348 348 349 - @doc("Indicates how long the subject should remain muted.") 349 + /** Indicates how long the subject should remain muted. */ 350 350 @required 351 351 durationInHours: int32; 352 352 } 353 353 354 - @doc("Unmute action on a subject") 354 + /** Unmute action on a subject */ 355 355 model ModEventUnmute { 356 - @doc("Describe reasoning behind the reversal.") 356 + /** Describe reasoning behind the reversal. */ 357 357 comment?: string; 358 358 } 359 359 360 - @doc("Mute incoming reports from an account") 360 + /** Mute incoming reports from an account */ 361 361 model ModEventMuteReporter { 362 362 comment?: string; 363 363 364 - @doc("Indicates how long the account should remain muted. Falsy value here means a permanent mute.") 364 + /** Indicates how long the account should remain muted. Falsy value here means a permanent mute. */ 365 365 durationInHours?: int32; 366 366 } 367 367 368 - @doc("Unmute incoming reports from an account") 368 + /** Unmute incoming reports from an account */ 369 369 model ModEventUnmuteReporter { 370 - @doc("Describe reasoning behind the reversal.") 370 + /** Describe reasoning behind the reversal. */ 371 371 comment?: string; 372 372 } 373 373 374 - @doc("Keep a log of outgoing email to a user") 374 + /** Keep a log of outgoing email to a user */ 375 375 model ModEventEmail { 376 - @doc("The subject line of the email sent to the user.") 376 + /** The subject line of the email sent to the user. */ 377 377 @required 378 378 subjectLine: string; 379 379 380 - @doc("The content of the email sent to the user.") 380 + /** The content of the email sent to the user. */ 381 381 content?: string; 382 382 383 - @doc("Additional comment about the outgoing comm.") 383 + /** Additional comment about the outgoing comm. */ 384 384 comment?: string; 385 385 } 386 386 387 - @doc("Divert a record's blobs to a 3rd party service for further scanning/tagging") 387 + /** Divert a record's blobs to a 3rd party service for further scanning/tagging */ 388 388 model ModEventDivert { 389 389 comment?: string; 390 390 } 391 391 392 - @doc("Add/Remove a tag on a subject") 392 + /** Add/Remove a tag on a subject */ 393 393 model ModEventTag { 394 - @doc("Tags to be added to the subject. If already exists, won't be duplicated.") 394 + /** Tags to be added to the subject. If already exists, won't be duplicated. */ 395 395 @required 396 396 add: string[]; 397 397 398 - @doc("Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated.") 398 + /** Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated. */ 399 399 @required 400 400 remove: string[]; 401 401 402 - @doc("Additional comment about added/removed tags.") 402 + /** Additional comment about added/removed tags. */ 403 403 comment?: string; 404 404 } 405 405 406 - @doc("Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.") 406 + /** Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking. */ 407 407 model AccountEvent { 408 408 comment?: string; 409 409 @required timestamp: datetime; 410 410 411 - @doc("Indicates that the account has a repository which can be fetched from the host that emitted this event.") 411 + /** Indicates that the account has a repository which can be fetched from the host that emitted this event. */ 412 412 @required 413 413 active: boolean; 414 414 415 415 status?: "unknown" | "deactivated" | "deleted" | "takendown" | "suspended" | "tombstoned" | string; 416 416 } 417 417 418 - @doc("Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.") 418 + /** Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking. */ 419 419 model IdentityEvent { 420 420 comment?: string; 421 421 handle?: handle; ··· 424 424 @required timestamp: datetime; 425 425 } 426 426 427 - @doc("Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.") 427 + /** Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking. */ 428 428 model RecordEvent { 429 429 comment?: string; 430 430 @required timestamp: datetime; ··· 546 546 model ReporterStats { 547 547 @required did: did; 548 548 549 - @doc("The total number of reports made by the user on accounts.") 549 + /** The total number of reports made by the user on accounts. */ 550 550 @required 551 551 accountReportCount: int32; 552 552 553 - @doc("The total number of reports made by the user on records.") 553 + /** The total number of reports made by the user on records. */ 554 554 @required 555 555 recordReportCount: int32; 556 556 557 - @doc("The total number of accounts reported by the user.") 557 + /** The total number of accounts reported by the user. */ 558 558 @required 559 559 reportedAccountCount: int32; 560 560 561 - @doc("The total number of records reported by the user.") 561 + /** The total number of records reported by the user. */ 562 562 @required 563 563 reportedRecordCount: int32; 564 564 565 - @doc("The total number of accounts taken down as a result of the user's reports.") 565 + /** The total number of accounts taken down as a result of the user's reports. */ 566 566 @required 567 567 takendownAccountCount: int32; 568 568 569 - @doc("The total number of records taken down as a result of the user's reports.") 569 + /** The total number of records taken down as a result of the user's reports. */ 570 570 @required 571 571 takendownRecordCount: int32; 572 572 573 - @doc("The total number of accounts labeled as a result of the user's reports.") 573 + /** The total number of accounts labeled as a result of the user's reports. */ 574 574 @required 575 575 labeledAccountCount: int32; 576 576 577 - @doc("The total number of records labeled as a result of the user's reports.") 577 + /** The total number of records labeled as a result of the user's reports. */ 578 578 @required 579 579 labeledRecordCount: int32; 580 580 } 581 581 582 - @doc("Moderation tool information for tracing the source of the action") 582 + /** Moderation tool information for tracing the source of the action */ 583 583 model ModTool { 584 - @doc("Name/identifier of the source (e.g., 'automod', 'ozone/workspace')") 584 + /** Name/identifier of the source (e.g., 'automod', 'ozone/workspace') */ 585 585 @required 586 586 name: string; 587 587 588 - @doc("Additional arbitrary metadata about the source") 588 + /** Additional arbitrary metadata about the source */ 589 589 meta?: unknown; 590 590 } 591 591 592 - @doc("Moderation event timeline event for a PLC create operation") 592 + /** Moderation event timeline event for a PLC create operation */ 593 593 @token 594 594 model TimelineEventPlcCreate {} 595 595 596 - @doc("Moderation event timeline event for generic PLC operation") 596 + /** Moderation event timeline event for generic PLC operation */ 597 597 @token 598 598 model TimelineEventPlcOperation {} 599 599 600 - @doc("Moderation event timeline event for a PLC tombstone operation") 600 + /** Moderation event timeline event for a PLC tombstone operation */ 601 601 @token 602 602 model TimelineEventPlcTombstone {} 603 603 }
+3 -3
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/emitEvent.tsp
··· 3 3 namespace tools.ozone.moderation.emitEvent { 4 4 model SubjectHasAction {} 5 5 6 - @doc("An event with the same external ID already exists for the subject.") 6 + /** An event with the same external ID already exists for the subject. */ 7 7 model DuplicateExternalId {} 8 8 9 - @doc("Take a moderation action on an actor.") 9 + /** Take a moderation action on an actor. */ 10 10 @procedure 11 11 @errors(SubjectHasAction, DuplicateExternalId) 12 12 op main(input: { ··· 50 50 51 51 modTool?: tools.ozone.moderation.defs.ModTool; 52 52 53 - @doc("An optional external ID for the event, used to deduplicate events from external systems. Fails when an event of same type with the same external ID exists for the same subject.") 53 + /** An optional external ID for the event, used to deduplicate events from external systems. Fails when an event of same type with the same external ID exists for the same subject. */ 54 54 externalId?: string; 55 55 }): tools.ozone.moderation.defs.ModEventView; 56 56 }
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getAccountTimeline.tsp
··· 3 3 namespace tools.ozone.moderation.getAccountTimeline { 4 4 model RepoNotFound {} 5 5 6 - @doc("Get timeline of all available events of an account. This includes moderation events, account history and did history.") 6 + /** Get timeline of all available events of an account. This includes moderation events, account history and did history. */ 7 7 @query 8 8 @errors(RepoNotFound) 9 9 op main(@required did: did): {
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getEvent.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.getEvent { 4 - @doc("Get details about a moderation event.") 4 + /** Get details about a moderation event. */ 5 5 @query 6 6 op main(@required id: integer): tools.ozone.moderation.defs.ModEventViewDetail; 7 7 }
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getRecord.tsp
··· 3 3 namespace tools.ozone.moderation.getRecord { 4 4 model RecordNotFound {} 5 5 6 - @doc("Get details about a record.") 6 + /** Get details about a record. */ 7 7 @query 8 8 @errors(RecordNotFound) 9 9 op main(@required uri: atUri, cid?: cid): tools.ozone.moderation.defs.RecordViewDetail;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getRecords.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.getRecords { 4 - @doc("Get details about some records.") 4 + /** Get details about some records. */ 5 5 @query 6 6 op main( 7 7 @maxItems(100)
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getRepo.tsp
··· 3 3 namespace tools.ozone.moderation.getRepo { 4 4 model RepoNotFound {} 5 5 6 - @doc("Get details about a repository.") 6 + /** Get details about a repository. */ 7 7 @query 8 8 @errors(RepoNotFound) 9 9 op main(@required did: did): tools.ozone.moderation.defs.RepoViewDetail;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getReporterStats.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.getReporterStats { 4 - @doc("Get reporter stats for a list of users.") 4 + /** Get reporter stats for a list of users. */ 5 5 @query 6 6 op main( 7 7 @maxItems(100)
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getRepos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.getRepos { 4 - @doc("Get details about some repositories.") 4 + /** Get details about some repositories. */ 5 5 @query 6 6 op main( 7 7 @maxItems(100)
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/getSubjects.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.getSubjects { 4 - @doc("Get details about subjects.") 4 + /** Get details about subjects. */ 5 5 @query 6 6 op main( 7 7 @minItems(1)
+18 -18
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/queryEvents.tsp
··· 8 8 "desc", 9 9 } 10 10 11 - @doc("List moderation events related to a subject.") 11 + /** List moderation events related to a subject. */ 12 12 @query 13 13 op main( 14 - @doc("The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent<name>) to filter by. If not specified, all events are returned.") 14 + /** The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent<name>) to filter by. If not specified, all events are returned. */ 15 15 types?: string[], 16 16 17 17 createdBy?: did, 18 18 19 - @doc("Sort direction for the events. Defaults to descending order of created at timestamp.") 19 + /** Sort direction for the events. Defaults to descending order of created at timestamp. */ 20 20 sortDirection?: SortDirection = "desc", 21 21 22 - @doc("Retrieve events created after a given timestamp") 22 + /** Retrieve events created after a given timestamp */ 23 23 createdAfter?: datetime, 24 24 25 - @doc("Retrieve events created before a given timestamp") 25 + /** Retrieve events created before a given timestamp */ 26 26 createdBefore?: datetime, 27 27 28 28 subject?: uri, 29 29 30 30 @maxItems(20) 31 - @doc("If specified, only events where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored.") 31 + /** If specified, only events where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored. */ 32 32 collections?: nsid[], 33 33 34 - @doc("If specified, only events where the subject is of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored.") 34 + /** If specified, only events where the subject is of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored. */ 35 35 subjectType?: "account" | "record" | string, 36 36 37 - @doc("If true, events on all record types (posts, lists, profile etc.) or records from given 'collections' param, owned by the did are returned.") 37 + /** If true, events on all record types (posts, lists, profile etc.) or records from given 'collections' param, owned by the did are returned. */ 38 38 includeAllUserRecords?: boolean = false, 39 39 40 40 @minValue(1) 41 41 @maxValue(100) 42 42 limit?: int32 = 50, 43 43 44 - @doc("If true, only events with comments are returned") 44 + /** If true, only events with comments are returned */ 45 45 hasComment?: boolean, 46 46 47 - @doc("If specified, only events with comments containing the keyword are returned. Apply || separator to use multiple keywords and match using OR condition.") 47 + /** If specified, only events with comments containing the keyword are returned. Apply || separator to use multiple keywords and match using OR condition. */ 48 48 comment?: string, 49 49 50 - @doc("If specified, only events where all of these labels were added are returned") 50 + /** If specified, only events where all of these labels were added are returned */ 51 51 addedLabels?: string[], 52 52 53 - @doc("If specified, only events where all of these labels were removed are returned") 53 + /** If specified, only events where all of these labels were removed are returned */ 54 54 removedLabels?: string[], 55 55 56 - @doc("If specified, only events where all of these tags were added are returned") 56 + /** If specified, only events where all of these tags were added are returned */ 57 57 addedTags?: string[], 58 58 59 - @doc("If specified, only events where all of these tags were removed are returned") 59 + /** If specified, only events where all of these tags were removed are returned */ 60 60 removedTags?: string[], 61 61 62 62 reportTypes?: string[], 63 63 64 - @doc("If specified, only events where the action policies match any of the given policies are returned") 64 + /** If specified, only events where the action policies match any of the given policies are returned */ 65 65 policies?: string[], 66 66 67 - @doc("If specified, only events where the modTool name matches any of the given values are returned") 67 + /** If specified, only events where the modTool name matches any of the given values are returned */ 68 68 modTool?: string[], 69 69 70 - @doc("If specified, only events where the batchId matches the given value are returned") 70 + /** If specified, only events where the batchId matches the given value are returned */ 71 71 batchId?: string, 72 72 73 - @doc("If specified, only events where the age assurance state matches the given value are returned") 73 + /** If specified, only events where the age assurance state matches the given value are returned */ 74 74 ageAssuranceState?: "pending" | "assured" | "unknown" | "reset" | "blocked" | string, 75 75 76 76 cursor?: string
+30 -30
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/queryStatuses.tsp
··· 18 18 "desc", 19 19 } 20 20 21 - @doc("View moderation statuses of subjects (record or repo).") 21 + /** View moderation statuses of subjects (record or repo). */ 22 22 @query 23 23 op main( 24 - @doc("Number of queues being used by moderators. Subjects will be split among all queues.") 24 + /** Number of queues being used by moderators. Subjects will be split among all queues. */ 25 25 queueCount?: integer, 26 26 27 - @doc("Index of the queue to fetch subjects from. Works only when queueCount value is specified.") 27 + /** Index of the queue to fetch subjects from. Works only when queueCount value is specified. */ 28 28 queueIndex?: integer, 29 29 30 - @doc("A seeder to shuffle/balance the queue items.") 30 + /** A seeder to shuffle/balance the queue items. */ 31 31 queueSeed?: string, 32 32 33 - @doc("All subjects, or subjects from given 'collections' param, belonging to the account specified in the 'subject' param will be returned.") 33 + /** All subjects, or subjects from given 'collections' param, belonging to the account specified in the 'subject' param will be returned. */ 34 34 includeAllUserRecords?: boolean, 35 35 36 - @doc("The subject to get the status for.") 36 + /** The subject to get the status for. */ 37 37 subject?: uri, 38 38 39 - @doc("Search subjects by keyword from comments") 39 + /** Search subjects by keyword from comments */ 40 40 comment?: string, 41 41 42 - @doc("Search subjects reported after a given timestamp") 42 + /** Search subjects reported after a given timestamp */ 43 43 reportedAfter?: datetime, 44 44 45 - @doc("Search subjects reported before a given timestamp") 45 + /** Search subjects reported before a given timestamp */ 46 46 reportedBefore?: datetime, 47 47 48 - @doc("Search subjects reviewed after a given timestamp") 48 + /** Search subjects reviewed after a given timestamp */ 49 49 reviewedAfter?: datetime, 50 50 51 - @doc("Search subjects where the associated record/account was deleted after a given timestamp") 51 + /** Search subjects where the associated record/account was deleted after a given timestamp */ 52 52 hostingDeletedAfter?: datetime, 53 53 54 - @doc("Search subjects where the associated record/account was deleted before a given timestamp") 54 + /** Search subjects where the associated record/account was deleted before a given timestamp */ 55 55 hostingDeletedBefore?: datetime, 56 56 57 - @doc("Search subjects where the associated record/account was updated after a given timestamp") 57 + /** Search subjects where the associated record/account was updated after a given timestamp */ 58 58 hostingUpdatedAfter?: datetime, 59 59 60 - @doc("Search subjects where the associated record/account was updated before a given timestamp") 60 + /** Search subjects where the associated record/account was updated before a given timestamp */ 61 61 hostingUpdatedBefore?: datetime, 62 62 63 - @doc("Search subjects by the status of the associated record/account") 63 + /** Search subjects by the status of the associated record/account */ 64 64 hostingStatuses?: string[], 65 65 66 - @doc("Search subjects reviewed before a given timestamp") 66 + /** Search subjects reviewed before a given timestamp */ 67 67 reviewedBefore?: datetime, 68 68 69 - @doc("By default, we don't include muted subjects in the results. Set this to true to include them.") 69 + /** By default, we don't include muted subjects in the results. Set this to true to include them. */ 70 70 includeMuted?: boolean, 71 71 72 - @doc("When set to true, only muted subjects and reporters will be returned.") 72 + /** When set to true, only muted subjects and reporters will be returned. */ 73 73 onlyMuted?: boolean, 74 74 75 - @doc("Specify when fetching subjects in a certain state") 75 + /** Specify when fetching subjects in a certain state */ 76 76 reviewState?: string, 77 77 78 78 ignoreSubjects?: uri[], 79 79 80 - @doc("Get all subject statuses that were reviewed by a specific moderator") 80 + /** Get all subject statuses that were reviewed by a specific moderator */ 81 81 lastReviewedBy?: did, 82 82 83 83 sortField?: SortField = "lastReportedAt", 84 84 85 85 sortDirection?: SortDirection = "desc", 86 86 87 - @doc("Get subjects that were taken down") 87 + /** Get subjects that were taken down */ 88 88 takendown?: boolean, 89 89 90 - @doc("Get subjects in unresolved appealed status") 90 + /** Get subjects in unresolved appealed status */ 91 91 appealed?: boolean, 92 92 93 93 @minValue(1) 94 94 @maxValue(100) 95 95 limit?: int32 = 50, 96 96 97 - @doc("Items in this array are applied with OR filters. To apply AND filter, put all tags in the same string and separate using && characters") 97 + /** Items in this array are applied with OR filters. To apply AND filter, put all tags in the same string and separate using && characters */ 98 98 @maxItems(25) 99 99 tags?: string[], 100 100 ··· 103 103 cursor?: string, 104 104 105 105 @maxItems(20) 106 - @doc("If specified, subjects belonging to the given collections will be returned. When subjectType is set to 'account', this will be ignored.") 106 + /** If specified, subjects belonging to the given collections will be returned. When subjectType is set to 'account', this will be ignored. */ 107 107 collections?: nsid[], 108 108 109 - @doc("If specified, subjects of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored.") 109 + /** If specified, subjects of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored. */ 110 110 subjectType?: "account" | "record" | string, 111 111 112 - @doc("If specified, only subjects that belong to an account that has at least this many suspensions will be returned.") 112 + /** If specified, only subjects that belong to an account that has at least this many suspensions will be returned. */ 113 113 minAccountSuspendCount?: integer, 114 114 115 - @doc("If specified, only subjects that belong to an account that has at least this many reported records will be returned.") 115 + /** If specified, only subjects that belong to an account that has at least this many reported records will be returned. */ 116 116 minReportedRecordsCount?: integer, 117 117 118 - @doc("If specified, only subjects that belong to an account that has at least this many taken down records will be returned.") 118 + /** If specified, only subjects that belong to an account that has at least this many taken down records will be returned. */ 119 119 minTakendownRecordsCount?: integer, 120 120 121 121 @minValue(0) 122 122 @maxValue(100) 123 - @doc("If specified, only subjects that have priority score value above the given value will be returned.") 123 + /** If specified, only subjects that have priority score value above the given value will be returned. */ 124 124 minPriorityScore?: integer, 125 125 126 - @doc("If specified, only subjects with the given age assurance state will be returned.") 126 + /** If specified, only subjects with the given age assurance state will be returned. */ 127 127 ageAssuranceState?: "pending" | "assured" | "unknown" | "reset" | "blocked" | string 128 128 ): { 129 129 cursor?: string;
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/moderation/searchRepos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.moderation.searchRepos { 4 - @doc("Find repositories based on a search term.") 4 + /** Find repositories based on a search term. */ 5 5 @query 6 6 op main( 7 - @doc("DEPRECATED: use 'q' instead") 7 + /** DEPRECATED: use 'q' instead */ 8 8 term?: string, 9 9 10 10 q?: string,
+45 -45
packages/emitter/test/integration/atproto/input/tools/ozone/report/defs.tsp
··· 58 58 ReasonCivicImpersonation: "tools.ozone.report.defs#reasonCivicImpersonation", 59 59 } 60 60 61 - @doc("Appeal a previously taken moderation action") 61 + /** Appeal a previously taken moderation action */ 62 62 @token 63 63 model ReasonAppeal {} 64 64 65 - @doc("Animal welfare violations") 65 + /** Animal welfare violations */ 66 66 @token 67 67 model ReasonViolenceAnimalWelfare {} 68 68 69 - @doc("Threats or incitement") 69 + /** Threats or incitement */ 70 70 @token 71 71 model ReasonViolenceThreats {} 72 72 73 - @doc("Graphic violent content") 73 + /** Graphic violent content */ 74 74 @token 75 75 model ReasonViolenceGraphicContent {} 76 76 77 - @doc("Self harm") 77 + /** Self harm */ 78 78 @token 79 79 model ReasonViolenceSelfHarm {} 80 80 81 - @doc("Glorification of violence") 81 + /** Glorification of violence */ 82 82 @token 83 83 model ReasonViolenceGlorification {} 84 84 85 - @doc("Extremist content. These reports will be sent only be sent to the application's Moderation Authority.") 85 + /** Extremist content. These reports will be sent only be sent to the application's Moderation Authority. */ 86 86 @token 87 87 model ReasonViolenceExtremistContent {} 88 88 89 - @doc("Human trafficking") 89 + /** Human trafficking */ 90 90 @token 91 91 model ReasonViolenceTrafficking {} 92 92 93 - @doc("Other violent content") 93 + /** Other violent content */ 94 94 @token 95 95 model ReasonViolenceOther {} 96 96 97 - @doc("Adult sexual abuse content") 97 + /** Adult sexual abuse content */ 98 98 @token 99 99 model ReasonSexualAbuseContent {} 100 100 101 - @doc("Non-consensual intimate imagery") 101 + /** Non-consensual intimate imagery */ 102 102 @token 103 103 model ReasonSexualNCII {} 104 104 105 - @doc("Sextortion") 105 + /** Sextortion */ 106 106 @token 107 107 model ReasonSexualSextortion {} 108 108 109 - @doc("Deepfake adult content") 109 + /** Deepfake adult content */ 110 110 @token 111 111 model ReasonSexualDeepfake {} 112 112 113 - @doc("Animal sexual abuse") 113 + /** Animal sexual abuse */ 114 114 @token 115 115 model ReasonSexualAnimal {} 116 116 117 - @doc("Unlabelled adult content") 117 + /** Unlabelled adult content */ 118 118 @token 119 119 model ReasonSexualUnlabeled {} 120 120 121 - @doc("Other sexual violence content") 121 + /** Other sexual violence content */ 122 122 @token 123 123 model ReasonSexualOther {} 124 124 125 - @doc("Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority.") 125 + /** Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority. */ 126 126 @token 127 127 model ReasonChildSafetyCSAM {} 128 128 129 - @doc("Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority.") 129 + /** Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority. */ 130 130 @token 131 131 model ReasonChildSafetyGroom {} 132 132 133 - @doc("Privacy violation involving a minor") 133 + /** Privacy violation involving a minor */ 134 134 @token 135 135 model ReasonChildSafetyMinorPrivacy {} 136 136 137 - @doc("Child endangerment. These reports will be sent only be sent to the application's Moderation Authority.") 137 + /** Child endangerment. These reports will be sent only be sent to the application's Moderation Authority. */ 138 138 @token 139 139 model ReasonChildSafetyEndangerment {} 140 140 141 - @doc("Harassment or bullying of minors") 141 + /** Harassment or bullying of minors */ 142 142 @token 143 143 model ReasonChildSafetyHarassment {} 144 144 145 - @doc("Promotion of child exploitation. These reports will be sent only be sent to the application's Moderation Authority.") 145 + /** Promotion of child exploitation. These reports will be sent only be sent to the application's Moderation Authority. */ 146 146 @token 147 147 model ReasonChildSafetyPromotion {} 148 148 149 - @doc("Other child safety. These reports will be sent only be sent to the application's Moderation Authority.") 149 + /** Other child safety. These reports will be sent only be sent to the application's Moderation Authority. */ 150 150 @token 151 151 model ReasonChildSafetyOther {} 152 152 153 - @doc("Trolling") 153 + /** Trolling */ 154 154 @token 155 155 model ReasonHarassmentTroll {} 156 156 157 - @doc("Targeted harassment") 157 + /** Targeted harassment */ 158 158 @token 159 159 model ReasonHarassmentTargeted {} 160 160 161 - @doc("Hate speech") 161 + /** Hate speech */ 162 162 @token 163 163 model ReasonHarassmentHateSpeech {} 164 164 165 - @doc("Doxxing") 165 + /** Doxxing */ 166 166 @token 167 167 model ReasonHarassmentDoxxing {} 168 168 169 - @doc("Other harassing or hateful content") 169 + /** Other harassing or hateful content */ 170 170 @token 171 171 model ReasonHarassmentOther {} 172 172 173 - @doc("Fake account or bot") 173 + /** Fake account or bot */ 174 174 @token 175 175 model ReasonMisleadingBot {} 176 176 177 - @doc("Impersonation") 177 + /** Impersonation */ 178 178 @token 179 179 model ReasonMisleadingImpersonation {} 180 180 181 - @doc("Spam") 181 + /** Spam */ 182 182 @token 183 183 model ReasonMisleadingSpam {} 184 184 185 - @doc("Scam") 185 + /** Scam */ 186 186 @token 187 187 model ReasonMisleadingScam {} 188 188 189 - @doc("Unlabelled gen-AI or synthetic content") 189 + /** Unlabelled gen-AI or synthetic content */ 190 190 @token 191 191 model ReasonMisleadingSyntheticContent {} 192 192 193 - @doc("Harmful false claims") 193 + /** Harmful false claims */ 194 194 @token 195 195 model ReasonMisleadingMisinformation {} 196 196 197 - @doc("Other misleading content") 197 + /** Other misleading content */ 198 198 @token 199 199 model ReasonMisleadingOther {} 200 200 201 - @doc("Hacking or system attacks") 201 + /** Hacking or system attacks */ 202 202 @token 203 203 model ReasonRuleSiteSecurity {} 204 204 205 - @doc("Stolen content") 205 + /** Stolen content */ 206 206 @token 207 207 model ReasonRuleStolenContent {} 208 208 209 - @doc("Promoting or selling prohibited items or services") 209 + /** Promoting or selling prohibited items or services */ 210 210 @token 211 211 model ReasonRuleProhibitedSales {} 212 212 213 - @doc("Banned user returning") 213 + /** Banned user returning */ 214 214 @token 215 215 model ReasonRuleBanEvasion {} 216 216 217 - @doc("Other") 217 + /** Other */ 218 218 @token 219 219 model ReasonRuleOther {} 220 220 221 - @doc("Electoral process violations") 221 + /** Electoral process violations */ 222 222 @token 223 223 model ReasonCivicElectoralProcess {} 224 224 225 - @doc("Disclosure & transparency violations") 225 + /** Disclosure & transparency violations */ 226 226 @token 227 227 model ReasonCivicDisclosure {} 228 228 229 - @doc("Voter intimidation or interference") 229 + /** Voter intimidation or interference */ 230 230 @token 231 231 model ReasonCivicInterference {} 232 232 233 - @doc("Election misinformation") 233 + /** Election misinformation */ 234 234 @token 235 235 model ReasonCivicMisinformation {} 236 236 237 - @doc("Impersonation of electoral officials/entities") 237 + /** Impersonation of electoral officials/entities */ 238 238 @token 239 239 model ReasonCivicImpersonation {} 240 240 }
+6 -6
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/addRule.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.addRule { 4 - @doc("The provided URL is invalid") 4 + /** The provided URL is invalid */ 5 5 model InvalidUrl {} 6 6 7 - @doc("A rule for this URL/domain already exists") 7 + /** A rule for this URL/domain already exists */ 8 8 model RuleAlreadyExists {} 9 9 10 - @doc("Add a new URL safety rule") 10 + /** Add a new URL safety rule */ 11 11 @procedure 12 12 @errors(InvalidUrl, RuleAlreadyExists) 13 13 op main(input: { 14 - @doc("The URL or domain to apply the rule to") 14 + /** The URL or domain to apply the rule to */ 15 15 @required 16 16 url: string; 17 17 ··· 21 21 22 22 @required reason: tools.ozone.safelink.defs.ReasonType; 23 23 24 - @doc("Optional comment about the decision") 24 + /** Optional comment about the decision */ 25 25 comment?: string; 26 26 27 - @doc("Author DID. Only respected when using admin auth") 27 + /** Author DID. Only respected when using admin auth */ 28 28 createdBy?: did; 29 29 }): tools.ozone.safelink.defs.Event; 30 30 }
+11 -11
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.defs { 4 - @doc("An event for URL safety decisions") 4 + /** An event for URL safety decisions */ 5 5 model Event { 6 - @doc("Auto-incrementing row ID") 6 + /** Auto-incrementing row ID */ 7 7 @required 8 8 id: int32; 9 9 10 10 @required eventType: EventType; 11 11 12 - @doc("The URL that this rule applies to") 12 + /** The URL that this rule applies to */ 13 13 @required 14 14 url: string; 15 15 ··· 17 17 @required action: ActionType; 18 18 @required reason: ReasonType; 19 19 20 - @doc("DID of the user who created this rule") 20 + /** DID of the user who created this rule */ 21 21 @required 22 22 createdBy: did; 23 23 24 24 @required createdAt: datetime; 25 25 26 - @doc("Optional comment about the decision") 26 + /** Optional comment about the decision */ 27 27 comment?: string; 28 28 } 29 29 ··· 55 55 string, 56 56 } 57 57 58 - @doc("Input for creating a URL safety rule") 58 + /** Input for creating a URL safety rule */ 59 59 model UrlRule { 60 - @doc("The URL or domain to apply the rule to") 60 + /** The URL or domain to apply the rule to */ 61 61 @required 62 62 url: string; 63 63 ··· 65 65 @required action: ActionType; 66 66 @required reason: ReasonType; 67 67 68 - @doc("Optional comment about the decision") 68 + /** Optional comment about the decision */ 69 69 comment?: string; 70 70 71 - @doc("DID of the user added the rule.") 71 + /** DID of the user added the rule. */ 72 72 @required 73 73 createdBy: did; 74 74 75 - @doc("Timestamp when the rule was created") 75 + /** Timestamp when the rule was created */ 76 76 @required 77 77 createdAt: datetime; 78 78 79 - @doc("Timestamp when the rule was last updated") 79 + /** Timestamp when the rule was last updated */ 80 80 @required 81 81 updatedAt: datetime; 82 82 }
+7 -7
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/queryEvents.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.queryEvents { 4 - @doc("Query URL safety audit events") 4 + /** Query URL safety audit events */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Cursor for pagination") 7 + /** Cursor for pagination */ 8 8 cursor?: string; 9 9 10 10 @minValue(1) 11 11 @maxValue(100) 12 - @doc("Maximum number of results to return") 12 + /** Maximum number of results to return */ 13 13 limit?: int32 = 50; 14 14 15 - @doc("Filter by specific URLs or domains") 15 + /** Filter by specific URLs or domains */ 16 16 urls?: string[]; 17 17 18 - @doc("Filter by pattern type") 18 + /** Filter by pattern type */ 19 19 patternType?: string; 20 20 21 - @doc("Sort direction") 21 + /** Sort direction */ 22 22 sortDirection?: "asc" | "desc" | string = "desc"; 23 23 }): { 24 - @doc("Next cursor for pagination. Only present if there are more results.") 24 + /** Next cursor for pagination. Only present if there are more results. */ 25 25 cursor?: string; 26 26 27 27 @required events: tools.ozone.safelink.defs.Event[];
+10 -10
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/queryRules.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.queryRules { 4 - @doc("Query URL safety rules") 4 + /** Query URL safety rules */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Cursor for pagination") 7 + /** Cursor for pagination */ 8 8 cursor?: string; 9 9 10 10 @minValue(1) 11 11 @maxValue(100) 12 - @doc("Maximum number of results to return") 12 + /** Maximum number of results to return */ 13 13 limit?: int32 = 50; 14 14 15 - @doc("Filter by specific URLs or domains") 15 + /** Filter by specific URLs or domains */ 16 16 urls?: string[]; 17 17 18 - @doc("Filter by pattern type") 18 + /** Filter by pattern type */ 19 19 patternType?: string; 20 20 21 - @doc("Filter by action types") 21 + /** Filter by action types */ 22 22 actions?: string[]; 23 23 24 - @doc("Filter by reason type") 24 + /** Filter by reason type */ 25 25 reason?: string; 26 26 27 - @doc("Filter by rule creator") 27 + /** Filter by rule creator */ 28 28 createdBy?: did; 29 29 30 - @doc("Sort direction") 30 + /** Sort direction */ 31 31 sortDirection?: "asc" | "desc" | string = "desc"; 32 32 }): { 33 - @doc("Next cursor for pagination. Only present if there are more results.") 33 + /** Next cursor for pagination. Only present if there are more results. */ 34 34 cursor?: string; 35 35 36 36 @required rules: tools.ozone.safelink.defs.UrlRule[];
+5 -5
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/removeRule.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.removeRule { 4 - @doc("No active rule found for this URL/domain") 4 + /** No active rule found for this URL/domain */ 5 5 model RuleNotFound {} 6 6 7 - @doc("Remove an existing URL safety rule") 7 + /** Remove an existing URL safety rule */ 8 8 @procedure 9 9 @errors(RuleNotFound) 10 10 op main(input: { 11 - @doc("The URL or domain to remove the rule for") 11 + /** The URL or domain to remove the rule for */ 12 12 @required 13 13 url: string; 14 14 15 15 @required pattern: tools.ozone.safelink.defs.PatternType; 16 16 17 - @doc("Optional comment about why the rule is being removed") 17 + /** Optional comment about why the rule is being removed */ 18 18 comment?: string; 19 19 20 - @doc("Optional DID of the user. Only respected when using admin auth.") 20 + /** Optional DID of the user. Only respected when using admin auth. */ 21 21 createdBy?: did; 22 22 }): tools.ozone.safelink.defs.Event; 23 23 }
+5 -5
packages/emitter/test/integration/atproto/input/tools/ozone/safelink/updateRule.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.safelink.updateRule { 4 - @doc("No active rule found for this URL/domain") 4 + /** No active rule found for this URL/domain */ 5 5 model RuleNotFound {} 6 6 7 - @doc("Update an existing URL safety rule") 7 + /** Update an existing URL safety rule */ 8 8 @procedure 9 9 @errors(RuleNotFound) 10 10 op main(input: { 11 - @doc("The URL or domain to update the rule for") 11 + /** The URL or domain to update the rule for */ 12 12 @required 13 13 url: string; 14 14 ··· 18 18 19 19 @required reason: tools.ozone.safelink.defs.ReasonType; 20 20 21 - @doc("Optional comment about the update") 21 + /** Optional comment about the update */ 22 22 comment?: string; 23 23 24 - @doc("Optional DID to credit as the creator. Only respected for admin_token authentication.") 24 + /** Optional DID to credit as the creator. Only respected for admin_token authentication. */ 25 25 createdBy?: did; 26 26 }): tools.ozone.safelink.defs.Event; 27 27 }
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/server/getConfig.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.server.getConfig { 4 - @doc("Get details about ozone's server configuration.") 4 + /** Get details about ozone's server configuration. */ 5 5 @query 6 6 op main(): { 7 7 appview?: ServiceConfig; ··· 10 10 chat?: ServiceConfig; 11 11 viewer?: ViewerConfig; 12 12 13 - @doc("The did of the verifier used for verification.") 13 + /** The did of the verifier used for verification. */ 14 14 verifierDid?: did; 15 15 }; 16 16
+3 -3
packages/emitter/test/integration/atproto/input/tools/ozone/set/addValues.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.set.addValues { 4 - @doc("Add values to a specific set. Attempting to add values to a set that does not exist will result in an error.") 4 + /** Add values to a specific set. Attempting to add values to a set that does not exist will result in an error. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Name of the set to add values to") 7 + /** Name of the set to add values to */ 8 8 @required 9 9 name: string; 10 10 11 11 @minItems(1) 12 12 @maxItems(1000) 13 - @doc("Array of string values to add to the set") 13 + /** Array of string values to add to the set */ 14 14 @required 15 15 values: string[]; 16 16 }): void;
+3 -3
packages/emitter/test/integration/atproto/input/tools/ozone/set/deleteSet.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.set.deleteSet { 4 - @doc("set with the given name does not exist") 4 + /** set with the given name does not exist */ 5 5 model SetNotFound {} 6 6 7 - @doc("Delete an entire set. Attempting to delete a set that does not exist will result in an error.") 7 + /** Delete an entire set. Attempting to delete a set that does not exist will result in an error. */ 8 8 @procedure 9 9 @errors(SetNotFound) 10 10 op main(input: { 11 - @doc("Name of the set to delete") 11 + /** Name of the set to delete */ 12 12 @required 13 13 name: string; 14 14 }): {};
+4 -4
packages/emitter/test/integration/atproto/input/tools/ozone/set/deleteValues.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.set.deleteValues { 4 - @doc("set with the given name does not exist") 4 + /** set with the given name does not exist */ 5 5 model SetNotFound {} 6 6 7 - @doc("Delete values from a specific set. Attempting to delete values that are not in the set will not result in an error") 7 + /** Delete values from a specific set. Attempting to delete values that are not in the set will not result in an error */ 8 8 @procedure 9 9 @errors(SetNotFound) 10 10 op main(input: { 11 - @doc("Name of the set to delete values from") 11 + /** Name of the set to delete values from */ 12 12 @required 13 13 name: string; 14 14 15 15 @minItems(1) 16 - @doc("Array of string values to delete from the set") 16 + /** Array of string values to delete from the set */ 17 17 @required 18 18 values: string[]; 19 19 }): void;
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/set/getValues.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.set.getValues { 4 - @doc("set with the given name does not exist") 4 + /** set with the given name does not exist */ 5 5 model SetNotFound {} 6 6 7 - @doc("Get a specific set and its values") 7 + /** Get a specific set and its values */ 8 8 @query 9 9 @errors(SetNotFound) 10 10 op main(
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/set/querySets.tsp
··· 16 16 "desc", 17 17 } 18 18 19 - @doc("Query available sets") 19 + /** Query available sets */ 20 20 @query 21 21 op main( 22 22 @minValue(1) ··· 29 29 30 30 sortBy?: SortBy = "name", 31 31 32 - @doc("Defaults to ascending order of name field.") 32 + /** Defaults to ascending order of name field. */ 33 33 sortDirection?: SortDirection = "asc" 34 34 ): { 35 35 @required sets: tools.ozone.set.defs.SetView[];
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/set/upsertSet.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.set.upsertSet { 4 - @doc("Create or update set metadata") 4 + /** Create or update set metadata */ 5 5 @procedure 6 6 op main(input: tools.ozone.set.defs.Set): tools.ozone.set.defs.SetView; 7 7 }
+3 -3
packages/emitter/test/integration/atproto/input/tools/ozone/setting/listOptions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.setting.listOptions { 4 - @doc("List settings with optional filtering") 4 + /** List settings with optional filtering */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 12 12 13 13 scope?: "instance" | "personal" | string = "instance", 14 14 15 - @doc("Filter keys by prefix") 15 + /** Filter keys by prefix */ 16 16 prefix?: string, 17 17 18 18 @maxItems(100) 19 - @doc("Filter for only the specified keys. Ignored if prefix is provided") 19 + /** Filter for only the specified keys. Ignored if prefix is provided */ 20 20 keys?: nsid[] 21 21 ): { 22 22 cursor?: string;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/setting/removeOptions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.setting.removeOptions { 4 - @doc("Delete settings by key") 4 + /** Delete settings by key */ 5 5 @procedure 6 6 op main(input: { 7 7 @minItems(1)
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/setting/upsertOption.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.setting.upsertOption { 4 - @doc("Create or update setting option") 4 + /** Create or update setting option */ 5 5 @procedure 6 6 op main(input: { 7 7 @required key: nsid;
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/signature/findCorrelation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.signature.findCorrelation { 4 - @doc("Find all correlated threat signatures between 2 or more accounts.") 4 + /** Find all correlated threat signatures between 2 or more accounts. */ 5 5 @query 6 6 op main(@required dids: did[]): { 7 7 @required details: tools.ozone.signature.defs.SigDetail[];
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/signature/findRelatedAccounts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.signature.findRelatedAccounts { 4 - @doc("Get accounts that share some matching threat signatures with the root account.") 4 + /** Get accounts that share some matching threat signatures with the root account. */ 5 5 @query 6 6 op main( 7 7 @required did: did,
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/signature/searchAccounts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.signature.searchAccounts { 4 - @doc("Search for accounts that match one or more threat signature values.") 4 + /** Search for accounts that match one or more threat signature values. */ 5 5 @query 6 6 op main( 7 7 @required values: string[],
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/team/addMember.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.team.addMember { 4 - @doc("Member already exists in the team.") 4 + /** Member already exists in the team. */ 5 5 model MemberAlreadyExists {} 6 6 7 - @doc("Add a member to the ozone team. Requires admin role.") 7 + /** Add a member to the ozone team. Requires admin role. */ 8 8 @procedure 9 9 @errors(MemberAlreadyExists) 10 10 op main(input: {
+4 -4
packages/emitter/test/integration/atproto/input/tools/ozone/team/defs.tsp
··· 11 11 @required role: "#roleAdmin" | "#roleModerator" | "#roleTriage" | "#roleVerifier" | string; 12 12 } 13 13 14 - @doc("Admin role. Highest level of access, can perform all actions.") 14 + /** Admin role. Highest level of access, can perform all actions. */ 15 15 @token 16 16 model RoleAdmin {} 17 17 18 - @doc("Moderator role. Can perform most actions.") 18 + /** Moderator role. Can perform most actions. */ 19 19 @token 20 20 model RoleModerator {} 21 21 22 - @doc("Triage role. Mostly intended for monitoring and escalating issues.") 22 + /** Triage role. Mostly intended for monitoring and escalating issues. */ 23 23 @token 24 24 model RoleTriage {} 25 25 26 - @doc("Verifier role. Only allowed to issue verifications.") 26 + /** Verifier role. Only allowed to issue verifications. */ 27 27 @token 28 28 model RoleVerifier {} 29 29 }
+3 -3
packages/emitter/test/integration/atproto/input/tools/ozone/team/deleteMember.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.team.deleteMember { 4 - @doc("The member being deleted does not exist") 4 + /** The member being deleted does not exist */ 5 5 model MemberNotFound {} 6 6 7 - @doc("You can not delete yourself from the team") 7 + /** You can not delete yourself from the team */ 8 8 model CannotDeleteSelf {} 9 9 10 - @doc("Delete a member from ozone team. Requires admin role.") 10 + /** Delete a member from ozone team. Requires admin role. */ 11 11 @procedure 12 12 @errors(MemberNotFound, CannotDeleteSelf) 13 13 op main(input: {
+1 -1
packages/emitter/test/integration/atproto/input/tools/ozone/team/listMembers.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.team.listMembers { 4 - @doc("List all members with access to the ozone service.") 4 + /** List all members with access to the ozone service. */ 5 5 @query 6 6 op main( 7 7 q?: string,
+2 -2
packages/emitter/test/integration/atproto/input/tools/ozone/team/updateMember.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.team.updateMember { 4 - @doc("The member being updated does not exist in the team") 4 + /** The member being updated does not exist in the team */ 5 5 model MemberNotFound {} 6 6 7 - @doc("Update a member in the ozone service. Requires admin role.") 7 + /** Update a member in the ozone service. Requires admin role. */ 8 8 @procedure 9 9 @errors(MemberNotFound) 10 10 op main(input: {
+10 -10
packages/emitter/test/integration/atproto/input/tools/ozone/verification/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.verification.defs { 4 - @doc("Verification data for the associated subject.") 4 + /** Verification data for the associated subject. */ 5 5 model VerificationView { 6 - @doc("The user who issued this verification.") 6 + /** The user who issued this verification. */ 7 7 @required 8 8 issuer: did; 9 9 10 - @doc("The AT-URI of the verification record.") 10 + /** The AT-URI of the verification record. */ 11 11 @required 12 12 uri: atUri; 13 13 14 - @doc("The subject of the verification.") 14 + /** The subject of the verification. */ 15 15 @required 16 16 subject: did; 17 17 18 - @doc("Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying.") 18 + /** Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying. */ 19 19 @required 20 20 handle: handle; 21 21 22 - @doc("Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying.") 22 + /** Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying. */ 23 23 @required 24 24 displayName: string; 25 25 26 - @doc("Timestamp when the verification was created.") 26 + /** Timestamp when the verification was created. */ 27 27 @required 28 28 createdAt: datetime; 29 29 30 - @doc("Describes the reason for revocation, also indicating that the verification is no longer valid.") 30 + /** Describes the reason for revocation, also indicating that the verification is no longer valid. */ 31 31 revokeReason?: string; 32 32 33 - @doc("Timestamp when the verification was revoked.") 33 + /** Timestamp when the verification was revoked. */ 34 34 revokedAt?: datetime; 35 35 36 - @doc("The user who revoked this verification.") 36 + /** The user who revoked this verification. */ 37 37 revokedBy?: did; 38 38 39 39 subjectProfile?: (never | unknown);
+9 -9
packages/emitter/test/integration/atproto/input/tools/ozone/verification/grantVerifications.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.verification.grantVerifications { 4 - @doc("Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once.") 4 + /** Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Array of verification requests to process") 7 + /** Array of verification requests to process */ 8 8 @maxItems(100) 9 9 @required 10 10 verifications: VerificationInput[]; ··· 14 14 }; 15 15 16 16 model VerificationInput { 17 - @doc("The did of the subject being verified") 17 + /** The did of the subject being verified */ 18 18 @required 19 19 subject: did; 20 20 21 - @doc("Handle of the subject the verification applies to at the moment of verifying.") 21 + /** Handle of the subject the verification applies to at the moment of verifying. */ 22 22 @required 23 23 handle: handle; 24 24 25 - @doc("Display name of the subject the verification applies to at the moment of verifying.") 25 + /** Display name of the subject the verification applies to at the moment of verifying. */ 26 26 @required 27 27 displayName: string; 28 28 29 - @doc("Timestamp for verification record. Defaults to current time when not specified.") 29 + /** Timestamp for verification record. Defaults to current time when not specified. */ 30 30 createdAt?: datetime; 31 31 } 32 32 33 - @doc("Error object for failed verifications.") 33 + /** Error object for failed verifications. */ 34 34 model GrantError { 35 - @doc("Error message describing the reason for failure.") 35 + /** Error message describing the reason for failure. */ 36 36 @required 37 37 error: string; 38 38 39 - @doc("The did of the subject being verified") 39 + /** The did of the subject being verified */ 40 40 @required 41 41 subject: did; 42 42 }
+9 -9
packages/emitter/test/integration/atproto/input/tools/ozone/verification/listVerifications.tsp
··· 8 8 "desc", 9 9 } 10 10 11 - @doc("List verifications") 11 + /** List verifications */ 12 12 @query 13 13 op main( 14 - @doc("Pagination cursor") 14 + /** Pagination cursor */ 15 15 cursor?: string, 16 16 17 - @doc("Maximum number of results to return") 17 + /** Maximum number of results to return */ 18 18 @minValue(1) 19 19 @maxValue(100) 20 20 limit?: int32 = 50, 21 21 22 - @doc("Filter to verifications created after this timestamp") 22 + /** Filter to verifications created after this timestamp */ 23 23 createdAfter?: datetime, 24 24 25 - @doc("Filter to verifications created before this timestamp") 25 + /** Filter to verifications created before this timestamp */ 26 26 createdBefore?: datetime, 27 27 28 - @doc("Filter to verifications from specific issuers") 28 + /** Filter to verifications from specific issuers */ 29 29 @maxItems(100) 30 30 issuers?: did[], 31 31 32 - @doc("Filter to specific verified DIDs") 32 + /** Filter to specific verified DIDs */ 33 33 @maxItems(100) 34 34 subjects?: did[], 35 35 36 - @doc("Sort direction for creation date") 36 + /** Sort direction for creation date */ 37 37 sortDirection?: SortDirection = "desc", 38 38 39 - @doc("Filter to verifications that are revoked or not. By default, includes both.") 39 + /** Filter to verifications that are revoked or not. By default, includes both. */ 40 40 isRevoked?: boolean 41 41 ): { 42 42 cursor?: string;
+8 -8
packages/emitter/test/integration/atproto/input/tools/ozone/verification/revokeVerifications.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace tools.ozone.verification.revokeVerifications { 4 - @doc("Revoke previously granted verifications in batches of up to 100.") 4 + /** Revoke previously granted verifications in batches of up to 100. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Array of verification record uris to revoke") 7 + /** Array of verification record uris to revoke */ 8 8 @maxItems(100) 9 9 @required 10 10 uris: atUri[]; 11 11 12 - @doc("Reason for revoking the verification. This is optional and can be omitted if not needed.") 12 + /** Reason for revoking the verification. This is optional and can be omitted if not needed. */ 13 13 @maxLength(1000) 14 14 revokeReason?: string; 15 15 }): { 16 - @doc("List of verification uris successfully revoked") 16 + /** List of verification uris successfully revoked */ 17 17 @required 18 18 revokedVerifications: atUri[]; 19 19 20 - @doc("List of verification uris that couldn't be revoked, including failure reasons") 20 + /** List of verification uris that couldn't be revoked, including failure reasons */ 21 21 @required 22 22 failedRevocations: RevokeError[]; 23 23 }; 24 24 25 - @doc("Error object for failed revocations") 25 + /** Error object for failed revocations */ 26 26 model RevokeError { 27 - @doc("The AT-URI of the verification record that failed to revoke.") 27 + /** The AT-URI of the verification record that failed to revoke. */ 28 28 @required 29 29 uri: atUri; 30 30 31 - @doc("Description of the error that occurred during revocation.") 31 + /** Description of the error that occurred during revocation. */ 32 32 @required 33 33 error: string; 34 34 }
+2 -2
packages/emitter/test/integration/atproto/output/app/bsky/richtext/facet.json
··· 16 16 }, 17 17 "mention": { 18 18 "type": "object", 19 - "description": "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.", 19 + "description": "Facet feature for mention of another account. The text is usually a handle, including a `@` prefix, but the facet reference is a DID.", 20 20 "required": ["did"], 21 21 "properties": { 22 22 "did": { "type": "string", "format": "did" } ··· 32 32 }, 33 33 "tag": { 34 34 "type": "object", 35 - "description": "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').", 35 + "description": "Facet feature for a hashtag. The text usually includes a `#` prefix, but the facet reference should not (except in the case of 'double hash tags').", 36 36 "required": ["tag"], 37 37 "properties": { 38 38 "tag": { "type": "string", "maxLength": 640, "maxGraphemes": 64 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/deleteAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.deleteAccount { 4 - @doc("Delete a user account as an administrator.") 4 + /** Delete a user account as an administrator. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/disableAccountInvites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.disableAccountInvites { 4 - @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.") 4 + /** Disable an account from receiving new invite codes, but does not invalidate existing codes. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required account: did; 8 8 9 - @doc("Optional reason for disabled invites.") 9 + /** Optional reason for disabled invites. */ 10 10 note?: string; 11 11 }): void; 12 12 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/disableInviteCodes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.disableInviteCodes { 4 - @doc("Disable some set of codes and/or all codes associated with a set of users.") 4 + /** Disable some set of codes and/or all codes associated with a set of users. */ 5 5 @procedure 6 6 op main(input: { 7 7 codes?: string[];
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/enableAccountInvites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.enableAccountInvites { 4 - @doc("Re-enable an account's ability to receive invite codes.") 4 + /** Re-enable an account's ability to receive invite codes. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required account: did; 8 8 9 - @doc("Optional reason for enabled invites.") 9 + /** Optional reason for enabled invites. */ 10 10 note?: string; 11 11 }): void; 12 12 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/getAccountInfo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getAccountInfo { 4 - @doc("Get details about an account.") 4 + /** Get details about an account. */ 5 5 @query 6 6 op main( 7 7 @required did: did
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/getAccountInfos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getAccountInfos { 4 - @doc("Get details about some accounts.") 4 + /** Get details about some accounts. */ 5 5 @query 6 6 op main( 7 7 @required dids: did[]
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/getInviteCodes.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getInviteCodes { 4 - @doc("Get an admin view of invite codes.") 4 + /** Get an admin view of invite codes. */ 5 5 @query 6 6 op main( 7 7 sort?: "recent" | "usage" | string = "recent",
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/getSubjectStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.getSubjectStatus { 4 - @doc("Get the service-specific admin status of a subject (account, record, or blob).") 4 + /** Get the service-specific admin status of a subject (account, record, or blob). */ 5 5 @query 6 6 op main( 7 7 did?: did,
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/searchAccounts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.searchAccounts { 4 - @doc("Get list of accounts that matches your search query.") 4 + /** Get list of accounts that matches your search query. */ 5 5 @query 6 6 op main( 7 7 email?: string,
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/sendEmail.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.sendEmail { 4 - @doc("Send email to a user's account email address.") 4 + /** Send email to a user's account email address. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required recipientDid: did; ··· 9 9 subject?: string; 10 10 @required senderDid: did; 11 11 12 - @doc("Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers") 12 + /** Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers */ 13 13 comment?: string; 14 14 }): { 15 15 @required sent: boolean;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/updateAccountEmail.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountEmail { 4 - @doc("Administrative action to update an account's email.") 4 + /** Administrative action to update an account's email. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 account: atIdentifier; 10 10
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/updateAccountHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountHandle { 4 - @doc("Administrative action to update an account's handle.") 4 + /** Administrative action to update an account's handle. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/updateAccountPassword.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountPassword { 4 - @doc("Update the password for a user account as an administrator.") 4 + /** Update the password for a user account as an administrator. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/updateAccountSigningKey.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateAccountSigningKey { 4 - @doc("Administrative action to update an account's signing key in their Did document.") 4 + /** Administrative action to update an account's signing key in their Did document. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required did: did; 8 8 9 - @doc("Did-key formatted public key") 9 + /** Did-key formatted public key */ 10 10 @required 11 11 signingKey: did; 12 12 }): void;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/admin/updateSubjectStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.admin.updateSubjectStatus { 4 - @doc("Update the service-specific admin status of a subject (account, record, or blob).") 4 + /** Update the service-specific admin status of a subject (account, record, or blob). */ 5 5 @procedure 6 6 op main(input: { 7 7 @required
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/defs.tsp
··· 4 4 model IdentityInfo { 5 5 @required did: did; 6 6 7 - @doc("The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document.") 7 + /** The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document. */ 8 8 @required 9 9 handle: handle; 10 10 11 - @doc("The complete DID document for the identity.") 11 + /** The complete DID document for the identity. */ 12 12 @required 13 13 didDoc: unknown; 14 14 }
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/getRecommendedDidCredentials.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.getRecommendedDidCredentials { 4 - @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.") 4 + /** Describe the credentials that should be included in the DID doc of an account that is migrating to this service. */ 5 5 @query 6 6 op main(): { 7 - @doc("Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs.") 7 + /** Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs. */ 8 8 rotationKeys?: string[]; 9 9 10 10 alsoKnownAs?: string[];
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/refreshIdentity.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.refreshIdentity { 4 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 4 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 5 5 model HandleNotFound {} 6 6 7 - @doc("The DID resolution process confirmed that there is no current DID.") 7 + /** The DID resolution process confirmed that there is no current DID. */ 8 8 model DidNotFound {} 9 9 10 - @doc("The DID previously existed, but has been deactivated.") 10 + /** The DID previously existed, but has been deactivated. */ 11 11 model DidDeactivated {} 12 12 13 - @doc("Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server.") 13 + /** Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server. */ 14 14 @procedure 15 15 @errors(HandleNotFound, DidNotFound, DidDeactivated) 16 16 op main(input: {
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/requestPlcOperationSignature.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.requestPlcOperationSignature { 4 - @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.") 4 + /** Request an email with a code to in order to request a signed PLC operation. Requires Auth. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/resolveDid.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveDid { 4 - @doc("Resolves DID to DID document. Does not bi-directionally verify handle.") 4 + /** Resolves DID to DID document. Does not bi-directionally verify handle. */ 5 5 @query 6 6 @errors(DidNotFound, DidDeactivated) 7 7 op main( 8 - @doc("DID to resolve.") 8 + /** DID to resolve. */ 9 9 @required 10 10 did: did 11 11 ): { 12 - @doc("The complete DID document for the identity.") 12 + /** The complete DID document for the identity. */ 13 13 @required 14 14 didDoc: unknown; 15 15 }; 16 16 17 - @doc("The DID resolution process confirmed that there is no current DID.") 17 + /** The DID resolution process confirmed that there is no current DID. */ 18 18 model DidNotFound {} 19 19 20 - @doc("The DID previously existed, but has been deactivated.") 20 + /** The DID previously existed, but has been deactivated. */ 21 21 model DidDeactivated {} 22 22 }
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/resolveHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveHandle { 4 - @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.") 4 + /** Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document. */ 5 5 @query 6 6 @errors(HandleNotFound) 7 7 op main( 8 - @doc("The handle to resolve.") 8 + /** The handle to resolve. */ 9 9 @required 10 10 handle: handle 11 11 ): { 12 12 @required did: did; 13 13 }; 14 14 15 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 15 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 16 16 model HandleNotFound {} 17 17 }
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/resolveIdentity.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.resolveIdentity { 4 - @doc("The resolution process confirmed that the handle does not resolve to any DID.") 4 + /** The resolution process confirmed that the handle does not resolve to any DID. */ 5 5 model HandleNotFound {} 6 6 7 - @doc("The DID resolution process confirmed that there is no current DID.") 7 + /** The DID resolution process confirmed that there is no current DID. */ 8 8 model DidNotFound {} 9 9 10 - @doc("The DID previously existed, but has been deactivated.") 10 + /** The DID previously existed, but has been deactivated. */ 11 11 model DidDeactivated {} 12 12 13 - @doc("Resolves an identity (DID or Handle) to a full identity (DID document and verified handle).") 13 + /** Resolves an identity (DID or Handle) to a full identity (DID document and verified handle). */ 14 14 @query 15 15 @errors(HandleNotFound, DidNotFound, DidDeactivated) 16 16 op main( 17 - @doc("Handle or DID to resolve.") 17 + /** Handle or DID to resolve. */ 18 18 @required 19 19 identifier: atIdentifier 20 20 ): com.atproto.identity.defs.IdentityInfo;
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/signPlcOperation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.signPlcOperation { 4 - @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.") 4 + /** Signs a PLC operation to update some value(s) in the requesting DID's document. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("A token received through com.atproto.identity.requestPlcOperationSignature") 7 + /** A token received through com.atproto.identity.requestPlcOperationSignature */ 8 8 token?: string; 9 9 10 10 rotationKeys?: string[]; ··· 15 15 16 16 services?: unknown; 17 17 }): { 18 - @doc("A signed DID PLC operation.") 18 + /** A signed DID PLC operation. */ 19 19 @required 20 20 operation: unknown; 21 21 };
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/submitPlcOperation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.submitPlcOperation { 4 - @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry") 4 + /** Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry */ 5 5 @procedure 6 6 op main(input: { 7 7 @required operation: unknown;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/identity/updateHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.identity.updateHandle { 4 - @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.") 4 + /** Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The new handle.") 7 + /** The new handle. */ 8 8 @required 9 9 handle: handle; 10 10 }): void;
+23 -23
packages/emitter/test/integration/lexicon-examples/input/com/atproto/label/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.label.defs { 4 - @doc("Metadata tag on an atproto resource (eg, repo or record).") 4 + /** Metadata tag on an atproto resource (eg, repo or record). */ 5 5 model Label { 6 - @doc("The AT Protocol version of the label object.") 6 + /** The AT Protocol version of the label object. */ 7 7 ver?: integer; 8 8 9 - @doc("DID of the actor who created this label.") 9 + /** DID of the actor who created this label. */ 10 10 @required 11 11 src: did; 12 12 13 - @doc("AT URI of the record, repository (account), or other resource that this label applies to.") 13 + /** AT URI of the record, repository (account), or other resource that this label applies to. */ 14 14 @required 15 15 uri: uri; 16 16 17 - @doc("Optionally, CID specifying the specific version of 'uri' resource this label applies to.") 17 + /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ 18 18 cid?: cid; 19 19 20 - @doc("The short string name of the value or type of this label.") 20 + /** The short string name of the value or type of this label. */ 21 21 @maxLength(128) 22 22 @required 23 23 val: string; 24 24 25 - @doc("If true, this is a negation label, overwriting a previous label.") 25 + /** If true, this is a negation label, overwriting a previous label. */ 26 26 neg?: boolean; 27 27 28 - @doc("Timestamp when this label was created.") 28 + /** Timestamp when this label was created. */ 29 29 @required 30 30 cts: datetime; 31 31 32 - @doc("Timestamp at which this label expires (no longer applies).") 32 + /** Timestamp at which this label expires (no longer applies). */ 33 33 exp?: datetime; 34 34 35 - @doc("Signature of dag-cbor encoded label.") 35 + /** Signature of dag-cbor encoded label. */ 36 36 sig?: bytes; 37 37 } 38 38 39 - @doc("Metadata tags on an atproto record, published by the author within the record.") 39 + /** Metadata tags on an atproto record, published by the author within the record. */ 40 40 model SelfLabels { 41 41 @maxItems(10) 42 42 @required 43 43 values: SelfLabel[]; 44 44 } 45 45 46 - @doc("Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.") 46 + /** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */ 47 47 model SelfLabel { 48 - @doc("The short string name of the value or type of this label.") 48 + /** The short string name of the value or type of this label. */ 49 49 @maxLength(128) 50 50 @required 51 51 val: string; 52 52 } 53 53 54 - @doc("Declares a label value and its expected interpretations and behaviors.") 54 + /** Declares a label value and its expected interpretations and behaviors. */ 55 55 model LabelValueDefinition { 56 - @doc("The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).") 56 + /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */ 57 57 @maxLength(100) 58 58 @maxGraphemes(100) 59 59 @required 60 60 identifier: string; 61 61 62 - @doc("How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.") 62 + /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */ 63 63 @required 64 64 severity: "inform" | "alert" | "none" | string; 65 65 66 - @doc("What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.") 66 + /** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */ 67 67 @required 68 68 blurs: "content" | "media" | "none" | string; 69 69 70 - @doc("The default setting for this label.") 70 + /** The default setting for this label. */ 71 71 defaultSetting?: "ignore" | "warn" | "hide" | string = "warn"; 72 72 73 - @doc("Does the user need to have adult content enabled in order to configure this label?") 73 + /** Does the user need to have adult content enabled in order to configure this label? */ 74 74 adultOnly?: boolean; 75 75 76 76 @required 77 77 locales: LabelValueDefinitionStrings[]; 78 78 } 79 79 80 - @doc("Strings which describe the label in the UI, localized into a specific language.") 80 + /** Strings which describe the label in the UI, localized into a specific language. */ 81 81 model LabelValueDefinitionStrings { 82 - @doc("The code of the language these strings are written in.") 82 + /** The code of the language these strings are written in. */ 83 83 @required 84 84 lang: language; 85 85 86 - @doc("A short human-readable name for the label.") 86 + /** A short human-readable name for the label. */ 87 87 @maxGraphemes(64) 88 88 @maxLength(640) 89 89 @required 90 90 name: string; 91 91 92 - @doc("A longer description of what the label means and why it might be applied.") 92 + /** A longer description of what the label means and why it might be applied. */ 93 93 @maxGraphemes(10000) 94 94 @maxLength(100000) 95 95 @required
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/label/queryLabels.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.label.queryLabels { 4 - @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.") 4 + /** Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth. */ 5 5 @query 6 6 op main( 7 - @doc("List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.") 7 + /** List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. */ 8 8 @required 9 9 uriPatterns: string[], 10 10 11 - @doc("Optional list of label sources (DIDs) to filter on.") 11 + /** Optional list of label sources (DIDs) to filter on. */ 12 12 sources?: did[], 13 13 14 14 @minValue(1)
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/label/subscribeLabels.tsp
··· 13 13 message?: string; 14 14 } 15 15 16 - @doc("Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream.") 16 + /** Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream. */ 17 17 @subscription 18 18 @errors(FutureCursor) 19 19 op main( 20 - @doc("The last known event seq number to backfill from.") 20 + /** The last known event seq number to backfill from. */ 21 21 cursor?: integer 22 22 ): (Labels | Info); 23 23 }
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/lexicon/schema.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.lexicon.schema { 4 - @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).") 4 + /** Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc). */ 5 5 @rec("nsid") 6 6 model Main { 7 - @doc("Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system.") 7 + /** Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system. */ 8 8 @required 9 9 lexicon: integer; 10 10 }
+6 -6
packages/emitter/test/integration/lexicon-examples/input/com/atproto/moderation/createReport.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.moderation.createReport { 4 - @doc("Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth.") 4 + /** Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Indicates the broad category of violation the report is for.") 7 + /** Indicates the broad category of violation the report is for. */ 8 8 @required 9 9 reasonType: com.atproto.moderation.defs.ReasonType; 10 10 11 11 @maxGraphemes(2000) 12 12 @maxLength(20000) 13 - @doc("Additional context about the content and violation.") 13 + /** Additional context about the content and violation. */ 14 14 reason?: string; 15 15 16 16 @required ··· 40 40 @required createdAt: datetime; 41 41 }; 42 42 43 - @doc("Moderation tool information for tracing the source of the action") 43 + /** Moderation tool information for tracing the source of the action */ 44 44 model ModTool { 45 - @doc("Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome')") 45 + /** Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome') */ 46 46 @required 47 47 name: string; 48 48 49 - @doc("Additional arbitrary metadata about the source") 49 + /** Additional arbitrary metadata about the source */ 50 50 meta?: unknown; 51 51 } 52 52 }
+8 -8
packages/emitter/test/integration/lexicon-examples/input/com/atproto/moderation/defs.tsp
··· 66 66 ToolsOzoneReportReasonCivicImpersonation: "tools.ozone.report.defs#reasonCivicImpersonation", 67 67 } 68 68 69 - @doc("Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`.") 69 + /** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. */ 70 70 @token 71 71 model ReasonSpam {} 72 72 73 - @doc("Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`.") 73 + /** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. */ 74 74 @token 75 75 model ReasonViolation {} 76 76 77 - @doc("Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`.") 77 + /** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. */ 78 78 @token 79 79 model ReasonMisleading {} 80 80 81 - @doc("Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`.") 81 + /** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. */ 82 82 @token 83 83 model ReasonSexual {} 84 84 85 - @doc("Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`.") 85 + /** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. */ 86 86 @token 87 87 model ReasonRude {} 88 88 89 - @doc("Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`.") 89 + /** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. */ 90 90 @token 91 91 model ReasonOther {} 92 92 93 - @doc("Appeal a previously taken moderation action") 93 + /** Appeal a previously taken moderation action */ 94 94 @token 95 95 model ReasonAppeal {} 96 96 97 - @doc("Tag describing a type of subject that might be reported.") 97 + /** Tag describing a type of subject that might be reported. */ 98 98 union SubjectType { 99 99 "account", 100 100 "record",
+9 -9
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/applyWrites.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.applyWrites { 4 - @doc("Indicates that the 'swapCommit' parameter did not match current commit.") 4 + /** Indicates that the 'swapCommit' parameter did not match current commit. */ 5 5 model InvalidSwap {} 6 6 7 7 @closed ··· 20 20 DeleteResult, 21 21 } 22 22 23 - @doc("Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.") 23 + /** Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS. */ 24 24 @procedure 25 25 @errors(InvalidSwap) 26 26 op main(input: { 27 - @doc("The handle or DID of the repo (aka, current account).") 27 + /** The handle or DID of the repo (aka, current account). */ 28 28 @required 29 29 repo: atIdentifier; 30 30 31 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.") 31 + /** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */ 32 32 validate?: boolean; 33 33 34 34 @required 35 35 writes: WriteAction[]; 36 36 37 - @doc("If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.") 37 + /** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */ 38 38 swapCommit?: cid; 39 39 }): { 40 40 commit?: com.atproto.repo.defs.CommitMeta; 41 41 results?: WriteResult[]; 42 42 }; 43 43 44 - @doc("Operation which creates a new record.") 44 + /** Operation which creates a new record. */ 45 45 model Create { 46 46 @required collection: nsid; 47 47 48 - @doc("NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.") 48 + /** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */ 49 49 @maxLength(512) 50 50 rkey?: recordKey; 51 51 52 52 @required value: unknown; 53 53 } 54 54 55 - @doc("Operation which updates an existing record.") 55 + /** Operation which updates an existing record. */ 56 56 model Update { 57 57 @required collection: nsid; 58 58 @required rkey: recordKey; 59 59 @required value: unknown; 60 60 } 61 61 62 - @doc("Operation which deletes an existing record.") 62 + /** Operation which deletes an existing record. */ 63 63 model Delete { 64 64 @required collection: nsid; 65 65 @required rkey: recordKey;
+8 -8
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/createRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.createRecord { 4 - @doc("Create a single new repository record. Requires auth, implemented by PDS.") 4 + /** Create a single new repository record. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @maxLength(512) 18 18 rkey?: recordKey; 19 19 20 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.") 20 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 21 21 validate?: boolean; 22 22 23 - @doc("The record itself. Must contain a $type field.") 23 + /** The record itself. Must contain a $type field. */ 24 24 @required 25 25 record: unknown; 26 26 27 - @doc("Compare and swap with the previous commit by CID.") 27 + /** Compare and swap with the previous commit by CID. */ 28 28 swapCommit?: cid; 29 29 }): { 30 30 @required uri: atUri; ··· 33 33 validationStatus?: "valid" | "unknown" | string; 34 34 }; 35 35 36 - @doc("Indicates that 'swapCommit' didn't match current repo commit.") 36 + /** Indicates that 'swapCommit' didn't match current repo commit. */ 37 37 model InvalidSwap {} 38 38 }
+6 -6
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/deleteRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.deleteRecord { 4 - @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.") 4 + /** Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @required 18 18 rkey: recordKey; 19 19 20 - @doc("Compare and swap with the previous record by CID.") 20 + /** Compare and swap with the previous record by CID. */ 21 21 swapRecord?: cid; 22 22 23 - @doc("Compare and swap with the previous commit by CID.") 23 + /** Compare and swap with the previous commit by CID. */ 24 24 swapCommit?: cid; 25 25 }): { 26 26 commit?: com.atproto.repo.defs.CommitMeta;
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/describeRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.describeRepo { 4 - @doc("Get information about an account and repository, including the list of collections. Does not require auth.") 4 + /** Get information about an account and repository, including the list of collections. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 repo: atIdentifier 10 10 ): { 11 11 @required handle: handle; 12 12 @required did: did; 13 13 14 - @doc("The complete DID document for this account.") 14 + /** The complete DID document for this account. */ 15 15 @required 16 16 didDoc: unknown; 17 17 18 - @doc("List of all the collections (NSIDs) for which this repo contains at least one record.") 18 + /** List of all the collections (NSIDs) for which this repo contains at least one record. */ 19 19 @required 20 20 collections: nsid[]; 21 21 22 - @doc("Indicates if handle is currently valid (resolves bi-directionally)") 22 + /** Indicates if handle is currently valid (resolves bi-directionally) */ 23 23 @required 24 24 handleIsCorrect: boolean; 25 25 };
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/getRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.getRecord { 4 - @doc("Get a single record from a repository. Does not require auth.") 4 + /** Get a single record from a repository. Does not require auth. */ 5 5 @query 6 6 @errors(RecordNotFound) 7 7 op main( 8 - @doc("The handle or DID of the repo.") 8 + /** The handle or DID of the repo. */ 9 9 @required 10 10 repo: atIdentifier, 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid, 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @required 18 18 rkey: recordKey, 19 19 20 - @doc("The CID of the version of the record. If not specified, then return the most recent version.") 20 + /** The CID of the version of the record. If not specified, then return the most recent version. */ 21 21 cid?: cid 22 22 ): { 23 23 @required uri: atUri;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/importRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.importRepo { 4 - @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.") 4 + /** Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set. */ 5 5 @procedure 6 6 op main( 7 7 @encoding("application/vnd.ipld.car")
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/listMissingBlobs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.listMissingBlobs { 4 - @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.") 4 + /** Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow. */ 5 5 @query 6 6 op main( 7 7 @minValue(1)
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/listRecords.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.listRecords { 4 - @doc("List a range of records in a repository, matching a specific collection. Does not require auth.") 4 + /** List a range of records in a repository, matching a specific collection. Does not require auth. */ 5 5 @query 6 6 op main( 7 - @doc("The handle or DID of the repo.") 7 + /** The handle or DID of the repo. */ 8 8 @required 9 9 repo: atIdentifier, 10 10 11 - @doc("The NSID of the record type.") 11 + /** The NSID of the record type. */ 12 12 @required 13 13 collection: nsid, 14 14 15 - @doc("The number of records to return.") 15 + /** The number of records to return. */ 16 16 @minValue(1) 17 17 @maxValue(100) 18 18 limit?: int32 = 50, 19 19 20 20 cursor?: string, 21 21 22 - @doc("Flag to reverse the order of the returned records.") 22 + /** Flag to reverse the order of the returned records. */ 23 23 reverse?: boolean 24 24 ): { 25 25 cursor?: string;
+8 -8
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/putRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.putRecord { 4 - @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.") 4 + /** Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS. */ 5 5 @errors(InvalidSwap) 6 6 @procedure 7 7 op main(input: { 8 - @doc("The handle or DID of the repo (aka, current account).") 8 + /** The handle or DID of the repo (aka, current account). */ 9 9 @required 10 10 repo: atIdentifier; 11 11 12 - @doc("The NSID of the record collection.") 12 + /** The NSID of the record collection. */ 13 13 @required 14 14 collection: nsid; 15 15 16 - @doc("The Record Key.") 16 + /** The Record Key. */ 17 17 @maxLength(512) 18 18 @required 19 19 rkey: recordKey; 20 20 21 - @doc("Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.") 21 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 22 22 validate?: boolean; 23 23 24 - @doc("The record to write.") 24 + /** The record to write. */ 25 25 @required 26 26 record: unknown; 27 27 28 - @doc("Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation") 28 + /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */ 29 29 swapRecord?: cid | null; 30 30 31 - @doc("Compare and swap with the previous commit by CID.") 31 + /** Compare and swap with the previous commit by CID. */ 32 32 swapCommit?: cid; 33 33 }): { 34 34 @required uri: atUri;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/strongRef.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A URI with a content-hash fingerprint.") 3 + /** A URI with a content-hash fingerprint. */ 4 4 namespace com.atproto.repo.strongRef { 5 5 model Main { 6 6 @required uri: atUri;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/repo/uploadBlob.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.repo.uploadBlob { 4 - @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.") 4 + /** Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS. */ 5 5 @procedure 6 6 op main( 7 7 @encoding("*/*")
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/activateAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.activateAccount { 4 - @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.") 4 + /** Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/checkAccountStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.checkAccountStatus { 4 - @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.") 4 + /** Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself. */ 5 5 @query 6 6 op main(): { 7 7 @required activated: boolean;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/confirmEmail.tsp
··· 6 6 model InvalidToken {} 7 7 model InvalidEmail {} 8 8 9 - @doc("Confirm an email using a token from com.atproto.server.requestEmailConfirmation.") 9 + /** Confirm an email using a token from com.atproto.server.requestEmailConfirmation. */ 10 10 @procedure 11 11 @errors(AccountNotFound, ExpiredToken, InvalidToken, InvalidEmail) 12 12 op main(input: {
+9 -9
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/createAccount.tsp
··· 9 9 model UnresolvableDid {} 10 10 model IncompatibleDidDoc {} 11 11 12 - @doc("Account login session returned on successful account creation.") 12 + /** Account login session returned on successful account creation. */ 13 13 @inline 14 14 model Output { 15 15 @required accessJwt: string; 16 16 @required refreshJwt: string; 17 17 @required handle: handle; 18 18 19 - @doc("The DID of the new account.") 19 + /** The DID of the new account. */ 20 20 @required 21 21 did: did; 22 22 23 - @doc("Complete DID document.") 23 + /** Complete DID document. */ 24 24 didDoc?: unknown; 25 25 } 26 26 27 - @doc("Create an account. Implemented by PDS.") 27 + /** Create an account. Implemented by PDS. */ 28 28 @procedure 29 29 @errors(InvalidHandle, InvalidPassword, InvalidInviteCode, HandleNotAvailable, UnsupportedDomain, UnresolvableDid, IncompatibleDidDoc) 30 30 op main(input: { 31 31 email?: string; 32 32 33 - @doc("Requested handle for the account.") 33 + /** Requested handle for the account. */ 34 34 @required 35 35 handle: handle; 36 36 37 - @doc("Pre-existing atproto DID, being imported to a new account.") 37 + /** Pre-existing atproto DID, being imported to a new account. */ 38 38 did?: did; 39 39 40 40 inviteCode?: string; 41 41 verificationCode?: string; 42 42 verificationPhone?: string; 43 43 44 - @doc("Initial account password. May need to meet instance-specific password strength requirements.") 44 + /** Initial account password. May need to meet instance-specific password strength requirements. */ 45 45 password?: string; 46 46 47 - @doc("DID PLC rotation key (aka, recovery key) to be included in PLC creation operation.") 47 + /** DID PLC rotation key (aka, recovery key) to be included in PLC creation operation. */ 48 48 recoveryKey?: string; 49 49 50 - @doc("A signed DID PLC operation to be submitted as part of importing an existing account to this instance. NOTE: this optional field may be updated when full account migration is implemented.") 50 + /** A signed DID PLC operation to be submitted as part of importing an existing account to this instance. NOTE: this optional field may be updated when full account migration is implemented. */ 51 51 plcOp?: unknown; 52 52 }): Output; 53 53 }
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/createAppPassword.tsp
··· 10 10 privileged?: boolean; 11 11 } 12 12 13 - @doc("Create an App Password.") 13 + /** Create an App Password. */ 14 14 @procedure 15 15 @errors(AccountTakedown) 16 16 op main(input: { 17 - @doc("A short name for the App Password, to help distinguish them.") 17 + /** A short name for the App Password, to help distinguish them. */ 18 18 @required 19 19 name: string; 20 20 21 - @doc("If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients.") 21 + /** If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients. */ 22 22 privileged?: boolean; 23 23 }): AppPassword; 24 24 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/createInviteCode.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.createInviteCode { 4 - @doc("Create an invite code.") 4 + /** Create an invite code. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required useCount: integer;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/createInviteCodes.tsp
··· 6 6 @required codes: string[]; 7 7 } 8 8 9 - @doc("Create invite codes.") 9 + /** Create invite codes. */ 10 10 @procedure 11 11 op main(input: { 12 12 @required codeCount: integer = 1;
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/createSession.tsp
··· 5 5 6 6 model AuthFactorTokenRequired {} 7 7 8 - @doc("Create an authentication session.") 8 + /** Create an authentication session. */ 9 9 @procedure 10 10 @errors(AccountTakedown, AuthFactorTokenRequired) 11 11 op main(input: { 12 - @doc("Handle or other identifier supported by the server for the authenticating user.") 12 + /** Handle or other identifier supported by the server for the authenticating user. */ 13 13 @required 14 14 identifier: string; 15 15 ··· 17 17 18 18 authFactorToken?: string; 19 19 20 - @doc("When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned") 20 + /** When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned */ 21 21 allowTakendown?: boolean; 22 22 }): { 23 23 @required accessJwt: string; ··· 30 30 emailAuthFactor?: boolean; 31 31 active?: boolean; 32 32 33 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 33 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 34 34 status?: "takendown" | "suspended" | "deactivated" | string; 35 35 }; 36 36 }
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/deactivateAccount.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.deactivateAccount { 4 - @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.") 4 + /** Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("A recommendation to server as to how long they should hold onto the deactivated account before deleting.") 7 + /** A recommendation to server as to how long they should hold onto the deactivated account before deleting. */ 8 8 deleteAfter?: datetime; 9 9 }): void; 10 10 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/deleteAccount.tsp
··· 4 4 model ExpiredToken {} 5 5 model InvalidToken {} 6 6 7 - @doc("Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth.") 7 + /** Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth. */ 8 8 @procedure 9 9 @errors(ExpiredToken, InvalidToken) 10 10 op main(input: {
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/deleteSession.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.deleteSession { 4 - @doc("Delete the current session. Requires auth.") 4 + /** Delete the current session. Requires auth. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+6 -6
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/describeServer.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.describeServer { 4 - @doc("Describes the server's account creation requirements and capabilities. Implemented by PDS.") 4 + /** Describes the server's account creation requirements and capabilities. Implemented by PDS. */ 5 5 @query 6 6 op main(): { 7 7 @required did: did; 8 8 9 - @doc("If true, an invite code must be supplied to create an account on this instance.") 9 + /** If true, an invite code must be supplied to create an account on this instance. */ 10 10 inviteCodeRequired?: boolean; 11 11 12 - @doc("If true, a phone verification token must be supplied to create an account on this instance.") 12 + /** If true, a phone verification token must be supplied to create an account on this instance. */ 13 13 phoneVerificationRequired?: boolean; 14 14 15 - @doc("List of domain suffixes that can be used in account handles.") 15 + /** List of domain suffixes that can be used in account handles. */ 16 16 @required 17 17 availableUserDomains: string[]; 18 18 19 - @doc("URLs of service policy documents.") 19 + /** URLs of service policy documents. */ 20 20 links?: Links; 21 21 22 - @doc("Contact information") 22 + /** Contact information */ 23 23 contact?: Contact; 24 24 }; 25 25
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/getAccountInviteCodes.tsp
··· 3 3 namespace com.atproto.server.getAccountInviteCodes { 4 4 model DuplicateCreate {} 5 5 6 - @doc("Get all invite codes for the current account. Requires auth.") 6 + /** Get all invite codes for the current account. Requires auth. */ 7 7 @query 8 8 @errors(DuplicateCreate) 9 9 op main( 10 10 includeUsed?: boolean = true, 11 11 12 - @doc("Controls whether any new 'earned' but not 'created' invites should be created.") 12 + /** Controls whether any new 'earned' but not 'created' invites should be created. */ 13 13 createAvailable?: boolean = true 14 14 ): { 15 15 @required codes: com.atproto.server.defs.InviteCode[];
+5 -5
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/getServiceAuth.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.getServiceAuth { 4 - @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.") 4 + /** Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes. */ 5 5 model BadExpiration {} 6 6 7 - @doc("Get a signed token on behalf of the requesting DID for the requested service.") 7 + /** Get a signed token on behalf of the requesting DID for the requested service. */ 8 8 @query 9 9 @errors(BadExpiration) 10 10 op main( 11 - @doc("The DID of the service that the token will be used to authenticate with") 11 + /** The DID of the service that the token will be used to authenticate with */ 12 12 @required 13 13 aud: did, 14 14 15 - @doc("The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope.") 15 + /** The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope. */ 16 16 exp?: integer, 17 17 18 - @doc("Lexicon (XRPC) method to bind the requested token to") 18 + /** Lexicon (XRPC) method to bind the requested token to */ 19 19 lxm?: nsid 20 20 ): { 21 21 @required token: string;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/getSession.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.getSession { 4 - @doc("Get information about the current auth session. Requires auth.") 4 + /** Get information about the current auth session. Requires auth. */ 5 5 @query 6 6 op main(): { 7 7 @required handle: handle; ··· 12 12 didDoc?: unknown; 13 13 active?: boolean; 14 14 15 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 15 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 16 16 status?: "takendown" | "suspended" | "deactivated" | string; 17 17 }; 18 18 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/listAppPasswords.tsp
··· 9 9 privileged?: boolean; 10 10 } 11 11 12 - @doc("List all App Passwords.") 12 + /** List all App Passwords. */ 13 13 @query 14 14 @errors(AccountTakedown) 15 15 op main(): {
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/refreshSession.tsp
··· 3 3 namespace com.atproto.server.refreshSession { 4 4 model AccountTakedown {} 5 5 6 - @doc("Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt').") 6 + /** Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt'). */ 7 7 @procedure 8 8 @errors(AccountTakedown) 9 9 op main(): { ··· 14 14 didDoc?: unknown; 15 15 active?: boolean; 16 16 17 - @doc("Hosting status of the account. If not specified, then assume 'active'.") 17 + /** Hosting status of the account. If not specified, then assume 'active'. */ 18 18 status?: "takendown" | "suspended" | "deactivated" | string; 19 19 }; 20 20 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/requestAccountDelete.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestAccountDelete { 4 - @doc("Initiate a user account deletion via email.") 4 + /** Initiate a user account deletion via email. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/requestEmailConfirmation.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestEmailConfirmation { 4 - @doc("Request an email with a code to confirm ownership of email.") 4 + /** Request an email with a code to confirm ownership of email. */ 5 5 @procedure 6 6 op main(): void; 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/requestEmailUpdate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestEmailUpdate { 4 - @doc("Request a token in order to update email.") 4 + /** Request a token in order to update email. */ 5 5 @procedure 6 6 op main(): { 7 7 @required tokenRequired: boolean;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/requestPasswordReset.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.requestPasswordReset { 4 - @doc("Initiate a user account password reset via email.") 4 + /** Initiate a user account password reset via email. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required email: string;
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/reserveSigningKey.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.reserveSigningKey { 4 - @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.") 4 + /** Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented. */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("The DID to reserve a key for.") 7 + /** The DID to reserve a key for. */ 8 8 did?: did; 9 9 }): { 10 - @doc("The public key for the reserved signing key, in did:key serialization.") 10 + /** The public key for the reserved signing key, in did:key serialization. */ 11 11 @required 12 12 signingKey: string; 13 13 };
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/resetPassword.tsp
··· 4 4 model ExpiredToken {} 5 5 model InvalidToken {} 6 6 7 - @doc("Reset a user account password using a token.") 7 + /** Reset a user account password using a token. */ 8 8 @procedure 9 9 @errors(ExpiredToken, InvalidToken) 10 10 op main(input: {
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/revokeAppPassword.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.server.revokeAppPassword { 4 - @doc("Revoke an App Password by name.") 4 + /** Revoke an App Password by name. */ 5 5 @procedure 6 6 op main(input: { 7 7 @required name: string;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/server/updateEmail.tsp
··· 5 5 model InvalidToken {} 6 6 model TokenRequired {} 7 7 8 - @doc("Update an account's email.") 8 + /** Update an account's email. */ 9 9 @procedure 10 10 @errors(ExpiredToken, InvalidToken, TokenRequired) 11 11 op main(input: { 12 12 @required email: string; 13 13 emailAuthFactor?: boolean; 14 14 15 - @doc("Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed.") 15 + /** Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed. */ 16 16 token?: string; 17 17 }): void; 18 18 }
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getBlob.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getBlob { 4 - @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.") 4 + /** Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("*/*") 7 7 @errors(BlobNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the account.") 9 + /** The DID of the account. */ 10 10 @required 11 11 did: did, 12 12 13 - @doc("The CID of the blob to fetch") 13 + /** The CID of the blob to fetch */ 14 14 @required 15 15 cid: cid 16 16 ): void;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getBlocks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getBlocks { 4 - @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.") 4 + /** Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(BlockNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getCheckout.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getCheckout { 4 - @doc("DEPRECATED - please use com.atproto.sync.getRepo instead") 4 + /** DEPRECATED - please use com.atproto.sync.getRepo instead */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): void;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getHead.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getHead { 4 - @doc("DEPRECATED - please use com.atproto.sync.getLatestCommit instead") 4 + /** DEPRECATED - please use com.atproto.sync.getLatestCommit instead */ 5 5 @query 6 6 @errors(HeadNotFound) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): {
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getHostStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getHostStatus { 4 - @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.") 4 + /** Returns information about a specified upstream host, as consumed by the server. Implemented by relays. */ 5 5 @query 6 6 @errors(HostNotFound) 7 7 op main( 8 - @doc("Hostname of the host (eg, PDS or relay) being queried.") 8 + /** Hostname of the host (eg, PDS or relay) being queried. */ 9 9 @required 10 10 hostname: string 11 11 ): { 12 12 @required hostname: string; 13 13 14 - @doc("Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor).") 14 + /** Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor). */ 15 15 seq?: integer; 16 16 17 - @doc("Number of accounts on the server which are associated with the upstream host. Note that the upstream may actually have more accounts.") 17 + /** Number of accounts on the server which are associated with the upstream host. Note that the upstream may actually have more accounts. */ 18 18 accountCount?: integer; 19 19 20 20 status?: com.atproto.sync.defs.HostStatus;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getLatestCommit.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getLatestCommit { 4 - @doc("Get the current commit CID & revision of the specified repo. Does not require auth.") 4 + /** Get the current commit CID & revision of the specified repo. Does not require auth. */ 5 5 @query 6 6 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): {
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRecord { 4 - @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.") 4 + /** Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(RecordNotFound, RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12 13 13 @required collection: nsid, 14 14 15 - @doc("Record Key") 15 + /** Record Key */ 16 16 @required 17 17 rkey: recordKey 18 18 ): void;
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getRepo.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRepo { 4 - @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.") 4 + /** Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @encoding("application/vnd.ipld.car") 7 7 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 8 8 op main( 9 - @doc("The DID of the repo.") 9 + /** The DID of the repo. */ 10 10 @required 11 11 did: did, 12 12 13 - @doc("The revision ('rev') of the repo to create a diff from.") 13 + /** The revision ('rev') of the repo to create a diff from. */ 14 14 since?: tid 15 15 ): void; 16 16
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/getRepoStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.getRepoStatus { 4 - @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.") 4 + /** Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay. */ 5 5 @query 6 6 @errors(RepoNotFound) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did 11 11 ): { 12 12 @required did: did; 13 13 @required active: boolean; 14 14 15 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 15 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 16 16 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 17 17 18 - @doc("Optional field, the current rev of the repo, if active=true") 18 + /** Optional field, the current rev of the repo, if active=true */ 19 19 rev?: tid; 20 20 }; 21 21
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/listBlobs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listBlobs { 4 - @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.") 4 + /** List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS. */ 5 5 @query 6 6 @errors(RepoNotFound, RepoTakendown, RepoSuspended, RepoDeactivated) 7 7 op main( 8 - @doc("The DID of the repo.") 8 + /** The DID of the repo. */ 9 9 @required 10 10 did: did, 11 11 12 - @doc("Optional revision of the repo to list blobs since.") 12 + /** Optional revision of the repo to list blobs since. */ 13 13 since?: tid, 14 14 15 15 @minValue(1)
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/listHosts.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listHosts { 4 - @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.") 4 + /** Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays. */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 12 12 ): { 13 13 cursor?: string; 14 14 15 - @doc("Sort order is not formally specified. Recommended order is by time host was first seen by the server, with oldest first.") 15 + /** Sort order is not formally specified. Recommended order is by time host was first seen by the server, with oldest first. */ 16 16 @required 17 17 hosts: Host[]; 18 18 }; 19 19 20 20 model Host { 21 - @doc("hostname of server; not a URL (no scheme)") 21 + /** hostname of server; not a URL (no scheme) */ 22 22 @required 23 23 hostname: string; 24 24 25 - @doc("Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor).") 25 + /** Recent repo stream event sequence number. May be delayed from actual stream processing (eg, persisted cursor not in-memory cursor). */ 26 26 seq?: integer; 27 27 28 28 accountCount?: integer;
+3 -3
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/listRepos.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listRepos { 4 - @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.") 4 + /** Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay. */ 5 5 @query 6 6 op main( 7 7 @minValue(1) ··· 17 17 model Repo { 18 18 @required did: did; 19 19 20 - @doc("Current repo commit CID") 20 + /** Current repo commit CID */ 21 21 @required 22 22 head: cid; 23 23 24 24 @required rev: tid; 25 25 active?: boolean; 26 26 27 - @doc("If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.") 27 + /** If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. */ 28 28 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 29 29 } 30 30 }
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/listReposByCollection.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.listReposByCollection { 4 - @doc("Enumerates all the DIDs which have records with the given collection NSID.") 4 + /** Enumerates all the DIDs which have records with the given collection NSID. */ 5 5 @query 6 6 op main( 7 7 @required collection: nsid, 8 8 9 - @doc("Maximum size of response set. Recommend setting a large maximum (1000+) when enumerating large DID lists.") 9 + /** Maximum size of response set. Recommend setting a large maximum (1000+) when enumerating large DID lists. */ 10 10 @minValue(1) 11 11 @maxValue(2000) 12 12 limit?: int32 = 500,
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/notifyOfUpdate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.notifyOfUpdate { 4 - @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl") 4 + /** Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl */ 5 5 @procedure 6 6 op main(input: { 7 - @doc("Hostname of the current service (usually a PDS) that is notifying of update.") 7 + /** Hostname of the current service (usually a PDS) that is notifying of update. */ 8 8 @required 9 9 hostname: string; 10 10 }): void;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/requestCrawl.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.sync.requestCrawl { 4 - @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.") 4 + /** Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth. */ 5 5 @procedure 6 6 @errors(HostBanned) 7 7 op main(input: { 8 - @doc("Hostname of the current service (eg, PDS) that is requesting to be crawled.") 8 + /** Hostname of the current service (eg, PDS) that is requesting to be crawled. */ 9 9 @required 10 10 hostname: string; 11 11 }): void;
+30 -30
packages/emitter/test/integration/lexicon-examples/input/com/atproto/sync/subscribeRepos.tsp
··· 3 3 namespace com.atproto.sync.subscribeRepos { 4 4 @subscription 5 5 @errors(FutureCursor, ConsumerTooSlow) 6 - @doc("Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay.") 6 + /** Repository event stream, aka Firehose endpoint. Outputs repo commits with diff data, and identity update events, for all repositories on the current server. See the atproto specifications for details around stream sequencing, repo versioning, CAR diff format, and more. Public and does not require auth; implemented by PDS and Relay. */ 7 7 op main( 8 - @doc("The last known event seq number to backfill from.") 8 + /** The last known event seq number to backfill from. */ 9 9 cursor?: integer 10 10 ): (Commit | Sync | Identity | Account | Info | unknown); 11 11 12 12 model FutureCursor {} 13 13 14 - @doc("If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection.") 14 + /** If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection. */ 15 15 model ConsumerTooSlow {} 16 16 17 - @doc("Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature.") 17 + /** Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature. */ 18 18 model Commit { 19 - @doc("The stream sequence number of this message.") 19 + /** The stream sequence number of this message. */ 20 20 @required 21 21 seq: integer; 22 22 23 - @doc("DEPRECATED -- unused") 23 + /** DEPRECATED -- unused */ 24 24 @required 25 25 rebase: boolean; 26 26 27 - @doc("DEPRECATED -- replaced by #sync event and data limits. Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data.") 27 + /** DEPRECATED -- replaced by #sync event and data limits. Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data. */ 28 28 @required 29 29 tooBig: boolean; 30 30 31 - @doc("The repo this event comes from. Note that all other message types name this field 'did'.") 31 + /** The repo this event comes from. Note that all other message types name this field 'did'. */ 32 32 @required 33 33 repo: did; 34 34 35 - @doc("Repo commit object CID.") 35 + /** Repo commit object CID. */ 36 36 @required 37 37 commit: cidLink; 38 38 39 - @doc("The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event.") 39 + /** The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event. */ 40 40 @required 41 41 rev: tid; 42 42 43 - @doc("The rev of the last emitted commit from this repo (if any).") 43 + /** The rev of the last emitted commit from this repo (if any). */ 44 44 @required 45 45 since: tid | null; 46 46 47 - @doc("CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list.") 47 + /** CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list. */ 48 48 @maxBytes(2000000) 49 49 @required 50 50 blocks: bytes; 51 51 52 52 @maxItems(200) 53 53 @required 54 - @doc("List of repo mutation operations in this commit (eg, records created, updated, or deleted).") 54 + /** List of repo mutation operations in this commit (eg, records created, updated, or deleted). */ 55 55 ops: RepoOp[]; 56 56 57 - @doc("DEPRECATED -- will soon always be empty. List of new blobs (by CID) referenced by records in this commit.") 57 + /** DEPRECATED -- will soon always be empty. List of new blobs (by CID) referenced by records in this commit. */ 58 58 @required blobs: cidLink[]; 59 59 60 - @doc("The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose.") 60 + /** The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose. */ 61 61 prevData?: cidLink; 62 62 63 - @doc("Timestamp of when this message was originally broadcast.") 63 + /** Timestamp of when this message was originally broadcast. */ 64 64 @required 65 65 time: datetime; 66 66 } 67 67 68 - @doc("Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository.") 68 + /** Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository. */ 69 69 model Sync { 70 - @doc("The stream sequence number of this message.") 70 + /** The stream sequence number of this message. */ 71 71 @required 72 72 seq: integer; 73 73 74 - @doc("The account this repo event corresponds to. Must match that in the commit object.") 74 + /** The account this repo event corresponds to. Must match that in the commit object. */ 75 75 @required 76 76 did: did; 77 77 78 - @doc("CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'.") 78 + /** CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'. */ 79 79 @maxBytes(10000) 80 80 @required 81 81 blocks: bytes; 82 82 83 - @doc("The rev of the commit. This value must match that in the commit object.") 83 + /** The rev of the commit. This value must match that in the commit object. */ 84 84 @required 85 85 rev: string; 86 86 87 - @doc("Timestamp of when this message was originally broadcast.") 87 + /** Timestamp of when this message was originally broadcast. */ 88 88 @required 89 89 time: datetime; 90 90 } 91 91 92 - @doc("Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache.") 92 + /** Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache. */ 93 93 model Identity { 94 94 @required seq: integer; 95 95 @required did: did; 96 96 @required time: datetime; 97 97 98 - @doc("The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details.") 98 + /** The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details. */ 99 99 handle?: handle; 100 100 } 101 101 102 - @doc("Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active.") 102 + /** Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active. */ 103 103 model Account { 104 104 @required seq: integer; 105 105 @required did: did; 106 106 @required time: datetime; 107 107 108 - @doc("Indicates that the account has a repository which can be fetched from the host that emitted this event.") 108 + /** Indicates that the account has a repository which can be fetched from the host that emitted this event. */ 109 109 @required 110 110 active: boolean; 111 111 112 - @doc("If active=false, this optional field indicates a reason for why the account is not active.") 112 + /** If active=false, this optional field indicates a reason for why the account is not active. */ 113 113 status?: "takendown" | "suspended" | "deleted" | "deactivated" | "desynchronized" | "throttled" | string; 114 114 } 115 115 ··· 118 118 message?: string; 119 119 } 120 120 121 - @doc("A repo operation, ie a mutation of a single record.") 121 + /** A repo operation, ie a mutation of a single record. */ 122 122 model RepoOp { 123 123 @required action: "create" | "update" | "delete" | string; 124 124 @required path: string; 125 125 126 - @doc("For creates and updates, the new record CID. For deletions, null.") 126 + /** For creates and updates, the new record CID. For deletions, null. */ 127 127 @required 128 128 cid: cidLink | null; 129 129 130 - @doc("For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined.") 130 + /** For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined. */ 131 131 prev?: cidLink; 132 132 } 133 133 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/addReservedHandle.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.addReservedHandle { 4 - @doc("Add a handle to the set of reserved handles.") 4 + /** Add a handle to the set of reserved handles. */ 5 5 @procedure 6 6 op main( 7 7 input: {
+10 -10
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/checkHandleAvailability.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.checkHandleAvailability { 4 - @doc("An invalid email was provided.") 4 + /** An invalid email was provided. */ 5 5 model InvalidEmail {} 6 6 7 - @doc("Indicates the provided handle is available.") 7 + /** Indicates the provided handle is available. */ 8 8 model ResultAvailable {} 9 9 10 - @doc("Indicates the provided handle is unavailable and gives suggestions of available handles.") 10 + /** Indicates the provided handle is unavailable and gives suggestions of available handles. */ 11 11 model ResultUnavailable { 12 - @doc("List of suggested handles based on the provided inputs.") 12 + /** List of suggested handles based on the provided inputs. */ 13 13 @required 14 14 suggestions: Suggestion[]; 15 15 } ··· 17 17 model Suggestion { 18 18 @required handle: handle; 19 19 20 - @doc("Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics.") 20 + /** Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics. */ 21 21 @required 22 22 method: string; 23 23 } 24 24 25 - @doc("Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions.") 25 + /** Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions. */ 26 26 @query 27 27 @errors(InvalidEmail) 28 28 op main( 29 - @doc("Tentative handle. Will be checked for availability or used to build handle suggestions.") 29 + /** Tentative handle. Will be checked for availability or used to build handle suggestions. */ 30 30 handle: handle, 31 31 32 - @doc("User-provided email. Might be used to build handle suggestions.") 32 + /** User-provided email. Might be used to build handle suggestions. */ 33 33 email?: string, 34 34 35 - @doc("User-provided birth date. Might be used to build handle suggestions.") 35 + /** User-provided birth date. Might be used to build handle suggestions. */ 36 36 birthDate?: datetime 37 37 ): { 38 - @doc("Echo of the input handle.") 38 + /** Echo of the input handle. */ 39 39 @required 40 40 handle: handle; 41 41
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/checkSignupQueue.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.checkSignupQueue { 4 - @doc("Check accounts location in signup queue.") 4 + /** Check accounts location in signup queue. */ 5 5 @query 6 6 op main(): { 7 7 @required activated: boolean;
+4 -4
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/dereferenceScope.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.dereferenceScope { 4 - @doc("An invalid scope reference was provided.") 4 + /** An invalid scope reference was provided. */ 5 5 model InvalidScopeReference {} 6 6 7 - @doc("Allows finding the oauth permission scope from a reference") 7 + /** Allows finding the oauth permission scope from a reference */ 8 8 @query 9 9 @errors(InvalidScopeReference) 10 10 op main( 11 - @doc("The scope reference (starts with 'ref:')") 11 + /** The scope reference (starts with 'ref:') */ 12 12 scope: string 13 13 ): { 14 - @doc("The full oauth permission scope") 14 + /** The full oauth permission scope */ 15 15 @required 16 16 scope: string; 17 17 };
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/fetchLabels.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.fetchLabels { 4 - @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.") 4 + /** DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date. */ 5 5 @query 6 6 op main( 7 7 since?: integer,
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/requestPhoneVerification.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.requestPhoneVerification { 4 - @doc("Request a verification code to be sent to the supplied phone number") 4 + /** Request a verification code to be sent to the supplied phone number */ 5 5 @procedure 6 6 op main( 7 7 input: {
+1 -1
packages/emitter/test/integration/lexicon-examples/input/com/atproto/temp/revokeAccountCredentials.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.atproto.temp.revokeAccountCredentials { 4 - @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.") 4 + /** Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset. */ 5 5 @procedure 6 6 op main( 7 7 input: {
+1 -1
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/blocks/image.tsp
··· 4 4 model Main { 5 5 @required image: Blob<#["image/*"], 1000000>; 6 6 7 - @doc("Alt text description of the image, for accessibility.") 7 + /** Alt text description of the image, for accessibility. */ 8 8 alt?: string; 9 9 10 10 @required aspectRatio: AspectRatio;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/comment.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A lexicon for comments on documents") 3 + /** A lexicon for comments on documents */ 4 4 namespace `pub`.leaflet.comment { 5 - @doc("Record containing a comment") 5 + /** Record containing a comment */ 6 6 @rec("tid") 7 7 model Main { 8 8 @required subject: atUri;
+2 -2
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/document.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("A lexicon for long form rich media documents") 3 + /** A lexicon for long form rich media documents */ 4 4 namespace `pub`.leaflet.document { 5 - @doc("Record containing a document") 5 + /** Record containing a document */ 6 6 @rec("tid") 7 7 model Main { 8 8 @maxGraphemes(128)
+1 -1
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/graph/subscription.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace `pub`.leaflet.graph.subscription { 4 - @doc("Record declaring a subscription to a publication") 4 + /** Record declaring a subscription to a publication */ 5 5 @rec("tid") 6 6 model Main { 7 7 @required publication: atUri;
+1 -1
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/publication.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace `pub`.leaflet.publication { 4 - @doc("Record declaring a publication") 4 + /** Record declaring a publication */ 5 5 @rec("tid") 6 6 model Main { 7 7 @maxLength(2000)
+10 -10
packages/emitter/test/integration/lexicon-examples/input/pub/leaflet/richtext/facet.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace `pub`.leaflet.richtext.facet { 4 - @doc("Annotation of a sub-string within rich text.") 4 + /** Annotation of a sub-string within rich text. */ 5 5 model Main { 6 6 @required index: ByteSlice; 7 7 @required features: (Link | Code | Highlight | Underline | Strikethrough | Id | Bold | Italic | unknown)[]; 8 8 } 9 9 10 - @doc("Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.") 10 + /** Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets. */ 11 11 model ByteSlice { 12 12 @minValue(0) 13 13 @required ··· 18 18 byteEnd: integer; 19 19 } 20 20 21 - @doc("Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.") 21 + /** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. */ 22 22 model Link { 23 23 @required uri: uri; 24 24 } 25 25 26 - @doc("Facet feature for inline code.") 26 + /** Facet feature for inline code. */ 27 27 model Code {} 28 28 29 - @doc("Facet feature for highlighted text.") 29 + /** Facet feature for highlighted text. */ 30 30 model Highlight {} 31 31 32 - @doc("Facet feature for underline markup") 32 + /** Facet feature for underline markup */ 33 33 model Underline {} 34 34 35 - @doc("Facet feature for strikethrough markup") 35 + /** Facet feature for strikethrough markup */ 36 36 model Strikethrough {} 37 37 38 - @doc("Facet feature for an identifier. Used for linking to a segment") 38 + /** Facet feature for an identifier. Used for linking to a segment */ 39 39 model Id { 40 40 id?: string; 41 41 } 42 42 43 - @doc("Facet feature for bold text") 43 + /** Facet feature for bold text */ 44 44 model Bold {} 45 45 46 - @doc("Facet feature for italic text") 46 + /** Facet feature for italic text */ 47 47 model Italic {} 48 48 }
+7 -7
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/actor/profile.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.actor.profile { 4 - @doc("A declaration of a Tangled account profile.") 4 + /** A declaration of a Tangled account profile. */ 5 5 @rec("literal:self") 6 6 model Main { 7 - @doc("Free-form profile description text.") 7 + /** Free-form profile description text. */ 8 8 @maxGraphemes(256) 9 9 @maxLength(2560) 10 10 description?: string; ··· 17 17 @maxItems(2) 18 18 stats?: StatValue[]; 19 19 20 - @doc("Include link to this account on Bluesky.") 20 + /** Include link to this account on Bluesky. */ 21 21 @required 22 22 bluesky: boolean; 23 23 24 - @doc("Free-form location text.") 24 + /** Free-form location text. */ 25 25 @maxGraphemes(40) 26 26 @maxLength(400) 27 27 location?: string; 28 28 29 - @doc("Any ATURI, it is up to appviews to validate these fields.") 29 + /** Any ATURI, it is up to appviews to validate these fields. */ 30 30 @minItems(0) 31 31 @maxItems(6) 32 32 pinnedRepositories?: atUri[]; 33 33 } 34 34 35 - @doc("Any URI, intended for social profiles or websites, can be used to link DIDs/AT-URIs too.") 35 + /** Any URI, intended for social profiles or websites, can be used to link DIDs/AT-URIs too. */ 36 36 @inline 37 37 scalar LinkItem extends uri; 38 38 39 - @doc("Vanity stats.") 39 + /** Vanity stats. */ 40 40 @closed 41 41 @inline 42 42 union StatValue {
+7 -7
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/git/refUpdate.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.git.refUpdate { 4 - @doc("An update to a git repository, emitted by knots.") 4 + /** An update to a git repository, emitted by knots. */ 5 5 @rec("tid") 6 6 model Main { 7 - @doc("Ref being updated") 7 + /** Ref being updated */ 8 8 @maxGraphemes(256) 9 9 @maxLength(2560) 10 10 @required 11 11 ref: string; 12 12 13 - @doc("did of the user that pushed this ref") 13 + /** did of the user that pushed this ref */ 14 14 @required 15 15 committerDid: did; 16 16 17 - @doc("did of the owner of the repo") 17 + /** did of the owner of the repo */ 18 18 @required 19 19 repoDid: did; 20 20 21 - @doc("name of the repo") 21 + /** name of the repo */ 22 22 @required 23 23 repoName: string; 24 24 25 - @doc("old SHA of this ref") 25 + /** old SHA of this ref */ 26 26 @minLength(40) 27 27 @maxLength(40) 28 28 @required 29 29 oldSha: string; 30 30 31 - @doc("new SHA of this ref") 31 + /** new SHA of this ref */ 32 32 @minLength(40) 33 33 @maxLength(40) 34 34 @required
+8 -8
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/knot/listKeys.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.knot.listKeys { 4 - @doc("List all public keys stored in the knot server") 4 + /** List all public keys stored in the knot server */ 5 5 @query 6 6 @errors(InternalServerError) 7 7 op main( 8 - @doc("Maximum number of keys to return") 8 + /** Maximum number of keys to return */ 9 9 @minValue(1) 10 10 @maxValue(1000) 11 11 limit?: int32 = 100, 12 12 13 - @doc("Pagination cursor") 13 + /** Pagination cursor */ 14 14 cursor?: string 15 15 ): { 16 16 @required keys: PublicKey[]; 17 17 18 - @doc("Pagination cursor for next page") 18 + /** Pagination cursor for next page */ 19 19 cursor?: string; 20 20 }; 21 21 22 22 model PublicKey { 23 - @doc("DID associated with the public key") 23 + /** DID associated with the public key */ 24 24 @required 25 25 did: did; 26 26 27 - @doc("Public key contents") 27 + /** Public key contents */ 28 28 @maxLength(4096) 29 29 @required 30 30 key: string; 31 31 32 - @doc("Key upload timestamp") 32 + /** Key upload timestamp */ 33 33 @required 34 34 createdAt: datetime; 35 35 } 36 36 37 - @doc("Failed to retrieve public keys") 37 + /** Failed to retrieve public keys */ 38 38 model InternalServerError {} 39 39 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/knot/member.tsp
··· 5 5 model Main { 6 6 @required subject: did; 7 7 8 - @doc("domain that this member now belongs to") 8 + /** domain that this member now belongs to */ 9 9 @required 10 10 domain: string; 11 11
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/knot/version.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.knot.version { 4 - @doc("Get the version of a knot") 4 + /** Get the version of a knot */ 5 5 @query 6 6 op main(): { 7 7 @required version: string;
+3 -3
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/label.op.tsp
··· 3 3 namespace sh.tangled.label.`op` { 4 4 @rec("tid") 5 5 model Main { 6 - @doc("The subject (task, pull or discussion) of this label. Appviews may apply a `scope` check and refuse this op.") 6 + /** The subject (task, pull or discussion) of this label. Appviews may apply a `scope` check and refuse this op. */ 7 7 @required 8 8 subject: atUri; 9 9 ··· 13 13 } 14 14 15 15 model Operand { 16 - @doc("ATURI to the label definition") 16 + /** ATURI to the label definition */ 17 17 @required 18 18 key: atUri; 19 19 20 - @doc("Stringified value of the label. This is first unstringed by appviews and then interpreted as a concrete value.") 20 + /** Stringified value of the label. This is first unstringed by appviews and then interpreted as a concrete value. */ 21 21 @required 22 22 value: string; 23 23 }
+8 -8
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/label/definition.tsp
··· 3 3 namespace sh.tangled.label.definition { 4 4 @rec("any") 5 5 model Main { 6 - @doc("The display name of this label.") 6 + /** The display name of this label. */ 7 7 @minGraphemes(1) 8 8 @maxGraphemes(40) 9 9 @required 10 10 name: string; 11 11 12 - @doc("The type definition of this label. Appviews may allow sorting for certain types.") 12 + /** The type definition of this label. Appviews may allow sorting for certain types. */ 13 13 @required 14 14 valueType: ValueType; 15 15 16 - @doc("The areas of the repo this label may apply to, eg.: sh.tangled.repo.issue. Appviews may choose to respect this.") 16 + /** The areas of the repo this label may apply to, eg.: sh.tangled.repo.issue. Appviews may choose to respect this. */ 17 17 @required 18 18 scope: nsid[]; 19 19 20 - @doc("The hex value for the background color for the label. Appviews may choose to respect this.") 20 + /** The hex value for the background color for the label. Appviews may choose to respect this. */ 21 21 color?: string; 22 22 23 23 @required createdAt: datetime; 24 24 25 - @doc("Whether this label can be repeated for a given entity, eg.: [reviewer:foo, reviewer:bar]") 25 + /** Whether this label can be repeated for a given entity, eg.: [reviewer:foo, reviewer:bar] */ 26 26 multiple?: boolean; 27 27 } 28 28 ··· 44 44 } 45 45 46 46 model ValueType { 47 - @doc("The concrete type of this label's value.") 47 + /** The concrete type of this label's value. */ 48 48 @required 49 49 type: ConcreteType; 50 50 51 - @doc("An optional constraint that can be applied on string concrete types.") 51 + /** An optional constraint that can be applied on string concrete types. */ 52 52 @required 53 53 format: FormatType; 54 54 55 - @doc("Closed set of values that this label can take.") 55 + /** Closed set of values that this label can take. */ 56 56 `enum`?: string[]; 57 57 } 58 58 }
+2 -2
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/owner.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.owner { 4 - @doc("Get the owner of a service") 4 + /** Get the owner of a service */ 5 5 @query 6 6 @errors(OwnerNotFound) 7 7 op main(): { 8 8 @required owner: did; 9 9 }; 10 10 11 - @doc("Owner is not set for this service") 11 + /** Owner is not set for this service */ 12 12 model OwnerNotFound {} 13 13 }
+6 -6
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/pipeline/status.tsp
··· 14 14 15 15 @rec("tid") 16 16 model Main { 17 - @doc("ATURI of the pipeline") 17 + /** ATURI of the pipeline */ 18 18 @required 19 19 pipeline: atUri; 20 20 21 - @doc("name of the workflow within this pipeline") 21 + /** name of the workflow within this pipeline */ 22 22 @required 23 23 workflow: atUri; 24 24 25 - @doc("status of the workflow") 25 + /** status of the workflow */ 26 26 @required 27 27 status: WorkflowStatus; 28 28 29 - @doc("time of creation of this status update") 29 + /** time of creation of this status update */ 30 30 @required 31 31 createdAt: datetime; 32 32 33 - @doc("error message if failed") 33 + /** error message if failed */ 34 34 error?: string; 35 35 36 - @doc("exit code if failed") 36 + /** exit code if failed */ 37 37 exitCode?: integer; 38 38 } 39 39 }
+3 -3
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/publicKey.tsp
··· 3 3 namespace sh.tangled.publicKey { 4 4 @rec("tid") 5 5 model Main { 6 - @doc("public key contents") 6 + /** public key contents */ 7 7 @maxLength(4096) 8 8 @required 9 9 key: string; 10 10 11 - @doc("human-readable name for this key") 11 + /** human-readable name for this key */ 12 12 @required 13 13 name: string; 14 14 15 - @doc("key upload timestamp") 15 + /** key upload timestamp */ 16 16 @required 17 17 createdAt: datetime; 18 18 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/issue/state.tsp
··· 5 5 model Main { 6 6 @required issue: atUri; 7 7 8 - @doc("state of the issue") 8 + /** state of the issue */ 9 9 @required 10 10 state: "sh.tangled.repo.issue.state.open" | "sh.tangled.repo.issue.state.closed" | string = "sh.tangled.repo.issue.state.open"; 11 11 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/issue/state/closed.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.repo.issue.state.closed { 4 - @doc("closed issue") 4 + /** closed issue */ 5 5 @token 6 6 model Main {} 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/issue/state/open.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.repo.issue.state.open { 4 - @doc("open issue") 4 + /** open issue */ 5 5 @token 6 6 model Main {} 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/pull/status.tsp
··· 5 5 model Main { 6 6 @required pull: atUri; 7 7 8 - @doc("status of the pull request") 8 + /** status of the pull request */ 9 9 @required 10 10 status: "sh.tangled.repo.pull.status.open" | "sh.tangled.repo.pull.status.closed" | "sh.tangled.repo.pull.status.merged" | string = "sh.tangled.repo.pull.status.open"; 11 11 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/pull/status/closed.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.repo.pull.status.closed { 4 - @doc("closed pull request") 4 + /** closed pull request */ 5 5 @token 6 6 model Main {} 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/pull/status/merged.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.repo.pull.status.merged { 4 - @doc("merged pull request") 4 + /** merged pull request */ 5 5 @token 6 6 model Main {} 7 7 }
+1 -1
packages/emitter/test/integration/lexicon-examples/input/sh/tangled/repo/pull/status/open.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace sh.tangled.repo.pull.status.open { 4 - @doc("open pull request") 4 + /** open pull request */ 5 5 @token 6 6 model Main {} 7 7 }
+2 -2
packages/emitter/test/spec/basic/input/com/example/allOptionalFields.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.allOptionalFields { 4 - @doc("Object with all optional fields (no required)") 4 + /** Object with all optional fields (no required) */ 5 5 model Main { 6 - @doc("All fields are optional") 6 + /** All fields are optional */ 7 7 field1?: string; 8 8 9 9 field2?: integer;
+2 -2
packages/emitter/test/spec/basic/input/com/example/arrayOfUnions.tsp
··· 2 2 3 3 namespace com.example.arrayOfUnions { 4 4 model Main { 5 - @doc("Array of open union variants") 5 + /** Array of open union variants */ 6 6 @required 7 7 items: (ItemA | ItemB | ItemC | unknown)[]; 8 8 9 - @doc("Array of closed union variants") 9 + /** Array of closed union variants */ 10 10 @maxItems(10) 11 11 operations?: Operations[]; 12 12 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/arrays.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.arrays { 4 - @doc("Array container types") 4 + /** Array container types */ 5 5 model Main { 6 - @doc("Array of strings") 6 + /** Array of strings */ 7 7 stringArray?: string[]; 8 8 9 - @doc("Array with size constraints") 9 + /** Array with size constraints */ 10 10 @minItems(1) 11 11 @maxItems(10) 12 12 arrayWithLength?: integer[]; 13 13 14 - @doc("Array of object references") 14 + /** Array of object references */ 15 15 arrayOfRefs?: Item[]; 16 16 17 - @doc("Array of union types") 17 + /** Array of union types */ 18 18 arrayOfUnion?: (TypeA | TypeB | unknown)[]; 19 19 } 20 20
+6 -6
packages/emitter/test/spec/basic/input/com/example/blobs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.blobs { 4 - @doc("Blob type examples") 4 + /** Blob type examples */ 5 5 model Main { 6 - @doc("Basic blob with no constraints") 6 + /** Basic blob with no constraints */ 7 7 simpleBlob?: Blob; 8 8 9 - @doc("Image blob up to 5MB") 9 + /** Image blob up to 5MB */ 10 10 imageBlob?: Blob<#["image/*"], 5000000>; 11 11 12 - @doc("Specific image types up to 2MB") 12 + /** Specific image types up to 2MB */ 13 13 specificImages?: Blob<#["image/png", "image/jpeg", "image/gif"], 2000000>; 14 14 15 - @doc("Video blob up to 100MB") 15 + /** Video blob up to 100MB */ 16 16 videoBlob?: Blob<#["video/mp4", "video/webm"], 100000000>; 17 17 18 - @doc("Accept any MIME type") 18 + /** Accept any MIME type */ 19 19 anyBlob?: Blob<#["*/*"]>; 20 20 } 21 21 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/booleanConstraints.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.booleanConstraints { 4 - @doc("Boolean field constraints") 4 + /** Boolean field constraints */ 5 5 model Main { 6 - @doc("Boolean with default true") 6 + /** Boolean with default true */ 7 7 defaultTrue?: boolean = true; 8 8 9 - @doc("Boolean with default false") 9 + /** Boolean with default false */ 10 10 defaultFalse?: boolean = false; 11 11 12 - @doc("Constant true value") 12 + /** Constant true value */ 13 13 @readOnly 14 14 constTrue?: boolean = true; 15 15 16 - @doc("Constant false value") 16 + /** Constant false value */ 17 17 @readOnly 18 18 constFalse?: boolean = false; 19 19 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/bytesConstraints.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.bytesConstraints { 4 - @doc("Bytes field constraints") 4 + /** Bytes field constraints */ 5 5 model Main { 6 - @doc("Basic bytes field") 6 + /** Basic bytes field */ 7 7 simpleBytes?: bytes; 8 8 9 - @doc("Bytes with size constraints") 9 + /** Bytes with size constraints */ 10 10 @minBytes(1) 11 11 @maxBytes(1024) 12 12 withLength?: bytes; 13 13 14 - @doc("Bytes with minimum size only") 14 + /** Bytes with minimum size only */ 15 15 @minBytes(32) 16 16 withMinOnly?: bytes; 17 17 18 - @doc("Bytes with maximum size only (5MB)") 18 + /** Bytes with maximum size only (5MB) */ 19 19 @maxBytes(5000000) 20 20 withMaxOnly?: bytes; 21 21 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/cidLinks.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.cidLinks { 4 - @doc("CID link examples") 4 + /** CID link examples */ 5 5 model Main { 6 - @doc("A CID link to content") 6 + /** A CID link to content */ 7 7 contentCid?: cidLink; 8 8 9 - @doc("Link to previous version") 9 + /** Link to previous version */ 10 10 previousVersion?: cidLink; 11 11 } 12 12 }
+7 -7
packages/emitter/test/spec/basic/input/com/example/constValues.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.constValues { 4 - @doc("Tests const values on all supported types") 4 + /** Tests const values on all supported types */ 5 5 model Main { 6 - @doc("Constant string value") 6 + /** Constant string value */ 7 7 @readOnly 8 8 @required 9 9 stringConst: string = "fixed-value"; 10 10 11 - @doc("Constant boolean value (true)") 11 + /** Constant boolean value (true) */ 12 12 @readOnly 13 13 @required 14 14 boolConst: boolean = true; 15 15 16 - @doc("Constant boolean value (false)") 16 + /** Constant boolean value (false) */ 17 17 @readOnly 18 18 falseConst?: boolean = false; 19 19 20 - @doc("Constant integer value") 20 + /** Constant integer value */ 21 21 @readOnly 22 22 @required 23 23 intConst: integer = 42; 24 24 25 - @doc("Constant zero") 25 + /** Constant zero */ 26 26 @readOnly 27 27 zeroConst?: integer = 0; 28 28 29 - @doc("Constant negative integer") 29 + /** Constant negative integer */ 30 30 @readOnly 31 31 negativeConst?: integer = -100; 32 32 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/createRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.createRecord { 4 - @doc("The provided text is invalid") 4 + /** The provided text is invalid */ 5 5 model InvalidText {} 6 6 7 - @doc("Create a new record") 7 + /** Create a new record */ 8 8 @procedure 9 9 @errors(InvalidText) 10 10 op main(input: { 11 - @doc("The text content") 11 + /** The text content */ 12 12 @required 13 13 text: string; 14 14 }): {
+4 -4
packages/emitter/test/spec/basic/input/com/example/datetimeExamples.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.datetimeExamples { 4 - @doc("Datetime format usage examples") 4 + /** Datetime format usage examples */ 5 5 model Main { 6 - @doc("Required datetime field") 6 + /** Required datetime field */ 7 7 @required 8 8 createdAt: datetime; 9 9 10 - @doc("Optional datetime field") 10 + /** Optional datetime field */ 11 11 updatedAt?: datetime; 12 12 13 - @doc("Optional publish time") 13 + /** Optional publish time */ 14 14 publishedAt?: datetime; 15 15 } 16 16 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/deeplyNested.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.deeplyNested { 4 - @doc("Tests deeply nested object structures") 4 + /** Tests deeply nested object structures */ 5 5 model Main { 6 - @doc("Three levels of nesting") 6 + /** Three levels of nesting */ 7 7 @required 8 8 level1: Level1; 9 9 } ··· 21 21 model Level3 { 22 22 @required data: string; 23 23 24 - @doc("Nullable field at deep level") 24 + /** Nullable field at deep level */ 25 25 metadata?: Metadata | null; 26 26 } 27 27
+1 -1
packages/emitter/test/spec/basic/input/com/example/defs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 - @doc("Common definitions used by other lexicons") 3 + /** Common definitions used by other lexicons */ 4 4 namespace com.example.defs { 5 5 @closed 6 6 union StatusEnum {
+1 -1
packages/emitter/test/spec/basic/input/com/example/deleteRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.deleteRecord { 4 - @doc("Delete a record (no output)") 4 + /** Delete a record (no output) */ 5 5 @procedure 6 6 op main(input: { 7 7 @required uri: atUri;
+2 -2
packages/emitter/test/spec/basic/input/com/example/eventStream.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.eventStream { 4 - @doc("Cursor is in the future") 4 + /** Cursor is in the future */ 5 5 model FutureCursor {} 6 6 7 - @doc("Subscription with union message schema") 7 + /** Subscription with union message schema */ 8 8 @subscription 9 9 @errors(FutureCursor) 10 10 op main(cursor?: integer): (Commit | Identity | Account | Handle | Tombstone);
+1 -1
packages/emitter/test/spec/basic/input/com/example/flexibleRecord.tsp
··· 2 2 3 3 namespace com.example.flexibleRecord { 4 4 @rec("any") 5 - @doc("Record with any key type") 5 + /** Record with any key type */ 6 6 model Main { 7 7 data?: string; 8 8 tags?: string[];
+2 -2
packages/emitter/test/spec/basic/input/com/example/getRecord.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.getRecord { 4 - @doc("Retrieve a record by ID") 4 + /** Retrieve a record by ID */ 5 5 @query 6 6 op main( 7 - @doc("The record identifier") 7 + /** The record identifier */ 8 8 @required 9 9 id: string 10 10 ): {
+1 -1
packages/emitter/test/spec/basic/input/com/example/getStatus.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.getStatus { 4 - @doc("Get system status (no parameters)") 4 + /** Get system status (no parameters) */ 5 5 @query 6 6 op main(): { 7 7 @required status: string;
+6 -6
packages/emitter/test/spec/basic/input/com/example/identifierExamples.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.identifierExamples { 4 - @doc("Identifier format examples") 4 + /** Identifier format examples */ 5 5 model Main { 6 - @doc("DID identifier (did:plc:, did:web:, etc)") 6 + /** DID identifier (did:plc:, did:web:, etc) */ 7 7 did?: did; 8 8 9 - @doc("Handle identifier (username.bsky.social)") 9 + /** Handle identifier (username.bsky.social) */ 10 10 handle?: handle; 11 11 12 - @doc("Either a DID or handle") 12 + /** Either a DID or handle */ 13 13 atIdentifier?: atIdentifier; 14 14 15 - @doc("CID as string") 15 + /** CID as string */ 16 16 cidString?: cid; 17 17 18 - @doc("BCP 47 language tag") 18 + /** BCP 47 language tag */ 19 19 languageCode?: language; 20 20 } 21 21 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/integerConstraints.tsp
··· 12 12 13, 13 13 } 14 14 15 - @doc("Integer field constraints") 15 + /** Integer field constraints */ 16 16 model Main { 17 - @doc("Integer between 1 and 100") 17 + /** Integer between 1 and 100 */ 18 18 @minValue(1) 19 19 @maxValue(100) 20 20 withMinMax?: integer; 21 21 22 - @doc("Fibonacci numbers only") 22 + /** Fibonacci numbers only */ 23 23 withEnum?: FibonacciNumbers; 24 24 25 - @doc("Integer with default value") 25 + /** Integer with default value */ 26 26 withDefault?: integer = 42; 27 27 28 - @doc("Constant integer value") 28 + /** Constant integer value */ 29 29 @readOnly 30 30 withConst?: integer = 99; 31 31 }
+6 -6
packages/emitter/test/spec/basic/input/com/example/nestedUnions.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.nestedUnions { 4 - @doc("Tests unions nested within objects and arrays") 4 + /** Tests unions nested within objects and arrays */ 5 5 model Main { 6 - @doc("Object containing a union field") 6 + /** Object containing a union field */ 7 7 @required 8 8 container: Container; 9 9 10 - @doc("Array of objects that contain unions") 10 + /** Array of objects that contain unions */ 11 11 items?: Item[]; 12 12 } 13 13 14 14 model Container { 15 15 @required id: string; 16 16 17 - @doc("Nested union within object") 17 + /** Nested union within object */ 18 18 @required 19 19 payload: (PayloadA | PayloadB | unknown); 20 20 21 - @doc("Nullable ref within object") 21 + /** Nullable ref within object */ 22 22 metadata?: MetadataPublic | null; 23 23 } 24 24 25 25 model Item { 26 26 @required name: string; 27 27 28 - @doc("Union in nested object") 28 + /** Union in nested object */ 29 29 content?: (TextContent | ImageContent | VideoContent | unknown); 30 30 } 31 31
+4 -4
packages/emitter/test/spec/basic/input/com/example/nullType.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.nullType { 4 - @doc("Demonstrates the null primitive type") 4 + /** Demonstrates the null primitive type */ 5 5 model Main { 6 - @doc("Field with explicit null type - always null") 6 + /** Field with explicit null type - always null */ 7 7 @required 8 8 alwaysNull: null; 9 9 10 - @doc("Optional field that can be string or omitted, but not null") 10 + /** Optional field that can be string or omitted, but not null */ 11 11 optionalString?: string; 12 12 13 - @doc("Nullable string - can be omitted, string, or null") 13 + /** Nullable string - can be omitted, string, or null */ 14 14 nullableString?: string | null; 15 15 } 16 16 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/nullableFields.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.nullableFields { 4 - @doc("Demonstrates nullable field semantics") 4 + /** Demonstrates nullable field semantics */ 5 5 model Main { 6 - @doc("Required, cannot be null or omitted") 6 + /** Required, cannot be null or omitted */ 7 7 @required 8 8 requiredField: string; 9 9 10 - @doc("Must be present, but can be null") 10 + /** Must be present, but can be null */ 11 11 nullableRequired?: string | null; 12 12 13 - @doc("Can be omitted, present with value, or present as null") 13 + /** Can be omitted, present with value, or present as null */ 14 14 nullableOptional?: string | null; 15 15 16 - @doc("Can be omitted or present with value, but not null") 16 + /** Can be omitted or present with value, but not null */ 17 17 optionalField?: string; 18 18 } 19 19 }
+4 -4
packages/emitter/test/spec/basic/input/com/example/objects.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.objects { 4 - @doc("Object with various property configurations") 4 + /** Object with various property configurations */ 5 5 model Main { 6 - @doc("This field is required") 6 + /** This field is required */ 7 7 @required 8 8 requiredField: string; 9 9 10 - @doc("This field is optional") 10 + /** This field is optional */ 11 11 optionalField?: string; 12 12 13 - @doc("This field can be null") 13 + /** This field can be null */ 14 14 nullableField?: string | null; 15 15 16 16 nestedObject?: Nested;
+1 -1
packages/emitter/test/spec/basic/input/com/example/outputWithoutSchema.tsp
··· 3 3 namespace com.example.outputWithoutSchema { 4 4 @query 5 5 @encoding("application/json") 6 - @doc("Query with JSON output but no schema defined") 6 + /** Query with JSON output but no schema defined */ 7 7 op main(id?: string): never; 8 8 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/paramsWithArrays.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.paramsWithArrays { 4 - @doc("Tests query parameters with array types") 4 + /** Tests query parameters with array types */ 5 5 @query 6 6 op main( 7 - @doc("Array of string values") 7 + /** Array of string values */ 8 8 tags?: string[], 9 9 10 - @doc("Array of integers") 10 + /** Array of integers */ 11 11 @maxItems(10) 12 12 ids?: integer[], 13 13 14 - @doc("Array of booleans") 14 + /** Array of booleans */ 15 15 flags?: boolean[], 16 16 17 - @doc("Single string param for comparison") 17 + /** Single string param for comparison */ 18 18 cursor?: string 19 19 ): { 20 20 @required count: integer;
+6 -6
packages/emitter/test/spec/basic/input/com/example/primitives.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.primitives { 4 - @doc("All primitive field types") 4 + /** All primitive field types */ 5 5 model Main { 6 - @doc("A boolean field") 6 + /** A boolean field */ 7 7 boolField?: boolean; 8 8 9 - @doc("An integer field") 9 + /** An integer field */ 10 10 intField?: integer; 11 11 12 - @doc("A string field") 12 + /** A string field */ 13 13 stringField?: string; 14 14 15 - @doc("A bytes field") 15 + /** A bytes field */ 16 16 bytesField?: bytes; 17 17 18 - @doc("A CID link field") 18 + /** A CID link field */ 19 19 cidField?: cidLink; 20 20 } 21 21 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/procedureWithBoth.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.procedureWithBoth { 4 - @doc("Procedure with both input body and query parameters") 4 + /** Procedure with both input body and query parameters */ 5 5 @procedure 6 6 op main( 7 7 input: { 8 - @doc("Data to create") 8 + /** Data to create */ 9 9 @required 10 10 data: string; 11 11 12 - @doc("Optional metadata") 12 + /** Optional metadata */ 13 13 metadata?: Metadata; 14 14 }, 15 15 parameters: { 16 - @doc("Whether to validate before creating") 16 + /** Whether to validate before creating */ 17 17 validate?: boolean = true; 18 18 19 - @doc("Target repository") 19 + /** Target repository */ 20 20 @required 21 21 repo: atIdentifier; 22 22 }
+1 -1
packages/emitter/test/spec/basic/input/com/example/profile.tsp
··· 2 2 3 3 namespace com.example.profile { 4 4 @rec("literal:self") 5 - @doc("Record with literal 'self' key") 5 + /** Record with literal 'self' key */ 6 6 model Main { 7 7 @maxGraphemes(64) 8 8 @required
+7 -7
packages/emitter/test/spec/basic/input/com/example/queryParams.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.queryParams { 4 - @doc("Query with various parameter types") 4 + /** Query with various parameter types */ 5 5 @query 6 6 op main( 7 - @doc("A required query parameter") 7 + /** A required query parameter */ 8 8 @required 9 9 requiredParam: string, 10 10 11 - @doc("Optional boolean parameter") 11 + /** Optional boolean parameter */ 12 12 boolParam?: boolean, 13 13 14 - @doc("Optional integer parameter") 14 + /** Optional integer parameter */ 15 15 intParam?: integer, 16 16 17 - @doc("Optional string parameter") 17 + /** Optional string parameter */ 18 18 @maxLength(100) 19 19 stringParam?: string, 20 20 21 - @doc("Array of strings") 21 + /** Array of strings */ 22 22 arrayParam?: string[], 23 23 24 - @doc("Unknown type parameter") 24 + /** Unknown type parameter */ 25 25 unknownParam?: unknown 26 26 ): { 27 27 @required result: string;
+3 -3
packages/emitter/test/spec/basic/input/com/example/record.tsp
··· 2 2 3 3 namespace com.example.`record` { 4 4 @rec("tid") 5 - @doc("A simple record with basic properties") 5 + /** A simple record with basic properties */ 6 6 model Main { 7 - @doc("The text content") 7 + /** The text content */ 8 8 @required 9 9 text: string; 10 10 11 - @doc("When the record was created") 11 + /** When the record was created */ 12 12 @required 13 13 createdAt: datetime; 14 14 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/recordWithNsidKey.tsp
··· 2 2 3 3 namespace com.example.recordWithNsidKey { 4 4 @rec("nsid") 5 - @doc("Record with NSID as the record key") 5 + /** Record with NSID as the record key */ 6 6 model Main { 7 - @doc("The NSID of the associated lexicon") 7 + /** The NSID of the associated lexicon */ 8 8 @required 9 9 nsid: nsid; 10 10 11 - @doc("Optional metadata") 11 + /** Optional metadata */ 12 12 metadata?: string; 13 13 } 14 14 }
+1 -1
packages/emitter/test/spec/basic/input/com/example/refInOutput.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.refInOutput { 4 - @doc("Procedure with ref in output schema") 4 + /** Procedure with ref in output schema */ 5 5 @procedure 6 6 op main(input: InputData): OutputData; 7 7
+4 -4
packages/emitter/test/spec/basic/input/com/example/refs.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.refs { 4 - @doc("Reference examples") 4 + /** Reference examples */ 5 5 model Main { 6 - @doc("Reference to local definition") 6 + /** Reference to local definition */ 7 7 localRef?: LocalDef; 8 8 9 - @doc("Reference to external definition") 9 + /** Reference to external definition */ 10 10 externalRef?: com.example.defs.Metadata; 11 11 12 - @doc("Reference to main definition (no fragment)") 12 + /** Reference to main definition (no fragment) */ 13 13 mainRef?: com.example.`record`.Main; 14 14 } 15 15
+8 -8
packages/emitter/test/spec/basic/input/com/example/stringConstraints.tsp
··· 9 9 "archived", 10 10 } 11 11 12 - @doc("String field constraints") 12 + /** String field constraints */ 13 13 model Main { 14 - @doc("String with byte length constraints") 14 + /** String with byte length constraints */ 15 15 @minLength(1) 16 16 @maxLength(100) 17 17 withLength?: string; 18 18 19 - @doc("String with grapheme cluster length constraints") 19 + /** String with grapheme cluster length constraints */ 20 20 @minGraphemes(1) 21 21 @maxGraphemes(50) 22 22 withGraphemes?: string; 23 23 24 - @doc("String with both byte and grapheme constraints") 24 + /** String with both byte and grapheme constraints */ 25 25 @minLength(1) 26 26 @maxLength(300) 27 27 @minGraphemes(1) 28 28 @maxGraphemes(100) 29 29 withBothLengths?: string; 30 30 31 - @doc("Closed enum of allowed values") 31 + /** Closed enum of allowed values */ 32 32 withEnum?: StatusEnum; 33 33 34 - @doc("Open set of suggested values") 34 + /** Open set of suggested values */ 35 35 withKnownValues?: "en" | "es" | "fr" | "de" | "ja" | string; 36 36 37 - @doc("String with default value") 37 + /** String with default value */ 38 38 withDefault?: string = "hello"; 39 39 40 - @doc("Constant string value") 40 + /** Constant string value */ 41 41 @readOnly 42 42 withConst?: string = "fixed-value"; 43 43 }
+12 -12
packages/emitter/test/spec/basic/input/com/example/stringFormats.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.stringFormats { 4 - @doc("All string format types") 4 + /** All string format types */ 5 5 model Main { 6 - @doc("Handle or DID") 6 + /** Handle or DID */ 7 7 atIdentifier?: atIdentifier; 8 8 9 - @doc("AT-URI format") 9 + /** AT-URI format */ 10 10 atUri?: atUri; 11 11 12 - @doc("CID in string format") 12 + /** CID in string format */ 13 13 cid?: cid; 14 14 15 - @doc("ISO 8601 datetime with timezone") 15 + /** ISO 8601 datetime with timezone */ 16 16 datetime?: datetime; 17 17 18 - @doc("DID identifier") 18 + /** DID identifier */ 19 19 did?: did; 20 20 21 - @doc("Handle identifier") 21 + /** Handle identifier */ 22 22 handle?: handle; 23 23 24 - @doc("Namespaced identifier") 24 + /** Namespaced identifier */ 25 25 nsid?: nsid; 26 26 27 - @doc("Timestamp identifier") 27 + /** Timestamp identifier */ 28 28 tid?: tid; 29 29 30 - @doc("Record key (any syntax)") 30 + /** Record key (any syntax) */ 31 31 recordKey?: recordKey; 32 32 33 - @doc("Generic URI (RFC 3986)") 33 + /** Generic URI (RFC 3986) */ 34 34 uri?: uri; 35 35 36 - @doc("IETF BCP 47 language tag") 36 + /** IETF BCP 47 language tag */ 37 37 language?: language; 38 38 } 39 39 }
+2 -2
packages/emitter/test/spec/basic/input/com/example/subscribeRecords.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.subscribeRecords { 4 - @doc("Subscribe to record updates") 4 + /** Subscribe to record updates */ 5 5 @subscription 6 6 op main( 7 - @doc("Optional cursor for resuming") 7 + /** Optional cursor for resuming */ 8 8 cursor?: integer 9 9 ): (Record | Delete); 10 10
+4 -4
packages/emitter/test/spec/basic/input/com/example/subscriptionWithErrors.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.subscriptionWithErrors { 4 - @doc("Subscription with error definitions") 4 + /** Subscription with error definitions */ 5 5 @subscription 6 6 @errors(ConsumerTooSlow, InvalidCursor) 7 7 op main( 8 - @doc("Optional cursor for resuming") 8 + /** Optional cursor for resuming */ 9 9 cursor?: integer 10 10 ): (Event | Status | Info); 11 11 ··· 25 25 message?: string; 26 26 } 27 27 28 - @doc("Indicates the consumer is not keeping up with the event stream") 28 + /** Indicates the consumer is not keeping up with the event stream */ 29 29 model ConsumerTooSlow {} 30 30 31 - @doc("The provided cursor is invalid or expired") 31 + /** The provided cursor is invalid or expired */ 32 32 model InvalidCursor {} 33 33 }
+1 -1
packages/emitter/test/spec/basic/input/com/example/tidRecord.tsp
··· 2 2 3 3 namespace com.example.tidRecord { 4 4 @rec("tid") 5 - @doc("Record with TID key type") 5 + /** Record with TID key type */ 6 6 model Main { 7 7 @required 8 8 content: string;
+4 -4
packages/emitter/test/spec/basic/input/com/example/tokens.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.tokens { 4 - @doc("Token usage example") 4 + /** Token usage example */ 5 5 model Main { 6 6 @required status: Active; 7 7 } 8 8 9 - @doc("Indicates an active state") 9 + /** Indicates an active state */ 10 10 @token 11 11 model Active {} 12 12 13 - @doc("Indicates an inactive state") 13 + /** Indicates an inactive state */ 14 14 @token 15 15 model Inactive {} 16 16 17 - @doc("Indicates a pending state") 17 + /** Indicates a pending state */ 18 18 @token 19 19 model Pending {} 20 20 }
+2 -2
packages/emitter/test/spec/basic/input/com/example/unionClosed.tsp
··· 9 9 Delete, 10 10 } 11 11 12 - @doc("Closed union example") 12 + /** Closed union example */ 13 13 model Main { 14 - @doc("Closed union - no more variants allowed") 14 + /** Closed union - no more variants allowed */ 15 15 @required 16 16 action: Action; 17 17 }
+2 -2
packages/emitter/test/spec/basic/input/com/example/unionEmpty.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.unionEmpty { 4 - @doc("Empty open union (similar to unknown but requires $type)") 4 + /** Empty open union (similar to unknown but requires $type) */ 5 5 model Main { 6 - @doc("Empty open union - any object with $type allowed") 6 + /** Empty open union - any object with $type allowed */ 7 7 data?: (never | unknown); 8 8 } 9 9 }
+2 -2
packages/emitter/test/spec/basic/input/com/example/unionOpen.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.unionOpen { 4 - @doc("Open union example (default)") 4 + /** Open union example (default) */ 5 5 model Main { 6 - @doc("Open union - more variants can be added in future") 6 + /** Open union - more variants can be added in future */ 7 7 @required 8 8 item: TypeA | TypeB | TypeC | unknown; 9 9 }
+5 -5
packages/emitter/test/spec/basic/input/com/example/unionWithTokens.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.unionWithTokens { 4 - @doc("Tests union with token references") 4 + /** Tests union with token references */ 5 5 model Main { 6 - @doc("Reason can be a known token or unknown type") 6 + /** Reason can be a known token or unknown type */ 7 7 @required 8 8 reason: (ReasonSpam | ReasonViolation | ReasonMisleading | unknown); 9 9 } 10 10 11 - @doc("Spam: frequent unwanted promotion") 11 + /** Spam: frequent unwanted promotion */ 12 12 @token 13 13 model ReasonSpam {} 14 14 15 - @doc("Direct violation of rules") 15 + /** Direct violation of rules */ 16 16 @token 17 17 model ReasonViolation {} 18 18 19 - @doc("Misleading or deceptive content") 19 + /** Misleading or deceptive content */ 20 20 @token 21 21 model ReasonMisleading {} 22 22 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/unknown.tsp
··· 3 3 using TypeSpec.Reflection; 4 4 5 5 namespace com.example.`unknown` { 6 - @doc("Unknown type usage") 6 + /** Unknown type usage */ 7 7 model Main { 8 - @doc("Any object data without validation") 8 + /** Any object data without validation */ 9 9 metadata?: unknown; 10 10 11 - @doc("Optional unknown field") 11 + /** Optional unknown field */ 12 12 optionalMetadata?: unknown; 13 13 } 14 14 }
+6 -6
packages/emitter/test/spec/basic/input/com/example/uriExamples.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.uriExamples { 4 - @doc("Various URI format examples") 4 + /** Various URI format examples */ 5 5 model Main { 6 - @doc("AT protocol URI") 6 + /** AT protocol URI */ 7 7 atUri?: atUri; 8 8 9 - @doc("Generic URI (https, did, ipfs, etc)") 9 + /** Generic URI (https, did, ipfs, etc) */ 10 10 genericUri?: uri; 11 11 12 - @doc("Record key identifier") 12 + /** Record key identifier */ 13 13 recordKey?: recordKey; 14 14 15 - @doc("Namespaced identifier") 15 + /** Namespaced identifier */ 16 16 nsid?: nsid; 17 17 18 - @doc("Timestamp identifier") 18 + /** Timestamp identifier */ 19 19 tid?: tid; 20 20 } 21 21 }
+3 -3
packages/emitter/test/spec/basic/input/com/example/withErrors.tsp
··· 1 1 import "@typelex/emitter"; 2 2 3 3 namespace com.example.withErrors { 4 - @doc("The provided value is invalid") 4 + /** The provided value is invalid */ 5 5 model InvalidValue {} 6 6 7 - @doc("Too many requests") 7 + /** Too many requests */ 8 8 model RateLimitExceeded {} 9 9 10 10 model Unauthorized {} 11 11 12 - @doc("Procedure with error definitions") 12 + /** Procedure with error definitions */ 13 13 @procedure 14 14 @errors(InvalidValue, RateLimitExceeded, Unauthorized) 15 15 op main(input: {