Skip to content

Commit

Permalink
✨ Ozone batch repo and record getters (#2836)
Browse files Browse the repository at this point in the history
* ✨ Add getRepos and getRecords endpoints for bulk fetching

* ✨ Fix issues and add tests for get repos and get records

* ✨ Use the right lxm

* 🐛 Revert changes in lockfile

* ✨ Add getAccountInfos in PDS

* 🐛 Fix type def for repo and record view detail

* ✅ Update snapshots

* ✅ Update snapshots

* ✨ Consolidate error type for com.atproto and tools.ozone getRecord error type

* 🧹 Cleanup

* ✅ Update snapshots

* ✅ Update snapshots

* ✨ Changeset
  • Loading branch information
foysalit authored Oct 1, 2024
1 parent 1226ed2 commit a2bad97
Show file tree
Hide file tree
Showing 41 changed files with 1,542 additions and 103 deletions.
7 changes: 7 additions & 0 deletions .changeset/lucky-zoos-sniff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@atproto/ozone": patch
"@atproto/api": patch
"@atproto/pds": patch
---

Add getRepos and getRecords endpoints for bulk fetching
3 changes: 2 additions & 1 deletion lexicons/com/atproto/repo/getRecord.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
"value": { "type": "unknown" }
}
}
}
},
"errors": [{ "name": "RecordNotFound" }]
}
}
}
43 changes: 43 additions & 0 deletions lexicons/tools/ozone/moderation/getRecords.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"lexicon": 1,
"id": "tools.ozone.moderation.getRecords",
"defs": {
"main": {
"type": "query",
"description": "Get details about some records.",
"parameters": {
"type": "params",
"required": ["uris"],
"properties": {
"uris": {
"type": "array",
"maxLength": 100,
"items": {
"type": "string",
"format": "at-uri"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["records"],
"properties": {
"records": {
"type": "array",
"items": {
"type": "union",
"refs": [
"tools.ozone.moderation.defs#recordViewDetail",
"tools.ozone.moderation.defs#recordViewNotFound"
]
}
}
}
}
}
}
}
}
43 changes: 43 additions & 0 deletions lexicons/tools/ozone/moderation/getRepos.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"lexicon": 1,
"id": "tools.ozone.moderation.getRepos",
"defs": {
"main": {
"type": "query",
"description": "Get details about some repositories.",
"parameters": {
"type": "params",
"required": ["dids"],
"properties": {
"dids": {
"type": "array",
"maxLength": 100,
"items": {
"type": "string",
"format": "did"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["repos"],
"properties": {
"repos": {
"type": "array",
"items": {
"type": "union",
"refs": [
"tools.ozone.moderation.defs#repoViewDetail",
"tools.ozone.moderation.defs#repoViewNotFound"
]
}
}
}
}
}
}
}
}
39 changes: 33 additions & 6 deletions packages/api/src/client/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,9 @@ import * as ToolsOzoneModerationDefs from './types/tools/ozone/moderation/defs'
import * as ToolsOzoneModerationEmitEvent from './types/tools/ozone/moderation/emitEvent'
import * as ToolsOzoneModerationGetEvent from './types/tools/ozone/moderation/getEvent'
import * as ToolsOzoneModerationGetRecord from './types/tools/ozone/moderation/getRecord'
import * as ToolsOzoneModerationGetRecords from './types/tools/ozone/moderation/getRecords'
import * as ToolsOzoneModerationGetRepo from './types/tools/ozone/moderation/getRepo'
import * as ToolsOzoneModerationGetRepos from './types/tools/ozone/moderation/getRepos'
import * as ToolsOzoneModerationQueryEvents from './types/tools/ozone/moderation/queryEvents'
import * as ToolsOzoneModerationQueryStatuses from './types/tools/ozone/moderation/queryStatuses'
import * as ToolsOzoneModerationSearchRepos from './types/tools/ozone/moderation/searchRepos'
Expand Down Expand Up @@ -405,7 +407,9 @@ export * as ToolsOzoneModerationDefs from './types/tools/ozone/moderation/defs'
export * as ToolsOzoneModerationEmitEvent from './types/tools/ozone/moderation/emitEvent'
export * as ToolsOzoneModerationGetEvent from './types/tools/ozone/moderation/getEvent'
export * as ToolsOzoneModerationGetRecord from './types/tools/ozone/moderation/getRecord'
export * as ToolsOzoneModerationGetRecords from './types/tools/ozone/moderation/getRecords'
export * as ToolsOzoneModerationGetRepo from './types/tools/ozone/moderation/getRepo'
export * as ToolsOzoneModerationGetRepos from './types/tools/ozone/moderation/getRepos'
export * as ToolsOzoneModerationQueryEvents from './types/tools/ozone/moderation/queryEvents'
export * as ToolsOzoneModerationQueryStatuses from './types/tools/ozone/moderation/queryStatuses'
export * as ToolsOzoneModerationSearchRepos from './types/tools/ozone/moderation/searchRepos'
Expand Down Expand Up @@ -862,12 +866,11 @@ export class ComAtprotoRepoNS {
params?: ComAtprotoRepoGetRecord.QueryParams,
opts?: ComAtprotoRepoGetRecord.CallOptions,
): Promise<ComAtprotoRepoGetRecord.Response> {
return this._client.call(
'com.atproto.repo.getRecord',
params,
undefined,
opts,
)
return this._client
.call('com.atproto.repo.getRecord', params, undefined, opts)
.catch((e) => {
throw ComAtprotoRepoGetRecord.toKnownErr(e)
})
}

importRepo(
Expand Down Expand Up @@ -3499,6 +3502,18 @@ export class ToolsOzoneModerationNS {
})
}

getRecords(
params?: ToolsOzoneModerationGetRecords.QueryParams,
opts?: ToolsOzoneModerationGetRecords.CallOptions,
): Promise<ToolsOzoneModerationGetRecords.Response> {
return this._client.call(
'tools.ozone.moderation.getRecords',
params,
undefined,
opts,
)
}

getRepo(
params?: ToolsOzoneModerationGetRepo.QueryParams,
opts?: ToolsOzoneModerationGetRepo.CallOptions,
Expand All @@ -3510,6 +3525,18 @@ export class ToolsOzoneModerationNS {
})
}

