import {z} from 'zod' export type MatterPermission = {accountId?: string | undefined, role?: ('ROLE_UNSPECIFIED' | 'COLLABORATOR' | 'OWNER') | undefined}; export type Matter = {description?: string | undefined, matterId?: string | undefined, matterPermissions?: Array | undefined, matterRegion?: ('MATTER_REGION_UNSPECIFIED' | 'ANY' | 'US' | 'EUROPE') | undefined, name?: string | undefined, state?: ('STATE_UNSPECIFIED' | 'OPEN' | 'CLOSED' | 'DELETED') | undefined}; export type UpdateApiV1MattersMatterIdArgs = {matterId: string, body: Matter}; export type UpdateApiV1MattersMatterIdOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const matterPermission = z.object({accountId: z.string().optional(), role: z.enum(["ROLE_UNSPECIFIED", "COLLABORATOR", "OWNER"]).optional()}); export const matter = z.object({description: z.string().optional(), matterId: z.string().optional(), matterPermissions: z.array(matterPermission).optional(), matterRegion: z.enum(["MATTER_REGION_UNSPECIFIED", "ANY", "US", "EUROPE"]).optional(), name: z.string().optional(), state: z.enum(["STATE_UNSPECIFIED", "OPEN", "CLOSED", "DELETED"]).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 }; /** * Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter. * * PUT /v1/matters/{matterId} */ export const updateApiV1MattersMatterId = async (args: UpdateApiV1MattersMatterIdArgs, options?: UpdateApiV1MattersMatterIdOptions) => { const {baseUrl = "https://vault.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/matters/${encodeURIComponent(String(args.matterId))}${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(matter, await res.json()) };