UNPKG

@vulog/aima-user

Version:

68 lines (59 loc) 2.03 kB
import { Client } from '@vulog/aima-client'; import { z } from 'zod'; import { User } from './types'; export type CreateUser = { userName: string; password: string; locale: string; email: string; dataPrivacyConsent?: boolean; profilingConsent?: boolean; marketingConsent?: boolean; phoneNumber?: string; }; export type CreateUserOptions = { tcApproval?: boolean; skipUserNotification?: boolean; }; const createUserSchema = z.object({ userName: z.string().min(1), password: z.string().min(1), locale: z.string().length(5), email: z.string().min(1).email(), dataPrivacyConsent: z.boolean().optional(), profilingConsent: z.boolean().optional(), marketingConsent: z.boolean().optional(), phoneNumber: z.string().optional(), }); const createUserOptionsSchema = z .object({ tcApproval: z.boolean().default(true), skipUserNotification: z.boolean().default(false), }) .default({ tcApproval: true, skipUserNotification: false, }); export const createUser = async (client: Client, user: CreateUser, option?: CreateUserOptions): Promise<User> => { const resultUser = createUserSchema.safeParse(user); if (!resultUser.success) { throw new TypeError('Invalid user', { cause: resultUser.error.issues, }); } const resultOptions = createUserOptionsSchema.safeParse(option); if (!resultOptions.success) { throw new TypeError('Invalid options', { cause: resultOptions.error.issues, }); } const searchParams = new URLSearchParams(); searchParams.append('tcApproval', resultOptions.data.tcApproval.toString()); searchParams.append('skipUserNotification', resultOptions.data.skipUserNotification.toString()); return client .post( `/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/userDefault?${searchParams.toString()}`, resultUser.data ) .then(({ data }) => data); };