import {z} from 'zod' export type StatusPageSubscriberNotificationTemplateUpdateSchema = {templateName?: string | undefined, templateDescription?: string | undefined, eventType?: ('Subscriber Subscription Confirmation' | 'Subscriber Subscribed' | 'Subscriber Manage Subscription' | 'Subscriber Incident Created' | 'Subscriber Incident State Changed' | 'Subscriber Incident Note Created' | 'Subscriber Incident Note Updated' | 'Subscriber Incident Postmortem Published' | 'Subscriber Episode Created' | 'Subscriber Episode State Changed' | 'Subscriber Episode Note Created' | 'Subscriber Episode Note Updated' | 'Subscriber Announcement Created' | 'Subscriber Announcement Updated' | 'Subscriber Scheduled Maintenance Created' | 'Subscriber Scheduled Maintenance State Changed' | 'Subscriber Scheduled Maintenance Note Created' | 'Subscriber Scheduled Maintenance Note Updated' | 'Subscriber Report') | undefined, notificationMethod?: ('Email' | 'SMS' | 'Slack' | 'Microsoft Teams' | 'Webhook') | undefined, emailSubject?: string | undefined, templateBody?: string | undefined}; export type UpdateApiStatusPageSubscriberNotificationTemplateIdArgs = {id: string, body: {data: StatusPageSubscriberNotificationTemplateUpdateSchema}}; export type UpdateApiStatusPageSubscriberNotificationTemplateIdOptions = {baseUrl?: string | undefined, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const statusPageSubscriberNotificationTemplateReadSchema = z.object({_id: z.string().optional(), createdAt: z.object({}).optional(), updatedAt: z.object({}).optional(), deletedAt: z.object({}).optional(), projectId: z.string().optional(), templateName: z.string(), templateDescription: z.string().optional(), eventType: z.enum(["Subscriber Subscription Confirmation", "Subscriber Subscribed", "Subscriber Manage Subscription", "Subscriber Incident Created", "Subscriber Incident State Changed", "Subscriber Incident Note Created", "Subscriber Incident Note Updated", "Subscriber Incident Postmortem Published", "Subscriber Episode Created", "Subscriber Episode State Changed", "Subscriber Episode Note Created", "Subscriber Episode Note Updated", "Subscriber Announcement Created", "Subscriber Announcement Updated", "Subscriber Scheduled Maintenance Created", "Subscriber Scheduled Maintenance State Changed", "Subscriber Scheduled Maintenance Note Created", "Subscriber Scheduled Maintenance Note Updated", "Subscriber Report"]), notificationMethod: z.enum(["Email", "SMS", "Slack", "Microsoft Teams", "Webhook"]), emailSubject: z.string().optional(), templateBody: z.string(), createdByUserId: z.string().optional()}); export const updateApiStatusPageSubscriberNotificationTemplateIdResponse = z.object({data: statusPageSubscriberNotificationTemplateReadSchema.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 Subscriber Notification Template * * PUT /status-page-subscriber-notification-template/{id} */ export const updateApiStatusPageSubscriberNotificationTemplateId = async (args: UpdateApiStatusPageSubscriberNotificationTemplateIdArgs, options?: UpdateApiStatusPageSubscriberNotificationTemplateIdOptions) => { const {baseUrl = "https://oneuptime.com/api", fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (ApiKey !== undefined) headers.set("APIKey", ApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/status-page-subscriber-notification-template/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", 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(updateApiStatusPageSubscriberNotificationTemplateIdResponse, await res.json()) };