import {z} from 'zod' export type GetApiVideolibraryArgs = {page?: number | undefined, perPage?: number | undefined, search?: (string | null) | undefined}; export type GetApiVideolibraryOptions = {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 paginationListModelOfVideoLibraryModel = z.object({Items: z.array(videoLibraryModel).nullable().optional(), CurrentPage: z.number().int().optional(), TotalItems: z.number().int().optional(), HasMoreItems: z.boolean().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 }; /** * List Video Libraries * * GET /videolibrary * * Also accepts auth: bearer */ export const getApiVideolibrary = async (args: GetApiVideolibraryArgs, options?: GetApiVideolibraryOptions) => { const {baseUrl = "https://api.bunny.net", fetch: fetchFn = fetch, AccessKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.page != null) query.append("page", String(args.page)) if (args.perPage != null) query.append("perPage", String(args.perPage)) if (args.search != null) query.append("search", String(args.search)) if (AccessKey !== undefined) headers.set("AccessKey", AccessKey) const url = `${baseUrl.replace(/\/+$/, '')}/videolibrary${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(paginationListModelOfVideoLibraryModel, await res.json()) };