Initial import of zappier-edge from zapier monorepo

This commit is contained in:
George Lambert 2026-09-11 16:18:17 -04:00
commit 6a9cc4fca9
129 changed files with 20656 additions and 0 deletions

40
src/statement.ts Normal file
View file

@ -0,0 +1,40 @@
import { CreditAdjustment } from './credits';
import { Invoice } from './invoicing';
import { UsageEntry } from './usage';
export function composeStatement(args: {
customerId: string;
veraeUserId?: string;
prepaidCents: number;
credits: CreditAdjustment[];
usage: UsageEntry[];
invoices: Invoice[];
}) {
const payments = args.invoices
.filter((i) => i.customerId === args.customerId && (i.status === 'paid' || i.status === 'issued'))
.map((i) => ({
id: i.id,
customerId: i.customerId,
cents: i.billableCents,
kind: i.status === 'paid' ? 'invoice-paid' : 'invoice-issued',
reason: i.period,
at: new Date(i.paidAtMs || i.issuedAtMs || Date.now()).toISOString(),
}));
return {
customerId: args.customerId,
veraeUserId: args.veraeUserId,
prepaidCents: args.prepaidCents,
credits: args.credits.filter((c) => c.customerId === args.customerId),
usage: args.usage
.filter((u) => u.customerId === args.customerId)
.slice(-50)
.reverse()
.map((u) => ({
customerId: u.customerId,
endpointId: u.endpointId,
cents: u.cents,
at: u.timestamp.toISOString(),
})),
payments,
};
}