summary refs log tree commit diff
path: root/src/util/connections/RefreshableConnection.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/connections/RefreshableConnection.ts')
-rw-r--r--src/util/connections/RefreshableConnection.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/util/connections/RefreshableConnection.ts b/src/util/connections/RefreshableConnection.ts
new file mode 100644
index 00000000..0008cbc0
--- /dev/null
+++ b/src/util/connections/RefreshableConnection.ts
@@ -0,0 +1,30 @@
+import { ConnectedAccount } from "../entities";
+import { ConnectedAccountCommonOAuthTokenResponse } from "../interfaces";
+import Connection from "./Connection";
+
+/**
+ * A connection that can refresh its token.
+ */
+export default abstract class RefreshableConnection extends Connection {
+	refreshEnabled = true;
+	/**
+	 * Refreshes the token for a connected account.
+	 * @param connectedAccount The connected account to refresh
+	 */
+	abstract refreshToken(
+		connectedAccount: ConnectedAccount,
+	): Promise<ConnectedAccountCommonOAuthTokenResponse>;
+
+	/**
+	 * Refreshes the token for a connected account and saves it to the database.
+	 * @param connectedAccount The connected account to refresh
+	 */
+	async refresh(
+		connectedAccount: ConnectedAccount,
+	): Promise<ConnectedAccountCommonOAuthTokenResponse> {
+		const tokenData = await this.refreshToken(connectedAccount);
+		connectedAccount.token_data = tokenData;
+		await connectedAccount.save();
+		return tokenData;
+	}
+}