From 2777e2a51b6153fa070b3d7e9918b7aa89923d12 Mon Sep 17 00:00:00 2001 From: Aly Raffauf Date: Thu, 30 Jul 2026 16:25:19 -0400 Subject: [PATCH] lib/tangled/repo: fetch repo.log and repo.tree directly from knot --- src/lib/tangled/client.ts | 9 +++++++++ src/lib/tangled/repo/getDefaultBranch.ts | 9 +++++---- src/lib/tangled/repo/getRepoLog.ts | 9 +++++---- src/lib/tangled/repo/getRepoTree.ts | 9 +++++---- src/lib/tangled/repo/types.ts | 11 ++++++++++- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/lib/tangled/client.ts b/src/lib/tangled/client.ts index d57faaa..706d9c7 100644 --- a/src/lib/tangled/client.ts +++ b/src/lib/tangled/client.ts @@ -5,3 +5,12 @@ export const BOBBIN_URL = 'https://bobbin.klbr.net' export const rpc = new Client({ handler: simpleFetchHandler({ service: BOBBIN_URL }), }) + +export function getKnotRpc(knot: string) { + const service = + knot.startsWith('http://') || knot.startsWith('https://') ? knot : `https://${knot}` + + return new Client({ + handler: simpleFetchHandler({ service }), + }) +} diff --git a/src/lib/tangled/repo/getDefaultBranch.ts b/src/lib/tangled/repo/getDefaultBranch.ts index fc597e1..81b5930 100644 --- a/src/lib/tangled/repo/getDefaultBranch.ts +++ b/src/lib/tangled/repo/getDefaultBranch.ts @@ -2,13 +2,14 @@ import { ok } from '@atcute/client' import { safeParse } from '@atcute/lexicons' import type { $output as DefaultBranch } from '@atcute/tangled/types/repo/getDefaultBranch' import { mainSchema as defaultBranchSchema } from '@atcute/tangled/types/repo/getDefaultBranch' -import { rpc } from '../client' -import type { Repo } from './types' +import { getKnotRpc } from '../client' +import { getRepoDid, type Repo } from './types' export async function getDefaultBranch(repo: Repo): Promise { + const repoDid = getRepoDid(repo) const response = await ok( - rpc.get('sh.tangled.repo.getDefaultBranch', { - params: { repo: repo.uri }, + getKnotRpc(repo.value.knot).get('sh.tangled.repo.getDefaultBranch', { + params: { repo: repoDid }, }), ) diff --git a/src/lib/tangled/repo/getRepoLog.ts b/src/lib/tangled/repo/getRepoLog.ts index 44797e6..2917cb8 100644 --- a/src/lib/tangled/repo/getRepoLog.ts +++ b/src/lib/tangled/repo/getRepoLog.ts @@ -1,6 +1,6 @@ import { ok } from '@atcute/client' -import { rpc } from '../client' -import type { Repo } from './types' +import { getKnotRpc } from '../client' +import { getRepoDid, type Repo } from './types' export type RepoLogOptions = { path?: string @@ -13,11 +13,12 @@ export async function getRepoLog( ref: string, options: RepoLogOptions = {}, ): Promise { + const repoDid = getRepoDid(repo) const commits = await ok( - rpc.get('sh.tangled.repo.log', { + getKnotRpc(repo.value.knot).get('sh.tangled.repo.log', { as: 'blob', params: { - repo: repo.uri, + repo: repoDid, ref, path: options.path ?? '', limit: options.limit ?? 50, diff --git a/src/lib/tangled/repo/getRepoTree.ts b/src/lib/tangled/repo/getRepoTree.ts index e7d8eb7..b56f297 100644 --- a/src/lib/tangled/repo/getRepoTree.ts +++ b/src/lib/tangled/repo/getRepoTree.ts @@ -3,15 +3,16 @@ import { safeParse } from '@atcute/lexicons' import { isDatetime } from '@atcute/lexicons/syntax' import type { $output as RepoTree } from '@atcute/tangled/types/repo/tree' import { mainSchema as treeSchema } from '@atcute/tangled/types/repo/tree' -import { rpc } from '../client' +import { getKnotRpc } from '../client' import { getDefaultBranch } from './getDefaultBranch' -import type { Repo } from './types' +import { getRepoDid, type Repo } from './types' export async function getRepoTree(repo: Repo, path = '', ref?: string): Promise { + const repoDid = getRepoDid(repo) const defaultBranch = ref ?? (await getDefaultBranch(repo)).name const treeResponse = await ok( - rpc.get('sh.tangled.repo.tree', { - params: { repo: repo.uri, ref: defaultBranch, path }, + getKnotRpc(repo.value.knot).get('sh.tangled.repo.tree', { + params: { repo: repoDid, ref: defaultBranch, path }, }), ) diff --git a/src/lib/tangled/repo/types.ts b/src/lib/tangled/repo/types.ts index c02d0f9..7559897 100644 --- a/src/lib/tangled/repo/types.ts +++ b/src/lib/tangled/repo/types.ts @@ -1,4 +1,4 @@ -import type { Cid, ResourceUri } from '@atcute/lexicons' +import type { Cid, Did, ResourceUri } from '@atcute/lexicons' import type { Main as TangledRepo } from '@atcute/tangled/types/repo' import type { Main as TangledIssue } from '@atcute/tangled/types/repo/issue' import type { $output as IssueListResponse } from '@atcute/tangled/types/repo/listIssues' @@ -13,6 +13,15 @@ export type TangledRecord = { export type Repo = TangledRecord +export function getRepoDid(repo: Repo): Did { + const repoDid = repo.value.repoDid + if (repoDid === undefined) { + throw new Error(`Repository ${repo.uri} does not have a repository DID`) + } + + return repoDid +} + export type IssueRecord = TangledRecord export type Issue = Omit & { -- 2.51.2