getRepos(
params?: ToolsOzoneModerationGetRepos.QueryParams,
opts?: ToolsOzoneModerationGetRepos.CallOptions,
): Promise<ToolsOzoneModerationGetRepos.Response> {
return this._client.call(
'tools.ozone.moderation.getRepos',
params,
undefined,
opts,
)
}

queryEvents(
params?: ToolsOzoneModerationQueryEvents.QueryParams,
opts?: ToolsOzoneModerationQueryEvents.CallOptions,
Expand Down
93 changes: 93 additions & 0 deletions packages/api/src/client/lexicons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1686,6 +1686,11 @@ export const schemaDict = {
},
},
},
errors: [
{
name: 'RecordNotFound',
},
],
},
},
},
Expand Down Expand Up @@ -11643,6 +11648,49 @@ export const schemaDict = {
},
},
},
ToolsOzoneModerationGetRecords: {
lexicon: 1,
id: 'tools.ozone.moderation.getRecords',
defs: {
main: {
type: 'query',
description: 'Get details about some records.',
parameters: {
type: 'params',
required: ['uris'],
properties: {
uris: {
type: 'array',
maxLength: 100,
items: {
type: 'string',
format: 'at-uri',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['records'],
properties: {
records: {
type: 'array',
items: {
type: 'union',
refs: [
'lex:tools.ozone.moderation.defs#recordViewDetail',
'lex:tools.ozone.moderation.defs#recordViewNotFound',
],
},
},
},
},
},
},
},
},
ToolsOzoneModerationGetRepo: {
lexicon: 1,
id: 'tools.ozone.moderation.getRepo',
Expand Down Expand Up @@ -11675,6 +11723,49 @@ export const schemaDict = {
},
},
},
ToolsOzoneModerationGetRepos: {
lexicon: 1,
id: 'tools.ozone.moderation.getRepos',
defs: {
main: {
type: 'query',
description: 'Get details about some repositories.',
parameters: {
type: 'params',
required: ['dids'],
properties: {
dids: {
type: 'array',
maxLength: 100,
items: {
type: 'string',
format: 'did',
},
},
},
},
output: {
encoding: 'application/json',
schema: {
type: 'object',
required: ['repos'],
properties: {
repos: {
type: 'array',
items: {
type: 'union',
refs: [
'lex:tools.ozone.moderation.defs#repoViewDetail',
'lex:tools.ozone.moderation.defs#repoViewNotFound',
],
},
},
},
},
},
},
},
},
ToolsOzoneModerationQueryEvents: {
lexicon: 1,
id: 'tools.ozone.moderation.queryEvents',
Expand Down Expand Up @@ -12491,7 +12582,9 @@ export const ids = {
ToolsOzoneModerationEmitEvent: 'tools.ozone.moderation.emitEvent',
ToolsOzoneModerationGetEvent: 'tools.ozone.moderation.getEvent',
ToolsOzoneModerationGetRecord: 'tools.ozone.moderation.getRecord',
ToolsOzoneModerationGetRecords: 'tools.ozone.moderation.getRecords',
ToolsOzoneModerationGetRepo: 'tools.ozone.moderation.getRepo',
ToolsOzoneModerationGetRepos: 'tools.ozone.moderation.getRepos',
ToolsOzoneModerationQueryEvents: 'tools.ozone.moderation.queryEvents',
ToolsOzoneModerationQueryStatuses: 'tools.ozone.moderation.queryStatuses',
ToolsOzoneModerationSearchRepos: 'tools.ozone.moderation.searchRepos',
Expand Down
10 changes: 10 additions & 0 deletions packages/api/src/client/types/com/atproto/repo/getRecord.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ export interface Response {
data: OutputSchema
}

export class RecordNotFoundError extends XRPCError {
constructor(src: XRPCError) {
super(src.status, src.error, src.message, src.headers, { cause: src })
}
}

export function toKnownErr(e: any) {
if (e instanceof XRPCError) {
if (e.error === 'RecordNotFound') return new RecordNotFoundError(e)
}

return e
}
39 changes: 39 additions & 0 deletions packages/api/src/client/types/tools/ozone/moderation/getRecords.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { HeadersMap, XRPCError } from '@atproto/xrpc'
import { ValidationResult, BlobRef } from '@atproto/lexicon'
import { isObj, hasProp } from '../../../../util'
import { lexicons } from '../../../../lexicons'
import { CID } from 'multiformats/cid'
import * as ToolsOzoneModerationDefs from './defs'

export interface QueryParams {
uris: string[]
}

export type InputSchema = undefined

export interface OutputSchema {
records: (
| ToolsOzoneModerationDefs.RecordViewDetail
| ToolsOzoneModerationDefs.RecordViewNotFound
| { $type: string; [k: string]: unknown }
)[]
[k: string]: unknown
}

export interface CallOptions {
signal?: AbortSignal
headers?: HeadersMap
}

export interface Response {
success: boolean
headers: HeadersMap
data: OutputSchema
}

export function toKnownErr(e: any) {
return e
}
Loading

0 comments on commit a2bad97

Please sign in to comment.