Skip to content
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions src/resource_clients/actor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,8 @@ export interface ActorRun extends ActorRunListItem {
gitBranchName?: string;
usage?: ActorRunUsage;
usageUsd?: ActorRunUsage;
pricingInfo?: ActorRunPricingInfo;
chargedEventCounts?: Record<string, number>;
}

export interface ActorRunUsage {
Expand Down Expand Up @@ -428,6 +430,7 @@ export interface ActorRunOptions {
timeoutSecs: number;
memoryMbytes: number;
diskMbytes: number;
maxTotalChargeUsd?: number;
}

export interface ActorBuildOptions {
Expand Down Expand Up @@ -459,3 +462,50 @@ export interface ActorDefinition {
maxMemoryMbytes?: number;
usesStandbyMode?: boolean;
}

type CommonActorPricingInfo = {
/** in [0, 1], fraction of pricePerUnitUsd that goes to Apify */
apifyMarginPercentage: number;
/** when this pricing info record has been created */
createdAt: Date;
/** since when is this pricing info record effective for a given Actor */
startedAt: Date;
notifiedAboutFutureChangeAt?: Date;
notifiedAboutChangeAt?: Date;
reasonForChange?: string;
}

export type FreeActorPricingInfo = CommonActorPricingInfo & {
pricingModel: 'FREE';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a string enum for the pricingModel variants? I've got no hard opinion here though

}

export type FlatPricePerMonthActorPricingInfo = CommonActorPricingInfo & {
pricingModel: 'FLAT_PRICE_PER_MONTH';
/** for how many days this Actor can be used for free in trial period */
trialMinutes?: number;
/** monthly flat price in USD */
pricePerUnitUsd: number;
}

export type PricePerDatasetItemActorPricingInfo = CommonActorPricingInfo & {
pricingModel: 'PRICE_PER_DATASET_ITEM';
/** name of the unit that is being charged */
unitName?: string;
pricePerUnitUsd: number;
}

export type ActorChargeEvents = Record<string, {
eventPriceUsd: number;
eventTitle: string;
eventDescription?: string;
}>

export type PricePerEventActorPricingInfo = CommonActorPricingInfo & {
pricingModel: 'PAY_PER_EVENT';
pricingPerEvent: {
actorChargeEvents: ActorChargeEvents
};
minimalMaxTotalChargeUsd?: number;
}

export type ActorRunPricingInfo = PricePerEventActorPricingInfo | PricePerDatasetItemActorPricingInfo | FlatPricePerMonthActorPricingInfo | FreeActorPricingInfo
Loading