/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v3"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { ClosedEnum } from "../../types/enums.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { RFCDate } from "../../types/rfcdate.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; /** * The dimension to group traffic data by. */ export const GetAnalyticsMediasMediaIdTrafficGroupBy = { UtmCampaign: "utm_campaign", UtmSource: "utm_source", UtmMedium: "utm_medium", ReferrerDomain: "referrer_domain", ViewerScreenSize: "viewer_screen_size", } as const; /** * The dimension to group traffic data by. */ export type GetAnalyticsMediasMediaIdTrafficGroupBy = ClosedEnum< typeof GetAnalyticsMediasMediaIdTrafficGroupBy >; /** * The metric to sort results by. */ export const GetAnalyticsMediasMediaIdTrafficSortBy = { Plays: "plays", Loads: "loads", EngagementRate: "engagement_rate", } as const; /** * The metric to sort results by. */ export type GetAnalyticsMediasMediaIdTrafficSortBy = ClosedEnum< typeof GetAnalyticsMediasMediaIdTrafficSortBy >; /** * The sort direction. */ export const GetAnalyticsMediasMediaIdTrafficSortDirection = { Asc: "asc", Desc: "desc", } as const; /** * The sort direction. */ export type GetAnalyticsMediasMediaIdTrafficSortDirection = ClosedEnum< typeof GetAnalyticsMediasMediaIdTrafficSortDirection >; export type GetAnalyticsMediasMediaIdTrafficRequest = { /** * The hashed ID of the video. */ mediaId: string; /** * Start date for the analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. */ startDate: RFCDate; /** * End date for the analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. */ endDate: RFCDate; /** * The dimension to group traffic data by. */ groupBy: GetAnalyticsMediasMediaIdTrafficGroupBy; /** * The metric to sort results by. */ sortBy?: GetAnalyticsMediasMediaIdTrafficSortBy | undefined; /** * The sort direction. */ sortDirection?: GetAnalyticsMediasMediaIdTrafficSortDirection | undefined; /** * Number of results to return (max 100). */ perPage?: number | undefined; }; /** * Each item contains the group_by field and associated metrics. */ export type GetAnalyticsMediasMediaIdTrafficResponse = { /** * The UTM campaign value (present when group_by is utm_campaign). */ utmCampaign?: string | undefined; /** * The UTM source value (present when group_by is utm_source). */ utmSource?: string | undefined; /** * The UTM medium value (present when group_by is utm_medium). */ utmMedium?: string | undefined; /** * The referrer domain (present when group_by is referrer_domain). */ referrerDomain?: string | undefined; /** * The viewer screen size (present when group_by is viewer_screen_size). */ viewerScreenSize?: string | undefined; /** * The number of video loads for this group. */ loads?: number | undefined; /** * The number of video plays for this group. */ plays?: number | undefined; /** * The average engagement rate for this group (between 0 and 1). */ engagementRate?: number | undefined; }; /** @internal */ export const GetAnalyticsMediasMediaIdTrafficGroupBy$outboundSchema: z.ZodNativeEnum = z .nativeEnum(GetAnalyticsMediasMediaIdTrafficGroupBy); /** @internal */ export const GetAnalyticsMediasMediaIdTrafficSortBy$outboundSchema: z.ZodNativeEnum = z.nativeEnum( GetAnalyticsMediasMediaIdTrafficSortBy, ); /** @internal */ export const GetAnalyticsMediasMediaIdTrafficSortDirection$outboundSchema: z.ZodNativeEnum = z .nativeEnum(GetAnalyticsMediasMediaIdTrafficSortDirection); /** @internal */ export type GetAnalyticsMediasMediaIdTrafficRequest$Outbound = { mediaId: string; start_date: string; end_date: string; group_by: string; sort_by: string; sort_direction: string; per_page: number; }; /** @internal */ export const GetAnalyticsMediasMediaIdTrafficRequest$outboundSchema: z.ZodType< GetAnalyticsMediasMediaIdTrafficRequest$Outbound, z.ZodTypeDef, GetAnalyticsMediasMediaIdTrafficRequest > = z.object({ mediaId: z.string(), startDate: z.instanceof(RFCDate).transform(v => v.toString()), endDate: z.instanceof(RFCDate).transform(v => v.toString()), groupBy: GetAnalyticsMediasMediaIdTrafficGroupBy$outboundSchema, sortBy: GetAnalyticsMediasMediaIdTrafficSortBy$outboundSchema.default( "plays", ), sortDirection: GetAnalyticsMediasMediaIdTrafficSortDirection$outboundSchema .default("desc"), perPage: z.number().int().default(100), }).transform((v) => { return remap$(v, { startDate: "start_date", endDate: "end_date", groupBy: "group_by", sortBy: "sort_by", sortDirection: "sort_direction", perPage: "per_page", }); }); export function getAnalyticsMediasMediaIdTrafficRequestToJSON( getAnalyticsMediasMediaIdTrafficRequest: GetAnalyticsMediasMediaIdTrafficRequest, ): string { return JSON.stringify( GetAnalyticsMediasMediaIdTrafficRequest$outboundSchema.parse( getAnalyticsMediasMediaIdTrafficRequest, ), ); } /** @internal */ export const GetAnalyticsMediasMediaIdTrafficResponse$inboundSchema: z.ZodType< GetAnalyticsMediasMediaIdTrafficResponse, z.ZodTypeDef, unknown > = z.object({ utm_campaign: z.string().optional(), utm_source: z.string().optional(), utm_medium: z.string().optional(), referrer_domain: z.string().optional(), viewer_screen_size: z.string().optional(), loads: z.number().int().optional(), plays: z.number().int().optional(), engagement_rate: z.number().optional(), }).transform((v) => { return remap$(v, { "utm_campaign": "utmCampaign", "utm_source": "utmSource", "utm_medium": "utmMedium", "referrer_domain": "referrerDomain", "viewer_screen_size": "viewerScreenSize", "engagement_rate": "engagementRate", }); }); export function getAnalyticsMediasMediaIdTrafficResponseFromJSON( jsonString: string, ): SafeParseResult< GetAnalyticsMediasMediaIdTrafficResponse, SDKValidationError > { return safeParse( jsonString, (x) => GetAnalyticsMediasMediaIdTrafficResponse$inboundSchema.parse( JSON.parse(x), ), `Failed to parse 'GetAnalyticsMediasMediaIdTrafficResponse' from JSON`, ); }