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;
+ }
+}
|