diff --git a/src/util/connections/RefreshableConnection.ts b/src/util/connections/RefreshableConnection.ts
index 0008cbc0..87f5f6dd 100644
--- a/src/util/connections/RefreshableConnection.ts
+++ b/src/util/connections/RefreshableConnection.ts
@@ -23,7 +23,7 @@ export default abstract class RefreshableConnection extends Connection {
connectedAccount: ConnectedAccount,
): Promise<ConnectedAccountCommonOAuthTokenResponse> {
const tokenData = await this.refreshToken(connectedAccount);
- connectedAccount.token_data = tokenData;
+ connectedAccount.token_data = { ...tokenData, fetched_at: Date.now() };
await connectedAccount.save();
return tokenData;
}
diff --git a/src/util/dtos/ConnectedAccountDTO.ts b/src/util/dtos/ConnectedAccountDTO.ts
index ca15ff41..a3618fd1 100644
--- a/src/util/dtos/ConnectedAccountDTO.ts
+++ b/src/util/dtos/ConnectedAccountDTO.ts
@@ -7,7 +7,7 @@ export class ConnectedAccountDTO {
friend_sync?: boolean;
name: string;
revoked?: boolean;
- show_activity?: boolean;
+ show_activity?: number;
type: string;
verified?: boolean;
visibility?: number;
diff --git a/src/util/entities/ConnectedAccount.ts b/src/util/entities/ConnectedAccount.ts
index beb53e41..d8a9de20 100644
--- a/src/util/entities/ConnectedAccount.ts
+++ b/src/util/entities/ConnectedAccount.ts
@@ -51,7 +51,7 @@ export class ConnectedAccount extends BaseClass {
revoked?: boolean = false;
@Column({ select: false })
- show_activity?: boolean = true;
+ show_activity?: number = 0;
@Column()
type: string;
@@ -75,5 +75,11 @@ export class ConnectedAccount extends BaseClass {
two_way_link?: boolean = false;
@Column({ select: false, nullable: true, type: "simple-json" })
- token_data?: ConnectedAccountTokenData;
+ token_data?: ConnectedAccountTokenData | null;
+
+ async revoke() {
+ this.revoked = true;
+ this.token_data = null;
+ await this.save();
+ }
}
diff --git a/src/util/interfaces/ConnectedAccount.ts b/src/util/interfaces/ConnectedAccount.ts
index c96e5f79..ede02f6d 100644
--- a/src/util/interfaces/ConnectedAccount.ts
+++ b/src/util/interfaces/ConnectedAccount.ts
@@ -13,4 +13,5 @@ export interface ConnectedAccountTokenData {
refresh_token?: string;
expires_in?: number;
expires_at?: number;
+ fetched_at: number;
}
diff --git a/src/util/schemas/ConnectedAccountSchema.ts b/src/util/schemas/ConnectedAccountSchema.ts
index e5f838d0..fa834bd6 100644
--- a/src/util/schemas/ConnectedAccountSchema.ts
+++ b/src/util/schemas/ConnectedAccountSchema.ts
@@ -7,7 +7,7 @@ export interface ConnectedAccountSchema {
friend_sync?: boolean;
name: string;
revoked?: boolean;
- show_activity?: boolean;
+ show_activity?: number;
type: string;
verified?: boolean;
visibility?: number;
diff --git a/src/util/schemas/ConnectionUpdateSchema.ts b/src/util/schemas/ConnectionUpdateSchema.ts
index ac234e7e..eb6c0916 100644
--- a/src/util/schemas/ConnectionUpdateSchema.ts
+++ b/src/util/schemas/ConnectionUpdateSchema.ts
@@ -1,3 +1,4 @@
export interface ConnectionUpdateSchema {
visibility?: boolean;
+ show_activity?: boolean;
}
diff --git a/src/util/util/Constants.ts b/src/util/util/Constants.ts
index 3bdfcfa9..47f650f4 100644
--- a/src/util/util/Constants.ts
+++ b/src/util/util/Constants.ts
@@ -787,6 +787,11 @@ export const DiscordApiErrors = {
40006,
),
USER_BANNED: new ApiError("The user is banned from this guild", 40007),
+ CONNECTION_REVOKED: new ApiError(
+ "The connection has been revoked",
+ 40012,
+ 400,
+ ),
TARGET_USER_IS_NOT_CONNECTED_TO_VOICE: new ApiError(
"Target user is not connected to voice",
40032,
|