@vulog/aima-user
Version:
68 lines (59 loc) • 2.03 kB
text/typescript
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);
};