import {z} from 'zod' export type GetApiBrandGuidesBrandGuideIdArgs = {brand_guide_id: string, 'fields[brand_guides]'?: string | undefined}; export type GetApiBrandGuidesBrandGuideIdOptions = {baseUrl: string, OAuth2?: string | undefined, fetch?: typeof fetch | undefined}; export const brandGuideAttributes = z.object({schema_version: z.string().optional(), governance: z.object({updatedAt: z.string().optional(), updatedBy: z.string().nullable().optional(), sectionVersions: z.record(z.string(), z.number().int().gte(0)).optional()}).optional(), brand: z.object({name: z.string(), description: z.string(), defaultLanguage: z.string(), industry: z.string().nullable(), geographicFocus: z.string().nullable(), coverImage: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable()}).optional(), identity: z.object({vision: z.string().nullable(), mission: z.string().nullable(), purpose: z.string().nullable(), positioning: z.string().nullable(), values: z.array(z.object({id: z.string(), name: z.string(), description: z.string()})), keyMessages: z.array(z.object({id: z.string(), title: z.string(), message: z.string()})), audiences: z.array(z.object({id: z.string(), name: z.string(), description: z.string(), needs: z.array(z.string())}))}).optional(), voice: z.object({summary: z.string().nullable(), traits: z.array(z.object({id: z.string(), name: z.string(), meaning: z.string(), do: z.string(), avoid: z.string()})), formality: z.number().int().nullable(), sentenceStyle: z.string().nullable(), examples: z.array(z.object({id: z.string(), type: z.enum(["sounds_like_us", "not_like_us"]), text: z.string(), explanation: z.string()}))}).optional(), writing: z.object({preferredTerms: z.array(z.object({id: z.string(), term: z.string(), note: z.string()})), avoidTerms: z.array(z.object({id: z.string(), term: z.string(), alternative: z.string(), reason: z.string()})), forbiddenTerms: z.array(z.object({id: z.string(), term: z.string(), reason: z.string()})), namingRules: z.array(z.object({id: z.string(), rule: z.string(), example: z.string()})), formattingRules: z.array(z.object({id: z.string(), rule: z.string(), example: z.string().nullable()})), prohibitedClaims: z.array(z.string())}).optional(), visual_identity: z.object({colors: z.array(z.object({id: z.string(), name: z.string(), role: z.string(), description: z.string().nullable(), usage: z.string().nullable(), avoid: z.string().nullable(), values: z.object({hex: z.string(), rgb: z.array(z.number().int()), cmyk: z.array(z.number().int()).nullable(), pantone: z.string().nullable()}), token: z.object({id: z.string(), cssVariable: z.string()}).nullable()})), typography: z.object({usage: z.string().nullable(), families: z.array(z.object({id: z.string(), name: z.string(), role: z.string(), fallback: z.string(), description: z.string().nullable(), usage: z.string().nullable(), avoid: z.string().nullable(), source: z.enum(["google", "adobe", "system", "self_hosted"]), cssUrl: z.string().nullable(), styles: z.array(z.object({name: z.string(), weight: z.number().int(), style: z.enum(["normal", "italic"])})), files: z.array(z.object({fileId: z.number().int(), name: z.string(), extension: z.enum(["woff2", "woff", "otf", "ttf"]), sizeBytes: z.number().int(), weight: z.number().int(), style: z.enum(["normal", "italic"]), url: z.string(), weightMax: z.number().int().nullable().optional(), width: z.enum(["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"]).optional()})), token: z.object({id: z.string(), cssVariable: z.string()}).nullable()}))}), logos: z.array(z.object({id: z.string(), name: z.string(), role: z.string(), theme: z.enum(["light", "dark", "any"]), description: z.string().nullable(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}), minSize: z.object({digital: z.object({value: z.number(), unit: z.enum(["px", "mm"]), dimension: z.enum(["width", "height"])}).nullable(), print: z.object({value: z.number(), unit: z.enum(["px", "mm"]), dimension: z.enum(["width", "height"])}).nullable()}), clearSpace: z.object({value: z.number().nullable(), unit: z.enum(["logo_height", "logo_width", "element_height", "element_width", "px", "mm"]), description: z.string().nullable(), element: z.object({name: z.string().nullable(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}), heightRatio: z.number()}).nullable().optional()}).nullable(), approvedBackgroundColorIds: z.array(z.string()), rules: z.array(z.object({id: z.string(), type: z.enum(["do", "dont"]), text: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable().optional()}))})), icons: z.object({summary: z.string().nullable(), rules: z.array(z.object({id: z.string(), type: z.enum(["do", "dont"]), text: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable().optional()})), items: z.array(z.object({id: z.string(), name: z.string(), meaning: z.string(), category: z.string(), style: z.string().nullable(), keywords: z.array(z.string()), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()})}))}), imagery: z.object({summary: z.string().nullable(), keywords: z.array(z.string()), rules: z.array(z.object({id: z.string(), type: z.enum(["do", "dont"]), text: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable().optional()})), goodExamples: z.array(z.object({note: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()})})), avoidExamples: z.array(z.object({note: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()})}))}), customSections: z.array(z.object({id: z.string(), name: z.string(), icon: z.string().nullable(), summary: z.string().nullable(), items: z.array(z.object({id: z.string(), name: z.string(), role: z.string().nullable(), description: z.string().nullable(), specs: z.array(z.object({id: z.string(), label: z.string(), value: z.string()})), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable()})), rules: z.array(z.object({id: z.string(), type: z.enum(["do", "dont"]), text: z.string(), asset: z.object({fileId: z.number().int(), name: z.string().nullable().optional(), extension: z.string().nullable().optional(), previewUrl: z.string().nullable().optional(), cdnUrl: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}).nullable().optional()}))}))}).optional(), rules: z.array(z.object({id: z.string(), type: z.enum(["do", "dont", "rule"]), category: z.string(), title: z.string(), description: z.string()})).optional(), ai_instructions: z.object({systemGuidance: z.string().nullable(), uncertainty: z.enum(["ask", "safest_default", "return_unknown"]), uncertaintyNote: z.string().nullable(), assetSelection: z.string().nullable(), isBrandIsolated: z.boolean(), brandIsolationNote: z.string().nullable(), sourceReference: z.enum(["never", "when_requested", "always"])}).optional(), markdown: z.string().optional()}); export const brandGuide = z.object({id: z.string().optional(), type: z.literal("brand_guides").optional(), attributes: brandGuideAttributes.optional(), links: z.object({self: z.string().optional()}).optional()}); export const brandGuideResponse = z.object({data: brandGuide.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 }; /** * Returns a single brand guide * * GET /brand-guides/{brand_guide_id} */ export const getApiBrandGuidesBrandGuideId = async (args: GetApiBrandGuidesBrandGuideIdArgs, options: GetApiBrandGuidesBrandGuideIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, OAuth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/vnd.api+json") if (args['fields[brand_guides]'] != null) query.append("fields[brand_guides]", String(args['fields[brand_guides]'])) if (OAuth2 !== undefined) headers.set('authorization', `Bearer ${OAuth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/brand-guides/${encodeURIComponent(String(args.brand_guide_id))}${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(brandGuideResponse, await res.json()) };