UNPKG

@whoof/infra

Version:

SST application factory functions for consistent patterns in Whop applications

73 lines (72 loc) 1.66 kB
// src/index.ts function createApp(options) { const { sst, aws, config, infra, version, environment, additionalLinks = [], appFunctionTransform, runMigrator = true } = options; const { vpc, db } = infra; const proxyPort = config.devPort; const upstreamPort = String(proxyPort + 1); const devStudioPort = String(proxyPort + 2); const app = new sst.aws.Nextjs(config.name, { link: [db, ...additionalLinks], domain: config.domain ? { name: config.domain } : undefined, vpc, path: config.path, environment, dev: { command: `whop-proxy --command 'next dev --turbopack -p ${upstreamPort}' --upstreamPort=${upstreamPort} --proxyPort=${proxyPort}` }, transform: appFunctionTransform }); const migrator = new sst.aws.Function(`migrator-${config.name}`, { handler: `${config.path}/lib/db/index.migrator`, link: [db], vpc, timeout: "1 minute", environment, copyFiles: [ { from: `${config.path}/lib/db/migrations`, to: `./migrations` } ] }); let invocation; if (runMigrator) { invocation = new aws.lambda.Invocation(`migrator-${config.name}-invocation`, { input: JSON.stringify({ version }), functionName: migrator.name }); } const studioCommand = new sst.x.DevCommand(`studio-${config.name}`, { link: [db], dev: { command: `bun drizzle-kit studio --port=${devStudioPort}` }, environment: { ...environment, APP: config.name } }); return { app, studioCommand, migrator, invocation }; } export { createApp };