SPACEBROWSER_INTERFACE/interface_base/@komi-app/meta-profiles/dist/esm/modules.js
2025-08-07 20:28:59 -04:00

151 lines
6.5 KiB
JavaScript

import { z } from 'zod';
import { DEFAULT_UUID } from './constants.js';
import { v4 as uuidv4 } from 'uuid';
var ShopifyProvider;
(function (ShopifyProvider) {
ShopifyProvider["KOMI"] = "komi";
ShopifyProvider["RYE"] = "rye";
})(ShopifyProvider || (ShopifyProvider = {}));
//Massaging done temporarily
export var TemporarySupportedModuleType;
(function (TemporarySupportedModuleType) {
//Old spelling of DCA modules, currently using DATA_CAPTURE_SIGNUP
TemporarySupportedModuleType["DATA_CAPTURE_SIGN_UP"] = "DATA_CAPTURE_SIGN_UP";
//These modules should be massaged in frontend before sending to us
TemporarySupportedModuleType["RYE_SHOPIFY_COLLECTION"] = "RYE_SHOPIFY_COLLECTION";
TemporarySupportedModuleType["RYE_SHOPIFY_PRODUCT"] = "RYE_SHOPIFY_PRODUCT";
})(TemporarySupportedModuleType || (TemporarySupportedModuleType = {}));
//FIXME: remove this after data migration is done
//Older modules that is no longer supported / in use
export var RetiredModuleType;
(function (RetiredModuleType) {
RetiredModuleType["RYE_SHOPIFY"] = "RYE_SHOPIFY";
RetiredModuleType["SHOPIFY"] = "SHOPIFY";
RetiredModuleType["ON_DEMAND_VIDEO"] = "ON_DEMAND_VIDEO";
RetiredModuleType["EXPERIENCE"] = "EXPERIENCE";
RetiredModuleType["FAN_CLUB"] = "FAN_CLUB";
RetiredModuleType["YOUTUBE"] = "YOUTUBE";
RetiredModuleType["MULTIPLE_YOUTUBE_VIDEO"] = "MULTIPLE_YOUTUBE_VIDEO";
})(RetiredModuleType || (RetiredModuleType = {}));
export var ModuleType;
(function (ModuleType) {
ModuleType["LINK"] = "LINK";
ModuleType["EXPERIENCE"] = "EXPERIENCE";
ModuleType["ON_DEMAND_VIDEO"] = "ON_DEMAND_VIDEO";
ModuleType["PRODUCT"] = "PRODUCT";
ModuleType["MUSIC"] = "MUSIC";
ModuleType["YOUTUBE_VIDEO"] = "YOUTUBE_VIDEO";
ModuleType["PODCAST"] = "PODCAST";
ModuleType["FAN_CLUB"] = "FAN_CLUB";
ModuleType["SHOPIFY"] = "SHOPIFY";
ModuleType["SHOPIFY_PRODUCT"] = "SHOPIFY_PRODUCT";
ModuleType["SHOPIFY_COLLECTION"] = "SHOPIFY_COLLECTION";
ModuleType["RYE_SHOPIFY"] = "RYE_SHOPIFY";
ModuleType["RYE_SHOPIFY_PRODUCT"] = "RYE_SHOPIFY_PRODUCT";
ModuleType["RYE_SHOPIFY_COLLECTION"] = "RYE_SHOPIFY_COLLECTION";
ModuleType["BANDSINTOWN"] = "BANDSINTOWN";
ModuleType["SHOP_MY_SHELF"] = "SHOP_MY_SHELF";
ModuleType["SHOP_LIST"] = "SHOP_LIST";
ModuleType["EVENTS"] = "EVENTS";
ModuleType["FORM_DATA"] = "FORM_DATA";
ModuleType["GROUP"] = "GROUP";
ModuleType["YOUTUBE_COLLECTION"] = "YOUTUBE_COLLECTION";
ModuleType["YOUTUBE"] = "YOUTUBE";
ModuleType["PODCAST_AUTOMATION"] = "PODCAST_AUTOMATION";
ModuleType["PODCAST_SELECT"] = "PODCAST_SELECT";
ModuleType["SEATED"] = "SEATED";
ModuleType["DATA_CAPTURE_SIGNUP"] = "DATA_CAPTURE_SIGNUP";
ModuleType["DATA_CAPTURE_SECRET_LINK"] = "DATA_CAPTURE_SECRET_LINK";
ModuleType["DATA_CAPTURE_COUPON_CODE"] = "DATA_CAPTURE_COUPON_CODE";
ModuleType["TIKTOK_VIDEO"] = "TIKTOK_VIDEO";
ModuleType["YOUTUBE_SHORT"] = "YOUTUBE_SHORT";
ModuleType["MEDIA_GALLERY"] = "MEDIA_GALLERY";
ModuleType["INSTAGRAM_REEL"] = "INSTAGRAM_REEL";
ModuleType["TEXT"] = "TEXT";
ModuleType["MAIL_LINK"] = "MAIL_LINK";
ModuleType["THRONE_LINK"] = "THRONE_LINK";
ModuleType["PAYPAL_LINK"] = "PAYPAL_LINK";
ModuleType["VENMO_LINK"] = "VENMO_LINK";
ModuleType["CASHAPP_LINK"] = "CASHAPP_LINK";
ModuleType["PATREON_LINK"] = "PATREON_LINK";
ModuleType["SPECIAL_OFFER_LINK"] = "SPECIAL_OFFER_LINK";
ModuleType["CONTACT_FORM"] = "CONTACT_FORM";
ModuleType["AFFILIATE"] = "AFFILIATE";
ModuleType["DIGITAL_PRODUCT"] = "DIGITAL_PRODUCT";
ModuleType["FREE_DOWNLOAD"] = "FREE_DOWNLOAD";
ModuleType["PAID_DOWNLOAD"] = "PAID_DOWNLOAD";
ModuleType["INSTAGRAM_AUTOMATION"] = "INSTAGRAM_AUTOMATION";
ModuleType["TIKTOK_AUTOMATION"] = "TIKTOK_AUTOMATION";
})(ModuleType || (ModuleType = {}));
export const ZModule = z
.object({
//Legacy uses "groupId", new service uses "parentId"
groupId: z.string().uuid().default(DEFAULT_UUID).optional().nullable(),
id: z.string().uuid().optional(),
items: z.array(z.any()),
localizationId: z
.string()
.uuid()
.nullable()
.default(DEFAULT_UUID)
.optional(),
//Legacy uses "name", new service uses "title"
name: z.string().optional().nullable(),
order: z.number(),
parentId: z.string().uuid().default(DEFAULT_UUID).optional().nullable(),
profileId: z.string().uuid().optional(),
showTitle: z.boolean().default(true),
// Was this module created from a template and has not been edited?
// Will be set to false once the user changes the template content
template: z.boolean().default(false),
title: z.string().optional().nullable(),
//FIXME: remove this after data migration is done
// type: z.nativeEnum(ModuleType),
type: z
.nativeEnum(ModuleType)
.or(z.nativeEnum(TemporarySupportedModuleType))
.or(z.nativeEnum(RetiredModuleType)),
versionId: z.string().uuid().optional(),
visible: z.boolean().default(true)
})
//If value assigned for groupId / name (from legacy)
//Convert them into new keys
.transform(({ id, groupId, items, type, name, ...rest }) => ({
groupId: groupId || null,
//For modules with no uuid, create one
id: id || uuidv4(),
//FIXME: Convert Rye shopify modules into normal shopify modules
//Remove these code after massaging has been integrated in other services
//If it is RYE_* module, assign provider = 'rye'
items: type.includes('RYE_')
? items.map(item => ({ ...item, provider: ShopifyProvider.RYE }))
: //If it is not RYE_* but it is a shopify module, assign provider = 'komi'
type.includes('SHOPIFY')
? items.map(item => ({ ...item, provider: ShopifyProvider.KOMI }))
: //Else do nothing
items,
//
title: name,
//If it is RYE_* module, remove the rye prefix
type: (type.includes('RYE_')
? type.replace('RYE_', '')
: //If it uses the old name (DATA_CAPTURE_SIGN_UP), format it
type === TemporarySupportedModuleType.DATA_CAPTURE_SIGN_UP
? ModuleType.DATA_CAPTURE_SIGNUP
: type),
...rest
}));
export const ZModulesBody = z.object({
modules: z.array(ZModule)
});
export const ShopifyStoreTypes = [
ModuleType.SHOPIFY,
ModuleType.SHOPIFY_COLLECTION,
ModuleType.SHOPIFY_PRODUCT
];
export const RyeShopifyStoreTypes = [
ModuleType.RYE_SHOPIFY,
ModuleType.RYE_SHOPIFY_COLLECTION,
ModuleType.RYE_SHOPIFY_PRODUCT
];