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:
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "Iframely",
|
||||
"description": "Integrate Iframely to enable unfurling of arbitrary urls",
|
||||
"requiredEnvVars": ["IFRAMELY_API_KEY"]
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
15
plugins/iframely/server/index.ts
Normal file
15
plugins/iframely/server/index.ts
Normal 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,
|
||||
});
|
||||
@@ -1,3 +0,0 @@
|
||||
import Iframely from "./iframely";
|
||||
|
||||
export const unfurl = async (url: string) => Iframely.get(url);
|
||||
Reference in New Issue
Block a user