145 lines
5.1 KiB
JavaScript
145 lines
5.1 KiB
JavaScript
import { z } from 'zod';
|
|
import { DEFAULT_UUID, RegionCode } from './constants.js';
|
|
import { ZModule } from './modules.js';
|
|
export var ProfileLinkTypes;
|
|
(function (ProfileLinkTypes) {
|
|
// Socials
|
|
ProfileLinkTypes["DISCORD"] = "DISCORD";
|
|
ProfileLinkTypes["FACEBOOK"] = "FACEBOOK";
|
|
ProfileLinkTypes["INSTAGRAM"] = "INSTAGRAM";
|
|
ProfileLinkTypes["LINKEDIN"] = "LINKEDIN";
|
|
ProfileLinkTypes["MEDIUM"] = "MEDIUM";
|
|
ProfileLinkTypes["MESSENGER"] = "MESSENGER";
|
|
ProfileLinkTypes["PINTEREST"] = "PINTEREST";
|
|
ProfileLinkTypes["REDDIT"] = "REDDIT";
|
|
ProfileLinkTypes["TELEGRAM"] = "TELEGRAM";
|
|
ProfileLinkTypes["THREADS"] = "THREADS";
|
|
ProfileLinkTypes["TWITTER"] = "TWITTER";
|
|
ProfileLinkTypes["TIKTOK"] = "TIKTOK";
|
|
ProfileLinkTypes["SNAPCHAT"] = "SNAPCHAT";
|
|
ProfileLinkTypes["WHATSAPP"] = "WHATSAPP";
|
|
// Streaming
|
|
ProfileLinkTypes["AMAZON_MUSIC"] = "AMAZON_MUSIC";
|
|
ProfileLinkTypes["APPLE_MUSIC"] = "APPLE_MUSIC";
|
|
ProfileLinkTypes["BEATPORT"] = "BEATPORT";
|
|
ProfileLinkTypes["DEEZER"] = "DEEZER";
|
|
ProfileLinkTypes["SOUNDCLOUD"] = "SOUNDCLOUD";
|
|
ProfileLinkTypes["SPOTIFY"] = "SPOTIFY";
|
|
ProfileLinkTypes["TIDAL"] = "TIDAL";
|
|
ProfileLinkTypes["TWITCH"] = "TWITCH";
|
|
ProfileLinkTypes["YOUTUBE"] = "YOUTUBE";
|
|
ProfileLinkTypes["YOUTUBE_MUSIC"] = "YOUTUBE_MUSIC";
|
|
// Other
|
|
ProfileLinkTypes["AMAZON"] = "AMAZON";
|
|
ProfileLinkTypes["BANDSINTOWN"] = "BANDSINTOWN";
|
|
ProfileLinkTypes["EMAIL"] = "EMAIL";
|
|
ProfileLinkTypes["IMDB"] = "IMDB";
|
|
ProfileLinkTypes["SUBSTACK"] = "SUBSTACK";
|
|
ProfileLinkTypes["WEBSITE"] = "WEBSITE";
|
|
})(ProfileLinkTypes || (ProfileLinkTypes = {}));
|
|
export var ProfileTier;
|
|
(function (ProfileTier) {
|
|
ProfileTier[ProfileTier["TOP"] = -1] = "TOP";
|
|
ProfileTier[ProfileTier["TRIAL"] = 0] = "TRIAL";
|
|
ProfileTier[ProfileTier["STARTER"] = 1] = "STARTER";
|
|
ProfileTier[ProfileTier["PRO"] = 2] = "PRO";
|
|
ProfileTier[ProfileTier["MAX"] = 3] = "MAX";
|
|
})(ProfileTier || (ProfileTier = {}));
|
|
export const ZProfileLink = z.object({
|
|
link: z.string(),
|
|
localizationId: z.string().uuid().nullable().default(DEFAULT_UUID).optional(),
|
|
order: z.number().optional(),
|
|
profileId: z.string().uuid().optional(),
|
|
type: z.nativeEnum(ProfileLinkTypes),
|
|
versionId: z.string().uuid().optional()
|
|
});
|
|
export const ZProfileLinksBody = z.object({
|
|
links: z.array(ZProfileLink.omit({ localizationId: true, profileId: true }))
|
|
});
|
|
export const withProfileLinksBody = createZodValidator(ZProfileLinksBody);
|
|
function createZodValidator(zType) {
|
|
return (value) => {
|
|
const result = zType.safeParse(value);
|
|
if (result.success === true)
|
|
return {
|
|
success: true,
|
|
value: result.data
|
|
};
|
|
const error = result.error;
|
|
return {
|
|
issues: error.errors,
|
|
success: false
|
|
};
|
|
};
|
|
}
|
|
export var ThemeTypes;
|
|
(function (ThemeTypes) {
|
|
ThemeTypes["DARK"] = "DARK";
|
|
ThemeTypes["LIGHT"] = "LIGHT";
|
|
ThemeTypes["CUSTOM"] = "CUSTOM";
|
|
})(ThemeTypes || (ThemeTypes = {}));
|
|
export const ZTheme = z.object({
|
|
backgroundColor: z.string(),
|
|
localizationId: z.string().uuid(),
|
|
overlayColor: z.string(),
|
|
overlayOpacity: z.number(),
|
|
profileId: z.string().uuid(),
|
|
typographyColor: z.string(),
|
|
versionId: z.string().uuid().optional()
|
|
});
|
|
export const ZCreateThemeBody = z.object({
|
|
theme: ZTheme.omit({ localizationId: true, profileId: true }),
|
|
type: z.string()
|
|
});
|
|
export const ZRegion = z.object({
|
|
code: z.nativeEnum(RegionCode),
|
|
region: z.string().optional().nullable()
|
|
//currency: z.string() - Deprecated
|
|
});
|
|
export const ZProfileInfo = z.object({
|
|
categoryId: z.number(),
|
|
categoryName: z.string(),
|
|
createdVia: z.string(),
|
|
currency: z.string().default('gbp'),
|
|
isActive: z.boolean(),
|
|
isLocalizationEnabled: z.boolean(),
|
|
name: z.string(),
|
|
profileId: z.string().uuid(),
|
|
status: z.string()
|
|
});
|
|
export const ZMetaPixel = z.object({
|
|
conversionApiAccessToken: z.string(),
|
|
localizationId: z.string().uuid().default(DEFAULT_UUID).optional(),
|
|
pixelId: z.string(),
|
|
profileId: z.string().uuid()
|
|
});
|
|
export const ZLocalization = z.object({
|
|
avatar: z.string().nullable(),
|
|
avatarFilename: z.string().nullable(),
|
|
avatarRatio: z.number().nullable(),
|
|
displayName: z.string().nullable(),
|
|
displayNameImage: z.string().nullable(),
|
|
displayNameImageScale: z.string().nullable(),
|
|
displayNameType: z.string(),
|
|
id: z.string().uuid(),
|
|
isActive: z.boolean(),
|
|
isPublished: z.boolean().optional().nullable(),
|
|
metaPixel: ZMetaPixel.optional(),
|
|
name: z.string(),
|
|
privacyPolicyName: z.string().optional().nullable(),
|
|
privacyPolicyUrl: z.string().optional().nullable(),
|
|
profileId: z.string().uuid(),
|
|
showDisplayName: z.boolean(),
|
|
themeType: z.string(),
|
|
versionId: z.string().uuid().optional()
|
|
});
|
|
export const ZLocalizationBody = ZLocalization.partial();
|
|
export const ZFullProfileData = z.object({
|
|
handle: z.string(),
|
|
modules: z.array(ZModule),
|
|
profileInfo: ZProfileInfo.partial().extend({
|
|
localization: z.array(ZLocalization)
|
|
}),
|
|
tier: z.nativeEnum(ProfileTier).optional()
|
|
});
|