REVENUE SOURCE ADAPTER
revenue-source-adapter.ts
Read-only revenue interface with Stripe + Paddle reference implementations.
StarkWHAT THIS PATTERN TEACHES
How to build adapters for revenue sources that normalize different payment provider APIs into a common interface for treasury reporting.
WHEN TO USE THIS
Connecting Stripe, Paddle, Gumroad, or bank APIs to the treasury pipeline.
AT A GLANCE
interface RevenueAdapter {
getTransactions(since: Date): Promise<Transaction[]>
getBalance(): Promise<Cents>
getSubscriptionMRR(): Promise<Cents>
}FRAMEWORK IMPLEMENTATIONS
TypeScript
interface RevenueAdapter {
getTransactions(since: Date): Promise<Transaction[]>;
getBalance(): Promise<Cents>;
getSubscriptionMRR(): Promise<Cents>;
getName(): string;
}
class StripeAdapter implements RevenueAdapter {
constructor(private apiKey: string) {}
async getTransactions(since: Date) {
const charges = await stripe.charges.list({
created: { gte: Math.floor(since.getTime() / 1000) },
});
return charges.data.map(c => ({
id: c.id,
amount: c.amount as Cents,
type: "revenue" as const,
timestamp: new Date(c.created * 1000).toISOString(),
}));