@vulog/aima-billing
Version:
37 lines (30 loc) • 1.21 kB
text/typescript
import { Client } from '@vulog/aima-client';
import z from 'zod';
import type { Credit } from './types';
interface Payload
extends Omit<Credit, 'id' | 'availableAmount' | 'usedAmount' | 'originId' | 'creditAlreadyUsed' | 'updateDate'> {}
const schema = z.object({
initialAmount: z.number().min(0),
validityStartDate: z.string().datetime(),
validityEndDate: z.string().datetime(),
notes: z.string().trim().nullable().optional(),
discountCategory: z.enum(['CREDITS', 'PERCENTAGE']),
oneTimeUsage: z.boolean().optional(),
entityId: z.string().trim().min(1).uuid(),
type: z.enum(['LOCAL', 'GLOBAL', 'PERIODIC']),
usage: z.enum(['TRIP', 'REGISTRATION', 'PRODUCTS', 'ALL']),
});
export const addCredits = async (client: Client, payload: Payload): Promise<Credit> => {
const result = schema.safeParse(payload);
if (!result.success) {
throw new TypeError('Invalid args', {
cause: result.error.issues,
});
}
return client
.post<Credit>(
`/boapi/proxy/billing/fleets/${client.clientOptions.fleetId}/entities/${payload.entityId}/wallets`,
result.data
)
.then(({ data }) => data);
};