import {z} from 'zod' export type UpdateProjectionDataTableDto = {tableStructureId?: (number | null) | undefined, tableStructureName?: (string | null) | undefined, dataTableId?: (number | null) | undefined, dataTableName?: (string | null) | undefined, dataTableVersion?: (number | null) | undefined}; export type FileReferenceDto = {fileId?: (number | null) | undefined, filePath?: (string | null) | undefined, fileVersion?: (number | null) | undefined, delimiter?: (string | null) | undefined, excelSheetName?: (string | null) | undefined}; export type UpdateProjectionProductDto = {id?: (number | null) | undefined, name?: (string | null) | undefined, modelPointFile?: FileReferenceDto | undefined, modelPointFilters?: ({[key: string]: string | null} | null) | undefined}; export type UpdateProjectionPortfolioDto = {id?: (number | null) | undefined, name?: (string | null) | undefined, products?: (Array | null) | undefined}; export type UpdateProjectionRequestV1 = {name?: (string | null) | undefined, scenarioTableId?: (number | null) | undefined, scenarioSubset?: (string | null) | undefined, startDate?: (string | null) | undefined, periodInMonths?: (number | null) | undefined, outputAllResults?: (boolean | null) | undefined, disableModelPointOutput?: (boolean | null) | undefined, forceStaticProcessing?: (boolean | null) | undefined, numberOfCores?: (number | null) | undefined, validateModelPointFiles?: (boolean | null) | undefined, dataTables?: (Array | null) | undefined, portfolios?: (Array | null) | undefined, virtualFolders?: (Array | null) | undefined, tags?: (Array | null) | undefined, isLocked?: (boolean | null) | undefined}; export type PatchApiApiV1ProjectionsProjectionIdArgs = {projectionId: number, body: UpdateProjectionRequestV1}; export type PatchApiApiV1ProjectionsProjectionIdOptions = {baseUrl: string, APIToken?: string | undefined, fetch?: typeof fetch | undefined}; export const projectionRunStatus = z.enum(["NotStarted", "Running", "Completed", "Failed", "Queued", "Cancelled", "CompletedWithErrors", "ErrorLimitReached", "WaitingForInserts", "Queuing", "Deleting", "Preparing", "FailedToStart", "Validating", "ValidationFailed", "CompletedWithWarnings"]); export const projectionArchivalStatusV1 = z.enum(["Unarchived", "Archived", "Unarchiving"]); export const getProjectionModelV1 = z.object({id: z.number().int().optional(), name: z.string().nullable().optional()}); export const productType = z.enum(["Asset", "Liability"]); export const fileReferenceDto = z.object({fileId: z.number().int().nullable().optional(), filePath: z.string().nullable().optional(), fileVersion: z.number().int().nullable().optional(), delimiter: z.string().nullable().optional(), excelSheetName: z.string().nullable().optional()}); export const getProjectionProductModelPointFilterV1 = z.object({field: z.string().nullable().optional(), value: z.string().nullable().optional()}); export const getProjectionPortfolioProductV1 = z.object({id: z.number().int().optional(), productId: z.number().int().nullable().optional(), name: z.string().nullable().optional(), productType: productType.optional(), modelPointFile: fileReferenceDto.optional(), filters: z.array(getProjectionProductModelPointFilterV1).nullable().optional(), productOutputGroupings: z.array(z.number().int()).nullable().optional()}); export const getProjectionPortfolioV1 = z.object({id: z.number().int().optional(), name: z.string().nullable().optional(), productOutputGroupings: z.array(z.number().int()).nullable().optional(), products: z.array(getProjectionPortfolioProductV1).nullable().optional()}); export const getProjectionDataTableV1 = z.object({tableStructureId: z.number().int().nullable().optional(), tableStructureName: z.string().nullable().optional(), dataTableId: z.number().int().nullable().optional(), dataTableName: z.string().nullable().optional(), dataTableVersionNumber: z.number().int().nullable().optional(), isRequired: z.boolean().optional()}); export const getProjectionResponseV1 = z.object({id: z.number().int().optional(), name: z.string().nullable().optional(), status: projectionRunStatus.optional(), isRunning: z.boolean().optional(), startDate: z.string().optional(), periodInMonths: z.number().int().optional(), runStartDateUtc: z.string().nullable().optional(), runCompletedDateUtc: z.string().nullable().optional(), outputAllResults: z.boolean().optional(), disableModelPointOutput: z.boolean().optional(), forceStaticProcessing: z.boolean().optional(), isLocked: z.boolean().optional(), archivalStatus: projectionArchivalStatusV1.optional(), numberOfCores: z.number().int().optional(), scenarioTableId: z.number().int().nullable().optional(), model: getProjectionModelV1.optional(), portfolios: z.array(getProjectionPortfolioV1).nullable().optional(), virtualFolders: z.array(z.string()).nullable().optional(), tags: z.array(z.string()).nullable().optional(), dataTables: z.array(getProjectionDataTableV1).nullable().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 projection properties. * * PATCH /api/v1/Projections/{projectionId} */ export const patchApiApiV1ProjectionsProjectionId = async (args: PatchApiApiV1ProjectionsProjectionIdArgs, options: PatchApiApiV1ProjectionsProjectionIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, APIToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (APIToken !== undefined) headers.set('authorization', `Bearer ${APIToken}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/Projections/${encodeURIComponent(String(args.projectionId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(getProjectionResponseV1, await res.json()) };