import {z} from 'zod' export type DrmVersion = 0 | 1 | 2; export type EncodingTier = 0 | 1; export type AppleFairPlayDrmUpdateModel = {Enabled?: (boolean | null) | undefined}; export type WidevineMinClientSecurityLevel = 0 | 1 | 2 | 3; export type GoogleWidevineDrmUpdateModel = {Enabled?: (boolean | null) | undefined, SdOnlyForL3?: (boolean | null) | undefined, MinClientSecurityLevel?: (WidevineMinClientSecurityLevel | null) | undefined}; export type VideoGeoBlockingUpdateModel = {Enabled?: (boolean | null) | undefined, AllowedCountries?: (Array | null) | undefined, BlockedCountries?: (Array | null) | undefined}; export type VideoLibraryUpdateModel = {Name?: (string | null) | undefined, CustomHTML?: (string | null) | undefined, PlayerKeyColor?: (string | null) | undefined, EnableTokenAuthentication?: (boolean | null) | undefined, EnableTokenIPVerification?: (boolean | null) | undefined, ResetToken?: (boolean | null) | undefined, WatermarkPositionLeft?: (number | null) | undefined, WatermarkPositionTop?: (number | null) | undefined, WatermarkWidth?: (number | null) | undefined, WatermarkHeight?: (number | null) | undefined, EnabledResolutions?: (string | null) | undefined, ViAiPublisherId?: (string | null) | undefined, VastTagUrl?: (string | null) | undefined, WebhookUrl?: (string | null) | undefined, CaptionsFontSize?: (number | null) | undefined, CaptionsFontColor?: (string | null) | undefined, CaptionsBackground?: (string | null) | undefined, UILanguage?: (string | null) | undefined, AllowEarlyPlay?: (boolean | null) | undefined, PlayerTokenAuthenticationEnabled?: (boolean | null) | undefined, BlockNoneReferrer?: (boolean | null) | undefined, EnableMP4Fallback?: (boolean | null) | undefined, KeepOriginalFiles?: (boolean | null) | undefined, AllowDirectPlay?: (boolean | null) | undefined, EnableDRM?: (boolean | null) | undefined, DrmVersion?: (DrmVersion | null) | undefined, Controls?: (string | null) | undefined, PlaybackSpeeds?: (string | null) | undefined, Bitrate240p?: (number | null) | undefined, Bitrate360p?: (number | null) | undefined, Bitrate480p?: (number | null) | undefined, Bitrate720p?: (number | null) | undefined, Bitrate1080p?: (number | null) | undefined, Bitrate1440p?: (number | null) | undefined, Bitrate2160p?: (number | null) | undefined, ShowHeatmap?: (boolean | null) | undefined, EnableContentTagging?: (boolean | null) | undefined, FontFamily?: (string | null) | undefined, EnableTranscribing?: (boolean | null) | undefined, EnableTranscribingTitleGeneration?: (boolean | null) | undefined, EnableTranscribingDescriptionGeneration?: (boolean | null) | undefined, EnableTranscribingChaptersGeneration?: (boolean | null) | undefined, EnableTranscribingMomentsGeneration?: (boolean | null) | undefined, TranscribingCaptionLanguages?: (Array | null) | undefined, EnableCaptionsInPlaylist?: (boolean | null) | undefined, RememberPlayerPosition?: (boolean | null) | undefined, EnableMultiAudioTrackSupport?: (boolean | null) | undefined, UseSeparateAudioStream?: (boolean | null) | undefined, JitEncodingEnabled?: (boolean | null) | undefined, EncodingTier?: (EncodingTier | null) | undefined, OutputCodecs?: (string | null) | undefined, AppleFairPlayDrm?: (AppleFairPlayDrmUpdateModel | null) | undefined, GoogleWidevineDrm?: (GoogleWidevineDrmUpdateModel | null) | undefined, PlayerVersion?: (number | null) | undefined, RemoveMetadataFromFallbackVideos?: (boolean | null) | undefined, ScaleVideoUsingBothDimensions?: (boolean | null) | undefined, ExposeOriginals?: (boolean | null) | undefined, ExposeVideoMetadata?: (boolean | null) | undefined, EnableCompactControls?: (boolean | null) | undefined, GeoBlocking?: (VideoGeoBlockingUpdateModel | null) | undefined}; export type CreateApiVideolibraryIdArgs = {id: number, body: VideoLibraryUpdateModel}; export type CreateApiVideolibraryIdOptions = {baseUrl?: string | undefined, AccessKey?: string | undefined, fetch?: typeof fetch | undefined}; export const drmVersion = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const appleFairPlayDrm = z.object({Enabled: z.boolean().optional(), CertificateId: z.number().int().nullable().optional(), CertificateExpirationDate: z.string().nullable().optional(), Provider: z.string().nullable().optional()}); export const widevineMinClientSecurityLevel = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const googleWidevineDrm = z.object({Enabled: z.boolean().optional(), CertificateId: z.number().int().nullable().optional(), CertificateExpirationDate: z.string().nullable().optional(), Provider: z.string().nullable().optional(), SdOnlyForL3: z.boolean().optional(), MinClientSecurityLevel: widevineMinClientSecurityLevel.nullable().optional()}); export const pullZoneType = z.union([z.literal(0), z.literal(1)]); export const encodingTier = z.union([z.literal(0), z.literal(1)]); export const videoGeoBlocking = z.object({Enabled: z.boolean().optional(), AllowedCountries: z.array(z.string()).nullable().optional(), BlockedCountries: z.array(z.string()).nullable().optional()}); export const videoLibraryModel = z.object({Id: z.number().int().optional(), Name: z.string().nullable().optional(), VideoCount: z.number().int().optional(), LiveStreamCount: z.number().int().nullable().optional(), TotalCount: z.number().int().optional(), TrafficUsage: z.number().int().optional(), StorageUsage: z.number().int().optional(), DateCreated: z.string().optional(), DateModified: z.string().optional(), ReplicationRegions: z.array(z.string()).nullable().optional(), ApiKey: z.string().nullable().optional(), ReadOnlyApiKey: z.string().nullable().optional(), HasWatermark: z.boolean().optional(), WatermarkPositionLeft: z.number().int().optional(), WatermarkPositionTop: z.number().int().optional(), WatermarkWidth: z.number().int().optional(), PullZoneId: z.number().int().optional(), StorageZoneId: z.number().int().optional(), WatermarkHeight: z.number().int().optional(), EnabledResolutions: z.string().nullable().optional(), ViAiPublisherId: z.string().nullable().optional(), VastTagUrl: z.string().nullable().optional(), WebhookUrl: z.string().nullable().optional(), CaptionsFontSize: z.number().int().optional(), CaptionsFontColor: z.string().nullable().optional(), CaptionsBackground: z.string().nullable().optional(), UILanguage: z.string().nullable().optional(), AllowEarlyPlay: z.boolean().nullable().optional(), PlayerTokenAuthenticationEnabled: z.boolean().optional(), AllowedReferrers: z.array(z.string()).nullable().optional(), BlockedReferrers: z.array(z.string()).nullable().optional(), BlockNoneReferrer: z.boolean().optional(), EnableMP4Fallback: z.boolean().optional(), KeepOriginalFiles: z.boolean().optional(), AllowDirectPlay: z.boolean().optional(), EnableDRM: z.boolean().optional(), DrmVersion: drmVersion.optional(), AppleFairPlayDrm: appleFairPlayDrm.nullable().optional(), GoogleWidevineDrm: googleWidevineDrm.nullable().optional(), Bitrate240p: z.number().int().optional(), Bitrate360p: z.number().int().optional(), Bitrate480p: z.number().int().optional(), Bitrate720p: z.number().int().optional(), Bitrate1080p: z.number().int().optional(), Bitrate1440p: z.number().int().optional(), Bitrate2160p: z.number().int().optional(), ApiAccessKey: z.string().nullable().optional(), ShowHeatmap: z.boolean().optional(), EnableContentTagging: z.boolean().optional(), PullZoneType: pullZoneType.optional(), CustomHTML: z.string().nullable().optional(), Controls: z.string().nullable().optional(), PlaybackSpeeds: z.string().nullable().optional(), PlayerKeyColor: z.string().nullable().optional(), FontFamily: z.string().nullable().optional(), WatermarkVersion: z.number().int().optional(), EnableTranscribing: z.boolean().optional(), EnableTranscribingTitleGeneration: z.boolean().optional(), EnableTranscribingDescriptionGeneration: z.boolean().optional(), EnableTranscribingChaptersGeneration: z.boolean().optional(), EnableTranscribingMomentsGeneration: z.boolean().optional(), TranscribingCaptionLanguages: z.array(z.string()).nullable().optional(), EnableCaptionsInPlaylist: z.boolean().nullable().optional(), RememberPlayerPosition: z.boolean().optional(), EnableMultiAudioTrackSupport: z.boolean().optional(), UseSeparateAudioStream: z.boolean().optional(), JitEncodingEnabled: z.boolean().optional(), EncodingTier: encodingTier.optional(), OutputCodecs: z.string().nullable().optional(), DrmBasePriceOverride: z.number().nullable().optional(), DrmCostPerLicenseOverride: z.number().nullable().optional(), TranscribingPriceOverride: z.number().nullable().optional(), PremiumEncodingPriceOverride: z.number().nullable().optional(), MonthlyChargesTranscribing: z.number().optional(), MonthlyChargesPremiumEncoding: z.number().optional(), MonthlyChargesEnterpriseDrm: z.number().optional(), FeatureFlags: z.string().nullable().optional(), PlayerVersion: z.number().int().optional(), RemoveMetadataFromFallbackVideos: z.boolean().optional(), ScaleVideoUsingBothDimensions: z.boolean().optional(), ExposeOriginals: z.boolean().optional(), ExposeVideoMetadata: z.boolean().optional(), EnableCompactControls: z.boolean().optional(), GeoBlocking: videoGeoBlocking.nullable().optional()}); 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 }; /** * Update Video Library * * POST /videolibrary/{id} * * Also accepts auth: bearer */ export const createApiVideolibraryId = async (args: CreateApiVideolibraryIdArgs, options?: CreateApiVideolibraryIdOptions) => { const {baseUrl = "https://api.bunny.net", fetch: fetchFn = fetch, AccessKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (AccessKey !== undefined) headers.set("AccessKey", AccessKey) const url = `${baseUrl.replace(/\/+$/, '')}/videolibrary/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(videoLibraryModel, await res.json()) };