Highly ambitious ATProtocol AppView service and sdks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix deno workspace lint errors

+492 -2958
+2 -2
deno.json
··· 12 12 "dev:cli": "deno run --allow-all packages/cli/src/mod.ts", 13 13 "build:cli": "cd packages/cli && deno compile --allow-all --output bin/slices src/mod.ts", 14 14 "build:lexicon": "cd packages/lexicon && deno task build", 15 - "codegen:cli": "deno task dev:cli codegen --lexicons ./lexicons --slice at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z --output ./packages/cli/generated_client.ts", 16 - "codegen:frontend": "deno task dev:cli codegen --lexicons ./lexicons --slice at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z --output ./frontend/src/client.ts", 15 + "codegen:cli": "deno task dev:cli codegen --lexicons ./lexicons --slice at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z --output ./packages/cli/src/generated_client.ts --include-slices", 16 + "codegen:frontend": "deno task dev:cli codegen --lexicons ./lexicons --slice at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z --output ./frontend/src/client.ts --include-slices", 17 17 "dev:frontend": "cd frontend && deno task dev", 18 18 "test": "deno test --allow-all packages/*/tests/ packages/*/src/ frontend/src/", 19 19 "check": "deno check packages/*/src/ packages/*/mod.ts packages/*/src/mod.ts frontend/src/**/*.ts frontend/src/**/*.tsx",
+11 -11
frontend/src/client.test.ts
··· 24 24 this.tokenState = initialState; 25 25 } 26 26 27 - async ensureValidToken() { 27 + ensureValidToken() { 28 28 this.callCount++; 29 29 console.log( 30 30 `MockOAuth.ensureValidToken() called (attempt ${this.callCount})`, ··· 33 33 switch (this.tokenState) { 34 34 case "valid": 35 35 console.log("Returning valid tokens"); 36 - return { 36 + return Promise.resolve({ 37 37 accessToken: "valid_access_token_12345", 38 38 tokenType: "Bearer", 39 - }; 39 + }); 40 40 41 41 case "expired": 42 42 if (this.callCount === 1) { 43 43 console.log("First call - tokens expired, attempting refresh..."); 44 44 // Simulate successful refresh on first call 45 45 this.tokenState = "valid"; 46 - return { 46 + return Promise.resolve({ 47 47 accessToken: "refreshed_access_token_67890", 48 48 tokenType: "Bearer", 49 - }; 49 + }); 50 50 } else { 51 51 console.log("Subsequent call - returning refreshed tokens"); 52 - return { 52 + return Promise.resolve({ 53 53 accessToken: "refreshed_access_token_67890", 54 54 tokenType: "Bearer", 55 - }; 55 + }); 56 56 } 57 57 58 58 case "refresh_fails": ··· 68 68 } 69 69 } 70 70 71 - async isAuthenticated() { 72 - return this.tokenState === "valid"; 71 + isAuthenticated() { 72 + return Promise.resolve(this.tokenState === "valid"); 73 73 } 74 74 } 75 75 76 76 // Mock fetch function that simulates API responses 77 77 function createMockFetch() { 78 - return async ( 78 + return ( 79 79 url: string | URL | Request, 80 80 init?: RequestInit, 81 81 ): Promise<Response> => { ··· 142 142 return new AtProtoClient( 143 143 "https://test-api.example.com", 144 144 "at://did:plc:test/network.slices.slice/test", 145 - mockOAuth as any, 145 + mockOAuth as unknown as Parameters<typeof AtProtoClient>[2], 146 146 ); 147 147 } 148 148
+24 -33
frontend/src/client.ts
··· 1 1 // Generated TypeScript client for AT Protocol records 2 - // Generated at: 2025-09-19 22:48:29 UTC 2 + // Generated at: 2025-09-24 17:45:47 UTC 3 3 // Lexicons: 25 4 4 5 5 /** ··· 64 64 type SortField, 65 65 type WhereCondition, 66 66 } from "@slices/client"; 67 - import { OAuthClient } from "@slices/oauth"; 67 + import type { OAuthClient } from "@slices/oauth"; 68 68 69 69 export interface BulkSyncParams { 70 70 collections?: string[]; ··· 255 255 | "app.bsky.graph.defs#modlist" 256 256 | "app.bsky.graph.defs#curatelist" 257 257 | "app.bsky.graph.defs#referencelist" 258 - | (string & {}); 258 + | (string & Record<string, never>); 259 259 260 260 export type AppBskyFeedDefsEvent = 261 261 | "app.bsky.feed.defs#requestLess" ··· 270 270 | "app.bsky.feed.defs#interactionReply" 271 271 | "app.bsky.feed.defs#interactionQuote" 272 272 | "app.bsky.feed.defs#interactionShare" 273 - | (string & {}); 273 + | (string & Record<string, never>); 274 274 275 275 export type AppBskyFeedDefsContentMode = 276 276 | "app.bsky.feed.defs#contentModeUnspecified" 277 277 | "app.bsky.feed.defs#contentModeVideo" 278 - | (string & {}); 278 + | (string & Record<string, never>); 279 279 280 280 export type AppBskyActorDefsActorTarget = 281 281 | "all" 282 282 | "exclude-following" 283 - | (string & {}); 283 + | (string & Record<string, never>); 284 284 285 285 export type AppBskyActorDefsType = 286 286 | "feed" 287 287 | "list" 288 288 | "timeline" 289 - | (string & {}); 289 + | (string & Record<string, never>); 290 290 291 291 export type AppBskyActorDefsSort = 292 292 | "oldest" ··· 294 294 | "most-likes" 295 295 | "random" 296 296 | "hotness" 297 - | (string & {}); 297 + | (string & Record<string, never>); 298 298 299 299 export type AppBskyActorDefsMutedWordTarget = 300 300 | "content" 301 301 | "tag" 302 - | (string & {}); 302 + | (string & Record<string, never>); 303 303 304 304 export type AppBskyActorDefsVisibility = 305 305 | "ignore" 306 306 | "show" 307 307 | "warn" 308 308 | "hide" 309 - | (string & {}); 309 + | (string & Record<string, never>); 310 310 311 311 export type AppBskyActorDefsAllowIncoming = 312 312 | "all" 313 313 | "none" 314 314 | "following" 315 - | (string & {}); 315 + | (string & Record<string, never>); 316 316 317 317 export type ComAtprotoLabelDefsLabelValue = 318 318 | "!hide" ··· 326 326 | "nudity" 327 327 | "nsfl" 328 328 | "gore" 329 - | (string & {}); 329 + | (string & Record<string, never>); 330 330 331 331 export type ComAtprotoLabelDefsBlurs = 332 332 | "content" 333 333 | "media" 334 334 | "none" 335 - | (string & {}); 335 + | (string & Record<string, never>); 336 336 337 337 export type ComAtprotoLabelDefsSeverity = 338 338 | "inform" 339 339 | "alert" 340 340 | "none" 341 - | (string & {}); 341 + | (string & Record<string, never>); 342 342 343 343 export type ComAtprotoLabelDefsDefaultSetting = 344 344 | "ignore" 345 345 | "warn" 346 346 | "hide" 347 - | (string & {}); 347 + | (string & Record<string, never>); 348 348 349 349 export interface AppBskyEmbedDefsAspectRatio { 350 350 width: number; ··· 616 616 grandparentAuthor?: AppBskyActorDefs["ProfileViewBasic"]; 617 617 } 618 618 619 - export interface AppBskyFeedDefsReasonPin { 620 - } 619 + export type AppBskyFeedDefsReasonPin = Record<string, never>; 621 620 622 621 export interface AppBskyFeedDefsBlockedPost { 623 622 uri: string; ··· 742 741 "app.bsky.feed.defs#clickthroughEmbed"; 743 742 export type AppBskyFeedDefsInteractionRepost = 744 743 "app.bsky.feed.defs#interactionRepost"; 745 - 746 - export interface AppBskyFeedDefsSkeletonReasonPin { 747 - } 748 - 744 + export type AppBskyFeedDefsSkeletonReasonPin = Record<string, never>; 749 745 export type AppBskyFeedDefsClickthroughAuthor = 750 746 "app.bsky.feed.defs#clickthroughAuthor"; 751 747 export type AppBskyFeedDefsClickthroughReposter = ··· 776 772 } 777 773 778 774 export type AppBskyFeedPostgateSortFields = "post" | "createdAt"; 779 - 780 - export interface AppBskyFeedPostgateDisableRule { 781 - } 775 + export type AppBskyFeedPostgateDisableRule = Record<string, never>; 782 776 783 777 export interface AppBskyFeedThreadgate { 784 778 /** Reference (AT-URI) to the post record. */ ··· 801 795 list: string; 802 796 } 803 797 804 - export interface AppBskyFeedThreadgateMentionRule { 805 - } 806 - 807 - export interface AppBskyFeedThreadgateFollowerRule { 808 - } 809 - 810 - export interface AppBskyFeedThreadgateFollowingRule { 811 - } 798 + export type AppBskyFeedThreadgateMentionRule = Record<string, never>; 799 + export type AppBskyFeedThreadgateFollowerRule = Record<string, never>; 800 + export type AppBskyFeedThreadgateFollowingRule = Record<string, never>; 812 801 813 802 export interface AppBskyRichtextFacetTag { 814 803 tag: string; ··· 2105 2094 params: Omit<SliceLevelRecordsParams<T>, "slice">, 2106 2095 ): Promise<SliceRecordsOutput<T>> { 2107 2096 // Combine where and orWhere into the expected backend format 2108 - const whereClause: any = params?.where ? { ...params.where } : {}; 2097 + const whereClause: Record<string, unknown> = params?.where 2098 + ? { ...params.where } 2099 + : {}; 2109 2100 if (params?.orWhere) { 2110 2101 whereClause.$or = params.orWhere; 2111 2102 }
-1
frontend/src/features/docs/templates/DocsIndexPage.tsx
··· 2 2 import { Layout } from "../../../shared/fragments/Layout.tsx"; 3 3 import { Card } from "../../../shared/fragments/Card.tsx"; 4 4 import { Text } from "../../../shared/fragments/Text.tsx"; 5 - import { Link } from "../../../shared/fragments/Link.tsx"; 6 5 7 6 interface DocItem { 8 7 slug: string;
+1 -1
frontend/src/features/landing/templates/fragments/LandingOGImage.tsx
··· 1 - // @ts-nocheck 1 + // @ts-nocheck: OG image component uses inline styles not compatible with strict typing 2 2 interface LandingOGImageProps { 3 3 title?: string; 4 4 subtitle?: string;
+2 -2
frontend/src/features/slices/jetstream/handlers.tsx
··· 95 95 // Render compact version for logs page 96 96 if (isCompact) { 97 97 return renderHTML( 98 - <JetstreamStatusDisplay connected={data.connected} isCompact={true} /> 98 + <JetstreamStatusDisplay connected={data.connected} isCompact /> 99 99 ); 100 100 } 101 101 ··· 124 124 // Render compact error version 125 125 if (isCompact) { 126 126 return renderHTML( 127 - <JetstreamStatusDisplay connected={false} isCompact={true} /> 127 + <JetstreamStatusDisplay connected={false} isCompact /> 128 128 ); 129 129 } 130 130
-4
frontend/src/features/slices/lexicon/templates/LexiconDetailPage.tsx
··· 7 7 import type { AuthenticatedUser } from "../../../../routes/middleware.ts"; 8 8 import type { NetworkSlicesSliceDefsSliceView } from "../../../../client.ts"; 9 9 import { buildSliceUrlFromView } from "../../../../utils/slice-params.ts"; 10 - import { getRkeyFromUri } from "../../../../utils/at-uri.ts"; 11 10 import { codeToHtml } from "jsr:@shikijs/shiki"; 12 11 13 12 interface LexiconDetailPageProps { ··· 55 54 dark: "github-dark", 56 55 }, 57 56 }); 58 - 59 - // Extract rkey for updating the record 60 - const rkey = getRkeyFromUri(uri); 61 57 62 58 // Check if this is a record type lexicon 63 59 const isRecordType = parsedDefinitions?.main?.type === "record";
+2 -2
frontend/src/features/slices/oauth/handlers.tsx
··· 104 104 105 105 return renderHTML( 106 106 <OAuthResult 107 - success={true} 107 + success 108 108 message="OAuth client registered successfully" 109 109 /> 110 110 ); ··· 275 275 276 276 return renderHTML( 277 277 <OAuthResult 278 - success={true} 278 + success 279 279 message="OAuth client updated successfully" 280 280 /> 281 281 );
-1
frontend/src/features/slices/shared/fragments/SliceTabs.tsx
··· 1 1 import type { NetworkSlicesSliceDefsSliceView } from "../../../../client.ts"; 2 - import type { AuthenticatedUser } from "../../../../routes/middleware.ts"; 3 2 import { buildSliceUrlFromView } from "../../../../utils/slice-params.ts"; 4 3 5 4 export interface SliceTab {
+1 -1
frontend/src/routes/static.ts
··· 1 1 import type { Route } from "@std/http/unstable-route"; 2 2 import { serveDir } from "@std/http/file-server"; 3 3 4 - async function handleStatic(req: Request): Promise<Response> { 4 + function handleStatic(req: Request): Response | Promise<Response> { 5 5 const { pathname } = new URL(req.url); 6 6 7 7 if (pathname.startsWith("/static/")) {
+3 -3
frontend/src/utils/preact.ts
··· 1 - import type { ComponentChildren } from "preact"; 1 + import type { ComponentChildren, VNode } from "preact"; 2 2 import { cloneElement } from "preact"; 3 3 4 4 /** ··· 11 11 if (Array.isArray(children)) { 12 12 return children.map(child => { 13 13 if (child && typeof child === 'object' && 'type' in child) { 14 - return cloneElement(child as any, props); 14 + return cloneElement(child as VNode, props); 15 15 } 16 16 return child; 17 17 }); 18 18 } 19 19 20 20 if (children && typeof children === 'object' && 'type' in children) { 21 - return cloneElement(children as any, props); 21 + return cloneElement(children as VNode, props); 22 22 } 23 23 24 24 return children;
-2437
packages/cli/generated_client.ts
··· 1 - // Generated TypeScript client for AT Protocol records 2 - // Generated at: 2025-09-19 15:40:33 UTC 3 - // Lexicons: 25 4 - 5 - /** 6 - * @example Usage 7 - * ```ts 8 - * import { AtProtoClient } from "./generated_client.ts"; 9 - * 10 - * const client = new AtProtoClient( 11 - * 'https://api.slices.network', 12 - * 'at://did:plc:bcgltzqazw5tb6k2g3ttenbj/network.slices.slice/3lymhd4jhrd2z' 13 - * ); 14 - * 15 - * // Get records from the app.bsky.graph.follow collection 16 - * const records = await client.app.bsky.graph.follow.getRecords(); 17 - * 18 - * // Get a specific record 19 - * const record = await client.app.bsky.graph.follow.getRecord({ 20 - * uri: 'at://did:plc:example/app.bsky.graph.follow/3abc123' 21 - * }); 22 - * 23 - * // Get records with filtering and search 24 - * const filteredRecords = await client.app.bsky.graph.follow.getRecords({ 25 - * where: { 26 - * text: { contains: "example search term" } 27 - * } 28 - * }); 29 - * 30 - * // Use slice-level methods for cross-collection queries with type safety 31 - * const sliceRecords = await client.network.slices.slice.getSliceRecords<AppBskyGraphFollow>({ 32 - * where: { 33 - * collection: { eq: 'app.bsky.graph.follow' } 34 - * } 35 - * }); 36 - * 37 - * // Search across multiple collections using union types 38 - * const multiCollectionRecords = await client.network.slices.slice.getSliceRecords<AppBskyGraphFollow | AppBskyActorProfile>({ 39 - * where: { 40 - * collection: { in: ['app.bsky.graph.follow', 'app.bsky.actor.profile'] }, 41 - * text: { contains: 'example search term' }, 42 - * did: { in: ['did:plc:user1', 'did:plc:user2'] } 43 - * }, 44 - * limit: 20 45 - * }); 46 - * 47 - * // Serve the records as JSON 48 - * Deno.serve(async () => new Response(JSON.stringify(records.records.map(r => r.value)))); 49 - * ``` 50 - */ 51 - 52 - import { 53 - type BlobRef, 54 - type CountRecordsResponse, 55 - type GetActorsParams, 56 - type GetActorsResponse, 57 - type GetRecordParams, 58 - type GetRecordsResponse, 59 - type IndexedRecordFields, 60 - type RecordResponse, 61 - type SliceLevelRecordsParams, 62 - type SliceRecordsOutput, 63 - SlicesClient, 64 - type SortField, 65 - type WhereCondition, 66 - } from "@slices/client"; 67 - import { OAuthClient } from "@slices/oauth"; 68 - 69 - export interface BulkSyncParams { 70 - collections?: string[]; 71 - externalCollections?: string[]; 72 - repos?: string[]; 73 - limitPerRepo?: number; 74 - } 75 - 76 - export interface BulkSyncOutput { 77 - success: boolean; 78 - totalRecords: number; 79 - collectionsSynced: string[]; 80 - reposProcessed: number; 81 - message: string; 82 - } 83 - 84 - export interface SyncJobResponse { 85 - success: boolean; 86 - jobId?: string; 87 - message: string; 88 - } 89 - 90 - export interface SyncJobResult { 91 - success: boolean; 92 - totalRecords: number; 93 - collectionsSynced: string[]; 94 - reposProcessed: number; 95 - message: string; 96 - } 97 - 98 - export interface JobStatus { 99 - jobId: string; 100 - status: string; 101 - createdAt: string; 102 - startedAt?: string; 103 - completedAt?: string; 104 - result?: SyncJobResult; 105 - error?: string; 106 - retryCount: number; 107 - } 108 - 109 - export interface GetJobStatusParams { 110 - jobId: string; 111 - } 112 - 113 - export interface GetJobHistoryParams { 114 - userDid: string; 115 - sliceUri: string; 116 - limit?: number; 117 - } 118 - 119 - export type GetJobHistoryResponse = JobStatus[]; 120 - 121 - export interface GetJobLogsParams { 122 - jobId: string; 123 - limit?: number; 124 - } 125 - 126 - export interface GetJobLogsResponse { 127 - logs: LogEntry[]; 128 - } 129 - 130 - export interface GetJetstreamLogsParams { 131 - limit?: number; 132 - } 133 - 134 - export interface GetJetstreamLogsResponse { 135 - logs: LogEntry[]; 136 - } 137 - 138 - export interface LogEntry { 139 - id: number; 140 - createdAt: string; 141 - logType: string; 142 - jobId?: string; 143 - userDid?: string; 144 - sliceUri?: string; 145 - level: string; 146 - message: string; 147 - metadata?: Record<string, unknown>; 148 - } 149 - 150 - export interface SyncUserCollectionsRequest { 151 - slice: string; 152 - timeoutSeconds?: number; 153 - } 154 - 155 - export interface SyncUserCollectionsResult { 156 - success: boolean; 157 - reposProcessed: number; 158 - recordsSynced: number; 159 - timedOut: boolean; 160 - message: string; 161 - } 162 - 163 - export interface JetstreamStatusResponse { 164 - connected: boolean; 165 - status: string; 166 - error?: string; 167 - } 168 - 169 - export interface CollectionStats { 170 - collection: string; 171 - recordCount: number; 172 - uniqueActors: number; 173 - } 174 - 175 - export interface SliceStatsParams { 176 - slice: string; 177 - } 178 - 179 - export interface SliceStatsOutput { 180 - success: boolean; 181 - collections: string[]; 182 - collectionStats: CollectionStats[]; 183 - totalLexicons: number; 184 - totalRecords: number; 185 - totalActors: number; 186 - message?: string; 187 - } 188 - 189 - export interface GetSparklinesParams { 190 - slices: string[]; 191 - interval?: string; 192 - duration?: string; 193 - } 194 - 195 - export interface GetSparklinesOutput { 196 - success: boolean; 197 - sparklines: Record<string, NetworkSlicesSliceDefs["SparklinePoint"][]>; 198 - message?: string; 199 - } 200 - 201 - export interface CreateOAuthClientRequest { 202 - clientName: string; 203 - redirectUris: string[]; 204 - grantTypes?: string[]; 205 - responseTypes?: string[]; 206 - scope?: string; 207 - clientUri?: string; 208 - logoUri?: string; 209 - tosUri?: string; 210 - policyUri?: string; 211 - } 212 - 213 - export interface OAuthClientDetails { 214 - clientId: string; 215 - clientSecret?: string; 216 - clientName: string; 217 - redirectUris: string[]; 218 - grantTypes: string[]; 219 - responseTypes: string[]; 220 - scope?: string; 221 - clientUri?: string; 222 - logoUri?: string; 223 - tosUri?: string; 224 - policyUri?: string; 225 - createdAt: string; 226 - createdByDid: string; 227 - } 228 - 229 - export interface ListOAuthClientsResponse { 230 - clients: OAuthClientDetails[]; 231 - } 232 - 233 - export interface UpdateOAuthClientRequest { 234 - clientId: string; 235 - clientName?: string; 236 - redirectUris?: string[]; 237 - scope?: string; 238 - clientUri?: string; 239 - logoUri?: string; 240 - tosUri?: string; 241 - policyUri?: string; 242 - } 243 - 244 - export interface DeleteOAuthClientResponse { 245 - success: boolean; 246 - message: string; 247 - } 248 - 249 - export interface OAuthOperationError { 250 - success: false; 251 - message: string; 252 - } 253 - 254 - export type AppBskyGraphDefsListPurpose = 255 - | "app.bsky.graph.defs#modlist" 256 - | "app.bsky.graph.defs#curatelist" 257 - | "app.bsky.graph.defs#referencelist" 258 - | (string & {}); 259 - 260 - export type AppBskyFeedDefsEvent = 261 - | "app.bsky.feed.defs#requestLess" 262 - | "app.bsky.feed.defs#requestMore" 263 - | "app.bsky.feed.defs#clickthroughItem" 264 - | "app.bsky.feed.defs#clickthroughAuthor" 265 - | "app.bsky.feed.defs#clickthroughReposter" 266 - | "app.bsky.feed.defs#clickthroughEmbed" 267 - | "app.bsky.feed.defs#interactionSeen" 268 - | "app.bsky.feed.defs#interactionLike" 269 - | "app.bsky.feed.defs#interactionRepost" 270 - | "app.bsky.feed.defs#interactionReply" 271 - | "app.bsky.feed.defs#interactionQuote" 272 - | "app.bsky.feed.defs#interactionShare" 273 - | (string & {}); 274 - 275 - export type AppBskyFeedDefsContentMode = 276 - | "app.bsky.feed.defs#contentModeUnspecified" 277 - | "app.bsky.feed.defs#contentModeVideo" 278 - | (string & {}); 279 - 280 - export type AppBskyActorDefsActorTarget = 281 - | "all" 282 - | "exclude-following" 283 - | (string & {}); 284 - 285 - export type AppBskyActorDefsType = 286 - | "feed" 287 - | "list" 288 - | "timeline" 289 - | (string & {}); 290 - 291 - export type AppBskyActorDefsSort = 292 - | "oldest" 293 - | "newest" 294 - | "most-likes" 295 - | "random" 296 - | "hotness" 297 - | (string & {}); 298 - 299 - export type AppBskyActorDefsMutedWordTarget = 300 - | "content" 301 - | "tag" 302 - | (string & {}); 303 - 304 - export type AppBskyActorDefsVisibility = 305 - | "ignore" 306 - | "show" 307 - | "warn" 308 - | "hide" 309 - | (string & {}); 310 - 311 - export type AppBskyActorDefsAllowIncoming = 312 - | "all" 313 - | "none" 314 - | "following" 315 - | (string & {}); 316 - 317 - export type ComAtprotoLabelDefsLabelValue = 318 - | "!hide" 319 - | "!no-promote" 320 - | "!warn" 321 - | "!no-unauthenticated" 322 - | "dmca-violation" 323 - | "doxxing" 324 - | "porn" 325 - | "sexual" 326 - | "nudity" 327 - | "nsfl" 328 - | "gore" 329 - | (string & {}); 330 - 331 - export type ComAtprotoLabelDefsBlurs = 332 - | "content" 333 - | "media" 334 - | "none" 335 - | (string & {}); 336 - 337 - export type ComAtprotoLabelDefsSeverity = 338 - | "inform" 339 - | "alert" 340 - | "none" 341 - | (string & {}); 342 - 343 - export type ComAtprotoLabelDefsDefaultSetting = 344 - | "ignore" 345 - | "warn" 346 - | "hide" 347 - | (string & {}); 348 - 349 - export interface AppBskyEmbedDefsAspectRatio { 350 - width: number; 351 - height: number; 352 - } 353 - 354 - export interface AppBskyEmbedRecordMain { 355 - record: ComAtprotoRepoStrongRef; 356 - } 357 - 358 - export interface AppBskyEmbedRecordView { 359 - record: 360 - | AppBskyEmbedRecord["ViewRecord"] 361 - | AppBskyEmbedRecord["ViewNotFound"] 362 - | AppBskyEmbedRecord["ViewBlocked"] 363 - | AppBskyEmbedRecord["ViewDetached"] 364 - | AppBskyFeedDefs["GeneratorView"] 365 - | AppBskyGraphDefs["ListView"] 366 - | AppBskyLabelerDefs["LabelerView"] 367 - | AppBskyGraphDefs["StarterPackViewBasic"] 368 - | { $type: string; [key: string]: unknown }; 369 - } 370 - 371 - export interface AppBskyEmbedRecordViewRecord { 372 - cid: string; 373 - uri: string; 374 - /** The record data itself. */ 375 - value: unknown; 376 - author: AppBskyActorDefs["ProfileViewBasic"]; 377 - embeds?: 378 - | AppBskyEmbedImages["View"] 379 - | AppBskyEmbedVideo["View"] 380 - | AppBskyEmbedExternal["View"] 381 - | AppBskyEmbedRecord["View"] 382 - | AppBskyEmbedRecordWithMedia["View"] 383 - | { $type: string; [key: string]: unknown }[]; 384 - labels?: ComAtprotoLabelDefs["Label"][]; 385 - indexedAt: string; 386 - likeCount?: number; 387 - quoteCount?: number; 388 - replyCount?: number; 389 - repostCount?: number; 390 - } 391 - 392 - export interface AppBskyEmbedRecordViewBlocked { 393 - uri: string; 394 - author: AppBskyFeedDefs["BlockedAuthor"]; 395 - blocked: boolean; 396 - } 397 - 398 - export interface AppBskyEmbedRecordViewDetached { 399 - uri: string; 400 - detached: boolean; 401 - } 402 - 403 - export interface AppBskyEmbedRecordViewNotFound { 404 - uri: string; 405 - notFound: boolean; 406 - } 407 - 408 - export interface AppBskyEmbedImagesMain { 409 - images: AppBskyEmbedImages["Image"][]; 410 - } 411 - 412 - export interface AppBskyEmbedImagesView { 413 - images: AppBskyEmbedImages["ViewImage"][]; 414 - } 415 - 416 - export interface AppBskyEmbedImagesImage { 417 - /** Alt text description of the image, for accessibility. */ 418 - alt: string; 419 - image: BlobRef; 420 - aspectRatio?: AppBskyEmbedDefs["AspectRatio"]; 421 - } 422 - 423 - export interface AppBskyEmbedImagesViewImage { 424 - /** Alt text description of the image, for accessibility. */ 425 - alt: string; 426 - /** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. */ 427 - thumb: string; 428 - /** 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. */ 429 - fullsize: string; 430 - aspectRatio?: AppBskyEmbedDefs["AspectRatio"]; 431 - } 432 - 433 - export interface AppBskyEmbedRecordWithMediaMain { 434 - media: 435 - | AppBskyEmbedImages["Main"] 436 - | AppBskyEmbedVideo["Main"] 437 - | AppBskyEmbedExternal["Main"] 438 - | { $type: string; [key: string]: unknown }; 439 - record: AppBskyEmbedRecord["Main"]; 440 - } 441 - 442 - export interface AppBskyEmbedRecordWithMediaView { 443 - media: 444 - | AppBskyEmbedImages["View"] 445 - | AppBskyEmbedVideo["View"] 446 - | AppBskyEmbedExternal["View"] 447 - | { $type: string; [key: string]: unknown }; 448 - record: AppBskyEmbedRecord["View"]; 449 - } 450 - 451 - export interface AppBskyEmbedVideoMain { 452 - /** Alt text description of the video, for accessibility. */ 453 - alt?: string; 454 - video: BlobRef; 455 - captions?: AppBskyEmbedVideo["Caption"][]; 456 - aspectRatio?: AppBskyEmbedDefs["AspectRatio"]; 457 - } 458 - 459 - export interface AppBskyEmbedVideoView { 460 - alt?: string; 461 - cid: string; 462 - playlist: string; 463 - thumbnail?: string; 464 - aspectRatio?: AppBskyEmbedDefs["AspectRatio"]; 465 - } 466 - 467 - export interface AppBskyEmbedVideoCaption { 468 - file: BlobRef; 469 - lang: string; 470 - } 471 - 472 - export interface AppBskyEmbedExternalMain { 473 - external: AppBskyEmbedExternal["External"]; 474 - } 475 - 476 - export interface AppBskyEmbedExternalView { 477 - external: AppBskyEmbedExternal["ViewExternal"]; 478 - } 479 - 480 - export interface AppBskyEmbedExternalExternal { 481 - uri: string; 482 - thumb?: BlobRef; 483 - title: string; 484 - description: string; 485 - } 486 - 487 - export interface AppBskyEmbedExternalViewExternal { 488 - uri: string; 489 - thumb?: string; 490 - title: string; 491 - description: string; 492 - } 493 - 494 - export interface AppBskyGraphFollow { 495 - subject: string; 496 - createdAt: string; 497 - } 498 - 499 - export type AppBskyGraphFollowSortFields = "subject" | "createdAt"; 500 - export type AppBskyGraphDefsModlist = "app.bsky.graph.defs#modlist"; 501 - 502 - export interface AppBskyGraphDefsListView { 503 - cid: string; 504 - uri: string; 505 - name: string; 506 - avatar?: string; 507 - labels?: ComAtprotoLabelDefs["Label"][]; 508 - viewer?: AppBskyGraphDefs["ListViewerState"]; 509 - creator: AppBskyActorDefs["ProfileView"]; 510 - purpose: AppBskyGraphDefs["ListPurpose"]; 511 - indexedAt: string; 512 - description?: string; 513 - listItemCount?: number; 514 - descriptionFacets?: AppBskyRichtextFacet["Main"][]; 515 - } 516 - 517 - export type AppBskyGraphDefsCuratelist = "app.bsky.graph.defs#curatelist"; 518 - 519 - export interface AppBskyGraphDefsListItemView { 520 - uri: string; 521 - subject: AppBskyActorDefs["ProfileView"]; 522 - } 523 - 524 - export interface AppBskyGraphDefsRelationship { 525 - did: string; 526 - /** if the actor follows this DID, this is the AT-URI of the follow record */ 527 - following?: string; 528 - /** if the actor is followed by this DID, contains the AT-URI of the follow record */ 529 - followedBy?: string; 530 - } 531 - 532 - export interface AppBskyGraphDefsListViewBasic { 533 - cid: string; 534 - uri: string; 535 - name: string; 536 - avatar?: string; 537 - labels?: ComAtprotoLabelDefs["Label"][]; 538 - viewer?: AppBskyGraphDefs["ListViewerState"]; 539 - purpose: AppBskyGraphDefs["ListPurpose"]; 540 - indexedAt?: string; 541 - listItemCount?: number; 542 - } 543 - 544 - export interface AppBskyGraphDefsNotFoundActor { 545 - actor: string; 546 - notFound: boolean; 547 - } 548 - 549 - export type AppBskyGraphDefsReferencelist = "app.bsky.graph.defs#referencelist"; 550 - 551 - export interface AppBskyGraphDefsListViewerState { 552 - muted?: boolean; 553 - blocked?: string; 554 - } 555 - 556 - export interface AppBskyGraphDefsStarterPackView { 557 - cid: string; 558 - uri: string; 559 - list?: AppBskyGraphDefs["ListViewBasic"]; 560 - feeds?: AppBskyFeedDefs["GeneratorView"][]; 561 - labels?: ComAtprotoLabelDefs["Label"][]; 562 - record: unknown; 563 - creator: AppBskyActorDefs["ProfileViewBasic"]; 564 - indexedAt: string; 565 - joinedWeekCount?: number; 566 - listItemsSample?: AppBskyGraphDefs["ListItemView"][]; 567 - joinedAllTimeCount?: number; 568 - } 569 - 570 - export interface AppBskyGraphDefsStarterPackViewBasic { 571 - cid: string; 572 - uri: string; 573 - labels?: ComAtprotoLabelDefs["Label"][]; 574 - record: unknown; 575 - creator: AppBskyActorDefs["ProfileViewBasic"]; 576 - indexedAt: string; 577 - listItemCount?: number; 578 - joinedWeekCount?: number; 579 - joinedAllTimeCount?: number; 580 - } 581 - 582 - export interface AppBskyFeedDefsPostView { 583 - cid: string; 584 - uri: string; 585 - embed?: 586 - | AppBskyEmbedImages["View"] 587 - | AppBskyEmbedVideo["View"] 588 - | AppBskyEmbedExternal["View"] 589 - | AppBskyEmbedRecord["View"] 590 - | AppBskyEmbedRecordWithMedia["View"] 591 - | { $type: string; [key: string]: unknown }; 592 - author: AppBskyActorDefs["ProfileViewBasic"]; 593 - labels?: ComAtprotoLabelDefs["Label"][]; 594 - record: unknown; 595 - viewer?: AppBskyFeedDefs["ViewerState"]; 596 - indexedAt: string; 597 - likeCount?: number; 598 - quoteCount?: number; 599 - replyCount?: number; 600 - threadgate?: AppBskyFeedDefs["ThreadgateView"]; 601 - repostCount?: number; 602 - } 603 - 604 - export interface AppBskyFeedDefsReplyRef { 605 - root: 606 - | AppBskyFeedDefs["PostView"] 607 - | AppBskyFeedDefs["NotFoundPost"] 608 - | AppBskyFeedDefs["BlockedPost"] 609 - | { $type: string; [key: string]: unknown }; 610 - parent: 611 - | AppBskyFeedDefs["PostView"] 612 - | AppBskyFeedDefs["NotFoundPost"] 613 - | AppBskyFeedDefs["BlockedPost"] 614 - | { $type: string; [key: string]: unknown }; 615 - /** When parent is a reply to another post, this is the author of that post. */ 616 - grandparentAuthor?: AppBskyActorDefs["ProfileViewBasic"]; 617 - } 618 - 619 - export interface AppBskyFeedDefsReasonPin { 620 - } 621 - 622 - export interface AppBskyFeedDefsBlockedPost { 623 - uri: string; 624 - author: AppBskyFeedDefs["BlockedAuthor"]; 625 - blocked: boolean; 626 - } 627 - 628 - export interface AppBskyFeedDefsInteraction { 629 - item?: string; 630 - event?: AppBskyFeedDefsEvent; 631 - /** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */ 632 - feedContext?: string; 633 - } 634 - 635 - export type AppBskyFeedDefsRequestLess = "app.bsky.feed.defs#requestLess"; 636 - export type AppBskyFeedDefsRequestMore = "app.bsky.feed.defs#requestMore"; 637 - 638 - export interface AppBskyFeedDefsViewerState { 639 - like?: string; 640 - pinned?: boolean; 641 - repost?: string; 642 - threadMuted?: boolean; 643 - replyDisabled?: boolean; 644 - embeddingDisabled?: boolean; 645 - } 646 - 647 - export interface AppBskyFeedDefsFeedViewPost { 648 - post: AppBskyFeedDefs["PostView"]; 649 - reply?: AppBskyFeedDefs["ReplyRef"]; 650 - reason?: AppBskyFeedDefs["ReasonRepost"] | AppBskyFeedDefs["ReasonPin"] | { 651 - $type: string; 652 - [key: string]: unknown; 653 - }; 654 - /** Context provided by feed generator that may be passed back alongside interactions. */ 655 - feedContext?: string; 656 - } 657 - 658 - export interface AppBskyFeedDefsNotFoundPost { 659 - uri: string; 660 - notFound: boolean; 661 - } 662 - 663 - export interface AppBskyFeedDefsReasonRepost { 664 - by: AppBskyActorDefs["ProfileViewBasic"]; 665 - indexedAt: string; 666 - } 667 - 668 - export interface AppBskyFeedDefsBlockedAuthor { 669 - did: string; 670 - viewer?: AppBskyActorDefs["ViewerState"]; 671 - } 672 - 673 - export interface AppBskyFeedDefsGeneratorView { 674 - cid: string; 675 - did: string; 676 - uri: string; 677 - avatar?: string; 678 - labels?: ComAtprotoLabelDefs["Label"][]; 679 - viewer?: AppBskyFeedDefs["GeneratorViewerState"]; 680 - creator: AppBskyActorDefs["ProfileView"]; 681 - indexedAt: string; 682 - likeCount?: number; 683 - contentMode?: AppBskyFeedDefsContentMode; 684 - description?: string; 685 - displayName: string; 686 - descriptionFacets?: AppBskyRichtextFacet["Main"][]; 687 - acceptsInteractions?: boolean; 688 - } 689 - 690 - export interface AppBskyFeedDefsThreadContext { 691 - rootAuthorLike?: string; 692 - } 693 - 694 - export interface AppBskyFeedDefsThreadViewPost { 695 - post: AppBskyFeedDefs["PostView"]; 696 - parent?: 697 - | AppBskyFeedDefs["ThreadViewPost"] 698 - | AppBskyFeedDefs["NotFoundPost"] 699 - | AppBskyFeedDefs["BlockedPost"] 700 - | { $type: string; [key: string]: unknown }; 701 - replies?: 702 - | AppBskyFeedDefs["ThreadViewPost"] 703 - | AppBskyFeedDefs["NotFoundPost"] 704 - | AppBskyFeedDefs["BlockedPost"] 705 - | { $type: string; [key: string]: unknown }[]; 706 - threadContext?: AppBskyFeedDefs["ThreadContext"]; 707 - } 708 - 709 - export interface AppBskyFeedDefsThreadgateView { 710 - cid?: string; 711 - uri?: string; 712 - lists?: AppBskyGraphDefs["ListViewBasic"][]; 713 - record?: unknown; 714 - } 715 - 716 - export type AppBskyFeedDefsInteractionLike = 717 - "app.bsky.feed.defs#interactionLike"; 718 - export type AppBskyFeedDefsInteractionSeen = 719 - "app.bsky.feed.defs#interactionSeen"; 720 - export type AppBskyFeedDefsClickthroughItem = 721 - "app.bsky.feed.defs#clickthroughItem"; 722 - export type AppBskyFeedDefsContentModeVideo = 723 - "app.bsky.feed.defs#contentModeVideo"; 724 - export type AppBskyFeedDefsInteractionQuote = 725 - "app.bsky.feed.defs#interactionQuote"; 726 - export type AppBskyFeedDefsInteractionReply = 727 - "app.bsky.feed.defs#interactionReply"; 728 - export type AppBskyFeedDefsInteractionShare = 729 - "app.bsky.feed.defs#interactionShare"; 730 - 731 - export interface AppBskyFeedDefsSkeletonFeedPost { 732 - post: string; 733 - reason?: 734 - | AppBskyFeedDefs["SkeletonReasonRepost"] 735 - | AppBskyFeedDefs["SkeletonReasonPin"] 736 - | { $type: string; [key: string]: unknown }; 737 - /** Context that will be passed through to client and may be passed to feed generator back alongside interactions. */ 738 - feedContext?: string; 739 - } 740 - 741 - export type AppBskyFeedDefsClickthroughEmbed = 742 - "app.bsky.feed.defs#clickthroughEmbed"; 743 - export type AppBskyFeedDefsInteractionRepost = 744 - "app.bsky.feed.defs#interactionRepost"; 745 - 746 - export interface AppBskyFeedDefsSkeletonReasonPin { 747 - } 748 - 749 - export type AppBskyFeedDefsClickthroughAuthor = 750 - "app.bsky.feed.defs#clickthroughAuthor"; 751 - export type AppBskyFeedDefsClickthroughReposter = 752 - "app.bsky.feed.defs#clickthroughReposter"; 753 - 754 - export interface AppBskyFeedDefsGeneratorViewerState { 755 - like?: string; 756 - } 757 - 758 - export interface AppBskyFeedDefsSkeletonReasonRepost { 759 - repost: string; 760 - } 761 - 762 - export type AppBskyFeedDefsContentModeUnspecified = 763 - "app.bsky.feed.defs#contentModeUnspecified"; 764 - 765 - export interface AppBskyFeedPostgate { 766 - /** Reference (AT-URI) to the post record. */ 767 - post: string; 768 - createdAt: string; 769 - /** 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. */ 770 - embeddingRules?: AppBskyFeedPostgate["DisableRule"] | { 771 - $type: string; 772 - [key: string]: unknown; 773 - }[]; 774 - /** List of AT-URIs embedding this post that the author has detached from. */ 775 - detachedEmbeddingUris?: string[]; 776 - } 777 - 778 - export type AppBskyFeedPostgateSortFields = "post" | "createdAt"; 779 - 780 - export interface AppBskyFeedPostgateDisableRule { 781 - } 782 - 783 - export interface AppBskyFeedThreadgate { 784 - /** Reference (AT-URI) to the post record. */ 785 - post: string; 786 - /** 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. */ 787 - allow?: 788 - | AppBskyFeedThreadgate["MentionRule"] 789 - | AppBskyFeedThreadgate["FollowerRule"] 790 - | AppBskyFeedThreadgate["FollowingRule"] 791 - | AppBskyFeedThreadgate["ListRule"] 792 - | { $type: string; [key: string]: unknown }[]; 793 - createdAt: string; 794 - /** List of hidden reply URIs. */ 795 - hiddenReplies?: string[]; 796 - } 797 - 798 - export type AppBskyFeedThreadgateSortFields = "post" | "createdAt"; 799 - 800 - export interface AppBskyFeedThreadgateListRule { 801 - list: string; 802 - } 803 - 804 - export interface AppBskyFeedThreadgateMentionRule { 805 - } 806 - 807 - export interface AppBskyFeedThreadgateFollowerRule { 808 - } 809 - 810 - export interface AppBskyFeedThreadgateFollowingRule { 811 - } 812 - 813 - export interface AppBskyRichtextFacetTag { 814 - tag: string; 815 - } 816 - 817 - export interface AppBskyRichtextFacetLink { 818 - uri: string; 819 - } 820 - 821 - export interface AppBskyRichtextFacetMain { 822 - index: AppBskyRichtextFacet["ByteSlice"]; 823 - features: 824 - | AppBskyRichtextFacet["Mention"] 825 - | AppBskyRichtextFacet["Link"] 826 - | AppBskyRichtextFacet["Tag"] 827 - | { $type: string; [key: string]: unknown }[]; 828 - } 829 - 830 - export interface AppBskyRichtextFacetMention { 831 - did: string; 832 - } 833 - 834 - export interface AppBskyRichtextFacetByteSlice { 835 - byteEnd: number; 836 - byteStart: number; 837 - } 838 - 839 - export interface AppBskyActorDefsNux { 840 - id: string; 841 - /** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. */ 842 - data?: string; 843 - completed: boolean; 844 - /** The date and time at which the NUX will expire and should be considered completed. */ 845 - expiresAt?: string; 846 - } 847 - 848 - export interface AppBskyActorDefsMutedWord { 849 - id?: string; 850 - /** The muted word itself. */ 851 - value: string; 852 - /** The intended targets of the muted word. */ 853 - targets: AppBskyActorDefs["MutedWordTarget"][]; 854 - /** The date and time at which the muted word will expire and no longer be applied. */ 855 - expiresAt?: string; 856 - /** Groups of users to apply the muted word to. If undefined, applies to all users. */ 857 - actorTarget?: AppBskyActorDefsActorTarget; 858 - } 859 - 860 - export interface AppBskyActorDefsSavedFeed { 861 - id: string; 862 - type: AppBskyActorDefsType; 863 - value: string; 864 - pinned: boolean; 865 - } 866 - 867 - export type AppBskyActorDefsPreferences = 868 - | AppBskyActorDefs["AdultContentPref"] 869 - | AppBskyActorDefs["ContentLabelPref"] 870 - | AppBskyActorDefs["SavedFeedsPref"] 871 - | AppBskyActorDefs["SavedFeedsPrefV2"] 872 - | AppBskyActorDefs["PersonalDetailsPref"] 873 - | AppBskyActorDefs["FeedViewPref"] 874 - | AppBskyActorDefs["ThreadViewPref"] 875 - | AppBskyActorDefs["InterestsPref"] 876 - | AppBskyActorDefs["MutedWordsPref"] 877 - | AppBskyActorDefs["HiddenPostsPref"] 878 - | AppBskyActorDefs["BskyAppStatePref"] 879 - | AppBskyActorDefs["LabelersPref"] 880 - | AppBskyActorDefs["PostInteractionSettingsPref"] 881 - | { $type: string; [key: string]: unknown }[]; 882 - 883 - export interface AppBskyActorDefsProfileView { 884 - did: string; 885 - avatar?: string; 886 - handle: string; 887 - labels?: ComAtprotoLabelDefs["Label"][]; 888 - viewer?: AppBskyActorDefs["ViewerState"]; 889 - createdAt?: string; 890 - indexedAt?: string; 891 - associated?: AppBskyActorDefs["ProfileAssociated"]; 892 - description?: string; 893 - displayName?: string; 894 - } 895 - 896 - export interface AppBskyActorDefsViewerState { 897 - muted?: boolean; 898 - blocking?: string; 899 - blockedBy?: boolean; 900 - following?: string; 901 - followedBy?: string; 902 - mutedByList?: AppBskyGraphDefs["ListViewBasic"]; 903 - blockingByList?: AppBskyGraphDefs["ListViewBasic"]; 904 - knownFollowers?: AppBskyActorDefs["KnownFollowers"]; 905 - } 906 - 907 - export interface AppBskyActorDefsFeedViewPref { 908 - /** The URI of the feed, or an identifier which describes the feed. */ 909 - feed: string; 910 - /** Hide replies in the feed. */ 911 - hideReplies?: boolean; 912 - /** Hide reposts in the feed. */ 913 - hideReposts?: boolean; 914 - /** Hide quote posts in the feed. */ 915 - hideQuotePosts?: boolean; 916 - /** Hide replies in the feed if they do not have this number of likes. */ 917 - hideRepliesByLikeCount?: number; 918 - /** Hide replies in the feed if they are not by followed users. */ 919 - hideRepliesByUnfollowed?: boolean; 920 - } 921 - 922 - export interface AppBskyActorDefsLabelersPref { 923 - labelers: AppBskyActorDefs["LabelerPrefItem"][]; 924 - } 925 - 926 - export interface AppBskyActorDefsInterestsPref { 927 - /** A list of tags which describe the account owner's interests gathered during onboarding. */ 928 - tags: string[]; 929 - } 930 - 931 - export interface AppBskyActorDefsKnownFollowers { 932 - count: number; 933 - followers: AppBskyActorDefs["ProfileViewBasic"][]; 934 - } 935 - 936 - export interface AppBskyActorDefsMutedWordsPref { 937 - /** A list of words the account owner has muted. */ 938 - items: AppBskyActorDefs["MutedWord"][]; 939 - } 940 - 941 - export interface AppBskyActorDefsSavedFeedsPref { 942 - saved: string[]; 943 - pinned: string[]; 944 - timelineIndex?: number; 945 - } 946 - 947 - export interface AppBskyActorDefsThreadViewPref { 948 - /** Sorting mode for threads. */ 949 - sort?: AppBskyActorDefsSort; 950 - /** Show followed users at the top of all replies. */ 951 - prioritizeFollowedUsers?: boolean; 952 - } 953 - 954 - export interface AppBskyActorDefsHiddenPostsPref { 955 - /** A list of URIs of posts the account owner has hidden. */ 956 - items: string[]; 957 - } 958 - 959 - export interface AppBskyActorDefsLabelerPrefItem { 960 - did: string; 961 - } 962 - 963 - export interface AppBskyActorDefsAdultContentPref { 964 - enabled: boolean; 965 - } 966 - 967 - export interface AppBskyActorDefsBskyAppStatePref { 968 - /** Storage for NUXs the user has encountered. */ 969 - nuxs?: AppBskyActorDefs["Nux"][]; 970 - /** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. */ 971 - queuedNudges?: string[]; 972 - activeProgressGuide?: AppBskyActorDefs["BskyAppProgressGuide"]; 973 - } 974 - 975 - export interface AppBskyActorDefsContentLabelPref { 976 - label: string; 977 - /** Which labeler does this preference apply to? If undefined, applies globally. */ 978 - labelerDid?: string; 979 - visibility: AppBskyActorDefsVisibility; 980 - } 981 - 982 - export interface AppBskyActorDefsProfileViewBasic { 983 - did: string; 984 - avatar?: string; 985 - handle: string; 986 - labels?: ComAtprotoLabelDefs["Label"][]; 987 - viewer?: AppBskyActorDefs["ViewerState"]; 988 - createdAt?: string; 989 - associated?: AppBskyActorDefs["ProfileAssociated"]; 990 - displayName?: string; 991 - } 992 - 993 - export interface AppBskyActorDefsSavedFeedsPrefV2 { 994 - items: AppBskyActorDefs["SavedFeed"][]; 995 - } 996 - 997 - export interface AppBskyActorDefsProfileAssociated { 998 - chat?: AppBskyActorDefs["ProfileAssociatedChat"]; 999 - lists?: number; 1000 - labeler?: boolean; 1001 - feedgens?: number; 1002 - starterPacks?: number; 1003 - } 1004 - 1005 - export interface AppBskyActorDefsPersonalDetailsPref { 1006 - /** The birth date of account owner. */ 1007 - birthDate?: string; 1008 - } 1009 - 1010 - export interface AppBskyActorDefsProfileViewDetailed { 1011 - did: string; 1012 - avatar?: string; 1013 - banner?: string; 1014 - handle: string; 1015 - labels?: ComAtprotoLabelDefs["Label"][]; 1016 - viewer?: AppBskyActorDefs["ViewerState"]; 1017 - createdAt?: string; 1018 - indexedAt?: string; 1019 - associated?: AppBskyActorDefs["ProfileAssociated"]; 1020 - pinnedPost?: ComAtprotoRepoStrongRef; 1021 - postsCount?: number; 1022 - description?: string; 1023 - displayName?: string; 1024 - followsCount?: number; 1025 - followersCount?: number; 1026 - joinedViaStarterPack?: AppBskyGraphDefs["StarterPackViewBasic"]; 1027 - } 1028 - 1029 - export interface AppBskyActorDefsBskyAppProgressGuide { 1030 - guide: string; 1031 - } 1032 - 1033 - export interface AppBskyActorDefsProfileAssociatedChat { 1034 - allowIncoming: AppBskyActorDefsAllowIncoming; 1035 - } 1036 - 1037 - export interface AppBskyActorDefsPostInteractionSettingsPref { 1038 - /** 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. */ 1039 - threadgateAllowRules?: 1040 - | AppBskyFeedThreadgate["MentionRule"] 1041 - | AppBskyFeedThreadgate["FollowerRule"] 1042 - | AppBskyFeedThreadgate["FollowingRule"] 1043 - | AppBskyFeedThreadgate["ListRule"] 1044 - | { $type: string; [key: string]: unknown }[]; 1045 - /** 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. */ 1046 - postgateEmbeddingRules?: AppBskyFeedPostgate["DisableRule"] | { 1047 - $type: string; 1048 - [key: string]: unknown; 1049 - }[]; 1050 - } 1051 - 1052 - export interface AppBskyActorProfile { 1053 - /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ 1054 - avatar?: BlobRef; 1055 - /** Larger horizontal image to display behind profile view. */ 1056 - banner?: BlobRef; 1057 - /** Self-label values, specific to the Bluesky application, on the overall account. */ 1058 - labels?: ComAtprotoLabelDefs["SelfLabels"] | { 1059 - $type: string; 1060 - [key: string]: unknown; 1061 - }; 1062 - createdAt?: string; 1063 - pinnedPost?: ComAtprotoRepoStrongRef; 1064 - /** Free-form profile description text. */ 1065 - description?: string; 1066 - displayName?: string; 1067 - joinedViaStarterPack?: ComAtprotoRepoStrongRef; 1068 - } 1069 - 1070 - export type AppBskyActorProfileSortFields = 1071 - | "createdAt" 1072 - | "description" 1073 - | "displayName"; 1074 - 1075 - export interface AppBskyLabelerDefsLabelerView { 1076 - cid: string; 1077 - uri: string; 1078 - labels?: ComAtprotoLabelDefs["Label"][]; 1079 - viewer?: AppBskyLabelerDefs["LabelerViewerState"]; 1080 - creator: AppBskyActorDefs["ProfileView"]; 1081 - indexedAt: string; 1082 - likeCount?: number; 1083 - } 1084 - 1085 - export interface AppBskyLabelerDefsLabelerPolicies { 1086 - /** The label values which this labeler publishes. May include global or custom labels. */ 1087 - labelValues: ComAtprotoLabelDefs["LabelValue"][]; 1088 - /** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. */ 1089 - labelValueDefinitions?: ComAtprotoLabelDefs["LabelValueDefinition"][]; 1090 - } 1091 - 1092 - export interface AppBskyLabelerDefsLabelerViewerState { 1093 - like?: string; 1094 - } 1095 - 1096 - export interface AppBskyLabelerDefsLabelerViewDetailed { 1097 - cid: string; 1098 - uri: string; 1099 - labels?: ComAtprotoLabelDefs["Label"][]; 1100 - viewer?: AppBskyLabelerDefs["LabelerViewerState"]; 1101 - creator: AppBskyActorDefs["ProfileView"]; 1102 - policies: AppBskyLabelerDefs["LabelerPolicies"]; 1103 - indexedAt: string; 1104 - likeCount?: number; 1105 - } 1106 - 1107 - export interface NetworkSlicesWaitlistRequest { 1108 - /** The AT URI of the slice being requested access to */ 1109 - slice: string; 1110 - /** When the user joined the waitlist */ 1111 - createdAt: string; 1112 - } 1113 - 1114 - export type NetworkSlicesWaitlistRequestSortFields = "slice" | "createdAt"; 1115 - 1116 - export interface NetworkSlicesWaitlistDefsRequestView { 1117 - /** The AT URI of the slice being requested access to */ 1118 - slice: string; 1119 - /** When the user joined the waitlist */ 1120 - createdAt: string; 1121 - /** Profile of the requester */ 1122 - profile?: AppBskyActorDefs["ProfileViewBasic"]; 1123 - } 1124 - 1125 - export interface NetworkSlicesWaitlistDefsInviteView { 1126 - /** The DID being invited */ 1127 - did: string; 1128 - /** The AT URI of the slice this invite is for */ 1129 - slice: string; 1130 - /** When this invitation was created */ 1131 - createdAt: string; 1132 - /** Optional expiration date for this invitation */ 1133 - expiresAt?: string; 1134 - /** The AT URI of this invite record */ 1135 - uri?: string; 1136 - /** Profile of the invitee */ 1137 - profile?: AppBskyActorDefs["ProfileViewBasic"]; 1138 - } 1139 - 1140 - export interface NetworkSlicesWaitlistInvite { 1141 - /** The DID being invited */ 1142 - did: string; 1143 - /** The AT URI of the slice this invite is for */ 1144 - slice: string; 1145 - /** When this invitation was created */ 1146 - createdAt: string; 1147 - /** Optional expiration date for this invitation */ 1148 - expiresAt?: string; 1149 - } 1150 - 1151 - export type NetworkSlicesWaitlistInviteSortFields = 1152 - | "did" 1153 - | "slice" 1154 - | "createdAt" 1155 - | "expiresAt"; 1156 - 1157 - export interface NetworkSlicesSliceDefsSliceView { 1158 - uri: string; 1159 - cid: string; 1160 - /** Display name of the slice */ 1161 - name: string; 1162 - /** Primary domain namespace for this slice (e.g. social.grain) */ 1163 - domain: string; 1164 - /** Profile of the slice creator */ 1165 - creator: NetworkSlicesActorDefs["ProfileViewBasic"]; 1166 - createdAt: string; 1167 - /** Recent activity sparkline data points for the last 24 hours */ 1168 - sparkline?: NetworkSlicesSliceDefs["SparklinePoint"][]; 1169 - /** Total number of indexed records in this slice */ 1170 - indexedRecordCount?: number; 1171 - /** Total number of unique indexed actors in this slice */ 1172 - indexedActorCount?: number; 1173 - /** Number of collections with indexed records */ 1174 - indexedCollectionCount?: number; 1175 - } 1176 - 1177 - export interface NetworkSlicesSliceDefsSparklinePoint { 1178 - timestamp: string; 1179 - count: number; 1180 - } 1181 - 1182 - export interface NetworkSlicesSlice { 1183 - /** Name of the slice */ 1184 - name: string; 1185 - /** Primary domain namespace for this slice (e.g. social.grain) */ 1186 - domain: string; 1187 - /** When the slice was created */ 1188 - createdAt: string; 1189 - } 1190 - 1191 - export type NetworkSlicesSliceSortFields = "name" | "domain" | "createdAt"; 1192 - 1193 - export interface NetworkSlicesLexicon { 1194 - /** Namespaced identifier for the lexicon */ 1195 - nsid: string; 1196 - /** The lexicon schema definitions as JSON */ 1197 - definitions: string; 1198 - /** When the lexicon was created */ 1199 - createdAt: string; 1200 - /** When the lexicon was last updated */ 1201 - updatedAt?: string; 1202 - /** AT-URI reference to the slice this lexicon belongs to */ 1203 - slice: string; 1204 - } 1205 - 1206 - export type NetworkSlicesLexiconSortFields = 1207 - | "nsid" 1208 - | "definitions" 1209 - | "createdAt" 1210 - | "updatedAt" 1211 - | "slice"; 1212 - 1213 - export interface NetworkSlicesActorDefsProfileViewBasic { 1214 - did: string; 1215 - handle: string; 1216 - displayName?: string; 1217 - /** Free-form profile description text. */ 1218 - description?: string; 1219 - avatar?: string; 1220 - } 1221 - 1222 - export interface NetworkSlicesActorProfile { 1223 - displayName?: string; 1224 - /** Free-form profile description text. */ 1225 - description?: string; 1226 - /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ 1227 - avatar?: BlobRef; 1228 - createdAt?: string; 1229 - } 1230 - 1231 - export type NetworkSlicesActorProfileSortFields = 1232 - | "displayName" 1233 - | "description" 1234 - | "createdAt"; 1235 - 1236 - export interface ComAtprotoLabelDefsLabel { 1237 - /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ 1238 - cid?: string; 1239 - /** Timestamp when this label was created. */ 1240 - cts: string; 1241 - /** Timestamp at which this label expires (no longer applies). */ 1242 - exp?: string; 1243 - /** If true, this is a negation label, overwriting a previous label. */ 1244 - neg?: boolean; 1245 - /** Signature of dag-cbor encoded label. */ 1246 - sig?: string; 1247 - /** DID of the actor who created this label. */ 1248 - src: string; 1249 - /** AT URI of the record, repository (account), or other resource that this label applies to. */ 1250 - uri: string; 1251 - /** The short string name of the value or type of this label. */ 1252 - val: string; 1253 - /** The AT Protocol version of the label object. */ 1254 - ver?: number; 1255 - } 1256 - 1257 - export interface ComAtprotoLabelDefsSelfLabel { 1258 - /** The short string name of the value or type of this label. */ 1259 - val: string; 1260 - } 1261 - 1262 - export interface ComAtprotoLabelDefsSelfLabels { 1263 - values: ComAtprotoLabelDefs["SelfLabel"][]; 1264 - } 1265 - 1266 - export interface ComAtprotoLabelDefsLabelValueDefinition { 1267 - /** 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. */ 1268 - blurs: ComAtprotoLabelDefsBlurs; 1269 - locales: ComAtprotoLabelDefs["LabelValueDefinitionStrings"][]; 1270 - /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */ 1271 - severity: ComAtprotoLabelDefsSeverity; 1272 - /** Does the user need to have adult content enabled in order to configure this label? */ 1273 - adultOnly?: boolean; 1274 - /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */ 1275 - identifier: string; 1276 - /** The default setting for this label. */ 1277 - defaultSetting?: ComAtprotoLabelDefsDefaultSetting; 1278 - } 1279 - 1280 - export interface ComAtprotoLabelDefsLabelValueDefinitionStrings { 1281 - /** The code of the language these strings are written in. */ 1282 - lang: string; 1283 - /** A short human-readable name for the label. */ 1284 - name: string; 1285 - /** A longer description of what the label means and why it might be applied. */ 1286 - description: string; 1287 - } 1288 - 1289 - export interface ComAtprotoRepoStrongRef { 1290 - cid: string; 1291 - uri: string; 1292 - } 1293 - 1294 - export interface AppBskyEmbedDefs { 1295 - readonly AspectRatio: AppBskyEmbedDefsAspectRatio; 1296 - } 1297 - 1298 - export interface AppBskyEmbedRecord { 1299 - readonly Main: AppBskyEmbedRecordMain; 1300 - readonly View: AppBskyEmbedRecordView; 1301 - readonly ViewRecord: AppBskyEmbedRecordViewRecord; 1302 - readonly ViewBlocked: AppBskyEmbedRecordViewBlocked; 1303 - readonly ViewDetached: AppBskyEmbedRecordViewDetached; 1304 - readonly ViewNotFound: AppBskyEmbedRecordViewNotFound; 1305 - } 1306 - 1307 - export interface AppBskyEmbedImages { 1308 - readonly Main: AppBskyEmbedImagesMain; 1309 - readonly View: AppBskyEmbedImagesView; 1310 - readonly Image: AppBskyEmbedImagesImage; 1311 - readonly ViewImage: AppBskyEmbedImagesViewImage; 1312 - } 1313 - 1314 - export interface AppBskyEmbedRecordWithMedia { 1315 - readonly Main: AppBskyEmbedRecordWithMediaMain; 1316 - readonly View: AppBskyEmbedRecordWithMediaView; 1317 - } 1318 - 1319 - export interface AppBskyEmbedVideo { 1320 - readonly Main: AppBskyEmbedVideoMain; 1321 - readonly View: AppBskyEmbedVideoView; 1322 - readonly Caption: AppBskyEmbedVideoCaption; 1323 - } 1324 - 1325 - export interface AppBskyEmbedExternal { 1326 - readonly Main: AppBskyEmbedExternalMain; 1327 - readonly View: AppBskyEmbedExternalView; 1328 - readonly External: AppBskyEmbedExternalExternal; 1329 - readonly ViewExternal: AppBskyEmbedExternalViewExternal; 1330 - } 1331 - 1332 - export interface AppBskyGraphDefs { 1333 - readonly Modlist: AppBskyGraphDefsModlist; 1334 - readonly ListView: AppBskyGraphDefsListView; 1335 - readonly Curatelist: AppBskyGraphDefsCuratelist; 1336 - readonly ListPurpose: AppBskyGraphDefsListPurpose; 1337 - readonly ListItemView: AppBskyGraphDefsListItemView; 1338 - readonly Relationship: AppBskyGraphDefsRelationship; 1339 - readonly ListViewBasic: AppBskyGraphDefsListViewBasic; 1340 - readonly NotFoundActor: AppBskyGraphDefsNotFoundActor; 1341 - readonly Referencelist: AppBskyGraphDefsReferencelist; 1342 - readonly ListViewerState: AppBskyGraphDefsListViewerState; 1343 - readonly StarterPackView: AppBskyGraphDefsStarterPackView; 1344 - readonly StarterPackViewBasic: AppBskyGraphDefsStarterPackViewBasic; 1345 - } 1346 - 1347 - export interface AppBskyFeedDefs { 1348 - readonly PostView: AppBskyFeedDefsPostView; 1349 - readonly ReplyRef: AppBskyFeedDefsReplyRef; 1350 - readonly ReasonPin: AppBskyFeedDefsReasonPin; 1351 - readonly BlockedPost: AppBskyFeedDefsBlockedPost; 1352 - readonly Interaction: AppBskyFeedDefsInteraction; 1353 - readonly RequestLess: AppBskyFeedDefsRequestLess; 1354 - readonly RequestMore: AppBskyFeedDefsRequestMore; 1355 - readonly ViewerState: AppBskyFeedDefsViewerState; 1356 - readonly FeedViewPost: AppBskyFeedDefsFeedViewPost; 1357 - readonly NotFoundPost: AppBskyFeedDefsNotFoundPost; 1358 - readonly ReasonRepost: AppBskyFeedDefsReasonRepost; 1359 - readonly BlockedAuthor: AppBskyFeedDefsBlockedAuthor; 1360 - readonly GeneratorView: AppBskyFeedDefsGeneratorView; 1361 - readonly ThreadContext: AppBskyFeedDefsThreadContext; 1362 - readonly ThreadViewPost: AppBskyFeedDefsThreadViewPost; 1363 - readonly ThreadgateView: AppBskyFeedDefsThreadgateView; 1364 - readonly InteractionLike: AppBskyFeedDefsInteractionLike; 1365 - readonly InteractionSeen: AppBskyFeedDefsInteractionSeen; 1366 - readonly ClickthroughItem: AppBskyFeedDefsClickthroughItem; 1367 - readonly ContentModeVideo: AppBskyFeedDefsContentModeVideo; 1368 - readonly InteractionQuote: AppBskyFeedDefsInteractionQuote; 1369 - readonly InteractionReply: AppBskyFeedDefsInteractionReply; 1370 - readonly InteractionShare: AppBskyFeedDefsInteractionShare; 1371 - readonly SkeletonFeedPost: AppBskyFeedDefsSkeletonFeedPost; 1372 - readonly ClickthroughEmbed: AppBskyFeedDefsClickthroughEmbed; 1373 - readonly InteractionRepost: AppBskyFeedDefsInteractionRepost; 1374 - readonly SkeletonReasonPin: AppBskyFeedDefsSkeletonReasonPin; 1375 - readonly ClickthroughAuthor: AppBskyFeedDefsClickthroughAuthor; 1376 - readonly ClickthroughReposter: AppBskyFeedDefsClickthroughReposter; 1377 - readonly GeneratorViewerState: AppBskyFeedDefsGeneratorViewerState; 1378 - readonly SkeletonReasonRepost: AppBskyFeedDefsSkeletonReasonRepost; 1379 - readonly ContentModeUnspecified: AppBskyFeedDefsContentModeUnspecified; 1380 - } 1381 - 1382 - export interface AppBskyFeedPostgate { 1383 - readonly Main: AppBskyFeedPostgate; 1384 - readonly DisableRule: AppBskyFeedPostgateDisableRule; 1385 - } 1386 - 1387 - export interface AppBskyFeedThreadgate { 1388 - readonly Main: AppBskyFeedThreadgate; 1389 - readonly ListRule: AppBskyFeedThreadgateListRule; 1390 - readonly MentionRule: AppBskyFeedThreadgateMentionRule; 1391 - readonly FollowerRule: AppBskyFeedThreadgateFollowerRule; 1392 - readonly FollowingRule: AppBskyFeedThreadgateFollowingRule; 1393 - } 1394 - 1395 - export interface AppBskyRichtextFacet { 1396 - readonly Tag: AppBskyRichtextFacetTag; 1397 - readonly Link: AppBskyRichtextFacetLink; 1398 - readonly Main: AppBskyRichtextFacetMain; 1399 - readonly Mention: AppBskyRichtextFacetMention; 1400 - readonly ByteSlice: AppBskyRichtextFacetByteSlice; 1401 - } 1402 - 1403 - export interface AppBskyActorDefs { 1404 - readonly Nux: AppBskyActorDefsNux; 1405 - readonly MutedWord: AppBskyActorDefsMutedWord; 1406 - readonly SavedFeed: AppBskyActorDefsSavedFeed; 1407 - readonly Preferences: AppBskyActorDefsPreferences; 1408 - readonly ProfileView: AppBskyActorDefsProfileView; 1409 - readonly ViewerState: AppBskyActorDefsViewerState; 1410 - readonly FeedViewPref: AppBskyActorDefsFeedViewPref; 1411 - readonly LabelersPref: AppBskyActorDefsLabelersPref; 1412 - readonly InterestsPref: AppBskyActorDefsInterestsPref; 1413 - readonly KnownFollowers: AppBskyActorDefsKnownFollowers; 1414 - readonly MutedWordsPref: AppBskyActorDefsMutedWordsPref; 1415 - readonly SavedFeedsPref: AppBskyActorDefsSavedFeedsPref; 1416 - readonly ThreadViewPref: AppBskyActorDefsThreadViewPref; 1417 - readonly HiddenPostsPref: AppBskyActorDefsHiddenPostsPref; 1418 - readonly LabelerPrefItem: AppBskyActorDefsLabelerPrefItem; 1419 - readonly MutedWordTarget: AppBskyActorDefsMutedWordTarget; 1420 - readonly AdultContentPref: AppBskyActorDefsAdultContentPref; 1421 - readonly BskyAppStatePref: AppBskyActorDefsBskyAppStatePref; 1422 - readonly ContentLabelPref: AppBskyActorDefsContentLabelPref; 1423 - readonly ProfileViewBasic: AppBskyActorDefsProfileViewBasic; 1424 - readonly SavedFeedsPrefV2: AppBskyActorDefsSavedFeedsPrefV2; 1425 - readonly ProfileAssociated: AppBskyActorDefsProfileAssociated; 1426 - readonly PersonalDetailsPref: AppBskyActorDefsPersonalDetailsPref; 1427 - readonly ProfileViewDetailed: AppBskyActorDefsProfileViewDetailed; 1428 - readonly BskyAppProgressGuide: AppBskyActorDefsBskyAppProgressGuide; 1429 - readonly ProfileAssociatedChat: AppBskyActorDefsProfileAssociatedChat; 1430 - readonly PostInteractionSettingsPref: 1431 - AppBskyActorDefsPostInteractionSettingsPref; 1432 - } 1433 - 1434 - export interface AppBskyLabelerDefs { 1435 - readonly LabelerView: AppBskyLabelerDefsLabelerView; 1436 - readonly LabelerPolicies: AppBskyLabelerDefsLabelerPolicies; 1437 - readonly LabelerViewerState: AppBskyLabelerDefsLabelerViewerState; 1438 - readonly LabelerViewDetailed: AppBskyLabelerDefsLabelerViewDetailed; 1439 - } 1440 - 1441 - export interface NetworkSlicesWaitlistDefs { 1442 - readonly RequestView: NetworkSlicesWaitlistDefsRequestView; 1443 - readonly InviteView: NetworkSlicesWaitlistDefsInviteView; 1444 - } 1445 - 1446 - export interface NetworkSlicesSliceDefs { 1447 - readonly SliceView: NetworkSlicesSliceDefsSliceView; 1448 - readonly SparklinePoint: NetworkSlicesSliceDefsSparklinePoint; 1449 - } 1450 - 1451 - export interface NetworkSlicesActorDefs { 1452 - readonly ProfileViewBasic: NetworkSlicesActorDefsProfileViewBasic; 1453 - } 1454 - 1455 - export interface ComAtprotoLabelDefs { 1456 - readonly Label: ComAtprotoLabelDefsLabel; 1457 - readonly SelfLabel: ComAtprotoLabelDefsSelfLabel; 1458 - readonly LabelValue: ComAtprotoLabelDefsLabelValue; 1459 - readonly SelfLabels: ComAtprotoLabelDefsSelfLabels; 1460 - readonly LabelValueDefinition: ComAtprotoLabelDefsLabelValueDefinition; 1461 - readonly LabelValueDefinitionStrings: 1462 - ComAtprotoLabelDefsLabelValueDefinitionStrings; 1463 - } 1464 - 1465 - class FollowGraphBskyAppClient { 1466 - private readonly client: SlicesClient; 1467 - 1468 - constructor(client: SlicesClient) { 1469 - this.client = client; 1470 - } 1471 - 1472 - async getRecords( 1473 - params?: { 1474 - limit?: number; 1475 - cursor?: string; 1476 - where?: { 1477 - [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1478 - WhereCondition; 1479 - }; 1480 - orWhere?: { 1481 - [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1482 - WhereCondition; 1483 - }; 1484 - sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1485 - }, 1486 - ): Promise<GetRecordsResponse<AppBskyGraphFollow>> { 1487 - return await this.client.getRecords("app.bsky.graph.follow", params); 1488 - } 1489 - 1490 - async getRecord( 1491 - params: GetRecordParams, 1492 - ): Promise<RecordResponse<AppBskyGraphFollow>> { 1493 - return await this.client.getRecord("app.bsky.graph.follow", params); 1494 - } 1495 - 1496 - async countRecords( 1497 - params?: { 1498 - limit?: number; 1499 - cursor?: string; 1500 - where?: { 1501 - [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1502 - WhereCondition; 1503 - }; 1504 - orWhere?: { 1505 - [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1506 - WhereCondition; 1507 - }; 1508 - sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1509 - }, 1510 - ): Promise<CountRecordsResponse> { 1511 - return await this.client.countRecords("app.bsky.graph.follow", params); 1512 - } 1513 - 1514 - async createRecord( 1515 - record: AppBskyGraphFollow, 1516 - useSelfRkey?: boolean, 1517 - ): Promise<{ uri: string; cid: string }> { 1518 - return await this.client.createRecord( 1519 - "app.bsky.graph.follow", 1520 - record, 1521 - useSelfRkey, 1522 - ); 1523 - } 1524 - 1525 - async updateRecord( 1526 - rkey: string, 1527 - record: AppBskyGraphFollow, 1528 - ): Promise<{ uri: string; cid: string }> { 1529 - return await this.client.updateRecord( 1530 - "app.bsky.graph.follow", 1531 - rkey, 1532 - record, 1533 - ); 1534 - } 1535 - 1536 - async deleteRecord(rkey: string): Promise<void> { 1537 - return await this.client.deleteRecord("app.bsky.graph.follow", rkey); 1538 - } 1539 - } 1540 - 1541 - class GraphBskyAppClient { 1542 - readonly follow: FollowGraphBskyAppClient; 1543 - private readonly client: SlicesClient; 1544 - 1545 - constructor(client: SlicesClient) { 1546 - this.client = client; 1547 - this.follow = new FollowGraphBskyAppClient(client); 1548 - } 1549 - } 1550 - 1551 - class PostgateFeedBskyAppClient { 1552 - private readonly client: SlicesClient; 1553 - 1554 - constructor(client: SlicesClient) { 1555 - this.client = client; 1556 - } 1557 - 1558 - async getRecords( 1559 - params?: { 1560 - limit?: number; 1561 - cursor?: string; 1562 - where?: { 1563 - [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1564 - WhereCondition; 1565 - }; 1566 - orWhere?: { 1567 - [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1568 - WhereCondition; 1569 - }; 1570 - sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1571 - }, 1572 - ): Promise<GetRecordsResponse<AppBskyFeedPostgate>> { 1573 - return await this.client.getRecords("app.bsky.feed.postgate", params); 1574 - } 1575 - 1576 - async getRecord( 1577 - params: GetRecordParams, 1578 - ): Promise<RecordResponse<AppBskyFeedPostgate>> { 1579 - return await this.client.getRecord("app.bsky.feed.postgate", params); 1580 - } 1581 - 1582 - async countRecords( 1583 - params?: { 1584 - limit?: number; 1585 - cursor?: string; 1586 - where?: { 1587 - [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1588 - WhereCondition; 1589 - }; 1590 - orWhere?: { 1591 - [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1592 - WhereCondition; 1593 - }; 1594 - sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1595 - }, 1596 - ): Promise<CountRecordsResponse> { 1597 - return await this.client.countRecords("app.bsky.feed.postgate", params); 1598 - } 1599 - 1600 - async createRecord( 1601 - record: AppBskyFeedPostgate, 1602 - useSelfRkey?: boolean, 1603 - ): Promise<{ uri: string; cid: string }> { 1604 - return await this.client.createRecord( 1605 - "app.bsky.feed.postgate", 1606 - record, 1607 - useSelfRkey, 1608 - ); 1609 - } 1610 - 1611 - async updateRecord( 1612 - rkey: string, 1613 - record: AppBskyFeedPostgate, 1614 - ): Promise<{ uri: string; cid: string }> { 1615 - return await this.client.updateRecord( 1616 - "app.bsky.feed.postgate", 1617 - rkey, 1618 - record, 1619 - ); 1620 - } 1621 - 1622 - async deleteRecord(rkey: string): Promise<void> { 1623 - return await this.client.deleteRecord("app.bsky.feed.postgate", rkey); 1624 - } 1625 - } 1626 - 1627 - class ThreadgateFeedBskyAppClient { 1628 - private readonly client: SlicesClient; 1629 - 1630 - constructor(client: SlicesClient) { 1631 - this.client = client; 1632 - } 1633 - 1634 - async getRecords( 1635 - params?: { 1636 - limit?: number; 1637 - cursor?: string; 1638 - where?: { 1639 - [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1640 - WhereCondition; 1641 - }; 1642 - orWhere?: { 1643 - [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1644 - WhereCondition; 1645 - }; 1646 - sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1647 - }, 1648 - ): Promise<GetRecordsResponse<AppBskyFeedThreadgate>> { 1649 - return await this.client.getRecords("app.bsky.feed.threadgate", params); 1650 - } 1651 - 1652 - async getRecord( 1653 - params: GetRecordParams, 1654 - ): Promise<RecordResponse<AppBskyFeedThreadgate>> { 1655 - return await this.client.getRecord("app.bsky.feed.threadgate", params); 1656 - } 1657 - 1658 - async countRecords( 1659 - params?: { 1660 - limit?: number; 1661 - cursor?: string; 1662 - where?: { 1663 - [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1664 - WhereCondition; 1665 - }; 1666 - orWhere?: { 1667 - [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1668 - WhereCondition; 1669 - }; 1670 - sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1671 - }, 1672 - ): Promise<CountRecordsResponse> { 1673 - return await this.client.countRecords("app.bsky.feed.threadgate", params); 1674 - } 1675 - 1676 - async createRecord( 1677 - record: AppBskyFeedThreadgate, 1678 - useSelfRkey?: boolean, 1679 - ): Promise<{ uri: string; cid: string }> { 1680 - return await this.client.createRecord( 1681 - "app.bsky.feed.threadgate", 1682 - record, 1683 - useSelfRkey, 1684 - ); 1685 - } 1686 - 1687 - async updateRecord( 1688 - rkey: string, 1689 - record: AppBskyFeedThreadgate, 1690 - ): Promise<{ uri: string; cid: string }> { 1691 - return await this.client.updateRecord( 1692 - "app.bsky.feed.threadgate", 1693 - rkey, 1694 - record, 1695 - ); 1696 - } 1697 - 1698 - async deleteRecord(rkey: string): Promise<void> { 1699 - return await this.client.deleteRecord("app.bsky.feed.threadgate", rkey); 1700 - } 1701 - } 1702 - 1703 - class FeedBskyAppClient { 1704 - readonly postgate: PostgateFeedBskyAppClient; 1705 - readonly threadgate: ThreadgateFeedBskyAppClient; 1706 - private readonly client: SlicesClient; 1707 - 1708 - constructor(client: SlicesClient) { 1709 - this.client = client; 1710 - this.postgate = new PostgateFeedBskyAppClient(client); 1711 - this.threadgate = new ThreadgateFeedBskyAppClient(client); 1712 - } 1713 - } 1714 - 1715 - class ProfileActorBskyAppClient { 1716 - private readonly client: SlicesClient; 1717 - 1718 - constructor(client: SlicesClient) { 1719 - this.client = client; 1720 - } 1721 - 1722 - async getRecords( 1723 - params?: { 1724 - limit?: number; 1725 - cursor?: string; 1726 - where?: { 1727 - [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1728 - WhereCondition; 1729 - }; 1730 - orWhere?: { 1731 - [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1732 - WhereCondition; 1733 - }; 1734 - sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1735 - }, 1736 - ): Promise<GetRecordsResponse<AppBskyActorProfile>> { 1737 - return await this.client.getRecords("app.bsky.actor.profile", params); 1738 - } 1739 - 1740 - async getRecord( 1741 - params: GetRecordParams, 1742 - ): Promise<RecordResponse<AppBskyActorProfile>> { 1743 - return await this.client.getRecord("app.bsky.actor.profile", params); 1744 - } 1745 - 1746 - async countRecords( 1747 - params?: { 1748 - limit?: number; 1749 - cursor?: string; 1750 - where?: { 1751 - [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1752 - WhereCondition; 1753 - }; 1754 - orWhere?: { 1755 - [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1756 - WhereCondition; 1757 - }; 1758 - sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1759 - }, 1760 - ): Promise<CountRecordsResponse> { 1761 - return await this.client.countRecords("app.bsky.actor.profile", params); 1762 - } 1763 - 1764 - async createRecord( 1765 - record: AppBskyActorProfile, 1766 - useSelfRkey?: boolean, 1767 - ): Promise<{ uri: string; cid: string }> { 1768 - return await this.client.createRecord( 1769 - "app.bsky.actor.profile", 1770 - record, 1771 - useSelfRkey, 1772 - ); 1773 - } 1774 - 1775 - async updateRecord( 1776 - rkey: string, 1777 - record: AppBskyActorProfile, 1778 - ): Promise<{ uri: string; cid: string }> { 1779 - return await this.client.updateRecord( 1780 - "app.bsky.actor.profile", 1781 - rkey, 1782 - record, 1783 - ); 1784 - } 1785 - 1786 - async deleteRecord(rkey: string): Promise<void> { 1787 - return await this.client.deleteRecord("app.bsky.actor.profile", rkey); 1788 - } 1789 - } 1790 - 1791 - class ActorBskyAppClient { 1792 - readonly profile: ProfileActorBskyAppClient; 1793 - private readonly client: SlicesClient; 1794 - 1795 - constructor(client: SlicesClient) { 1796 - this.client = client; 1797 - this.profile = new ProfileActorBskyAppClient(client); 1798 - } 1799 - } 1800 - 1801 - class BskyAppClient { 1802 - readonly graph: GraphBskyAppClient; 1803 - readonly feed: FeedBskyAppClient; 1804 - readonly actor: ActorBskyAppClient; 1805 - private readonly client: SlicesClient; 1806 - 1807 - constructor(client: SlicesClient) { 1808 - this.client = client; 1809 - this.graph = new GraphBskyAppClient(client); 1810 - this.feed = new FeedBskyAppClient(client); 1811 - this.actor = new ActorBskyAppClient(client); 1812 - } 1813 - } 1814 - 1815 - class AppClient { 1816 - readonly bsky: BskyAppClient; 1817 - private readonly client: SlicesClient; 1818 - 1819 - constructor(client: SlicesClient) { 1820 - this.client = client; 1821 - this.bsky = new BskyAppClient(client); 1822 - } 1823 - } 1824 - 1825 - class RequestWaitlistSlicesNetworkClient { 1826 - private readonly client: SlicesClient; 1827 - 1828 - constructor(client: SlicesClient) { 1829 - this.client = client; 1830 - } 1831 - 1832 - async getRecords( 1833 - params?: { 1834 - limit?: number; 1835 - cursor?: string; 1836 - where?: { 1837 - [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1838 - WhereCondition; 1839 - }; 1840 - orWhere?: { 1841 - [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1842 - WhereCondition; 1843 - }; 1844 - sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1845 - }, 1846 - ): Promise<GetRecordsResponse<NetworkSlicesWaitlistRequest>> { 1847 - return await this.client.getRecords( 1848 - "network.slices.waitlist.request", 1849 - params, 1850 - ); 1851 - } 1852 - 1853 - async getRecord( 1854 - params: GetRecordParams, 1855 - ): Promise<RecordResponse<NetworkSlicesWaitlistRequest>> { 1856 - return await this.client.getRecord( 1857 - "network.slices.waitlist.request", 1858 - params, 1859 - ); 1860 - } 1861 - 1862 - async countRecords( 1863 - params?: { 1864 - limit?: number; 1865 - cursor?: string; 1866 - where?: { 1867 - [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1868 - WhereCondition; 1869 - }; 1870 - orWhere?: { 1871 - [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1872 - WhereCondition; 1873 - }; 1874 - sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1875 - }, 1876 - ): Promise<CountRecordsResponse> { 1877 - return await this.client.countRecords( 1878 - "network.slices.waitlist.request", 1879 - params, 1880 - ); 1881 - } 1882 - 1883 - async createRecord( 1884 - record: NetworkSlicesWaitlistRequest, 1885 - useSelfRkey?: boolean, 1886 - ): Promise<{ uri: string; cid: string }> { 1887 - return await this.client.createRecord( 1888 - "network.slices.waitlist.request", 1889 - record, 1890 - useSelfRkey, 1891 - ); 1892 - } 1893 - 1894 - async updateRecord( 1895 - rkey: string, 1896 - record: NetworkSlicesWaitlistRequest, 1897 - ): Promise<{ uri: string; cid: string }> { 1898 - return await this.client.updateRecord( 1899 - "network.slices.waitlist.request", 1900 - rkey, 1901 - record, 1902 - ); 1903 - } 1904 - 1905 - async deleteRecord(rkey: string): Promise<void> { 1906 - return await this.client.deleteRecord( 1907 - "network.slices.waitlist.request", 1908 - rkey, 1909 - ); 1910 - } 1911 - } 1912 - 1913 - class InviteWaitlistSlicesNetworkClient { 1914 - private readonly client: SlicesClient; 1915 - 1916 - constructor(client: SlicesClient) { 1917 - this.client = client; 1918 - } 1919 - 1920 - async getRecords( 1921 - params?: { 1922 - limit?: number; 1923 - cursor?: string; 1924 - where?: { 1925 - [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1926 - WhereCondition; 1927 - }; 1928 - orWhere?: { 1929 - [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1930 - WhereCondition; 1931 - }; 1932 - sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1933 - }, 1934 - ): Promise<GetRecordsResponse<NetworkSlicesWaitlistInvite>> { 1935 - return await this.client.getRecords( 1936 - "network.slices.waitlist.invite", 1937 - params, 1938 - ); 1939 - } 1940 - 1941 - async getRecord( 1942 - params: GetRecordParams, 1943 - ): Promise<RecordResponse<NetworkSlicesWaitlistInvite>> { 1944 - return await this.client.getRecord( 1945 - "network.slices.waitlist.invite", 1946 - params, 1947 - ); 1948 - } 1949 - 1950 - async countRecords( 1951 - params?: { 1952 - limit?: number; 1953 - cursor?: string; 1954 - where?: { 1955 - [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1956 - WhereCondition; 1957 - }; 1958 - orWhere?: { 1959 - [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1960 - WhereCondition; 1961 - }; 1962 - sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1963 - }, 1964 - ): Promise<CountRecordsResponse> { 1965 - return await this.client.countRecords( 1966 - "network.slices.waitlist.invite", 1967 - params, 1968 - ); 1969 - } 1970 - 1971 - async createRecord( 1972 - record: NetworkSlicesWaitlistInvite, 1973 - useSelfRkey?: boolean, 1974 - ): Promise<{ uri: string; cid: string }> { 1975 - return await this.client.createRecord( 1976 - "network.slices.waitlist.invite", 1977 - record, 1978 - useSelfRkey, 1979 - ); 1980 - } 1981 - 1982 - async updateRecord( 1983 - rkey: string, 1984 - record: NetworkSlicesWaitlistInvite, 1985 - ): Promise<{ uri: string; cid: string }> { 1986 - return await this.client.updateRecord( 1987 - "network.slices.waitlist.invite", 1988 - rkey, 1989 - record, 1990 - ); 1991 - } 1992 - 1993 - async deleteRecord(rkey: string): Promise<void> { 1994 - return await this.client.deleteRecord( 1995 - "network.slices.waitlist.invite", 1996 - rkey, 1997 - ); 1998 - } 1999 - } 2000 - 2001 - class WaitlistSlicesNetworkClient { 2002 - readonly request: RequestWaitlistSlicesNetworkClient; 2003 - readonly invite: InviteWaitlistSlicesNetworkClient; 2004 - private readonly client: SlicesClient; 2005 - 2006 - constructor(client: SlicesClient) { 2007 - this.client = client; 2008 - this.request = new RequestWaitlistSlicesNetworkClient(client); 2009 - this.invite = new InviteWaitlistSlicesNetworkClient(client); 2010 - } 2011 - } 2012 - 2013 - class SliceSlicesNetworkClient { 2014 - private readonly client: SlicesClient; 2015 - 2016 - constructor(client: SlicesClient) { 2017 - this.client = client; 2018 - } 2019 - 2020 - async getRecords( 2021 - params?: { 2022 - limit?: number; 2023 - cursor?: string; 2024 - where?: { 2025 - [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2026 - WhereCondition; 2027 - }; 2028 - orWhere?: { 2029 - [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2030 - WhereCondition; 2031 - }; 2032 - sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2033 - }, 2034 - ): Promise<GetRecordsResponse<NetworkSlicesSlice>> { 2035 - return await this.client.getRecords("network.slices.slice", params); 2036 - } 2037 - 2038 - async getRecord( 2039 - params: GetRecordParams, 2040 - ): Promise<RecordResponse<NetworkSlicesSlice>> { 2041 - return await this.client.getRecord("network.slices.slice", params); 2042 - } 2043 - 2044 - async countRecords( 2045 - params?: { 2046 - limit?: number; 2047 - cursor?: string; 2048 - where?: { 2049 - [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2050 - WhereCondition; 2051 - }; 2052 - orWhere?: { 2053 - [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2054 - WhereCondition; 2055 - }; 2056 - sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2057 - }, 2058 - ): Promise<CountRecordsResponse> { 2059 - return await this.client.countRecords("network.slices.slice", params); 2060 - } 2061 - 2062 - async createRecord( 2063 - record: NetworkSlicesSlice, 2064 - useSelfRkey?: boolean, 2065 - ): Promise<{ uri: string; cid: string }> { 2066 - return await this.client.createRecord( 2067 - "network.slices.slice", 2068 - record, 2069 - useSelfRkey, 2070 - ); 2071 - } 2072 - 2073 - async updateRecord( 2074 - rkey: string, 2075 - record: NetworkSlicesSlice, 2076 - ): Promise<{ uri: string; cid: string }> { 2077 - return await this.client.updateRecord("network.slices.slice", rkey, record); 2078 - } 2079 - 2080 - async deleteRecord(rkey: string): Promise<void> { 2081 - return await this.client.deleteRecord("network.slices.slice", rkey); 2082 - } 2083 - 2084 - async stats(params: SliceStatsParams): Promise<SliceStatsOutput> { 2085 - return await this.client.makeRequest<SliceStatsOutput>( 2086 - "network.slices.slice.stats", 2087 - "POST", 2088 - params, 2089 - ); 2090 - } 2091 - 2092 - async getSparklines( 2093 - params: GetSparklinesParams, 2094 - ): Promise<GetSparklinesOutput> { 2095 - return await this.client.makeRequest<GetSparklinesOutput>( 2096 - "network.slices.slice.getSparklines", 2097 - "POST", 2098 - params, 2099 - ); 2100 - } 2101 - 2102 - async getSliceRecords<T = Record<string, unknown>>( 2103 - params: Omit<SliceLevelRecordsParams<T>, "slice">, 2104 - ): Promise<SliceRecordsOutput<T>> { 2105 - // Combine where and orWhere into the expected backend format 2106 - const whereClause: any = params?.where ? { ...params.where } : {}; 2107 - if (params?.orWhere) { 2108 - whereClause.$or = params.orWhere; 2109 - } 2110 - 2111 - const requestParams = { 2112 - ...params, 2113 - where: Object.keys(whereClause).length > 0 ? whereClause : undefined, 2114 - orWhere: undefined, // Remove orWhere as it's now in where.$or 2115 - slice: this.client.sliceUri, 2116 - }; 2117 - return await this.client.makeRequest<SliceRecordsOutput<T>>( 2118 - "network.slices.slice.getSliceRecords", 2119 - "POST", 2120 - requestParams, 2121 - ); 2122 - } 2123 - 2124 - async getActors(params?: GetActorsParams): Promise<GetActorsResponse> { 2125 - const requestParams = { ...params, slice: this.client.sliceUri }; 2126 - return await this.client.makeRequest<GetActorsResponse>( 2127 - "network.slices.slice.getActors", 2128 - "POST", 2129 - requestParams, 2130 - ); 2131 - } 2132 - 2133 - async startSync(params: BulkSyncParams): Promise<SyncJobResponse> { 2134 - const requestParams = { ...params, slice: this.client.sliceUri }; 2135 - return await this.client.makeRequest<SyncJobResponse>( 2136 - "network.slices.slice.startSync", 2137 - "POST", 2138 - requestParams, 2139 - ); 2140 - } 2141 - 2142 - async getJobStatus(params: GetJobStatusParams): Promise<JobStatus> { 2143 - return await this.client.makeRequest<JobStatus>( 2144 - "network.slices.slice.getJobStatus", 2145 - "GET", 2146 - params, 2147 - ); 2148 - } 2149 - 2150 - async getJobHistory( 2151 - params: GetJobHistoryParams, 2152 - ): Promise<GetJobHistoryResponse> { 2153 - return await this.client.makeRequest<GetJobHistoryResponse>( 2154 - "network.slices.slice.getJobHistory", 2155 - "GET", 2156 - params, 2157 - ); 2158 - } 2159 - 2160 - async getJobLogs(params: GetJobLogsParams): Promise<GetJobLogsResponse> { 2161 - return await this.client.makeRequest<GetJobLogsResponse>( 2162 - "network.slices.slice.getJobLogs", 2163 - "GET", 2164 - params, 2165 - ); 2166 - } 2167 - 2168 - async getJetstreamStatus(): Promise<JetstreamStatusResponse> { 2169 - return await this.client.makeRequest<JetstreamStatusResponse>( 2170 - "network.slices.slice.getJetstreamStatus", 2171 - "GET", 2172 - ); 2173 - } 2174 - 2175 - async getJetstreamLogs( 2176 - params: GetJetstreamLogsParams, 2177 - ): Promise<GetJetstreamLogsResponse> { 2178 - const requestParams = { ...params, slice: this.client.sliceUri }; 2179 - return await this.client.makeRequest<GetJetstreamLogsResponse>( 2180 - "network.slices.slice.getJetstreamLogs", 2181 - "GET", 2182 - requestParams, 2183 - ); 2184 - } 2185 - 2186 - async syncUserCollections( 2187 - params?: SyncUserCollectionsRequest, 2188 - ): Promise<SyncUserCollectionsResult> { 2189 - const requestParams = { slice: this.client.sliceUri, ...params }; 2190 - return await this.client.makeRequest<SyncUserCollectionsResult>( 2191 - "network.slices.slice.syncUserCollections", 2192 - "POST", 2193 - requestParams, 2194 - ); 2195 - } 2196 - 2197 - async createOAuthClient( 2198 - params: CreateOAuthClientRequest, 2199 - ): Promise<OAuthClientDetails | OAuthOperationError> { 2200 - const requestParams = { ...params, sliceUri: this.client.sliceUri }; 2201 - return await this.client.makeRequest< 2202 - OAuthClientDetails | OAuthOperationError 2203 - >("network.slices.slice.createOAuthClient", "POST", requestParams); 2204 - } 2205 - 2206 - async getOAuthClients(): Promise<ListOAuthClientsResponse> { 2207 - const requestParams = { slice: this.client.sliceUri }; 2208 - return await this.client.makeRequest<ListOAuthClientsResponse>( 2209 - "network.slices.slice.getOAuthClients", 2210 - "GET", 2211 - requestParams, 2212 - ); 2213 - } 2214 - 2215 - async updateOAuthClient( 2216 - params: UpdateOAuthClientRequest, 2217 - ): Promise<OAuthClientDetails | OAuthOperationError> { 2218 - const requestParams = { ...params, sliceUri: this.client.sliceUri }; 2219 - return await this.client.makeRequest< 2220 - OAuthClientDetails | OAuthOperationError 2221 - >("network.slices.slice.updateOAuthClient", "POST", requestParams); 2222 - } 2223 - 2224 - async deleteOAuthClient( 2225 - clientId: string, 2226 - ): Promise<DeleteOAuthClientResponse> { 2227 - return await this.client.makeRequest<DeleteOAuthClientResponse>( 2228 - "network.slices.slice.deleteOAuthClient", 2229 - "POST", 2230 - { clientId }, 2231 - ); 2232 - } 2233 - } 2234 - 2235 - class LexiconSlicesNetworkClient { 2236 - private readonly client: SlicesClient; 2237 - 2238 - constructor(client: SlicesClient) { 2239 - this.client = client; 2240 - } 2241 - 2242 - async getRecords( 2243 - params?: { 2244 - limit?: number; 2245 - cursor?: string; 2246 - where?: { 2247 - [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2248 - WhereCondition; 2249 - }; 2250 - orWhere?: { 2251 - [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2252 - WhereCondition; 2253 - }; 2254 - sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2255 - }, 2256 - ): Promise<GetRecordsResponse<NetworkSlicesLexicon>> { 2257 - return await this.client.getRecords("network.slices.lexicon", params); 2258 - } 2259 - 2260 - async getRecord( 2261 - params: GetRecordParams, 2262 - ): Promise<RecordResponse<NetworkSlicesLexicon>> { 2263 - return await this.client.getRecord("network.slices.lexicon", params); 2264 - } 2265 - 2266 - async countRecords( 2267 - params?: { 2268 - limit?: number; 2269 - cursor?: string; 2270 - where?: { 2271 - [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2272 - WhereCondition; 2273 - }; 2274 - orWhere?: { 2275 - [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2276 - WhereCondition; 2277 - }; 2278 - sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2279 - }, 2280 - ): Promise<CountRecordsResponse> { 2281 - return await this.client.countRecords("network.slices.lexicon", params); 2282 - } 2283 - 2284 - async createRecord( 2285 - record: NetworkSlicesLexicon, 2286 - useSelfRkey?: boolean, 2287 - ): Promise<{ uri: string; cid: string }> { 2288 - return await this.client.createRecord( 2289 - "network.slices.lexicon", 2290 - record, 2291 - useSelfRkey, 2292 - ); 2293 - } 2294 - 2295 - async updateRecord( 2296 - rkey: string, 2297 - record: NetworkSlicesLexicon, 2298 - ): Promise<{ uri: string; cid: string }> { 2299 - return await this.client.updateRecord( 2300 - "network.slices.lexicon", 2301 - rkey, 2302 - record, 2303 - ); 2304 - } 2305 - 2306 - async deleteRecord(rkey: string): Promise<void> { 2307 - return await this.client.deleteRecord("network.slices.lexicon", rkey); 2308 - } 2309 - } 2310 - 2311 - class ProfileActorSlicesNetworkClient { 2312 - private readonly client: SlicesClient; 2313 - 2314 - constructor(client: SlicesClient) { 2315 - this.client = client; 2316 - } 2317 - 2318 - async getRecords( 2319 - params?: { 2320 - limit?: number; 2321 - cursor?: string; 2322 - where?: { 2323 - [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2324 - WhereCondition; 2325 - }; 2326 - orWhere?: { 2327 - [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2328 - WhereCondition; 2329 - }; 2330 - sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2331 - }, 2332 - ): Promise<GetRecordsResponse<NetworkSlicesActorProfile>> { 2333 - return await this.client.getRecords("network.slices.actor.profile", params); 2334 - } 2335 - 2336 - async getRecord( 2337 - params: GetRecordParams, 2338 - ): Promise<RecordResponse<NetworkSlicesActorProfile>> { 2339 - return await this.client.getRecord("network.slices.actor.profile", params); 2340 - } 2341 - 2342 - async countRecords( 2343 - params?: { 2344 - limit?: number; 2345 - cursor?: string; 2346 - where?: { 2347 - [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2348 - WhereCondition; 2349 - }; 2350 - orWhere?: { 2351 - [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2352 - WhereCondition; 2353 - }; 2354 - sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2355 - }, 2356 - ): Promise<CountRecordsResponse> { 2357 - return await this.client.countRecords( 2358 - "network.slices.actor.profile", 2359 - params, 2360 - ); 2361 - } 2362 - 2363 - async createRecord( 2364 - record: NetworkSlicesActorProfile, 2365 - useSelfRkey?: boolean, 2366 - ): Promise<{ uri: string; cid: string }> { 2367 - return await this.client.createRecord( 2368 - "network.slices.actor.profile", 2369 - record, 2370 - useSelfRkey, 2371 - ); 2372 - } 2373 - 2374 - async updateRecord( 2375 - rkey: string, 2376 - record: NetworkSlicesActorProfile, 2377 - ): Promise<{ uri: string; cid: string }> { 2378 - return await this.client.updateRecord( 2379 - "network.slices.actor.profile", 2380 - rkey, 2381 - record, 2382 - ); 2383 - } 2384 - 2385 - async deleteRecord(rkey: string): Promise<void> { 2386 - return await this.client.deleteRecord("network.slices.actor.profile", rkey); 2387 - } 2388 - } 2389 - 2390 - class ActorSlicesNetworkClient { 2391 - readonly profile: ProfileActorSlicesNetworkClient; 2392 - private readonly client: SlicesClient; 2393 - 2394 - constructor(client: SlicesClient) { 2395 - this.client = client; 2396 - this.profile = new ProfileActorSlicesNetworkClient(client); 2397 - } 2398 - } 2399 - 2400 - class SlicesNetworkClient { 2401 - readonly waitlist: WaitlistSlicesNetworkClient; 2402 - readonly slice: SliceSlicesNetworkClient; 2403 - readonly lexicon: LexiconSlicesNetworkClient; 2404 - readonly actor: ActorSlicesNetworkClient; 2405 - private readonly client: SlicesClient; 2406 - 2407 - constructor(client: SlicesClient) { 2408 - this.client = client; 2409 - this.waitlist = new WaitlistSlicesNetworkClient(client); 2410 - this.slice = new SliceSlicesNetworkClient(client); 2411 - this.lexicon = new LexiconSlicesNetworkClient(client); 2412 - this.actor = new ActorSlicesNetworkClient(client); 2413 - } 2414 - } 2415 - 2416 - class NetworkClient { 2417 - readonly slices: SlicesNetworkClient; 2418 - private readonly client: SlicesClient; 2419 - 2420 - constructor(client: SlicesClient) { 2421 - this.client = client; 2422 - this.slices = new SlicesNetworkClient(client); 2423 - } 2424 - } 2425 - 2426 - export class AtProtoClient extends SlicesClient { 2427 - readonly app: AppClient; 2428 - readonly network: NetworkClient; 2429 - readonly oauth?: OAuthClient; 2430 - 2431 - constructor(baseUrl: string, sliceUri: string, oauthClient?: OAuthClient) { 2432 - super(baseUrl, sliceUri, oauthClient); 2433 - this.app = new AppClient(this); 2434 - this.network = new NetworkClient(this); 2435 - this.oauth = oauthClient; 2436 - } 2437 - }
-6
packages/cli/src/auth/device_flow.ts
··· 21 21 console.log(`\n${authResponse.verification_uri_complete}`); 22 22 console.log(`Code: ${authResponse.user_code}\n`); 23 23 24 - const openCommand = Deno.build.os === "darwin" 25 - ? `open "${authResponse.verification_uri_complete}"` 26 - : Deno.build.os === "windows" 27 - ? `start "${authResponse.verification_uri_complete}"` 28 - : `xdg-open "${authResponse.verification_uri_complete}"`; 29 - 30 24 if (authResponse.verification_uri_complete) { 31 25 try { 32 26 const command = Deno.build.os === "darwin" ? "open" : Deno.build.os === "windows" ? "cmd" : "xdg-open";
+1 -1
packages/cli/src/commands/init.ts
··· 4 4 import { logger } from "../utils/logger.ts"; 5 5 import { getAllTemplates } from "../templates/embedded.ts"; 6 6 7 - export async function initCommand(args: string[], _globalArgs: any) { 7 + export async function initCommand(args: string[], _globalArgs: unknown) { 8 8 const parsed = parseArgs(args, { 9 9 string: ["name"], 10 10 boolean: ["help"],
+1 -2
packages/cli/src/commands/login.ts
··· 1 1 import { parseArgs } from "@std/cli/parse-args"; 2 2 import { performDeviceFlow } from "../auth/device_flow.ts"; 3 3 import { ConfigManager } from "../auth/config.ts"; 4 - import { logger } from "../utils/logger.ts"; 5 4 6 5 function showLoginHelp() { 7 6 console.log(` ··· 26 25 27 26 export async function loginCommand( 28 27 commandArgs: unknown[], 29 - globalArgs: Record<string, unknown> 28 + _globalArgs: Record<string, unknown> 30 29 ): Promise<void> { 31 30 const args = parseArgs(commandArgs as string[], { 32 31 boolean: ["help", "force"],
+1 -2
packages/cli/src/commands/status.ts
··· 1 1 import { parseArgs } from "@std/cli/parse-args"; 2 2 import { ConfigManager } from "../auth/config.ts"; 3 - import { logger } from "../utils/logger.ts"; 4 3 5 4 function showStatusHelp() { 6 5 console.log(` ··· 17 16 `); 18 17 } 19 18 20 - export async function statusCommand(commandArgs: unknown[], globalArgs: Record<string, unknown>): Promise<void> { 19 + export async function statusCommand(commandArgs: unknown[], _globalArgs: Record<string, unknown>): Promise<void> { 21 20 const args = parseArgs(commandArgs as string[], { 22 21 boolean: ["help"], 23 22 alias: {
+400 -422
packages/cli/src/generated_client.ts
··· 1 1 // Generated TypeScript client for AT Protocol records 2 - // Generated at: 2025-09-18 02:14:35 UTC 2 + // Generated at: 2025-09-24 17:45:39 UTC 3 3 // Lexicons: 25 4 4 5 5 /** ··· 50 50 */ 51 51 52 52 import { 53 - type AuthProvider, 54 53 type BlobRef, 55 54 type CountRecordsResponse, 56 55 type GetActorsParams, ··· 65 64 type SortField, 66 65 type WhereCondition, 67 66 } from "@slices/client"; 68 - import { OAuthClient } from "@slices/oauth"; 69 - 70 - export interface CodegenXrpcRequest { 71 - target: string; 72 - slice: string; 73 - excludeSlicesClient?: boolean; 74 - } 75 - 76 - export interface CodegenXrpcResponse { 77 - success: boolean; 78 - generatedCode?: string; 79 - error?: string; 80 - } 67 + import type { OAuthClient } from "@slices/oauth"; 81 68 82 69 export interface BulkSyncParams { 83 70 collections?: string[]; ··· 268 255 | "app.bsky.graph.defs#modlist" 269 256 | "app.bsky.graph.defs#curatelist" 270 257 | "app.bsky.graph.defs#referencelist" 271 - | (string & {}); 258 + | (string & Record<string, never>); 272 259 273 260 export type AppBskyFeedDefsEvent = 274 261 | "app.bsky.feed.defs#requestLess" ··· 283 270 | "app.bsky.feed.defs#interactionReply" 284 271 | "app.bsky.feed.defs#interactionQuote" 285 272 | "app.bsky.feed.defs#interactionShare" 286 - | (string & {}); 273 + | (string & Record<string, never>); 287 274 288 275 export type AppBskyFeedDefsContentMode = 289 276 | "app.bsky.feed.defs#contentModeUnspecified" 290 277 | "app.bsky.feed.defs#contentModeVideo" 291 - | (string & {}); 278 + | (string & Record<string, never>); 292 279 293 280 export type AppBskyActorDefsActorTarget = 294 281 | "all" 295 282 | "exclude-following" 296 - | (string & {}); 283 + | (string & Record<string, never>); 297 284 298 - export type AppBskyActorDefsType = "feed" | "list" | "timeline" | (string & {}); 285 + export type AppBskyActorDefsType = 286 + | "feed" 287 + | "list" 288 + | "timeline" 289 + | (string & Record<string, never>); 299 290 300 291 export type AppBskyActorDefsSort = 301 292 | "oldest" ··· 303 294 | "most-likes" 304 295 | "random" 305 296 | "hotness" 306 - | (string & {}); 297 + | (string & Record<string, never>); 307 298 308 - export type AppBskyActorDefsMutedWordTarget = "content" | "tag" | (string & {}); 299 + export type AppBskyActorDefsMutedWordTarget = 300 + | "content" 301 + | "tag" 302 + | (string & Record<string, never>); 309 303 310 304 export type AppBskyActorDefsVisibility = 311 305 | "ignore" 312 306 | "show" 313 307 | "warn" 314 308 | "hide" 315 - | (string & {}); 309 + | (string & Record<string, never>); 316 310 317 311 export type AppBskyActorDefsAllowIncoming = 318 312 | "all" 319 313 | "none" 320 314 | "following" 321 - | (string & {}); 315 + | (string & Record<string, never>); 322 316 323 317 export type ComAtprotoLabelDefsLabelValue = 324 318 | "!hide" ··· 332 326 | "nudity" 333 327 | "nsfl" 334 328 | "gore" 335 - | (string & {}); 329 + | (string & Record<string, never>); 336 330 337 331 export type ComAtprotoLabelDefsBlurs = 338 332 | "content" 339 333 | "media" 340 334 | "none" 341 - | (string & {}); 335 + | (string & Record<string, never>); 342 336 343 337 export type ComAtprotoLabelDefsSeverity = 344 338 | "inform" 345 339 | "alert" 346 340 | "none" 347 - | (string & {}); 341 + | (string & Record<string, never>); 348 342 349 343 export type ComAtprotoLabelDefsDefaultSetting = 350 344 | "ignore" 351 345 | "warn" 352 346 | "hide" 353 - | (string & {}); 347 + | (string & Record<string, never>); 354 348 355 349 export interface AppBskyEmbedDefsAspectRatio { 356 350 width: number; ··· 622 616 grandparentAuthor?: AppBskyActorDefs["ProfileViewBasic"]; 623 617 } 624 618 625 - export interface AppBskyFeedDefsReasonPin {} 619 + export type AppBskyFeedDefsReasonPin = Record<string, never>; 626 620 627 621 export interface AppBskyFeedDefsBlockedPost { 628 622 uri: string; ··· 652 646 export interface AppBskyFeedDefsFeedViewPost { 653 647 post: AppBskyFeedDefs["PostView"]; 654 648 reply?: AppBskyFeedDefs["ReplyRef"]; 655 - reason?: 656 - | AppBskyFeedDefs["ReasonRepost"] 657 - | AppBskyFeedDefs["ReasonPin"] 658 - | { 659 - $type: string; 660 - [key: string]: unknown; 661 - }; 649 + reason?: AppBskyFeedDefs["ReasonRepost"] | AppBskyFeedDefs["ReasonPin"] | { 650 + $type: string; 651 + [key: string]: unknown; 652 + }; 662 653 /** Context provided by feed generator that may be passed back alongside interactions. */ 663 654 feedContext?: string; 664 655 } ··· 750 741 "app.bsky.feed.defs#clickthroughEmbed"; 751 742 export type AppBskyFeedDefsInteractionRepost = 752 743 "app.bsky.feed.defs#interactionRepost"; 753 - 754 - export interface AppBskyFeedDefsSkeletonReasonPin {} 755 - 744 + export type AppBskyFeedDefsSkeletonReasonPin = Record<string, never>; 756 745 export type AppBskyFeedDefsClickthroughAuthor = 757 746 "app.bsky.feed.defs#clickthroughAuthor"; 758 747 export type AppBskyFeedDefsClickthroughReposter = ··· 774 763 post: string; 775 764 createdAt: string; 776 765 /** 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. */ 777 - embeddingRules?: 778 - | AppBskyFeedPostgate["DisableRule"] 779 - | { 780 - $type: string; 781 - [key: string]: unknown; 782 - }[]; 766 + embeddingRules?: AppBskyFeedPostgate["DisableRule"] | { 767 + $type: string; 768 + [key: string]: unknown; 769 + }[]; 783 770 /** List of AT-URIs embedding this post that the author has detached from. */ 784 771 detachedEmbeddingUris?: string[]; 785 772 } 786 773 787 774 export type AppBskyFeedPostgateSortFields = "post" | "createdAt"; 788 - 789 - export interface AppBskyFeedPostgateDisableRule {} 775 + export type AppBskyFeedPostgateDisableRule = Record<string, never>; 790 776 791 777 export interface AppBskyFeedThreadgate { 792 778 /** Reference (AT-URI) to the post record. */ ··· 809 795 list: string; 810 796 } 811 797 812 - export interface AppBskyFeedThreadgateMentionRule {} 813 - 814 - export interface AppBskyFeedThreadgateFollowerRule {} 815 - 816 - export interface AppBskyFeedThreadgateFollowingRule {} 798 + export type AppBskyFeedThreadgateMentionRule = Record<string, never>; 799 + export type AppBskyFeedThreadgateFollowerRule = Record<string, never>; 800 + export type AppBskyFeedThreadgateFollowingRule = Record<string, never>; 817 801 818 802 export interface AppBskyRichtextFacetTag { 819 803 tag: string; ··· 1048 1032 | AppBskyFeedThreadgate["ListRule"] 1049 1033 | { $type: string; [key: string]: unknown }[]; 1050 1034 /** 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. */ 1051 - postgateEmbeddingRules?: 1052 - | AppBskyFeedPostgate["DisableRule"] 1053 - | { 1054 - $type: string; 1055 - [key: string]: unknown; 1056 - }[]; 1035 + postgateEmbeddingRules?: AppBskyFeedPostgate["DisableRule"] | { 1036 + $type: string; 1037 + [key: string]: unknown; 1038 + }[]; 1057 1039 } 1058 1040 1059 1041 export interface AppBskyActorProfile { ··· 1062 1044 /** Larger horizontal image to display behind profile view. */ 1063 1045 banner?: BlobRef; 1064 1046 /** Self-label values, specific to the Bluesky application, on the overall account. */ 1065 - labels?: 1066 - | ComAtprotoLabelDefs["SelfLabels"] 1067 - | { 1068 - $type: string; 1069 - [key: string]: unknown; 1070 - }; 1047 + labels?: ComAtprotoLabelDefs["SelfLabels"] | { 1048 + $type: string; 1049 + [key: string]: unknown; 1050 + }; 1071 1051 createdAt?: string; 1072 1052 pinnedPost?: ComAtprotoRepoStrongRef; 1073 1053 /** Free-form profile description text. */ ··· 1210 1190 updatedAt?: string; 1211 1191 /** AT-URI reference to the slice this lexicon belongs to */ 1212 1192 slice: string; 1193 + /** Whether this lexicon should be excluded from sync operations */ 1194 + excludedFromSync?: boolean; 1213 1195 } 1214 1196 1215 1197 export type NetworkSlicesLexiconSortFields = ··· 1436 1418 readonly ProfileViewDetailed: AppBskyActorDefsProfileViewDetailed; 1437 1419 readonly BskyAppProgressGuide: AppBskyActorDefsBskyAppProgressGuide; 1438 1420 readonly ProfileAssociatedChat: AppBskyActorDefsProfileAssociatedChat; 1439 - readonly PostInteractionSettingsPref: AppBskyActorDefsPostInteractionSettingsPref; 1421 + readonly PostInteractionSettingsPref: 1422 + AppBskyActorDefsPostInteractionSettingsPref; 1440 1423 } 1441 1424 1442 1425 export interface AppBskyLabelerDefs { ··· 1466 1449 readonly LabelValue: ComAtprotoLabelDefsLabelValue; 1467 1450 readonly SelfLabels: ComAtprotoLabelDefsSelfLabels; 1468 1451 readonly LabelValueDefinition: ComAtprotoLabelDefsLabelValueDefinition; 1469 - readonly LabelValueDefinitionStrings: ComAtprotoLabelDefsLabelValueDefinitionStrings; 1452 + readonly LabelValueDefinitionStrings: 1453 + ComAtprotoLabelDefsLabelValueDefinitionStrings; 1470 1454 } 1471 1455 1472 1456 class FollowGraphBskyAppClient { ··· 1476 1460 this.client = client; 1477 1461 } 1478 1462 1479 - async getRecords(params?: { 1480 - limit?: number; 1481 - cursor?: string; 1482 - where?: { 1483 - [K in 1484 - | AppBskyGraphFollowSortFields 1485 - | IndexedRecordFields]?: WhereCondition; 1486 - }; 1487 - orWhere?: { 1488 - [K in 1489 - | AppBskyGraphFollowSortFields 1490 - | IndexedRecordFields]?: WhereCondition; 1491 - }; 1492 - sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1493 - }): Promise<GetRecordsResponse<AppBskyGraphFollow>> { 1463 + async getRecords( 1464 + params?: { 1465 + limit?: number; 1466 + cursor?: string; 1467 + where?: { 1468 + [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1469 + WhereCondition; 1470 + }; 1471 + orWhere?: { 1472 + [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1473 + WhereCondition; 1474 + }; 1475 + sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1476 + }, 1477 + ): Promise<GetRecordsResponse<AppBskyGraphFollow>> { 1494 1478 return await this.client.getRecords("app.bsky.graph.follow", params); 1495 1479 } 1496 1480 1497 1481 async getRecord( 1498 - params: GetRecordParams 1482 + params: GetRecordParams, 1499 1483 ): Promise<RecordResponse<AppBskyGraphFollow>> { 1500 1484 return await this.client.getRecord("app.bsky.graph.follow", params); 1501 1485 } 1502 1486 1503 - async countRecords(params?: { 1504 - limit?: number; 1505 - cursor?: string; 1506 - where?: { 1507 - [K in 1508 - | AppBskyGraphFollowSortFields 1509 - | IndexedRecordFields]?: WhereCondition; 1510 - }; 1511 - orWhere?: { 1512 - [K in 1513 - | AppBskyGraphFollowSortFields 1514 - | IndexedRecordFields]?: WhereCondition; 1515 - }; 1516 - sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1517 - }): Promise<CountRecordsResponse> { 1487 + async countRecords( 1488 + params?: { 1489 + limit?: number; 1490 + cursor?: string; 1491 + where?: { 1492 + [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1493 + WhereCondition; 1494 + }; 1495 + orWhere?: { 1496 + [K in AppBskyGraphFollowSortFields | IndexedRecordFields]?: 1497 + WhereCondition; 1498 + }; 1499 + sortBy?: SortField<AppBskyGraphFollowSortFields>[]; 1500 + }, 1501 + ): Promise<CountRecordsResponse> { 1518 1502 return await this.client.countRecords("app.bsky.graph.follow", params); 1519 1503 } 1520 1504 1521 1505 async createRecord( 1522 1506 record: AppBskyGraphFollow, 1523 - useSelfRkey?: boolean 1507 + useSelfRkey?: boolean, 1524 1508 ): Promise<{ uri: string; cid: string }> { 1525 1509 return await this.client.createRecord( 1526 1510 "app.bsky.graph.follow", 1527 1511 record, 1528 - useSelfRkey 1512 + useSelfRkey, 1529 1513 ); 1530 1514 } 1531 1515 1532 1516 async updateRecord( 1533 1517 rkey: string, 1534 - record: AppBskyGraphFollow 1518 + record: AppBskyGraphFollow, 1535 1519 ): Promise<{ uri: string; cid: string }> { 1536 1520 return await this.client.updateRecord( 1537 1521 "app.bsky.graph.follow", 1538 1522 rkey, 1539 - record 1523 + record, 1540 1524 ); 1541 1525 } 1542 1526 ··· 1562 1546 this.client = client; 1563 1547 } 1564 1548 1565 - async getRecords(params?: { 1566 - limit?: number; 1567 - cursor?: string; 1568 - where?: { 1569 - [K in 1570 - | AppBskyFeedPostgateSortFields 1571 - | IndexedRecordFields]?: WhereCondition; 1572 - }; 1573 - orWhere?: { 1574 - [K in 1575 - | AppBskyFeedPostgateSortFields 1576 - | IndexedRecordFields]?: WhereCondition; 1577 - }; 1578 - sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1579 - }): Promise<GetRecordsResponse<AppBskyFeedPostgate>> { 1549 + async getRecords( 1550 + params?: { 1551 + limit?: number; 1552 + cursor?: string; 1553 + where?: { 1554 + [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1555 + WhereCondition; 1556 + }; 1557 + orWhere?: { 1558 + [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1559 + WhereCondition; 1560 + }; 1561 + sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1562 + }, 1563 + ): Promise<GetRecordsResponse<AppBskyFeedPostgate>> { 1580 1564 return await this.client.getRecords("app.bsky.feed.postgate", params); 1581 1565 } 1582 1566 1583 1567 async getRecord( 1584 - params: GetRecordParams 1568 + params: GetRecordParams, 1585 1569 ): Promise<RecordResponse<AppBskyFeedPostgate>> { 1586 1570 return await this.client.getRecord("app.bsky.feed.postgate", params); 1587 1571 } 1588 1572 1589 - async countRecords(params?: { 1590 - limit?: number; 1591 - cursor?: string; 1592 - where?: { 1593 - [K in 1594 - | AppBskyFeedPostgateSortFields 1595 - | IndexedRecordFields]?: WhereCondition; 1596 - }; 1597 - orWhere?: { 1598 - [K in 1599 - | AppBskyFeedPostgateSortFields 1600 - | IndexedRecordFields]?: WhereCondition; 1601 - }; 1602 - sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1603 - }): Promise<CountRecordsResponse> { 1573 + async countRecords( 1574 + params?: { 1575 + limit?: number; 1576 + cursor?: string; 1577 + where?: { 1578 + [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1579 + WhereCondition; 1580 + }; 1581 + orWhere?: { 1582 + [K in AppBskyFeedPostgateSortFields | IndexedRecordFields]?: 1583 + WhereCondition; 1584 + }; 1585 + sortBy?: SortField<AppBskyFeedPostgateSortFields>[]; 1586 + }, 1587 + ): Promise<CountRecordsResponse> { 1604 1588 return await this.client.countRecords("app.bsky.feed.postgate", params); 1605 1589 } 1606 1590 1607 1591 async createRecord( 1608 1592 record: AppBskyFeedPostgate, 1609 - useSelfRkey?: boolean 1593 + useSelfRkey?: boolean, 1610 1594 ): Promise<{ uri: string; cid: string }> { 1611 1595 return await this.client.createRecord( 1612 1596 "app.bsky.feed.postgate", 1613 1597 record, 1614 - useSelfRkey 1598 + useSelfRkey, 1615 1599 ); 1616 1600 } 1617 1601 1618 1602 async updateRecord( 1619 1603 rkey: string, 1620 - record: AppBskyFeedPostgate 1604 + record: AppBskyFeedPostgate, 1621 1605 ): Promise<{ uri: string; cid: string }> { 1622 1606 return await this.client.updateRecord( 1623 1607 "app.bsky.feed.postgate", 1624 1608 rkey, 1625 - record 1609 + record, 1626 1610 ); 1627 1611 } 1628 1612 ··· 1638 1622 this.client = client; 1639 1623 } 1640 1624 1641 - async getRecords(params?: { 1642 - limit?: number; 1643 - cursor?: string; 1644 - where?: { 1645 - [K in 1646 - | AppBskyFeedThreadgateSortFields 1647 - | IndexedRecordFields]?: WhereCondition; 1648 - }; 1649 - orWhere?: { 1650 - [K in 1651 - | AppBskyFeedThreadgateSortFields 1652 - | IndexedRecordFields]?: WhereCondition; 1653 - }; 1654 - sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1655 - }): Promise<GetRecordsResponse<AppBskyFeedThreadgate>> { 1625 + async getRecords( 1626 + params?: { 1627 + limit?: number; 1628 + cursor?: string; 1629 + where?: { 1630 + [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1631 + WhereCondition; 1632 + }; 1633 + orWhere?: { 1634 + [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1635 + WhereCondition; 1636 + }; 1637 + sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1638 + }, 1639 + ): Promise<GetRecordsResponse<AppBskyFeedThreadgate>> { 1656 1640 return await this.client.getRecords("app.bsky.feed.threadgate", params); 1657 1641 } 1658 1642 1659 1643 async getRecord( 1660 - params: GetRecordParams 1644 + params: GetRecordParams, 1661 1645 ): Promise<RecordResponse<AppBskyFeedThreadgate>> { 1662 1646 return await this.client.getRecord("app.bsky.feed.threadgate", params); 1663 1647 } 1664 1648 1665 - async countRecords(params?: { 1666 - limit?: number; 1667 - cursor?: string; 1668 - where?: { 1669 - [K in 1670 - | AppBskyFeedThreadgateSortFields 1671 - | IndexedRecordFields]?: WhereCondition; 1672 - }; 1673 - orWhere?: { 1674 - [K in 1675 - | AppBskyFeedThreadgateSortFields 1676 - | IndexedRecordFields]?: WhereCondition; 1677 - }; 1678 - sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1679 - }): Promise<CountRecordsResponse> { 1649 + async countRecords( 1650 + params?: { 1651 + limit?: number; 1652 + cursor?: string; 1653 + where?: { 1654 + [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1655 + WhereCondition; 1656 + }; 1657 + orWhere?: { 1658 + [K in AppBskyFeedThreadgateSortFields | IndexedRecordFields]?: 1659 + WhereCondition; 1660 + }; 1661 + sortBy?: SortField<AppBskyFeedThreadgateSortFields>[]; 1662 + }, 1663 + ): Promise<CountRecordsResponse> { 1680 1664 return await this.client.countRecords("app.bsky.feed.threadgate", params); 1681 1665 } 1682 1666 1683 1667 async createRecord( 1684 1668 record: AppBskyFeedThreadgate, 1685 - useSelfRkey?: boolean 1669 + useSelfRkey?: boolean, 1686 1670 ): Promise<{ uri: string; cid: string }> { 1687 1671 return await this.client.createRecord( 1688 1672 "app.bsky.feed.threadgate", 1689 1673 record, 1690 - useSelfRkey 1674 + useSelfRkey, 1691 1675 ); 1692 1676 } 1693 1677 1694 1678 async updateRecord( 1695 1679 rkey: string, 1696 - record: AppBskyFeedThreadgate 1680 + record: AppBskyFeedThreadgate, 1697 1681 ): Promise<{ uri: string; cid: string }> { 1698 1682 return await this.client.updateRecord( 1699 1683 "app.bsky.feed.threadgate", 1700 1684 rkey, 1701 - record 1685 + record, 1702 1686 ); 1703 1687 } 1704 1688 ··· 1726 1710 this.client = client; 1727 1711 } 1728 1712 1729 - async getRecords(params?: { 1730 - limit?: number; 1731 - cursor?: string; 1732 - where?: { 1733 - [K in 1734 - | AppBskyActorProfileSortFields 1735 - | IndexedRecordFields]?: WhereCondition; 1736 - }; 1737 - orWhere?: { 1738 - [K in 1739 - | AppBskyActorProfileSortFields 1740 - | IndexedRecordFields]?: WhereCondition; 1741 - }; 1742 - sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1743 - }): Promise<GetRecordsResponse<AppBskyActorProfile>> { 1713 + async getRecords( 1714 + params?: { 1715 + limit?: number; 1716 + cursor?: string; 1717 + where?: { 1718 + [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1719 + WhereCondition; 1720 + }; 1721 + orWhere?: { 1722 + [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1723 + WhereCondition; 1724 + }; 1725 + sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1726 + }, 1727 + ): Promise<GetRecordsResponse<AppBskyActorProfile>> { 1744 1728 return await this.client.getRecords("app.bsky.actor.profile", params); 1745 1729 } 1746 1730 1747 1731 async getRecord( 1748 - params: GetRecordParams 1732 + params: GetRecordParams, 1749 1733 ): Promise<RecordResponse<AppBskyActorProfile>> { 1750 1734 return await this.client.getRecord("app.bsky.actor.profile", params); 1751 1735 } 1752 1736 1753 - async countRecords(params?: { 1754 - limit?: number; 1755 - cursor?: string; 1756 - where?: { 1757 - [K in 1758 - | AppBskyActorProfileSortFields 1759 - | IndexedRecordFields]?: WhereCondition; 1760 - }; 1761 - orWhere?: { 1762 - [K in 1763 - | AppBskyActorProfileSortFields 1764 - | IndexedRecordFields]?: WhereCondition; 1765 - }; 1766 - sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1767 - }): Promise<CountRecordsResponse> { 1737 + async countRecords( 1738 + params?: { 1739 + limit?: number; 1740 + cursor?: string; 1741 + where?: { 1742 + [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1743 + WhereCondition; 1744 + }; 1745 + orWhere?: { 1746 + [K in AppBskyActorProfileSortFields | IndexedRecordFields]?: 1747 + WhereCondition; 1748 + }; 1749 + sortBy?: SortField<AppBskyActorProfileSortFields>[]; 1750 + }, 1751 + ): Promise<CountRecordsResponse> { 1768 1752 return await this.client.countRecords("app.bsky.actor.profile", params); 1769 1753 } 1770 1754 1771 1755 async createRecord( 1772 1756 record: AppBskyActorProfile, 1773 - useSelfRkey?: boolean 1757 + useSelfRkey?: boolean, 1774 1758 ): Promise<{ uri: string; cid: string }> { 1775 1759 return await this.client.createRecord( 1776 1760 "app.bsky.actor.profile", 1777 1761 record, 1778 - useSelfRkey 1762 + useSelfRkey, 1779 1763 ); 1780 1764 } 1781 1765 1782 1766 async updateRecord( 1783 1767 rkey: string, 1784 - record: AppBskyActorProfile 1768 + record: AppBskyActorProfile, 1785 1769 ): Promise<{ uri: string; cid: string }> { 1786 1770 return await this.client.updateRecord( 1787 1771 "app.bsky.actor.profile", 1788 1772 rkey, 1789 - record 1773 + record, 1790 1774 ); 1791 1775 } 1792 1776 ··· 1836 1820 this.client = client; 1837 1821 } 1838 1822 1839 - async getRecords(params?: { 1840 - limit?: number; 1841 - cursor?: string; 1842 - where?: { 1843 - [K in 1844 - | NetworkSlicesWaitlistRequestSortFields 1845 - | IndexedRecordFields]?: WhereCondition; 1846 - }; 1847 - orWhere?: { 1848 - [K in 1849 - | NetworkSlicesWaitlistRequestSortFields 1850 - | IndexedRecordFields]?: WhereCondition; 1851 - }; 1852 - sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1853 - }): Promise<GetRecordsResponse<NetworkSlicesWaitlistRequest>> { 1823 + async getRecords( 1824 + params?: { 1825 + limit?: number; 1826 + cursor?: string; 1827 + where?: { 1828 + [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1829 + WhereCondition; 1830 + }; 1831 + orWhere?: { 1832 + [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1833 + WhereCondition; 1834 + }; 1835 + sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1836 + }, 1837 + ): Promise<GetRecordsResponse<NetworkSlicesWaitlistRequest>> { 1854 1838 return await this.client.getRecords( 1855 1839 "network.slices.waitlist.request", 1856 - params 1840 + params, 1857 1841 ); 1858 1842 } 1859 1843 1860 1844 async getRecord( 1861 - params: GetRecordParams 1845 + params: GetRecordParams, 1862 1846 ): Promise<RecordResponse<NetworkSlicesWaitlistRequest>> { 1863 1847 return await this.client.getRecord( 1864 1848 "network.slices.waitlist.request", 1865 - params 1849 + params, 1866 1850 ); 1867 1851 } 1868 1852 1869 - async countRecords(params?: { 1870 - limit?: number; 1871 - cursor?: string; 1872 - where?: { 1873 - [K in 1874 - | NetworkSlicesWaitlistRequestSortFields 1875 - | IndexedRecordFields]?: WhereCondition; 1876 - }; 1877 - orWhere?: { 1878 - [K in 1879 - | NetworkSlicesWaitlistRequestSortFields 1880 - | IndexedRecordFields]?: WhereCondition; 1881 - }; 1882 - sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1883 - }): Promise<CountRecordsResponse> { 1853 + async countRecords( 1854 + params?: { 1855 + limit?: number; 1856 + cursor?: string; 1857 + where?: { 1858 + [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1859 + WhereCondition; 1860 + }; 1861 + orWhere?: { 1862 + [K in NetworkSlicesWaitlistRequestSortFields | IndexedRecordFields]?: 1863 + WhereCondition; 1864 + }; 1865 + sortBy?: SortField<NetworkSlicesWaitlistRequestSortFields>[]; 1866 + }, 1867 + ): Promise<CountRecordsResponse> { 1884 1868 return await this.client.countRecords( 1885 1869 "network.slices.waitlist.request", 1886 - params 1870 + params, 1887 1871 ); 1888 1872 } 1889 1873 1890 1874 async createRecord( 1891 1875 record: NetworkSlicesWaitlistRequest, 1892 - useSelfRkey?: boolean 1876 + useSelfRkey?: boolean, 1893 1877 ): Promise<{ uri: string; cid: string }> { 1894 1878 return await this.client.createRecord( 1895 1879 "network.slices.waitlist.request", 1896 1880 record, 1897 - useSelfRkey 1881 + useSelfRkey, 1898 1882 ); 1899 1883 } 1900 1884 1901 1885 async updateRecord( 1902 1886 rkey: string, 1903 - record: NetworkSlicesWaitlistRequest 1887 + record: NetworkSlicesWaitlistRequest, 1904 1888 ): Promise<{ uri: string; cid: string }> { 1905 1889 return await this.client.updateRecord( 1906 1890 "network.slices.waitlist.request", 1907 1891 rkey, 1908 - record 1892 + record, 1909 1893 ); 1910 1894 } 1911 1895 1912 1896 async deleteRecord(rkey: string): Promise<void> { 1913 1897 return await this.client.deleteRecord( 1914 1898 "network.slices.waitlist.request", 1915 - rkey 1899 + rkey, 1916 1900 ); 1917 1901 } 1918 1902 } ··· 1924 1908 this.client = client; 1925 1909 } 1926 1910 1927 - async getRecords(params?: { 1928 - limit?: number; 1929 - cursor?: string; 1930 - where?: { 1931 - [K in 1932 - | NetworkSlicesWaitlistInviteSortFields 1933 - | IndexedRecordFields]?: WhereCondition; 1934 - }; 1935 - orWhere?: { 1936 - [K in 1937 - | NetworkSlicesWaitlistInviteSortFields 1938 - | IndexedRecordFields]?: WhereCondition; 1939 - }; 1940 - sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1941 - }): Promise<GetRecordsResponse<NetworkSlicesWaitlistInvite>> { 1911 + async getRecords( 1912 + params?: { 1913 + limit?: number; 1914 + cursor?: string; 1915 + where?: { 1916 + [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1917 + WhereCondition; 1918 + }; 1919 + orWhere?: { 1920 + [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1921 + WhereCondition; 1922 + }; 1923 + sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1924 + }, 1925 + ): Promise<GetRecordsResponse<NetworkSlicesWaitlistInvite>> { 1942 1926 return await this.client.getRecords( 1943 1927 "network.slices.waitlist.invite", 1944 - params 1928 + params, 1945 1929 ); 1946 1930 } 1947 1931 1948 1932 async getRecord( 1949 - params: GetRecordParams 1933 + params: GetRecordParams, 1950 1934 ): Promise<RecordResponse<NetworkSlicesWaitlistInvite>> { 1951 1935 return await this.client.getRecord( 1952 1936 "network.slices.waitlist.invite", 1953 - params 1937 + params, 1954 1938 ); 1955 1939 } 1956 1940 1957 - async countRecords(params?: { 1958 - limit?: number; 1959 - cursor?: string; 1960 - where?: { 1961 - [K in 1962 - | NetworkSlicesWaitlistInviteSortFields 1963 - | IndexedRecordFields]?: WhereCondition; 1964 - }; 1965 - orWhere?: { 1966 - [K in 1967 - | NetworkSlicesWaitlistInviteSortFields 1968 - | IndexedRecordFields]?: WhereCondition; 1969 - }; 1970 - sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1971 - }): Promise<CountRecordsResponse> { 1941 + async countRecords( 1942 + params?: { 1943 + limit?: number; 1944 + cursor?: string; 1945 + where?: { 1946 + [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1947 + WhereCondition; 1948 + }; 1949 + orWhere?: { 1950 + [K in NetworkSlicesWaitlistInviteSortFields | IndexedRecordFields]?: 1951 + WhereCondition; 1952 + }; 1953 + sortBy?: SortField<NetworkSlicesWaitlistInviteSortFields>[]; 1954 + }, 1955 + ): Promise<CountRecordsResponse> { 1972 1956 return await this.client.countRecords( 1973 1957 "network.slices.waitlist.invite", 1974 - params 1958 + params, 1975 1959 ); 1976 1960 } 1977 1961 1978 1962 async createRecord( 1979 1963 record: NetworkSlicesWaitlistInvite, 1980 - useSelfRkey?: boolean 1964 + useSelfRkey?: boolean, 1981 1965 ): Promise<{ uri: string; cid: string }> { 1982 1966 return await this.client.createRecord( 1983 1967 "network.slices.waitlist.invite", 1984 1968 record, 1985 - useSelfRkey 1969 + useSelfRkey, 1986 1970 ); 1987 1971 } 1988 1972 1989 1973 async updateRecord( 1990 1974 rkey: string, 1991 - record: NetworkSlicesWaitlistInvite 1975 + record: NetworkSlicesWaitlistInvite, 1992 1976 ): Promise<{ uri: string; cid: string }> { 1993 1977 return await this.client.updateRecord( 1994 1978 "network.slices.waitlist.invite", 1995 1979 rkey, 1996 - record 1980 + record, 1997 1981 ); 1998 1982 } 1999 1983 2000 1984 async deleteRecord(rkey: string): Promise<void> { 2001 1985 return await this.client.deleteRecord( 2002 1986 "network.slices.waitlist.invite", 2003 - rkey 1987 + rkey, 2004 1988 ); 2005 1989 } 2006 1990 } ··· 2024 2008 this.client = client; 2025 2009 } 2026 2010 2027 - async getRecords(params?: { 2028 - limit?: number; 2029 - cursor?: string; 2030 - where?: { 2031 - [K in 2032 - | NetworkSlicesSliceSortFields 2033 - | IndexedRecordFields]?: WhereCondition; 2034 - }; 2035 - orWhere?: { 2036 - [K in 2037 - | NetworkSlicesSliceSortFields 2038 - | IndexedRecordFields]?: WhereCondition; 2039 - }; 2040 - sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2041 - }): Promise<GetRecordsResponse<NetworkSlicesSlice>> { 2011 + async getRecords( 2012 + params?: { 2013 + limit?: number; 2014 + cursor?: string; 2015 + where?: { 2016 + [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2017 + WhereCondition; 2018 + }; 2019 + orWhere?: { 2020 + [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2021 + WhereCondition; 2022 + }; 2023 + sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2024 + }, 2025 + ): Promise<GetRecordsResponse<NetworkSlicesSlice>> { 2042 2026 return await this.client.getRecords("network.slices.slice", params); 2043 2027 } 2044 2028 2045 2029 async getRecord( 2046 - params: GetRecordParams 2030 + params: GetRecordParams, 2047 2031 ): Promise<RecordResponse<NetworkSlicesSlice>> { 2048 2032 return await this.client.getRecord("network.slices.slice", params); 2049 2033 } 2050 2034 2051 - async countRecords(params?: { 2052 - limit?: number; 2053 - cursor?: string; 2054 - where?: { 2055 - [K in 2056 - | NetworkSlicesSliceSortFields 2057 - | IndexedRecordFields]?: WhereCondition; 2058 - }; 2059 - orWhere?: { 2060 - [K in 2061 - | NetworkSlicesSliceSortFields 2062 - | IndexedRecordFields]?: WhereCondition; 2063 - }; 2064 - sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2065 - }): Promise<CountRecordsResponse> { 2035 + async countRecords( 2036 + params?: { 2037 + limit?: number; 2038 + cursor?: string; 2039 + where?: { 2040 + [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2041 + WhereCondition; 2042 + }; 2043 + orWhere?: { 2044 + [K in NetworkSlicesSliceSortFields | IndexedRecordFields]?: 2045 + WhereCondition; 2046 + }; 2047 + sortBy?: SortField<NetworkSlicesSliceSortFields>[]; 2048 + }, 2049 + ): Promise<CountRecordsResponse> { 2066 2050 return await this.client.countRecords("network.slices.slice", params); 2067 2051 } 2068 2052 2069 2053 async createRecord( 2070 2054 record: NetworkSlicesSlice, 2071 - useSelfRkey?: boolean 2055 + useSelfRkey?: boolean, 2072 2056 ): Promise<{ uri: string; cid: string }> { 2073 2057 return await this.client.createRecord( 2074 2058 "network.slices.slice", 2075 2059 record, 2076 - useSelfRkey 2060 + useSelfRkey, 2077 2061 ); 2078 2062 } 2079 2063 2080 2064 async updateRecord( 2081 2065 rkey: string, 2082 - record: NetworkSlicesSlice 2066 + record: NetworkSlicesSlice, 2083 2067 ): Promise<{ uri: string; cid: string }> { 2084 2068 return await this.client.updateRecord("network.slices.slice", rkey, record); 2085 2069 } ··· 2088 2072 return await this.client.deleteRecord("network.slices.slice", rkey); 2089 2073 } 2090 2074 2091 - async codegen(request: CodegenXrpcRequest): Promise<CodegenXrpcResponse> { 2092 - return await this.client.makeRequest<CodegenXrpcResponse>( 2093 - "network.slices.slice.codegen", 2094 - "POST", 2095 - request 2096 - ); 2097 - } 2098 - 2099 2075 async stats(params: SliceStatsParams): Promise<SliceStatsOutput> { 2100 2076 return await this.client.makeRequest<SliceStatsOutput>( 2101 2077 "network.slices.slice.stats", 2102 2078 "POST", 2103 - params 2079 + params, 2104 2080 ); 2105 2081 } 2106 2082 2107 2083 async getSparklines( 2108 - params: GetSparklinesParams 2084 + params: GetSparklinesParams, 2109 2085 ): Promise<GetSparklinesOutput> { 2110 2086 return await this.client.makeRequest<GetSparklinesOutput>( 2111 2087 "network.slices.slice.getSparklines", 2112 2088 "POST", 2113 - params 2089 + params, 2114 2090 ); 2115 2091 } 2116 2092 2117 2093 async getSliceRecords<T = Record<string, unknown>>( 2118 - params: Omit<SliceLevelRecordsParams<T>, "slice"> 2094 + params: Omit<SliceLevelRecordsParams<T>, "slice">, 2119 2095 ): Promise<SliceRecordsOutput<T>> { 2120 2096 // Combine where and orWhere into the expected backend format 2121 - const whereClause: any = params?.where ? { ...params.where } : {}; 2097 + const whereClause: Record<string, unknown> = params?.where 2098 + ? { ...params.where } 2099 + : {}; 2122 2100 if (params?.orWhere) { 2123 2101 whereClause.$or = params.orWhere; 2124 2102 } ··· 2132 2110 return await this.client.makeRequest<SliceRecordsOutput<T>>( 2133 2111 "network.slices.slice.getSliceRecords", 2134 2112 "POST", 2135 - requestParams 2113 + requestParams, 2136 2114 ); 2137 2115 } 2138 2116 ··· 2141 2119 return await this.client.makeRequest<GetActorsResponse>( 2142 2120 "network.slices.slice.getActors", 2143 2121 "POST", 2144 - requestParams 2122 + requestParams, 2145 2123 ); 2146 2124 } 2147 2125 ··· 2150 2128 return await this.client.makeRequest<SyncJobResponse>( 2151 2129 "network.slices.slice.startSync", 2152 2130 "POST", 2153 - requestParams 2131 + requestParams, 2154 2132 ); 2155 2133 } 2156 2134 ··· 2158 2136 return await this.client.makeRequest<JobStatus>( 2159 2137 "network.slices.slice.getJobStatus", 2160 2138 "GET", 2161 - params 2139 + params, 2162 2140 ); 2163 2141 } 2164 2142 2165 2143 async getJobHistory( 2166 - params: GetJobHistoryParams 2144 + params: GetJobHistoryParams, 2167 2145 ): Promise<GetJobHistoryResponse> { 2168 2146 return await this.client.makeRequest<GetJobHistoryResponse>( 2169 2147 "network.slices.slice.getJobHistory", 2170 2148 "GET", 2171 - params 2149 + params, 2172 2150 ); 2173 2151 } 2174 2152 ··· 2176 2154 return await this.client.makeRequest<GetJobLogsResponse>( 2177 2155 "network.slices.slice.getJobLogs", 2178 2156 "GET", 2179 - params 2157 + params, 2180 2158 ); 2181 2159 } 2182 2160 2183 2161 async getJetstreamStatus(): Promise<JetstreamStatusResponse> { 2184 2162 return await this.client.makeRequest<JetstreamStatusResponse>( 2185 2163 "network.slices.slice.getJetstreamStatus", 2186 - "GET" 2164 + "GET", 2187 2165 ); 2188 2166 } 2189 2167 2190 2168 async getJetstreamLogs( 2191 - params: GetJetstreamLogsParams 2169 + params: GetJetstreamLogsParams, 2192 2170 ): Promise<GetJetstreamLogsResponse> { 2193 2171 const requestParams = { ...params, slice: this.client.sliceUri }; 2194 2172 return await this.client.makeRequest<GetJetstreamLogsResponse>( 2195 2173 "network.slices.slice.getJetstreamLogs", 2196 2174 "GET", 2197 - requestParams 2175 + requestParams, 2198 2176 ); 2199 2177 } 2200 2178 2201 2179 async syncUserCollections( 2202 - params?: SyncUserCollectionsRequest 2180 + params?: SyncUserCollectionsRequest, 2203 2181 ): Promise<SyncUserCollectionsResult> { 2204 2182 const requestParams = { slice: this.client.sliceUri, ...params }; 2205 2183 return await this.client.makeRequest<SyncUserCollectionsResult>( 2206 2184 "network.slices.slice.syncUserCollections", 2207 2185 "POST", 2208 - requestParams 2186 + requestParams, 2209 2187 ); 2210 2188 } 2211 2189 2212 2190 async createOAuthClient( 2213 - params: CreateOAuthClientRequest 2191 + params: CreateOAuthClientRequest, 2214 2192 ): Promise<OAuthClientDetails | OAuthOperationError> { 2215 2193 const requestParams = { ...params, sliceUri: this.client.sliceUri }; 2216 2194 return await this.client.makeRequest< ··· 2223 2201 return await this.client.makeRequest<ListOAuthClientsResponse>( 2224 2202 "network.slices.slice.getOAuthClients", 2225 2203 "GET", 2226 - requestParams 2204 + requestParams, 2227 2205 ); 2228 2206 } 2229 2207 2230 2208 async updateOAuthClient( 2231 - params: UpdateOAuthClientRequest 2209 + params: UpdateOAuthClientRequest, 2232 2210 ): Promise<OAuthClientDetails | OAuthOperationError> { 2233 2211 const requestParams = { ...params, sliceUri: this.client.sliceUri }; 2234 2212 return await this.client.makeRequest< ··· 2237 2215 } 2238 2216 2239 2217 async deleteOAuthClient( 2240 - clientId: string 2218 + clientId: string, 2241 2219 ): Promise<DeleteOAuthClientResponse> { 2242 2220 return await this.client.makeRequest<DeleteOAuthClientResponse>( 2243 2221 "network.slices.slice.deleteOAuthClient", 2244 2222 "POST", 2245 - { clientId } 2223 + { clientId }, 2246 2224 ); 2247 2225 } 2248 2226 } ··· 2254 2232 this.client = client; 2255 2233 } 2256 2234 2257 - async getRecords(params?: { 2258 - limit?: number; 2259 - cursor?: string; 2260 - where?: { 2261 - [K in 2262 - | NetworkSlicesLexiconSortFields 2263 - | IndexedRecordFields]?: WhereCondition; 2264 - }; 2265 - orWhere?: { 2266 - [K in 2267 - | NetworkSlicesLexiconSortFields 2268 - | IndexedRecordFields]?: WhereCondition; 2269 - }; 2270 - sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2271 - }): Promise<GetRecordsResponse<NetworkSlicesLexicon>> { 2235 + async getRecords( 2236 + params?: { 2237 + limit?: number; 2238 + cursor?: string; 2239 + where?: { 2240 + [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2241 + WhereCondition; 2242 + }; 2243 + orWhere?: { 2244 + [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2245 + WhereCondition; 2246 + }; 2247 + sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2248 + }, 2249 + ): Promise<GetRecordsResponse<NetworkSlicesLexicon>> { 2272 2250 return await this.client.getRecords("network.slices.lexicon", params); 2273 2251 } 2274 2252 2275 2253 async getRecord( 2276 - params: GetRecordParams 2254 + params: GetRecordParams, 2277 2255 ): Promise<RecordResponse<NetworkSlicesLexicon>> { 2278 2256 return await this.client.getRecord("network.slices.lexicon", params); 2279 2257 } 2280 2258 2281 - async countRecords(params?: { 2282 - limit?: number; 2283 - cursor?: string; 2284 - where?: { 2285 - [K in 2286 - | NetworkSlicesLexiconSortFields 2287 - | IndexedRecordFields]?: WhereCondition; 2288 - }; 2289 - orWhere?: { 2290 - [K in 2291 - | NetworkSlicesLexiconSortFields 2292 - | IndexedRecordFields]?: WhereCondition; 2293 - }; 2294 - sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2295 - }): Promise<CountRecordsResponse> { 2259 + async countRecords( 2260 + params?: { 2261 + limit?: number; 2262 + cursor?: string; 2263 + where?: { 2264 + [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2265 + WhereCondition; 2266 + }; 2267 + orWhere?: { 2268 + [K in NetworkSlicesLexiconSortFields | IndexedRecordFields]?: 2269 + WhereCondition; 2270 + }; 2271 + sortBy?: SortField<NetworkSlicesLexiconSortFields>[]; 2272 + }, 2273 + ): Promise<CountRecordsResponse> { 2296 2274 return await this.client.countRecords("network.slices.lexicon", params); 2297 2275 } 2298 2276 2299 2277 async createRecord( 2300 2278 record: NetworkSlicesLexicon, 2301 - useSelfRkey?: boolean 2279 + useSelfRkey?: boolean, 2302 2280 ): Promise<{ uri: string; cid: string }> { 2303 2281 return await this.client.createRecord( 2304 2282 "network.slices.lexicon", 2305 2283 record, 2306 - useSelfRkey 2284 + useSelfRkey, 2307 2285 ); 2308 2286 } 2309 2287 2310 2288 async updateRecord( 2311 2289 rkey: string, 2312 - record: NetworkSlicesLexicon 2290 + record: NetworkSlicesLexicon, 2313 2291 ): Promise<{ uri: string; cid: string }> { 2314 2292 return await this.client.updateRecord( 2315 2293 "network.slices.lexicon", 2316 2294 rkey, 2317 - record 2295 + record, 2318 2296 ); 2319 2297 } 2320 2298 ··· 2330 2308 this.client = client; 2331 2309 } 2332 2310 2333 - async getRecords(params?: { 2334 - limit?: number; 2335 - cursor?: string; 2336 - where?: { 2337 - [K in 2338 - | NetworkSlicesActorProfileSortFields 2339 - | IndexedRecordFields]?: WhereCondition; 2340 - }; 2341 - orWhere?: { 2342 - [K in 2343 - | NetworkSlicesActorProfileSortFields 2344 - | IndexedRecordFields]?: WhereCondition; 2345 - }; 2346 - sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2347 - }): Promise<GetRecordsResponse<NetworkSlicesActorProfile>> { 2311 + async getRecords( 2312 + params?: { 2313 + limit?: number; 2314 + cursor?: string; 2315 + where?: { 2316 + [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2317 + WhereCondition; 2318 + }; 2319 + orWhere?: { 2320 + [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2321 + WhereCondition; 2322 + }; 2323 + sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2324 + }, 2325 + ): Promise<GetRecordsResponse<NetworkSlicesActorProfile>> { 2348 2326 return await this.client.getRecords("network.slices.actor.profile", params); 2349 2327 } 2350 2328 2351 2329 async getRecord( 2352 - params: GetRecordParams 2330 + params: GetRecordParams, 2353 2331 ): Promise<RecordResponse<NetworkSlicesActorProfile>> { 2354 2332 return await this.client.getRecord("network.slices.actor.profile", params); 2355 2333 } 2356 2334 2357 - async countRecords(params?: { 2358 - limit?: number; 2359 - cursor?: string; 2360 - where?: { 2361 - [K in 2362 - | NetworkSlicesActorProfileSortFields 2363 - | IndexedRecordFields]?: WhereCondition; 2364 - }; 2365 - orWhere?: { 2366 - [K in 2367 - | NetworkSlicesActorProfileSortFields 2368 - | IndexedRecordFields]?: WhereCondition; 2369 - }; 2370 - sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2371 - }): Promise<CountRecordsResponse> { 2335 + async countRecords( 2336 + params?: { 2337 + limit?: number; 2338 + cursor?: string; 2339 + where?: { 2340 + [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2341 + WhereCondition; 2342 + }; 2343 + orWhere?: { 2344 + [K in NetworkSlicesActorProfileSortFields | IndexedRecordFields]?: 2345 + WhereCondition; 2346 + }; 2347 + sortBy?: SortField<NetworkSlicesActorProfileSortFields>[]; 2348 + }, 2349 + ): Promise<CountRecordsResponse> { 2372 2350 return await this.client.countRecords( 2373 2351 "network.slices.actor.profile", 2374 - params 2352 + params, 2375 2353 ); 2376 2354 } 2377 2355 2378 2356 async createRecord( 2379 2357 record: NetworkSlicesActorProfile, 2380 - useSelfRkey?: boolean 2358 + useSelfRkey?: boolean, 2381 2359 ): Promise<{ uri: string; cid: string }> { 2382 2360 return await this.client.createRecord( 2383 2361 "network.slices.actor.profile", 2384 2362 record, 2385 - useSelfRkey 2363 + useSelfRkey, 2386 2364 ); 2387 2365 } 2388 2366 2389 2367 async updateRecord( 2390 2368 rkey: string, 2391 - record: NetworkSlicesActorProfile 2369 + record: NetworkSlicesActorProfile, 2392 2370 ): Promise<{ uri: string; cid: string }> { 2393 2371 return await this.client.updateRecord( 2394 2372 "network.slices.actor.profile", 2395 2373 rkey, 2396 - record 2374 + record, 2397 2375 ); 2398 2376 } 2399 2377 ··· 2443 2421 readonly network: NetworkClient; 2444 2422 readonly oauth?: OAuthClient; 2445 2423 2446 - constructor(baseUrl: string, sliceUri: string, authProvider?: OAuthClient | AuthProvider) { 2447 - super(baseUrl, sliceUri, authProvider); 2424 + constructor(baseUrl: string, sliceUri: string, oauthClient?: OAuthClient) { 2425 + super(baseUrl, sliceUri, oauthClient); 2448 2426 this.app = new AppClient(this); 2449 2427 this.network = new NetworkClient(this); 2450 - this.oauth = authProvider instanceof OAuthClient ? authProvider : undefined; 2428 + this.oauth = oauthClient; 2451 2429 } 2452 2430 }
+1 -1
packages/cli/src/utils/client.ts
··· 30 30 } 31 31 32 32 async refreshAccessToken(): Promise<{ accessToken: string; tokenType?: string }> { 33 - return this.ensureValidToken(); 33 + return await this.ensureValidToken(); 34 34 } 35 35 } 36 36
+6 -6
packages/client/src/mod.ts
··· 156 156 method: "GET" | "POST" | "PUT" | "DELETE" = "GET", 157 157 params?: Record<string, unknown> | unknown 158 158 ): Promise<T> { 159 - return this.makeRequestWithRetry(endpoint, method, params, false); 159 + return await this.makeRequestWithRetry(endpoint, method, params, false); 160 160 } 161 161 162 162 private async makeRequestWithRetry<T = unknown>( ··· 271 271 params: Omit<SliceLevelRecordsParams<T>, "slice"> 272 272 ): Promise<SliceRecordsOutput<T>> { 273 273 // Combine where and orWhere into the expected backend format 274 - const whereClause: any = params?.where ? { ...params.where } : {}; 274 + const whereClause: Record<string, unknown> = params?.where ? { ...params.where } : {}; 275 275 if (params?.orWhere) { 276 276 whereClause.$or = params.orWhere; 277 277 } ··· 297 297 ); 298 298 } 299 299 300 - async syncUserCollections<T = any>(params?: { 300 + async syncUserCollections<T = unknown>(params?: { 301 301 timeoutSeconds?: number; 302 302 }): Promise<T> { 303 303 const requestParams = { slice: this.sliceUri, ...params }; ··· 309 309 } 310 310 311 311 async uploadBlob(request: UploadBlobRequest): Promise<UploadBlobResponse> { 312 - return this.uploadBlobWithRetry(request, false); 312 + return await this.uploadBlobWithRetry(request, false); 313 313 } 314 314 315 315 private async uploadBlobWithRetry( ··· 382 382 } 383 383 ): Promise<GetRecordsResponse<T>> { 384 384 // Combine where and orWhere into the expected backend format 385 - const whereClause: any = params?.where ? { ...params.where } : {}; 385 + const whereClause: Record<string, unknown> = params?.where ? { ...params.where } : {}; 386 386 if (params?.orWhere) { 387 387 whereClause.$or = params.orWhere; 388 388 } ··· 472 472 } 473 473 ): Promise<CountRecordsResponse> { 474 474 // Combine where and orWhere into the expected backend format 475 - const whereClause: any = params?.where ? { ...params.where } : {}; 475 + const whereClause: Record<string, unknown> = params?.where ? { ...params.where } : {}; 476 476 if (params?.orWhere) { 477 477 whereClause.$or = params.orWhere; 478 478 }
+1 -1
packages/codegen/src/client.ts
··· 290 290 isAsync: true, 291 291 statements: [ 292 292 `// Combine where and orWhere into the expected backend format`, 293 - `const whereClause: any = params?.where ? { ...params.where } : {};`, 293 + `const whereClause: Record<string, unknown> = params?.where ? { ...params.where } : {};`, 294 294 `if (params?.orWhere) {`, 295 295 ` whereClause.$or = params.orWhere;`, 296 296 `}`,
+29 -13
packages/codegen/src/interfaces.ts
··· 190 190 } 191 191 } 192 192 193 - sourceFile.addInterface({ 194 - name: interfaceName, 195 - isExported: true, 196 - properties: properties, 197 - }); 193 + if (properties.length === 0) { 194 + sourceFile.addTypeAlias({ 195 + name: interfaceName, 196 + isExported: true, 197 + type: "Record<string, never>", 198 + }); 199 + } else { 200 + sourceFile.addInterface({ 201 + name: interfaceName, 202 + isExported: true, 203 + properties: properties, 204 + }); 205 + } 198 206 } 199 207 200 208 // Generate interface for record definitions ··· 248 256 ? nsidToPascalCase(lexicon.id) 249 257 : `${nsidToNamespace(lexicon.id)}${defNameToPascalCase(defKey)}`; 250 258 251 - sourceFile.addInterface({ 252 - name: interfaceName, 253 - isExported: true, 254 - properties: properties, 255 - }); 259 + if (properties.length === 0) { 260 + sourceFile.addTypeAlias({ 261 + name: interfaceName, 262 + isExported: true, 263 + type: "Record<string, never>", 264 + }); 265 + } else { 266 + sourceFile.addInterface({ 267 + name: interfaceName, 268 + isExported: true, 269 + properties: properties, 270 + }); 271 + } 256 272 257 273 // Generate sort fields type union for records (only if there are sortable fields) 258 274 if (fieldNames.length > 0) { ··· 362 378 const knownValueTypes = prop.knownValues 363 379 .map((value: string) => `'${value}'`) 364 380 .join("\n | "); 365 - const typeDefinition = `${knownValueTypes}\n | (string & {})`; 381 + const typeDefinition = `${knownValueTypes}\n | (string & Record<string, never>)`; 366 382 367 383 sourceFile.addTypeAlias({ 368 384 name: typeName, ··· 391 407 const knownValueTypes = prop.knownValues 392 408 .map((value: string) => `'${value}'`) 393 409 .join("\n | "); 394 - const typeDefinition = `${knownValueTypes}\n | (string & {})`; 410 + const typeDefinition = `${knownValueTypes}\n | (string & Record<string, never>)`; 395 411 396 412 sourceFile.addTypeAlias({ 397 413 name: typeName, ··· 416 432 const knownValueTypes = stringDef.knownValues 417 433 .map((value: string) => `'${value}'`) 418 434 .join("\n | "); 419 - const typeDefinition = `${knownValueTypes}\n | (string & {})`; 435 + const typeDefinition = `${knownValueTypes}\n | (string & Record<string, never>)`; 420 436 421 437 sourceFile.addTypeAlias({ 422 438 name: typeName,
+1 -1
packages/codegen/src/mod.ts
··· 282 282 ? 'import { SlicesClient, type RecordResponse, type GetRecordsResponse, type CountRecordsResponse, type GetRecordParams, type WhereCondition, type IndexedRecordFields, type SortField, type BlobRef } from "@slices/client";' 283 283 : 'import { SlicesClient, type RecordResponse, type GetRecordsResponse, type CountRecordsResponse, type GetRecordParams, type WhereCondition, type IndexedRecordFields, type SortField, type GetActorsParams, type GetActorsResponse, type BlobRef, type SliceLevelRecordsParams, type SliceRecordsOutput } from "@slices/client";' 284 284 } 285 - import { OAuthClient } from "@slices/oauth"; 285 + import type { OAuthClient } from "@slices/oauth"; 286 286 287 287 `; 288 288 }
+1 -1
packages/codegen/tests/interfaces_test.ts
··· 139 139 assertStringIncludes(result, "'draft'"); 140 140 assertStringIncludes(result, "'published'"); 141 141 assertStringIncludes(result, "'archived'"); 142 - assertStringIncludes(result, "(string & {})"); 142 + assertStringIncludes(result, "(string & Record<string, never>)"); 143 143 }); 144 144 145 145 Deno.test("generateInterfaces - creates namespace interfaces", () => {
+2 -2
packages/lexicon/mod.ts
··· 107 107 * Called automatically when using `await using` keyword 108 108 */ 109 109 async [Symbol.asyncDispose](): Promise<void> { 110 - this.free(); 110 + await Promise.resolve(this.free()); 111 111 } 112 112 } 113 113 ··· 170 170 collection: string, 171 171 record: Record<string, unknown> 172 172 ): Promise<void> { 173 - return withValidator(lexicons, (validator) => { 173 + return await withValidator(lexicons, (validator) => { 174 174 validator.validateRecord(collection, record); 175 175 }); 176 176 }
+1 -1
packages/lexicon/tests/resource_management_test.ts
··· 38 38 // // Automatically calls [Symbol.dispose]() when scope ends 39 39 console.log(" 📝 Would use: using validator = await LexiconValidator.create([lexicon])"); 40 40 console.log(" ✅ Automatic cleanup when scope ends"); 41 - } catch (error) { 41 + } catch (_error) { 42 42 console.log(" ⚠️ Using statement not available in current environment"); 43 43 } 44 44
+1 -1
packages/lexicon/tests/validator_integration_test.ts
··· 53 53 try { 54 54 validator.validateRecord("com.example.post", invalidRecord); 55 55 console.log("❌ Should have failed"); 56 - } catch (error) { 56 + } catch (_error) { 57 57 console.log("✅ Invalid record validation failed as expected"); 58 58 } 59 59