import {z} from 'zod' export type GetApiV2510BetaExperiencesListArgs = {category?: ('experiment' | 'personalization') | undefined, module?: ('content' | 'checkout' | 'postPurchase' | 'pricing' | 'merchandising' | 'shipping') | undefined, status?: ('pending' | 'started' | 'ended' | 'paused') | undefined, limit?: number | undefined, page?: number | undefined}; export type GetApiV2510BetaExperiencesListOptions = {baseUrl?: string | undefined, intelligemsAccessToken?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV2510BetaExperiencesListResponse = z.object({experiencesList: z.array(z.object({archivedAtTs: z.number().nullable().optional(), audience: z.object({id: z.string(), experienceId: z.string(), enabled: z.boolean(), excludeCurrency: z.object({exclude: z.boolean(), currency: z.string().nullable(), country: z.string().optional(), region: z.string().optional(), city: z.string().optional()}), wholesale: z.boolean(), audienceType: z.enum(["common", "custom", "advanced"]).optional(), elseAction: z.enum(["experienceInclude", "experienceExclude", "experienceUnassigned", "assignVariation", "randomVariation", "leaveUnassigned"]).nullable(), elseVariationId: z.string().nullable().optional(), elseExcludeFromAnalytics: z.boolean(), filters: z.array(z.object({id: z.string(), priority: z.number().int().gte(-9007199254740991).lte(9007199254740991), action: z.enum(["experienceInclude", "experienceExclude", "experienceUnassigned", "assignVariation", "randomVariation", "leaveUnassigned"]).nullable(), filterType: z.enum(["utm", "url", "urlPath", "device", "visitor", "purchaseLikelihood", "jsExpression", "trafficSource", "country", "referrer", "cookie", "klaviyo", "landingPage"]), expression: z.array(z.object({query: z.object({key: z.string(), value: z.string(), filter: z.enum(["equals", "contains", "startsWith", "endsWith", "doesNotEqual", "doesNotContain", "doesNotStartWith", "doesNotEndWith", "isNull", "isNotNull", "regex"]).nullable().optional(), type: z.enum(["utm", "url", "urlPath", "device", "visitor", "purchaseLikelihood", "jsExpression", "trafficSource", "country", "referrer", "cookie", "klaviyo", "landingPage"])}).optional(), operator: z.enum(["and", "or", "start_paren", "end_paren"]).optional()})).nullable().optional(), expressionType: z.enum(["common", "custom"]).nullable().optional(), variationId: z.string().nullable().optional(), excludeFromAnalytics: z.boolean()})), evaluationFrequency: z.number().nullable().optional()}).nullable().optional(), category: z.enum(["experiment", "personalization"]), createdAtTs: z.number(), currency: z.object({code: z.string(), country: z.string().optional(), options: z.unknown(), symbol: z.string(), suffix: z.string().optional()}).nullable().optional(), description: z.string().nullable().optional(), devicePreview: z.object({device: z.enum(["any", "mobile", "desktop"]), path: z.string()}).nullable().optional(), endedAtTs: z.number().nullable(), experienceActions: z.array(z.object({id: z.string(), experienceId: z.string(), action: z.enum(["start", "pause", "end", "delete", "reset"]), actionTs: z.number(), performedBy: z.string().nullable().optional()})), experiencePageTargeting: z.array(z.object({id: z.string(), filter: z.enum(["equals", "contains", "startsWith", "endsWith", "doesNotEqual", "doesNotContain", "doesNotStartWith", "doesNotEndWith", "isNull", "isNotNull", "regex"]).nullable().optional(), filterType: z.enum(["utm", "url", "device", "visitor", "jsExpression", "trafficSource", "country", "referrer", "cookie"]), value: z.string(), order: z.number(), expression: z.array(z.object({query: z.object({key: z.string(), value: z.string(), filter: z.enum(["equals", "contains", "startsWith", "endsWith", "doesNotEqual", "doesNotContain", "doesNotStartWith", "doesNotEndWith", "isNull", "isNotNull", "regex"]).nullable().optional(), type: z.enum(["utm", "url", "urlPath", "device", "visitor", "purchaseLikelihood", "jsExpression", "trafficSource", "country", "referrer", "cookie", "klaviyo", "landingPage"])}).optional(), operator: z.enum(["and", "or", "start_paren", "end_paren"]).optional()})).nullable().optional(), experienceId: z.string().optional()})), experienceProductTargeting: z.array(z.object({id: z.string(), experienceId: z.string(), target: z.enum(["productPage", "productCard"]), expression: z.array(z.object({query: z.object({key: z.enum(["productId", "collection", "tag", "price", "inventory"]), value: z.union([z.string(), z.number()]), filter: z.enum(["includes", "doesNotInclude", "greaterThan", "lessThan"]), type: z.enum(["productId", "collection", "tag", "price", "inventory"])}).optional(), operator: z.enum(["and", "or", "start_paren", "end_paren"]).optional()})).nullable().optional()})), id: z.string(), isDeleted: z.boolean().optional(), isExternal: z.boolean().nullable().optional(), isPreview: z.boolean(), lastUpdateTs: z.number(), linkBaseUrl: z.string().nullable(), name: z.string(), organizationId: z.string(), pausedAtTs: z.number().nullable(), productVariantCount: z.number(), requiresLink: z.boolean(), sourceAction: z.enum(["duplicate", "rollout"]).nullable().optional(), sourceExperienceId: z.string().nullable().optional(), startedAtTs: z.number().nullable(), status: z.enum(["pending", "started", "ended", "paused"]), testTypes: z.object({hasTestPricing: z.boolean(), hasTestShipping: z.boolean(), hasTestCampaign: z.boolean(), hasTestContent: z.boolean(), hasTestContentUrl: z.boolean(), hasTestContentAdvanced: z.boolean(), hasTestContentOnsite: z.boolean(), hasTestContentTemplate: z.boolean(), hasTestContentTheme: z.boolean(), hasTestOnsiteInjections: z.boolean(), hasTestCheckoutBlocks: z.boolean(), hasTestPostPurchase: z.boolean(), hasTestOnsiteUpsell: z.boolean()}), type: z.enum(["content/advanced", "content/onsiteEdits", "content/url", "content/theme", "content/template", "personalization", "personalization/offer", "pricing", "checkoutBlock", "postPurchase", "onsiteUpsell", "shipping", "sitewide"]), hasSchedule: z.boolean(), history: z.array(z.object({id: z.string(), userId: z.string().nullable().optional(), user: z.object({id: z.string(), firstName: z.string().nullable().optional(), lastName: z.string().nullable().optional(), email: z.string(), organizationId: z.string(), isBlocked: z.boolean(), passwordResetRequired: z.boolean(), showInfoPopup: z.boolean(), userAlerts: z.object({showAnalyticsReleaseDialog: z.boolean().optional(), showPersonalizationsDialog: z.boolean().optional(), showPersonalizationMigrateBanner: z.boolean().optional(), showWrappedDialog: z.boolean().optional(), showOpportunityAuditWelcome: z.boolean().optional(), showSavedRecommendationNotice: z.boolean().optional(), unseenOnDashboard: z.boolean().optional()}).nullable().optional(), showWelcome: z.boolean(), preferredName: z.string().nullable().optional(), preferredEmail: z.string().nullable().optional(), installer: z.boolean(), companyRole: z.string().nullable().optional(), previousExperience: z.string().nullable().optional()}).nullable().optional(), experienceId: z.string().nullable().optional(), action: z.enum(["startExperience", "pauseExperience", "endExperience", "saveExperience", "deleteExperience", "enableCampaign", "disableCampaign", "saveCampaign", "archiveCampaign", "confirmIntegration", "duplicateExperience", "rolloutExperience", "archiveExperience", "unArchiveExperience", "resetExperience"]), source: z.enum(["internal", "external", "mcp", "shared_link"]).nullable().optional(), lastUpdateTs: z.number(), createdAtTs: z.number()})), previewPath: z.string(), variations: z.array(z.object({id: z.string(), experienceId: z.string(), name: z.string(), percentage: z.number(), isControl: z.boolean(), order: z.number().int().gte(-9007199254740991).lte(9007199254740991), functionSyncError: z.boolean(), testExperienceId: z.string().nullable().optional(), offerId: z.string().nullable().optional(), redirects: z.array(z.object({id: z.string(), group: z.number(), variationId: z.string(), originUrl: z.string(), destinationUrl: z.string().nullable().optional(), queryParams: z.array(z.object({key: z.string(), value: z.string()})), skip: z.boolean(), isThemeTest: z.boolean(), isTemplateTest: z.boolean(), templateType: z.enum(["404", "", "article", "blog", "cart", "collection", "index", "list-collections", "page", "password", "product", "search"]).nullable().optional(), templateSuffixes: z.array(z.string()).nullable(), redirectOnce: z.boolean(), filter: z.enum(["matchesExactly", "contains", "endsWith", "matchesRegex", "none"]), find: z.string().nullable().optional(), redirectType: z.enum(["fullReplacement", "partialReplacement"])})).optional(), checkoutBlockTypes: z.array(z.enum(["trustBadge", "upsell", "shippingProgressBar", "timer", "faqs", "postPurchaseUpsell"])).optional(), offerDiscountApplicationType: z.enum(["tieredDiscount", "cartDiscount", "freeGift", "freeShipping", "buyXGetY", ""]).nullable().optional(), offerDiscountApplicationMethod: z.enum(["perItem", "perOrder"]).nullable().optional(), offerShippingUnitDiscount: z.number().nullable().optional()})), experienceAnalysis: z.object({analyticsViewType: z.enum(["test_orders_only", "sitewide_orders", "none"])}).nullable()})), page: z.number(), limit: z.number(), total: z.number(), totalPages: z.number()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * List experiences * * GET /v25-10-beta/experiences-list */ export const getApiV2510BetaExperiencesList = async (args: GetApiV2510BetaExperiencesListArgs, options?: GetApiV2510BetaExperiencesListOptions) => { const {baseUrl = "https://api.intelligems.io", fetch: fetchFn = fetch, intelligemsAccessToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.category != null) query.append("category", String(args.category)) if (args.module != null) query.append("module", String(args.module)) if (args.status != null) query.append("status", String(args.status)) if (args.limit != null) query.append("limit", String(args.limit)) if (args.page != null) query.append("page", String(args.page)) if (intelligemsAccessToken !== undefined) headers.set("intelligems-access-token", intelligemsAccessToken) const url = `${baseUrl.replace(/\/+$/, '')}/v25-10-beta/experiences-list${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiV2510BetaExperiencesListResponse, await res.json()) };