Skip to content

Commit

Permalink
implement extensions framework
Browse files Browse the repository at this point in the history
  • Loading branch information
techpixel committed Apr 17, 2024
1 parent 006407e commit a98f81e
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/app.ts
@@ -1,6 +1,7 @@
import bolt from '@slack/bolt';
import { PrismaClient } from '@prisma/client';
import { IntervalManager } from './utils/intervalManager.js';
import { ExtensionsManager } from './utils/extensions.js';
import { Environment, Constants } from './constants.js';

export const app = new bolt.App({
Expand All @@ -23,4 +24,6 @@ export const prisma = new PrismaClient();
export const minuteInterval = new IntervalManager(Constants.MIN_MS);
export const hourInterval = new IntervalManager(Constants.HOUR_MS);

hourInterval.setDelay(Constants.HOUR_MS - Date.now() % Constants.HOUR_MS);
hourInterval.setDelay(Constants.HOUR_MS - Date.now() % Constants.HOUR_MS);

export const extensions = new ExtensionsManager();
2 changes: 1 addition & 1 deletion src/subroutines/hackhour.ts
@@ -1,4 +1,4 @@
import { app, prisma, minuteInterval, hourInterval } from '../app.js';
import { app, prisma, minuteInterval, extensions } from '../app.js';
import { Commands, Environment } from '../constants.js';

import { Callbacks, Views, Actions } from '../views/hackhour.js';
Expand Down
34 changes: 34 additions & 0 deletions src/utils/extensions.ts
@@ -0,0 +1,34 @@
export type ExtensionArgs = {
slackId?: string,
sessionTs?: string,
}

export type Extension = {
onStart: ((args: ExtensionArgs) => void) | null,
onError: ((args: ExtensionArgs) => void) | null,
userCreated: ((args: ExtensionArgs) => void) | null,
sessionStarted: ((args: ExtensionArgs) => void) | null,
sessionCancelled: ((args: ExtensionArgs) => void) | null,
sessionCompleted: ((args: ExtensionArgs) => void) | null,
}

export type ExtensionFunc = keyof Extension;

class ExtensionsManagerInner {
private extensions: Extension[] = [];

public attach(extension: Extension): void {
this.extensions.push(extension);
}

public getExtensions(): Extension[] {
return this.extensions;
}
}

export const ExtensionsManager = new Proxy(new ExtensionsManagerInner(),
{
get: function(target, prop, receiver) {
return target.getExtensions();
}
});

0 comments on commit a98f81e

Please sign in to comment.