Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Add ActorRunPricingInfo type #623

Merged
merged 6 commits into from
Jan 10, 2025
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;
barjin marked this conversation as resolved.
Show resolved Hide resolved
}

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;
janbuchar marked this conversation as resolved.
Show resolved Hide resolved
/** 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;
janbuchar marked this conversation as resolved.
Show resolved Hide resolved
}

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