Merge pull request #545 from pullfrog/billing

managed billing + stripe v1
This commit is contained in:
Colin McDonnell
2026-05-05 19:33:46 +00:00
committed by pullfrog[bot]
parent 67fe18e504
commit e58299740d
4 changed files with 207 additions and 21 deletions
+20
View File
@@ -24,10 +24,27 @@ export interface RepoSettings {
envAllowlist: string | null;
}
/**
* Account-level billing plan. Orthogonal to repo-level OSS status. Mirrors
* the server's `AccountPlan` in `utils/billing.ts`. `"none"` = free tier,
* `"payg"` = card on file / pay-as-you-go.
*/
export type AccountPlan = "none" | "payg";
/**
* "Is Pullfrog absorbing marginal infra cost for this repo?" — composite
* predicate over the two orthogonal dimensions (repo-level OSS, account-level
* plan). Mirrors `isInfraCovered` in the server's `utils/billing.ts`.
*/
export function isInfraCovered(params: { isOss: boolean; plan: AccountPlan }): boolean {
return params.isOss || params.plan === "payg";
}
export interface RunContext {
settings: RepoSettings;
apiToken: string;
oss: boolean;
plan: AccountPlan;
proxyModel?: string | undefined;
dbSecrets?: Record<string, string> | undefined;
}
@@ -51,6 +68,7 @@ const defaultRunContext: RunContext = {
settings: defaultSettings,
apiToken: "",
oss: false,
plan: "none",
};
/**
@@ -92,6 +110,7 @@ export async function fetchRunContext(params: {
settings: RepoSettings | null;
apiToken: string;
oss?: boolean;
plan?: AccountPlan;
proxyModel?: string;
dbSecrets?: Record<string, string>;
} | null;
@@ -112,6 +131,7 @@ export async function fetchRunContext(params: {
},
apiToken: data.apiToken,
oss: data.oss ?? false,
plan: data.plan ?? "none",
proxyModel: data.proxyModel,
dbSecrets: data.dbSecrets,
};
+3 -1
View File
@@ -3,7 +3,7 @@ import type { Octokit } from "@octokit/rest";
import packageJson from "../package.json" with { type: "json" };
import { log } from "./cli.ts";
import { type OctokitWithPlugins, parseRepoContext } from "./github.ts";
import { fetchRunContext, type RepoSettings } from "./runContext.ts";
import { type AccountPlan, fetchRunContext, type RepoSettings } from "./runContext.ts";
export interface RunContextData {
repo: {
@@ -14,6 +14,7 @@ export interface RunContextData {
repoSettings: RepoSettings;
apiToken: string;
oss: boolean;
plan: AccountPlan;
proxyModel?: string | undefined;
dbSecrets?: Record<string, string> | undefined;
}
@@ -54,6 +55,7 @@ export async function resolveRunContextData(
repoSettings: runContext.settings,
apiToken: runContext.apiToken,
oss: runContext.oss,
plan: runContext.plan,
proxyModel: runContext.proxyModel,
dbSecrets: runContext.dbSecrets,
};