From 011fcd4490285e4ecba7eaf872eb135441c2591c Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Mon, 18 Nov 2024 12:25:48 -0500 Subject: [PATCH 1/6] Add in builtin listener for token revoked and app uninstalled events --- src/listener/builtin.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/listener/builtin.ts diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts new file mode 100644 index 000000000..c67841ba4 --- /dev/null +++ b/src/listener/builtin.ts @@ -0,0 +1,41 @@ +import { InstallationStore, InstallationQuery } from "@slack/oauth"; +import { Logger } from '@slack/logger'; +import { Context } from "../types"; + +export class TokenRevocationListeners { + private installationStore: InstallationStore; + private logger: Logger; + + public constructor(installationStore: InstallationStore, logger: Logger) { + this.installationStore = installationStore; + this.logger = logger; + } + + public handleTokensRevokedEvents(context: Context) { + const isEnterpriseInstall = context.isEnterpriseInstall; + + const installQuery: InstallationQuery = { + isEnterpriseInstall: isEnterpriseInstall, + teamId: isEnterpriseInstall ? context.teamId : undefined, + enterpriseId: isEnterpriseInstall ? context.enterpriseId : undefined + }; + + this.installationStore.deleteInstallation(installQuery, this.logger); + + // add logic to delete bot? + } + + public handleAppUninstalledEvents(context: Context) { + const isEnterpriseInstall = context.isEnterpriseInstall; + + const installQuery: InstallationQuery = { + isEnterpriseInstall: isEnterpriseInstall, + teamId: isEnterpriseInstall ? context.teamId : undefined, + enterpriseId: isEnterpriseInstall ? context.enterpriseId : undefined + }; + + this.installationStore.deleteInstallation(installQuery, this.logger); + + // add logic to delete bot? + } +} From a6491ac607d23109a43ca06b194bf1c0786f78b1 Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Mon, 18 Nov 2024 12:36:49 -0500 Subject: [PATCH 2/6] add logger --- src/listener/builtin.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts index c67841ba4..60ac9df90 100644 --- a/src/listener/builtin.ts +++ b/src/listener/builtin.ts @@ -1,14 +1,20 @@ import { InstallationStore, InstallationQuery } from "@slack/oauth"; -import { Logger } from '@slack/logger'; +import { ConsoleLogger, Logger, LogLevel } from '@slack/logger'; import { Context } from "../types"; export class TokenRevocationListeners { private installationStore: InstallationStore; private logger: Logger; - public constructor(installationStore: InstallationStore, logger: Logger) { + public constructor(installationStore: InstallationStore, logger: Logger, logLevel = LogLevel.INFO,) { this.installationStore = installationStore; - this.logger = logger; + this.logger = + logger ?? + (() => { + const defaultLogger = new ConsoleLogger(); + defaultLogger.setLevel(logLevel); + return defaultLogger; + })(); } public handleTokensRevokedEvents(context: Context) { From f4fa2d33a33bb2e7a53afcae8c4491dcf9f595bc Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Mon, 18 Nov 2024 12:44:31 -0500 Subject: [PATCH 3/6] update install query --- src/listener/builtin.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts index c67841ba4..150564faf 100644 --- a/src/listener/builtin.ts +++ b/src/listener/builtin.ts @@ -1,14 +1,20 @@ import { InstallationStore, InstallationQuery } from "@slack/oauth"; -import { Logger } from '@slack/logger'; +import { ConsoleLogger, Logger, LogLevel } from '@slack/logger'; import { Context } from "../types"; export class TokenRevocationListeners { private installationStore: InstallationStore; private logger: Logger; - public constructor(installationStore: InstallationStore, logger: Logger) { + public constructor(installationStore: InstallationStore, logger: Logger, logLevel = LogLevel.INFO,) { this.installationStore = installationStore; - this.logger = logger; + this.logger = + logger ?? + (() => { + const defaultLogger = new ConsoleLogger(); + defaultLogger.setLevel(logLevel); + return defaultLogger; + })(); } public handleTokensRevokedEvents(context: Context) { @@ -16,8 +22,8 @@ export class TokenRevocationListeners { const installQuery: InstallationQuery = { isEnterpriseInstall: isEnterpriseInstall, - teamId: isEnterpriseInstall ? context.teamId : undefined, - enterpriseId: isEnterpriseInstall ? context.enterpriseId : undefined + teamId: context.teamId, + enterpriseId: context.enterpriseId, }; this.installationStore.deleteInstallation(installQuery, this.logger); From 6b549f0529bc2a18b8bf239308d8145c9e8c7fd4 Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Mon, 18 Nov 2024 12:47:04 -0500 Subject: [PATCH 4/6] update other installquery --- src/listener/builtin.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts index 150564faf..465cc95bf 100644 --- a/src/listener/builtin.ts +++ b/src/listener/builtin.ts @@ -36,8 +36,8 @@ export class TokenRevocationListeners { const installQuery: InstallationQuery = { isEnterpriseInstall: isEnterpriseInstall, - teamId: isEnterpriseInstall ? context.teamId : undefined, - enterpriseId: isEnterpriseInstall ? context.enterpriseId : undefined + teamId: context.teamId, + enterpriseId: context.enterpriseId, }; this.installationStore.deleteInstallation(installQuery, this.logger); From d19f6867929c5ac8a109239c6726e09758ca78e3 Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Tue, 19 Nov 2024 09:53:37 -0500 Subject: [PATCH 5/6] update based on feedback --- src/listener/builtin.ts | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts index 465cc95bf..ebc18c67d 100644 --- a/src/listener/builtin.ts +++ b/src/listener/builtin.ts @@ -24,11 +24,21 @@ export class TokenRevocationListeners { isEnterpriseInstall: isEnterpriseInstall, teamId: context.teamId, enterpriseId: context.enterpriseId, + userId: context.userId, }; - this.installationStore.deleteInstallation(installQuery, this.logger); - - // add logic to delete bot? + if (this.installationStore.deleteInstallation) { + this.installationStore.deleteInstallation(installQuery, this.logger); + /** + * deleteInstallation with enterprise/team_id + user_id -> delete only user tokens + deleteBot with enterprise/team_id -> delete only bot tokens + deleteAll with enterprise/team_id -> delete both bot and user tokens + */ + } else { + throw new Error( + `Custom InstallationStore must have deleteInstallation method implemented`, + ); + } } public handleAppUninstalledEvents(context: Context) { @@ -38,10 +48,20 @@ export class TokenRevocationListeners { isEnterpriseInstall: isEnterpriseInstall, teamId: context.teamId, enterpriseId: context.enterpriseId, + userId: context.userId, }; - - this.installationStore.deleteInstallation(installQuery, this.logger); - // add logic to delete bot? + if (this.installationStore.deleteInstallation) { + this.installationStore.deleteInstallation(installQuery, this.logger); + /** + * deleteInstallation with enterprise/team_id + user_id -> delete only user tokens + deleteBot with enterprise/team_id -> delete only bot tokens + deleteAll with enterprise/team_id -> delete both bot and user tokens + */ + } else { + throw new Error( + `Custom InstallationStore must have deleteInstallation method implemented`, + ); + } } } From bf058dcfb2353469cd46beb5d9e07fb3bac41209 Mon Sep 17 00:00:00 2001 From: Ashley Huynh Date: Tue, 19 Nov 2024 09:54:53 -0500 Subject: [PATCH 6/6] string literal --- src/listener/builtin.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/listener/builtin.ts b/src/listener/builtin.ts index ebc18c67d..0528ee6d4 100644 --- a/src/listener/builtin.ts +++ b/src/listener/builtin.ts @@ -36,7 +36,7 @@ export class TokenRevocationListeners { */ } else { throw new Error( - `Custom InstallationStore must have deleteInstallation method implemented`, + 'Custom InstallationStore must have deleteInstallation method implemented', ); } } @@ -60,7 +60,7 @@ export class TokenRevocationListeners { */ } else { throw new Error( - `Custom InstallationStore must have deleteInstallation method implemented`, + 'Custom InstallationStore must have deleteInstallation method implemented', ); } }