UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

106 lines (97 loc) 2.77 kB
import { AuthConfig } from '@auth/core' import { NodemailerConfig } from '@auth/core/providers/nodemailer' import { EventSchemas, GetEvents, GetFunctionInput, Handler, Inngest, InngestFunction, InngestMiddleware, } from 'inngest' import { MockCourseBuilderAdapter, type CourseBuilderAdapter, } from '../adapters' import { MockTranscriptionProvider, type TranscriptionConfig, } from '../providers' import { LlmProviderConfig, MockOpenAIProvider } from '../providers/openai' import { MockPartykitProvider, PartyProviderConfig, } from '../providers/partykit' import { mockSlackProvider, NotificationProviderConfig, } from '../providers/slack' import { MockStripeProvider } from '../providers/stripe' import { PaymentsProviderConfig } from '../types' import { CourseBuilderCoreEvents } from './index' export interface CoreInngestContext { db: CourseBuilderAdapter siteRootUrl: string transcriptProvider: TranscriptionConfig openaiProvider: LlmProviderConfig partyProvider: PartyProviderConfig paymentProvider?: PaymentsProviderConfig emailProvider?: NodemailerConfig notificationProvider?: NotificationProviderConfig getAuthConfig: () => AuthConfig mediaUploadProvider: { deleteFiles: (fileKey: string) => Promise<{ success: boolean }> } } export type CoreInngestFunctionInput = GetFunctionInput<CoreInngest> export type CoreInngestTrigger = InngestFunction.Trigger< keyof GetEvents<CoreInngest> > export type CoreInngestHandler = Handler.Any export const createInngestMiddleware = < TCourseBuilderContext extends CoreInngestContext = CoreInngestContext, >( context: TCourseBuilderContext, ) => { return new InngestMiddleware({ name: 'Course Builder Middleware', init() { return { onFunctionRun() { return { transformInput() { // kill me - this middleware is just for types type MappedCoreContext = { [K in keyof TCourseBuilderContext]: TCourseBuilderContext[K] } return { ctx: context as unknown as MappedCoreContext } }, } }, } }, }) } const schemas = new EventSchemas().fromRecord<CourseBuilderCoreEvents>() export const coreInngest = new Inngest({ id: 'core-inngest', schemas, middleware: [ createInngestMiddleware({ db: MockCourseBuilderAdapter, siteRootUrl: '', partyKitRootUrl: '', transcriptProvider: MockTranscriptionProvider, openaiProvider: MockOpenAIProvider, partyProvider: MockPartykitProvider, paymentProvider: MockStripeProvider, emailProvider: {} as NodemailerConfig, notificationProvider: mockSlackProvider, getAuthConfig: () => ({}) as AuthConfig, mediaUploadProvider: { deleteFiles: async (_) => Promise.resolve({ success: true }), }, }), ], }) export type CoreInngest = typeof coreInngest