import {z} from 'zod' export type CreateApiStakeholderCommsCloudIdCloudIdApiPagesPageIdUnpublishArgs = {pageId: string}; export type CreateApiStakeholderCommsCloudIdCloudIdApiPagesPageIdUnpublishOptions = {baseUrl?: string | undefined, basicAuth?: {username: string, password: string} | undefined, fetch?: typeof fetch | undefined}; export const stakeholderCommsSeoConfig = z.object({enabled: z.boolean().optional(), title: z.string().optional(), description: z.string().optional(), keywords: z.string().optional()}); export const stakeholderCommsBodyConfig = z.object({uptimeStyle: z.enum(["DETAIL_CARD", "ONLY_STATUS"]).optional(), overallUptimeDisplay: z.boolean().optional(), overallUptimeRange: z.number().int().optional(), enableSearchAndFilter: z.boolean().optional(), componentStyle: z.enum(["CARD", "TABLE"]).optional(), numberOfCardsPerRow: z.number().int().optional(), componentUptimeDisplay: z.boolean().optional(), componentUptimeRange: z.number().int().optional()}); export const stakeholderCommsLink = z.object({label: z.string().optional(), url: z.string().optional(), position: z.number().int().optional()}); export const stakeholderCommsFooterData = z.object({footerLogoId: z.string().optional(), footerText: z.string().optional(), copyrightText: z.string().optional(), links: z.array(stakeholderCommsLink).optional()}); export const stakeholderCommsHeaderData = z.object({coverImageId: z.string().optional(), headerLogoId: z.string().optional(), faviconIconId: z.string().optional(), headerText: z.string().optional(), coverImageImmersive: z.boolean().optional(), links: z.array(stakeholderCommsLink).optional()}); export const stakeholderCommsColours = z.object({cssBodyBackgroundColor: z.string().optional(), cssFontColor: z.string().optional(), cssLightFontColor: z.string().optional(), cssGreenColor: z.string().optional(), cssYellowColor: z.string().optional(), cssOrangeColor: z.string().optional(), cssRedColor: z.string().optional(), cssBorderColor: z.string().optional(), cssGraphColor: z.string().optional(), cssLinkColor: z.string().optional(), cssBlueColor: z.string().optional(), cssNoDataColor: z.string().optional()}); export const stakeholderCommsCustomDomainRecord = z.object({id: z.string().optional(), purpose: z.string().optional(), type: z.string().optional(), name: z.string().optional(), value: z.string().optional(), currentValue: z.string().optional(), status: z.enum(["VERIFIED", "PENDING", "FAILED", "SKIPPED"]).optional(), message: z.string().optional()}); export const stakeholderCommsCustomDomainRecordType = z.object({name: z.string().optional(), description: z.string().optional(), records: z.array(stakeholderCommsCustomDomainRecord).optional()}); export const stakeholderCommsCustomDomainConfig = z.object({domain: z.string().optional(), sslStatus: z.enum(["NOT_CONFIGURED", "PENDING", "ISSUED", "FAILED", "EXPIRED", "DEPROVISIONING"]).optional(), recordTypes: z.array(stakeholderCommsCustomDomainRecordType).optional(), certificateExpiresAt: z.string().optional()}); export const stakeholderCommsPage = z.object({id: z.string().optional(), name: z.string().optional(), subdomain: z.string().optional(), domain: z.string().optional(), version: z.number().int().optional(), url: z.string().optional(), description: z.string().optional(), timezone: z.string().optional(), privacyPolicyUrl: z.string().optional(), helpCenterUrl: z.string().optional(), cloudId: z.string().optional(), deletedAt: z.string().optional(), unpublishedAt: z.string().optional(), components: z.array(z.string()).optional(), pageTheme: z.enum(["BLANK", "ALL_SYSTEMS_GLOW", "CLEAR_SKIES", "UP_AND_RUNNING"]).optional(), pageThemeMode: z.enum(["LIGHT", "DARK"]).optional(), seoConfig: stakeholderCommsSeoConfig.optional(), googleAnalyticsEnabled: z.boolean().optional(), statusEmbedEnabled: z.boolean().optional(), allowPageSubscribers: z.boolean().optional(), activityScore: z.number().int().optional(), hiddenFromSearch: z.boolean().optional(), googleAnalyticsTrackingId: z.string().optional(), allowRssAtomFields: z.boolean().optional(), blackHole: z.boolean().optional(), createdBy: z.string().optional(), externalAccounts: z.array(z.string()).optional(), bodyConfig: stakeholderCommsBodyConfig.optional(), footerData: stakeholderCommsFooterData.optional(), headerData: stakeholderCommsHeaderData.optional(), colours: stakeholderCommsColours.optional(), customCss: z.string().optional(), customHeaderHtml: z.string().optional(), customFooterHtml: z.string().optional(), pageType: z.enum(["PUBLIC", "PRIVATE"]).optional(), pageStatus: z.enum(["DRAFT", "PUBLISHED", "UNPUBLISHED", "PUBLISHED_WITH_CHANGES", "UNPUBLISHED_WITH_CHANGES", "SOFT_DELETED"]).optional(), customDomainConfig: stakeholderCommsCustomDomainConfig.optional(), createdAt: z.string().optional(), updatedAt: z.string().optional()}); export const stakeholderCommsPageResponse = z.object({page: stakeholderCommsPage.optional(), error: z.string().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 }; /** * Unpublish page * * POST /stakeholder-comms/cloudId/{cloudId}/api/pages/{pageId}/unpublish * * Also accepts auth: OAuth2 */ export const createApiStakeholderCommsCloudIdCloudIdApiPagesPageIdUnpublish = async (args: CreateApiStakeholderCommsCloudIdCloudIdApiPagesPageIdUnpublishArgs, options?: CreateApiStakeholderCommsCloudIdCloudIdApiPagesPageIdUnpublishOptions) => { const {baseUrl = "https://api.atlassian.com/jsm/ops", fetch: fetchFn = fetch, basicAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (basicAuth !== undefined) headers.set('authorization', `Basic ${btoa(`${basicAuth.username}:${basicAuth.password}`)}`) const url = `${baseUrl.replace(/\/+$/, '')}/stakeholder-comms/cloudId/${encodeURIComponent(String(args.cloudId))}/api/pages/${encodeURIComponent(String(args.pageId))}/unpublish${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(stakeholderCommsPageResponse, await res.json()) };