/*
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
*/
import * as z from "zod/v4-mini";
import { remap as remap$ } from "../../lib/primitives.js";
import { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import {
ServiceGroupAccountAndServiceLevel,
ServiceGroupAccountAndServiceLevel$inboundSchema,
} from "./servicegroupaccountandservicelevel.js";
import {
ServiceGroupTypeEnum,
ServiceGroupTypeEnum$inboundSchema,
} from "./servicegrouptypeenum.js";
export type ServiceGroup = {
/**
* Description for the service group
*/
description: string;
/**
* String representation of an amount to be returned as the flat rate
*
* @remarks
* if 1. The service group is of type `LIVE_RATE` and no matching rates
* were found; or 2. The service group is of type `FLAT_RATE`. Either
* integers or decimals are accepted. Required unless type is
* `FREE_SHIPPING`
*/
flatRate?: string | undefined;
/**
* required unless type is `FREE_SHIPPING`. (ISO 4217 currency)
*/
flatRateCurrency?: string | undefined;
/**
* optional unless type is `FREE_SHIPPING`. (ISO 4217 currency)
*/
freeShippingThresholdCurrency?: string | undefined;
/**
* For service groups of type `FREE_SHIPPING`, this field must be required to configure the minimum
*
* @remarks
* cart total (total cost of items in the cart) for this service group to be returned for rates at
* checkout. Optional unless type is `FREE_SHIPPING`
*/
freeShippingThresholdMin?: string | undefined;
/**
* Name for the service group that will be shown to customers in the response
*/
name: string;
/**
* The amount in percent (%) that the service group's returned rate should be adjusted. For example, if this field is set to 5 and the matched rate price is $5.00, the returned value of the service group will be $5.25. Negative integers are also accepted and will discount the rate price by the defined percentage amount.
*/
rateAdjustment?: number | undefined;
/**
* The type of the service group.
*
* @remarks
* `LIVE_RATE` - Shippo will make a rating request and return real-time rates for the shipping group, only falling back to the specified flat rate amount if no rates match a service level in the service group.
* `FLAT_RATE` - Returns a shipping option with the specified flat rate amount.
* `FREE_SHIPPING` - Returns a shipping option with a price of $0 only if the total cost of items exceeds the amount defined by `free_shipping_threshold_min`
*/
type: ServiceGroupTypeEnum;
/**
* The unique identifier of the given Service Group object.
*/
objectId: string;
/**
* True if the service group is enabled, false otherwise.
*/
isActive?: boolean | undefined;
serviceLevels: Array;
};
/** @internal */
export const ServiceGroup$inboundSchema: z.ZodMiniType =
z.pipe(
z.object({
description: z.string(),
flat_rate: z.optional(z.string()),
flat_rate_currency: z.optional(z.string()),
free_shipping_threshold_currency: z.optional(z.string()),
free_shipping_threshold_min: z.optional(z.string()),
name: z.string(),
rate_adjustment: z.optional(z.int()),
type: ServiceGroupTypeEnum$inboundSchema,
object_id: z.string(),
is_active: z.optional(z.boolean()),
service_levels: z.array(ServiceGroupAccountAndServiceLevel$inboundSchema),
}),
z.transform((v) => {
return remap$(v, {
"flat_rate": "flatRate",
"flat_rate_currency": "flatRateCurrency",
"free_shipping_threshold_currency": "freeShippingThresholdCurrency",
"free_shipping_threshold_min": "freeShippingThresholdMin",
"rate_adjustment": "rateAdjustment",
"object_id": "objectId",
"is_active": "isActive",
"service_levels": "serviceLevels",
});
}),
);
export function serviceGroupFromJSON(
jsonString: string,
): SafeParseResult {
return safeParse(
jsonString,
(x) => ServiceGroup$inboundSchema.parse(JSON.parse(x)),
`Failed to parse 'ServiceGroup' from JSON`,
);
}