UNPKG

@vulog/aima-promocode

Version:

Promo codes and referral system — validate, submit, and query promo/referral codes.

63 lines (62 loc) 2.55 kB
import { z } from "zod"; //#region src/checkInvitationCode.ts const checkInvitationCode = async (client, referralCode) => { const result = z.string().trim().min(1).safeParse(referralCode); if (!result.success) throw new TypeError("Invalid referralCode", { cause: result.error.issues }); return client.get(`boapi/proxy/user/fleets/${client.clientOptions.fleetId}/invitation/check/${referralCode}`).then(({ data }) => data).catch((error) => { if (error.formattedError?.status === 404) return; throw error; }); }; //#endregion //#region src/getPromoCode.ts const getPromoCodeByReference = async (client, reference) => { const result = z.string().trim().min(1).safeParse(reference); if (!result.success) throw new TypeError("Invalid reference", { cause: result.error.issues }); return client.get(`boapi/proxy/billing/fleets/${client.clientOptions.fleetId}/promoCodes?reference=${reference}`).then(({ data: [r] }) => r); }; const getPromoCodeById = async (client, id) => { const result = z.number().positive().safeParse(id); if (!result.success) throw new TypeError("Invalid id", { cause: result.error.issues }); return client.get(`boapi/proxy/billing/fleets/${client.clientOptions.fleetId}/promoCodes/${id}`).then(({ data }) => data).catch((error) => { if (error.formattedError?.status === 404) return; throw error; }); }; //#endregion //#region src/submitPromoCode.ts const schema$1 = z.object({ userId: z.string().uuid(), entityId: z.string().uuid(), code: z.string().min(1) }); const submitPromoCode = async (client, userId, entityId, code) => { const result = schema$1.safeParse({ userId, entityId, code }); if (!result.success) throw new TypeError("Invalid args", { cause: result.error.issues }); return client.put(`boapi/proxy/user/billing/fleets/${client.clientOptions.fleetId}/promoCodes/redeem/${code}`, { userId, entityId }).then(({ data }) => data); }; //#endregion //#region src/submitReferral.ts const schema = z.object({ userId: z.string().uuid(), entityId: z.string().uuid(), code: z.string().min(1) }); const submitReferral = async (client, userId, entityId, code) => { const result = schema.safeParse({ userId, entityId, code }); if (!result.success) throw new TypeError("Invalid args", { cause: result.error.issues }); await client.post(`boapi/proxy/user/fleets/${client.clientOptions.fleetId}/invitation/users/${userId}/entity/${entityId}/redeem/${code}`); }; //#endregion export { checkInvitationCode, getPromoCodeById, getPromoCodeByReference, submitPromoCode, submitReferral };