From 626b2cb311268efa308a86efad7c6679fb205b6d Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Wed, 13 Mar 2024 12:02:01 -1000 Subject: [PATCH] Preliminary multi-protocol support work --- packages/protocol-translator/index.ts | 48 +++++++++++++++++++ packages/protocol-translator/package.json | 6 +++ .../protocols/activitypub.ts | 11 +++++ 3 files changed, 65 insertions(+) create mode 100644 packages/protocol-translator/index.ts create mode 100644 packages/protocol-translator/package.json create mode 100644 packages/protocol-translator/protocols/activitypub.ts diff --git a/packages/protocol-translator/index.ts b/packages/protocol-translator/index.ts new file mode 100644 index 00000000..06de64e0 --- /dev/null +++ b/packages/protocol-translator/index.ts @@ -0,0 +1,48 @@ +import type { APActor, APNote } from "activitypub-types"; +import { ActivityPubTranslator } from "./protocols/activitypub"; + +export enum SupportedProtocols { + ACTIVITYPUB = "activitypub", +} + +/** + * ProtocolTranslator + * @summary Translates between federation protocols such as ActivityPub to Lysand and back + * @description This class is responsible for translating between federation protocols such as ActivityPub to Lysand and back. + * This class is not meant to be instantiated directly, but rather for its children to be used. + */ +export class ProtocolTranslator { + static auto(object: any) { + const protocol = this.recognizeProtocol(object); + switch (protocol) { + case SupportedProtocols.ACTIVITYPUB: + return new ActivityPubTranslator(); + default: + throw new Error("Unknown protocol"); + } + } + + /** + * Translates an ActivityPub actor to a Lysand user + * @param data Raw JSON-LD data from an ActivityPub actor + */ + user(data: APActor) { + // + } + + /** + * Translates an ActivityPub note to a Lysand status + * @param data Raw JSON-LD data from an ActivityPub note + */ + status(data: APNote) { + // + } + + /** + * Automatically recognizes the protocol of a given object + */ + private static recognizeProtocol(object: any) { + // Temporary stub + return SupportedProtocols.ACTIVITYPUB; + } +} diff --git a/packages/protocol-translator/package.json b/packages/protocol-translator/package.json new file mode 100644 index 00000000..c5e710d0 --- /dev/null +++ b/packages/protocol-translator/package.json @@ -0,0 +1,6 @@ +{ + "name": "protocol-translator", + "version": "0.0.0", + "main": "index.ts", + "dependencies": {} +} \ No newline at end of file diff --git a/packages/protocol-translator/protocols/activitypub.ts b/packages/protocol-translator/protocols/activitypub.ts new file mode 100644 index 00000000..c3425d04 --- /dev/null +++ b/packages/protocol-translator/protocols/activitypub.ts @@ -0,0 +1,11 @@ +import { ProtocolTranslator } from ".."; + +export class ActivityPubTranslator extends ProtocolTranslator { + constructor() { + super(); + } + + user() { + + } +} \ No newline at end of file