From a2c49e4e79eec7f2aa11a43113170bca2f4b76c8 Mon Sep 17 00:00:00 2001 From: Akhil Trivedi Date: Thu, 16 Jul 2026 17:27:06 +0530 Subject: [PATCH] fix: support tiered actor pricing types --- src/resource_clients/actor.ts | 32 ++++++++++++++++++++++++++++---- test/pricing_types.test.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 test/pricing_types.test.ts diff --git a/src/resource_clients/actor.ts b/src/resource_clients/actor.ts index 90e9bdd6..55964458 100644 --- a/src/resource_clients/actor.ts +++ b/src/resource_clients/actor.ts @@ -968,6 +968,8 @@ interface CommonActorPricingInfo { notifiedAboutFutureChangeAt?: Date; notifiedAboutChangeAt?: Date; reasonForChange?: string; + isPriceChangeNotificationSuppressed?: boolean; + forceContainsSignificantPriceChange?: boolean; } /** @@ -996,17 +998,39 @@ export interface FlatPricePerMonthActorPricingInfo extends CommonActorPricingInf export interface PricePerDatasetItemActorPricingInfo extends CommonActorPricingInfo { pricingModel: 'PRICE_PER_DATASET_ITEM'; /** Name of the unit that is being charged */ - unitName?: string; - pricePerUnitUsd: number; + unitName: string; + /** Flat price per unit in USD. Mutually exclusive with `tieredPricing`. */ + pricePerUnitUsd?: number; + /** Tier-keyed pricing. Mutually exclusive with `pricePerUnitUsd`. */ + tieredPricing?: Record; +} + +/** + * Price per dataset item for a single pricing tier. + */ +export interface TieredPricingPerDatasetItemEntry { + tieredPricePerUnitUsd: number; } /** * Definition of a chargeable event for pay-per-event Actors. */ export interface ActorChargeEvent { - eventPriceUsd: number; + /** Flat price per event in USD. Mutually exclusive with `eventTieredPricingUsd`. */ + eventPriceUsd?: number; + /** Tier-keyed pricing. Mutually exclusive with `eventPriceUsd`. */ + eventTieredPricingUsd?: Record; eventTitle: string; - eventDescription?: string; + eventDescription: string; + isPrimaryEvent?: boolean; + isOneTimeEvent?: boolean; +} + +/** + * Price per event for a single pricing tier. + */ +export interface TieredPricingPerEventEntry { + tieredEventPriceUsd: number; } /** diff --git a/test/pricing_types.test.ts b/test/pricing_types.test.ts new file mode 100644 index 00000000..0312730e --- /dev/null +++ b/test/pricing_types.test.ts @@ -0,0 +1,33 @@ +import type { ActorChargeEvent, PricePerDatasetItemActorPricingInfo } from 'apify-client'; +import { describe, expect, test } from 'vitest'; + +describe('Actor pricing types', () => { + test('represent tiered pricing without a flat price', () => { + const event: ActorChargeEvent = { + eventTitle: 'Processed item', + eventDescription: 'An item was processed.', + eventTieredPricingUsd: { + STARTER: { tieredEventPriceUsd: 0.01 }, + }, + isPrimaryEvent: true, + isOneTimeEvent: false, + }; + const datasetItemPricing: PricePerDatasetItemActorPricingInfo = { + pricingModel: 'PRICE_PER_DATASET_ITEM', + unitName: 'result', + tieredPricing: { + STARTER: { tieredPricePerUnitUsd: 0.02 }, + }, + apifyMarginPercentage: 0.2, + createdAt: new Date(), + startedAt: new Date(), + isPriceChangeNotificationSuppressed: true, + forceContainsSignificantPriceChange: false, + }; + + expect(event.eventPriceUsd).toBeUndefined(); + expect(datasetItemPricing.pricePerUnitUsd).toBeUndefined(); + expect(event.eventTieredPricingUsd?.STARTER.tieredEventPriceUsd).toBe(0.01); + expect(datasetItemPricing.tieredPricing?.STARTER.tieredPricePerUnitUsd).toBe(0.02); + }); +});