lib/client/services/lineItem/lineItem.struct.ts (117 lines of code) (raw):
import {
array,
boolean,
number,
object,
optional,
string,
type Describe,
} from "superstruct";
import type { LineItem } from "./lineItem.type";
import { DateTimeStruct } from "../../../common/types";
import {
CustomPacingCurveStruct,
LineItemActivityAssociationStruct,
LineItemDealInfoDtoStruct,
} from "../../common/types/lineItemSummary.type";
import {
StatsStruct,
MoneyStruct,
AppliedLabelStruct,
ThirdPartyMeasurementSettingsStruct,
GoalStruct,
GrpSettingsStruct,
CreativePlaceholderStruct,
TargetingStruct,
CreativeTargetingStruct,
FrequencyCapStruct,
DeliveryIndicatorStruct,
DeliveryDataStruct,
BaseCustomFieldValueStruct,
} from "../../common/types";
import {
AllowedFormatsEnum,
ChildContentEligibilityEnum,
CompanionDeliveryOptionEnum,
CompetitiveConstraintScopeEnum,
CostTypeEnum,
CreativeRotationTypeEnum,
DeliveryForecastSourceEnum,
DeliveryRateTypeEnum,
EnvironmentTypeEnum,
LineItemDiscountTypeEnum,
LineItemSummaryReservationStatusEnum,
LineItemTypeEnum,
ProgrammaticCreativeSourceEnum,
RoadblockingTypeEnum,
SkippableAdTypeEnum,
StatusEnum,
} from "../../common/enums";
import { StartDateTimeTypeEnum } from "../../../common/enums";
/**
* Represents a LineItem struct
* Can be used to validate and parse LineItem objects
*/
export const LineItemStruct: Describe<LineItem> = object({
orderId: number(),
id: number(),
name: string(),
externalId: optional(string()),
orderName: string(),
startDateTime: DateTimeStruct,
startDateTimeType: StartDateTimeTypeEnum,
endDateTime: optional(DateTimeStruct),
autoExtensionDays: number(),
unlimitedEndDateTime: boolean(),
creativeRotationType: CreativeRotationTypeEnum,
deliveryRateType: DeliveryRateTypeEnum,
deliveryForecastSource: DeliveryForecastSourceEnum,
customPacingCurve: optional(CustomPacingCurveStruct),
roadblockingType: RoadblockingTypeEnum,
skippableAdType: SkippableAdTypeEnum,
frequencyCaps: optional(array(FrequencyCapStruct)),
lineItemType: LineItemTypeEnum,
priority: number(),
costPerUnit: MoneyStruct,
valueCostPerUnit: MoneyStruct,
costType: CostTypeEnum,
discountType: LineItemDiscountTypeEnum,
discount: number(),
contractedUnitsBought: number(),
creativePlaceholders: array(CreativePlaceholderStruct),
activityAssociations: optional(array(LineItemActivityAssociationStruct)),
environmentType: EnvironmentTypeEnum,
allowedFormats: optional(array(AllowedFormatsEnum)),
companionDeliveryOption: CompanionDeliveryOptionEnum,
allowOverbook: boolean(),
skipInventoryCheck: boolean(),
skipCrossSellingRuleWarningChecks: boolean(),
reserveAtCreation: boolean(),
stats: optional(StatsStruct),
deliveryIndicator: optional(DeliveryIndicatorStruct),
deliveryData: optional(DeliveryDataStruct),
budget: MoneyStruct,
status: StatusEnum,
reservationStatus: LineItemSummaryReservationStatusEnum,
isArchived: boolean(),
webPropertyCode: string(),
appliedLabels: optional(array(AppliedLabelStruct)),
effectiveAppliedLabels: optional(array(AppliedLabelStruct)),
disableSameAdvertiserCompetitiveExclusion: boolean(),
lastModifiedByApp: string(),
notes: optional(string()),
competitiveConstraintScope: CompetitiveConstraintScopeEnum,
lastModifiedDateTime: DateTimeStruct,
creationDateTime: DateTimeStruct,
customFieldValues: optional(array(BaseCustomFieldValueStruct)),
isMissingCreatives: boolean(),
youtubeKidsRestricted: optional(boolean()),
programmaticCreativeSource: optional(ProgrammaticCreativeSourceEnum),
thirdPartyMeasurementSettings: optional(ThirdPartyMeasurementSettingsStruct),
videoMaxDuration: number(),
primaryGoal: GoalStruct,
secondaryGoals: optional(array(GoalStruct)),
grpSettings: optional(GrpSettingsStruct),
dealInfo: optional(LineItemDealInfoDtoStruct),
viewabilityProviderCompanyIds: optional(array(number())),
childContentEligibility: optional(ChildContentEligibilityEnum),
customVastExtension: optional(string()),
targeting: TargetingStruct,
creativeTargetings: optional(array(CreativeTargetingStruct)),
});