SYMBOL INDEX (113 symbols across 19 files) FILE: migrations/001-initial-schema.sql type team (line 4) | CREATE TABLE team ( FILE: migrations/002-custom-points.sql type team_backup (line 12) | CREATE TEMPORARY TABLE team_backup(id, name, access_token, scope, user_id) type team (line 15) | CREATE TABLE team ( FILE: migrations/003-channel-settings.sql type channel_settings (line 4) | CREATE TABLE channel_settings ( type idx_channel_settings (line 12) | CREATE INDEX idx_channel_settings ON channel_settings (team_id, channel_id) FILE: src/app.ts constant PORT (line 15) | const PORT = process.env.PORT || 3000; constant BASE_PATH (line 16) | const BASE_PATH = process.env.BASE_PATH || '/'; constant SLACK_SCOPE (line 17) | const SLACK_SCOPE = 'commands,chat:write'; constant USE_REDIS (line 18) | const USE_REDIS = process.env.USE_REDIS?.toLowerCase() === 'true' || false; function main (line 20) | async function main() { function initServer (line 45) | async function initServer(): Promise { function initRoutes (line 71) | function initRoutes(server: express.Express) { FILE: src/lib/logger.ts type Severity (line 5) | type Severity = 'info' | 'warning' | 'error'; type Log (line 7) | type Log = { class Logger (line 13) | class Logger { method init (line 16) | public init() { method info (line 21) | public info(log: Log) { method warning (line 25) | public warning(log: Log) { method error (line 29) | public error(log: Log) { method log (line 33) | private log(log: Log & { level: Severity }) { function replacer (line 78) | function replacer(_key: string | Symbol, value: unknown) { FILE: src/lib/olay.ts function getOlay (line 5) | function getOlay() { FILE: src/lib/redis.ts function init (line 6) | async function init() { function getSingleton (line 24) | function getSingleton() { FILE: src/lib/sqlite.ts function init (line 8) | async function init() { function getSingleton (line 32) | function getSingleton() { FILE: src/lib/string-match-all.ts function matchAll (line 1) | function matchAll(str: string, regex: RegExp) { FILE: src/lib/to.ts function to (line 6) | async function to(promise: Promise): Promise<[Error, T]> { FILE: src/routes/interactivity.ts constant APP_INSTALL_LINK (line 28) | const APP_INSTALL_LINK = constant ISSUES_LINK (line 30) | const ISSUES_LINK = constant MAX_VOTING_DURATION (line 33) | const MAX_VOTING_DURATION = class InteractivityRoute (line 36) | class InteractivityRoute { method handle (line 42) | static async handle(req: express.Request, res: express.Response) { method interactiveMessage (line 109) | static async interactiveMessage({ method viewSubmission (line 512) | static async viewSubmission({ method submitNewSessionModal (line 581) | static async submitNewSessionModal({ method vote (line 996) | static async vote({ method revealSession (line 1078) | static async revealSession({ method cancelSession (line 1157) | static async cancelSession({ FILE: src/routes/oauth.ts constant ISSUES_LINK (line 8) | const ISSUES_LINK = class OAuthRoute (line 12) | class OAuthRoute { method handle (line 16) | static async handle(req: express.Request, res: express.Response) { FILE: src/routes/pp-command.ts constant APP_INSTALL_LINK (line 14) | const APP_INSTALL_LINK = constant ISSUES_LINK (line 16) | const ISSUES_LINK = class PPCommandRoute (line 20) | class PPCommandRoute { method handle (line 25) | static async handle(req: express.Request, res: express.Response) { method openNewSessionModal (line 75) | static async openNewSessionModal( method configure (line 251) | static async configure(cmd: ISlackCommandRequestBody, res: express.Res... method help (line 264) | static help(res: express.Response) { FILE: src/session/isession.ts type ISession (line 3) | interface ISession { FILE: src/session/session-controller.ts constant DEFAULT_POINTS (line 12) | const DEFAULT_POINTS = [ type SessionControllerErrorCode (line 28) | enum SessionControllerErrorCode { class SessionController (line 39) | class SessionController { method postMessage (line 44) | static async postMessage(session: ISession, team: ITeam) { method deleteMessage (line 55) | static async deleteMessage( method openModal (line 71) | static async openModal({ method revealAndUpdateMessage (line 270) | static async revealAndUpdateMessage( method cancelAndUpdateMessage (line 284) | static async cancelAndUpdateMessage( method vote (line 297) | static async vote( method updateMessage (line 343) | static async updateMessage(session: ISession, team: ITeam) { method getAverage (line 376) | static getAverage(votes: { [key: string]: string }): string | boolean { method isNumeric (line 386) | static isNumeric(n: any) { method extractTitle (line 403) | static extractTitle(formattedText: string) { function autoRevealEndedSessions (line 459) | async function autoRevealEndedSessions() { function buildMessageBlocks (line 507) | function buildMessageBlocks(session: ISession) { function buildMessageText (line 662) | function buildMessageText(session: ISession) { function buildMessageAttachments (line 717) | function buildMessageAttachments(session: ISession) { function stringReplaceRange (line 811) | function stringReplaceRange( FILE: src/session/session-model.ts constant USE_REDIS (line 5) | const USE_REDIS = process.env.USE_REDIS?.toLowerCase() === 'true' || false; constant REDIS_NAMESPACE (line 6) | const REDIS_NAMESPACE = process.env.REDIS_NAMESPACE || 'pp'; function getRedisKeyMatcher (line 11) | function getRedisKeyMatcher() { function buildRedisKey (line 15) | function buildRedisKey(sessionId: string) { function findById (line 27) | function findById(id: string): ISession { function restore (line 34) | async function restore(): Promise { function upsert (line 80) | function upsert(session: ISession) { function persist (line 96) | async function persist(sessionId: string) { function remove (line 131) | async function remove(id: string) { function getAllSessions (line 140) | function getAllSessions() { FILE: src/team/team-model.ts type ITeam (line 3) | interface ITeam { type ChannelSettingKey (line 12) | enum ChannelSettingKey { type IChannelSetting (line 20) | interface IChannelSetting { class TeamStore (line 27) | class TeamStore { method findById (line 28) | static async findById(id: string): Promise { method create (line 33) | private static async create({ method update (line 58) | private static async update({ method upsert (line 88) | static async upsert({ method fetchSettings (line 104) | static async fetchSettings(teamId: string, channelId: string) { method upsertSettings (line 129) | static async upsertSettings( method upsertSetting (line 145) | static async upsertSetting( FILE: src/vendor/olay-node-client.ts type CustomClientAddEventMessageData (line 6) | type CustomClientAddEventMessageData = { type CustomClientUpdateMetadataMessageData (line 12) | type CustomClientUpdateMetadataMessageData = { type WebSocketMessageType (line 17) | enum WebSocketMessageType { type WebSocketMessage (line 24) | type WebSocketMessage = { type ReconnectingWebSocketError (line 36) | enum ReconnectingWebSocketError { type ReconnectingWebSocketOptions (line 40) | type ReconnectingWebSocketOptions = { class ReconnectingWebSocket (line 47) | class ReconnectingWebSocket { method constructor (line 58) | constructor(options: ReconnectingWebSocketOptions) { method createNewWebSocket (line 71) | private createNewWebSocket() { method onWebSocketOpen (line 79) | private onWebSocketOpen(ev: ws.Event) { method onWebSocketMessage (line 84) | private onWebSocketMessage(ev: ws.MessageEvent) { method onWebSocketClose (line 88) | private onWebSocketClose(ev: ws.CloseEvent) { method onWebSocketError (line 106) | private onWebSocketError(ev: ws.ErrorEvent) { method send (line 116) | async send(data: string) { type NodeClientOptions (line 138) | type NodeClientOptions = { class NodeClient (line 143) | class NodeClient { method constructor (line 147) | constructor(options: NodeClientOptions) { method onConnected (line 156) | private onConnected() { method send (line 165) | private send(message: WebSocketMessage) { method updateMetadata (line 176) | updateMetadata(sessionId: string, metadata: { [key: string]: unknown }... method addEvent (line 187) | addEvent( FILE: src/vendor/slack-api-interfaces.ts type ISlackCommandRequestBody (line 5) | interface ISlackCommandRequestBody { type IInteractiveMessageActionPayload (line 110) | interface IInteractiveMessageActionPayload { type IViewSubmissionActionPayload (line 243) | interface IViewSubmissionActionPayload {