mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-21 08:22:20 +02:00
37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
import { exactCentsSchema } from "../accounting.js";
|
|
import { z } from "zod";
|
|
import { AGENT_ADAPTER_TYPES, FINANCE_DIRECTIONS, FINANCE_EVENT_KINDS, FINANCE_UNITS } from "../constants.js";
|
|
|
|
export const createFinanceEventSchema = z.object({
|
|
idempotencyKey: z.string().trim().min(1).max(200).optional().nullable(),
|
|
agentId: z.string().guid().optional().nullable(),
|
|
issueId: z.string().guid().optional().nullable(),
|
|
projectId: z.string().guid().optional().nullable(),
|
|
goalId: z.string().guid().optional().nullable(),
|
|
heartbeatRunId: z.string().guid().optional().nullable(),
|
|
costEventId: z.string().guid().optional().nullable(),
|
|
billingCode: z.string().optional().nullable(),
|
|
description: z.string().max(500).optional().nullable(),
|
|
eventKind: z.enum(FINANCE_EVENT_KINDS),
|
|
direction: z.enum(FINANCE_DIRECTIONS).optional().default("debit"),
|
|
biller: z.string().min(1),
|
|
provider: z.string().min(1).optional().nullable(),
|
|
executionAdapterType: z.enum(AGENT_ADAPTER_TYPES).optional().nullable(),
|
|
pricingTier: z.string().min(1).optional().nullable(),
|
|
region: z.string().min(1).optional().nullable(),
|
|
model: z.string().min(1).optional().nullable(),
|
|
quantity: z.number().int().nonnegative().optional().nullable(),
|
|
unit: z.enum(FINANCE_UNITS).optional().nullable(),
|
|
amountCents: exactCentsSchema,
|
|
currency: z.string().regex(/^[A-Za-z]{3}$/).optional().default("USD"),
|
|
estimated: z.boolean().optional().default(false),
|
|
externalInvoiceId: z.string().optional().nullable(),
|
|
metadataJson: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
occurredAt: z.string().datetime(),
|
|
}).transform((value) => ({
|
|
...value,
|
|
currency: value.currency.toUpperCase(),
|
|
}));
|
|
|
|
export type CreateFinanceEvent = z.input<typeof createFinanceEventSchema>;
|