chore: Plugin registration (#6623)

* first pass

* test

* test

* priority

* Reduce boilerplate further

* Update server/utils/PluginManager.ts

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>

* fix: matchesNode error in destroyed editor transaction

* fix: Individual imported files do not display source correctly in 'Insights'

* chore: Add sleep before Slack notification

* docs

* fix: Error logged about missing plugin.json

* Remove email template glob

---------

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>
This commit is contained in:
Tom Moor
2024-03-08 21:32:05 -07:00
committed by GitHub
parent f3334cedb2
commit f9a11a28d8
43 changed files with 400 additions and 276 deletions

View File

@@ -1,5 +0,0 @@
{
"name": "Iframely",
"description": "Integrate Iframely to enable unfurling of arbitrary urls",
"requiredEnvVars": ["IFRAMELY_API_KEY"]
}

View File

@@ -1,3 +1,4 @@
import type { Unfurl } from "@shared/types";
import { Day } from "@shared/utils/time";
import { InternalError } from "@server/errors";
import Logger from "@server/logging/Logger";
@@ -33,7 +34,7 @@ class Iframely {
}
}
private static async fetch(url: string, type = "oembed") {
public static async fetch(url: string, type = "oembed") {
const res = await fetch(
`${this.apiUrl}/${type}?url=${encodeURIComponent(url)}&api_key=${
this.apiKey
@@ -55,20 +56,19 @@ class Iframely {
}
/**
* Fetches the preview data for the given url
* using Iframely oEmbed API
* Fetches the preview data for the given url using Iframely oEmbed API
*
* @param url
* @returns Preview data for the url
*/
public static async get(url: string) {
public static async get(url: string): Promise<Unfurl | false> {
try {
const cached = await this.cached(url);
const cached = await Iframely.cached(url);
if (cached) {
return cached;
}
const res = await this.fetch(url);
await this.cache(url, res);
const res = await Iframely.fetch(url);
await Iframely.cache(url, res);
return res;
} catch (err) {
throw InternalError(err);

View File

@@ -0,0 +1,15 @@
import {
PluginManager,
PluginPriority,
PluginType,
} from "@server/utils/PluginManager";
import env from "./env";
import Iframely from "./iframely";
PluginManager.register(PluginType.UnfurlProvider, Iframely.get, {
id: "iframely",
enabled: !!env.IFRAMELY_API_KEY && !!env.IFRAMELY_URL,
// Make sure this is last in the stack to be evaluated after all other unfurl providers
priority: PluginPriority.VeryLow,
});

View File

@@ -1,3 +0,0 @@
import Iframely from "./iframely";
export const unfurl = async (url: string) => Iframely.get(url);