@whoof/infra
Version:
SST application factory functions for consistent patterns in Whop applications
73 lines (72 loc) • 1.66 kB
JavaScript
// 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
};