import {z} from 'zod' export type GetApiVendorsVendorIdOrderTemplatesOrderTemplateIdArgs = {'X-LC-Tenant': string, Authorization: string, fields?: string | undefined}; export type GetApiVendorsVendorIdOrderTemplatesOrderTemplateIdOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const translationServiceType = z.object({id: z.string(), name: z.string().optional()}); export const folderPath = z.object({id: z.string(), name: z.string(), location: z.string().optional(), hasParent: z.boolean().nullable().optional()}); export const folderV2 = z.object({id: z.string(), name: z.string().optional(), hasParent: z.boolean().nullable().optional(), path: z.array(folderPath).optional()}); export const pricingUnitType = z.enum(["words", "characters"]); export const fuzzyMatchCategory = z.object({minimumMatchValue: z.number().int().nullable(), maximumMatchValue: z.number().int().nullable()}); export const fuzzyMatch = z.object({price: z.number(), category: fuzzyMatchCategory}); export const languageCostType = z.enum(["volume", "hourly", "percentage", "perPage", "conditional", "adhoc", "adhocVolume"]); export const volumeUnitType = z.enum(["words", "characters", "custom"]); export const conditionalCostType = z.enum(["absolute", "relative", "percentage"]); export const conditionalCostOperator = z.enum(["less", "lessOrEqual", "greater", "greaterOrEqual"]); export const conditionalCostVariable = z.enum(["wordCount", "runningTotal"]); export const languageCost = z.object({name: z.string(), type: languageCostType, index: z.number(), costPerUnit: z.number(), unitCount: z.number(), volumeUnitType: volumeUnitType.optional(), conditionalCostType: conditionalCostType.optional(), costOperator: conditionalCostOperator.optional(), costVariable: conditionalCostVariable.optional(), operand: z.number().optional(), serviceTypes: z.array(z.string()).optional(), customUnitName: z.string().optional()}); export const languageDirectionCost = z.object({sourceLanguage: z.string(), targetLanguage: z.string(), contextMatch: z.number().optional(), exactMatch: z.number().optional(), new: z.number().optional(), perfectMatch: z.number().optional(), repetition: z.number().optional(), machineTranslation: z.number().optional(), pricingUnit: pricingUnitType.optional(), fuzzyMatches: z.array(fuzzyMatch).optional(), additionalCosts: z.array(languageCost).optional()}); export const projectCostType = z.enum(["volume", "perTargetLanguage", "perFile", "hourly", "percentage", "perPage", "conditional", "adhoc", "adhocVolume"]); export const projectCost = z.object({name: z.string(), type: projectCostType, index: z.number(), costPerUnit: z.number(), unitCount: z.number(), volumeUnitType: volumeUnitType.optional(), conditionalCostType: conditionalCostType.optional(), costOperator: conditionalCostOperator.optional(), costVariable: conditionalCostVariable.optional(), operand: z.number().optional(), serviceTypes: z.array(z.string()).optional(), customUnitName: z.string().optional()}); export const pricingModel = z.object({id: z.string(), name: z.string().optional(), description: z.string().optional(), currencyCode: z.string().optional(), location: folderV2.optional(), languageDirectionPricing: z.array(languageDirectionCost).optional(), additionalCosts: z.array(projectCost).optional()}); export const votQuoteBehaviour = z.enum(["waitForAllFiles", "perFileQuote", "finalQuoteAfterBatchCompleted", "quoteBeforeCustomerQuoteGeneration"]); export const vendorOrderTemplateQuoteConfiguration = z.object({behaviour: votQuoteBehaviour, holdingDelay: z.number().int().gte(1).optional()}); export const customField = z.object({id: z.string(), name: z.string().optional(), key: z.string().optional(), value: z.object({}).optional()}); export const languagePair = z.object({source: z.string(), target: z.string()}); export const account = z.object({id: z.string(), name: z.string().optional()}); export const permissionEntityType = z.object({name: z.string(), description: z.string()}); export const permission = z.object({name: z.string(), description: z.string(), category: z.string(), entityType: permissionEntityType, dependsOn: z.array(z.string())}); export const role = z.object({id: z.string(), type: z.enum(["provisioned", "custom"]), name: z.string(), description: z.string().optional(), permissions: z.array(permission).optional()}); export const groupAdditionalRoles = z.object({location: folderV2, roles: z.array(role)}); export const group = z.object({id: z.string(), name: z.string().optional(), description: z.string().optional(), location: folderV2.optional(), users: z.array(z.lazy(() => user)).optional(), roles: z.array(role).optional(), additionalRoles: z.array(groupAdditionalRoles).optional(), groupType: z.enum(["default", "custom", "vendor", "customer"]).optional(), metadata: z.unknown()}); export const userType = z.enum(["user", "serviceUser"]); export const userStatus = z.enum(["inactive", "active", "deleted", "provisioned"]); export const accountMembershipType = z.enum(["member", "collaborator"]); export const user: z.ZodType = z.object({id: z.string(), description: z.string().optional(), email: z.string().optional(), name: z.string().optional(), firstName: z.string().optional(), lastName: z.string().optional(), anonymized: z.boolean().nullable().optional(), anonymizedUserName: z.string().optional(), account: account.optional(), location: folderV2.optional(), groups: z.array(group).optional(), userType: userType.optional(), status: userStatus.optional(), invitationLink: z.string().optional(), membership: accountMembershipType.optional(), metadata: z.unknown()}); export const votPersonResponse = z.object({type: z.enum(["user", "group"]), user: user.optional(), group: group.optional()}); export const votConfigurationResponse = z.object({languagePair: languagePair, managers: z.array(votPersonResponse), assignees: z.array(votPersonResponse)}); export const vendorOrderTemplateResponse = z.object({id: z.string(), name: z.string(), description: z.string().optional(), allowQuoteEditing: z.boolean().optional(), serviceTypes: z.array(translationServiceType).optional(), pricingModel: pricingModel.optional(), quoteConfiguration: vendorOrderTemplateQuoteConfiguration.optional(), customFields: z.array(customField).optional(), languagePairs: z.array(languagePair).optional(), assignments: z.array(votConfigurationResponse).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 }; /** * Get Vendor Order Template * * GET /vendors/{vendorId}/order-templates/{orderTemplateId} */ export const getApiVendorsVendorIdOrderTemplatesOrderTemplateId = async (args: GetApiVendorsVendorIdOrderTemplatesOrderTemplateIdArgs, options?: GetApiVendorsVendorIdOrderTemplatesOrderTemplateIdOptions) => { const {baseUrl = "https://api.eu.cloud.trados.com/public-api/v1", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['X-LC-Tenant'] != null) headers.set("X-LC-Tenant", String(args['X-LC-Tenant'])) if (args.Authorization != null) headers.set("Authorization", String(args.Authorization)) if (args.fields != null) query.append("fields", String(args.fields)) const url = `${baseUrl.replace(/\/+$/, '')}/vendors/${encodeURIComponent(String(args.vendorId))}/order-templates/${encodeURIComponent(String(args.orderTemplateId))}${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(vendorOrderTemplateResponse, await res.json()) };