···1515 path: string
1616}
17171818-async function fetchRecord(pdsEndpoint: string, did: string, collection: string, rkey: string): Promise<any> {
1818+interface GetRecordResponse<T> {
1919+ value: T
2020+ cid?: string
2121+}
2222+2323+async function fetchRecord<T>(
2424+ pdsEndpoint: string,
2525+ did: string,
2626+ collection: string,
2727+ rkey: string,
2828+): Promise<GetRecordResponse<T>> {
1929 const url = `${pdsEndpoint}/xrpc/com.atproto.repo.getRecord?repo=${encodeURIComponent(did)}&collection=${encodeURIComponent(collection)}&rkey=${encodeURIComponent(rkey)}`
2030 const res = await fetch(url)
2131 if (!res.ok) {
2232 throw new Error(`Failed to fetch record: ${res.status}`)
2333 }
2424- return res.json()
3434+ return (await res.json()) as GetRecordResponse<T>
2535}
26362737function extractSubfsUris(directory: Directory, currentPath: string = ''): Array<{ uri: string; path: string }> {
···253263254264 // 3. Fetch site record
255265 const recordSpinner = createSpinner('Fetching site record...').start()
256256- let recordData: unknown
266266+ let recordData: GetRecordResponse<FsRecord>
257267258268 try {
259259- recordData = await fetchRecord(pdsEndpoint, did, 'place.wisp.fs', site)
269269+ recordData = await fetchRecord<FsRecord>(pdsEndpoint, did, 'place.wisp.fs', site)
260270 } catch {
261271 recordSpinner.fail('Site not found')
262272 throw new Error(`Site not found: ${site}`)
263273 }
264274265265- const record = recordData.value as FsRecord
275275+ const record = recordData.value
266276 const recordCid = recordData.cid || ''
267277 recordSpinner.succeed('Fetched site record')
268278
+3-3
cli/commands/serve.ts
···44import { Firehose } from '@atproto/sync'
55import { serve as honoNodeServe } from '@hono/node-server'
66import { getPdsForDid, resolveDid } from '@wispplace/atproto-utils'
77-import { BunFirehose, isBun } from '@wispplace/bun-firehose'
77+import { BunFirehose, type BunFirehoseOptions, isBun } from '@wispplace/bun-firehose'
88import { matchRedirectRule, parseQueryString, parseRedirectsFile, type RedirectRule } from '@wispplace/fs-utils'
99import type { Record as SettingsRecord } from '@wispplace/lexicons/types/place/wisp/settings'
1010import { generate404Page, generateDirectoryListing } from '@wispplace/page-generators'
···266266 let serverHandle: { close: () => void }
267267268268 if (isBun) {
269269- // @ts-expect-error - Bun global
270269 const bunServer = Bun.serve({
271270 port,
272271 fetch: app.fetch,
···317316318317 if (isBun) {
319318 // Use BunFirehose for Bun
319319+ const bunIdResolver = idResolver as unknown as BunFirehoseOptions['idResolver']
320320 const bunFirehose = new BunFirehose({
321321- idResolver,
321321+ idResolver: bunIdResolver,
322322 service: pdsEndpoint,
323323 filterCollections: ['place.wisp.fs', 'place.wisp.settings'],
324324 handleEvent: firehoseHandleEvent,
-1
cli/lib/auth.ts
···307307308308 // Start server based on runtime
309309 if (isBun) {
310310- // @ts-expect-error - Bun global
311310 const bunServer = Bun.serve({
312311 port: LOOPBACK_PORT,
313312 hostname: LOOPBACK_HOST,
···99export * as PlaceWispV2DomainGetStatus from "./types/place/wisp/v2/domain/getStatus.js";
1010export * as PlaceWispV2Domains from "./types/place/wisp/v2/domains.js";
1111export * as PlaceWispV2SiteDelete from "./types/place/wisp/v2/site/delete.js";
1212+export * as PlaceWispV2SiteGetDomains from "./types/place/wisp/v2/site/getDomains.js";
1213export * as PlaceWispV2SiteGetList from "./types/place/wisp/v2/site/getList.js";
1314export * as PlaceWispV2Wh from "./types/place/wisp/v2/wh.js";