diff --git a/src/dispatchers.ts b/src/dispatchers.ts index d819dad4..bbbcf04b 100644 --- a/src/dispatchers.ts +++ b/src/dispatchers.ts @@ -23,6 +23,7 @@ import { addToList } from './kv-helpers'; import { ContextData } from './app'; import { ACTOR_DEFAULT_HANDLE } from './constants'; import { getUserData, getUserKeypair } from './user'; +import { lookupActor } from './lookup-helpers'; export async function actorDispatcher( ctx: RequestContext, @@ -302,31 +303,6 @@ export async function inboxErrorHandler( console.error(error); } -async function lookupActor(ctx: RequestContext, url: string) { - try { - console.log('Looking up actor locally', url); - const local = await ctx.data.globaldb.get([url]); - return await APObject.fromJsonLd(local); - } catch (err) { - console.log('Error looking up actor locally', url); - console.log(err); - console.log('Looking up actor remotely', url); - const documentLoader = await ctx.getDocumentLoader({handle: 'index'}); - try { - const remote = await lookupObject(url, {documentLoader}); - if (isActor(remote)) { - await ctx.data.globaldb.set([url], await remote.toJsonLd()); - return remote; - } - } catch (err) { - console.log('Error looking up actor remotely', url); - console.log(err) - return null; - } - } - return null; -} - function convertJsonLdToRecipient(result: any): Recipient { return { ...result, diff --git a/src/lookup-helpers.ts b/src/lookup-helpers.ts new file mode 100644 index 00000000..05a1b382 --- /dev/null +++ b/src/lookup-helpers.ts @@ -0,0 +1,37 @@ +import { + isActor, + lookupObject, + Actor, + RequestContext, + Object as APObject, +} from '@fedify/fedify'; +import { ContextData } from './app'; + +export async function lookupActor(ctx: RequestContext, url: string): Promise { + try { + console.log('Looking up actor locally', url); + const local = await ctx.data.globaldb.get([url]); + const object = await APObject.fromJsonLd(local); + if (isActor(object)) { + return object; + } + return null; + } catch (err) { + console.log('Error looking up actor locally', url); + console.log(err); + console.log('Looking up actor remotely', url); + const documentLoader = await ctx.getDocumentLoader({handle: 'index'}); + try { + const remote = await lookupObject(url, {documentLoader}); + if (isActor(remote)) { + await ctx.data.globaldb.set([url], await remote.toJsonLd()); + return remote; + } + } catch (err) { + console.log('Error looking up actor remotely', url); + console.log(err) + return null; + } + } + return null; +}