feat/cl4-subscription-status-cli #9
@@ -16,6 +16,8 @@ export type PleskSubscription = {
|
||||
external_id?: string;
|
||||
name?: string;
|
||||
status?: string;
|
||||
status_raw?: string | null;
|
||||
status_sync_error?: string | null;
|
||||
owner_login?: string;
|
||||
owner?: { login?: string };
|
||||
plan_name?: string;
|
||||
@@ -148,16 +150,27 @@ export async function listPleskSubscriptions(connection: PleskConnection) {
|
||||
const subscriptions: PleskSubscription[] = [];
|
||||
|
||||
for (const subscriptionName of subscriptionNames.slice(0, 500)) {
|
||||
let status: "active" | "suspended" | "unknown" = "unknown";
|
||||
let status: "active" | "suspended" | "disabled" | "expired" | "unknown" =
|
||||
"unknown";
|
||||
let statusRaw: string | null = null;
|
||||
let statusSyncError: string | null = null;
|
||||
|
||||
try {
|
||||
const infoResult = await pleskCliCall(connection, "subscription", [
|
||||
"--info",
|
||||
subscriptionName,
|
||||
]);
|
||||
status = parseSubscriptionStatusFromInfo(infoResult.stdout ?? "");
|
||||
} catch {
|
||||
const parsed = parseSubscriptionStatusDetailsFromInfo(
|
||||
infoResult.stdout ?? "",
|
||||
);
|
||||
status = parsed.status;
|
||||
statusRaw = parsed.statusRaw;
|
||||
} catch (error) {
|
||||
status = "unknown";
|
||||
statusSyncError =
|
||||
error instanceof Error
|
||||
? error.message.slice(0, 1000)
|
||||
: "status_sync_failed";
|
||||
}
|
||||
|
||||
subscriptions.push({
|
||||
@@ -165,33 +178,57 @@ export async function listPleskSubscriptions(connection: PleskConnection) {
|
||||
subscription_id: subscriptionName,
|
||||
name: subscriptionName,
|
||||
status,
|
||||
status_raw: statusRaw,
|
||||
status_sync_error: statusSyncError,
|
||||
});
|
||||
}
|
||||
|
||||
return subscriptions;
|
||||
}
|
||||
|
||||
export function parseSubscriptionStatusFromInfo(
|
||||
stdout: string,
|
||||
): "active" | "suspended" | "unknown" {
|
||||
export function parseSubscriptionStatusDetailsFromInfo(stdout: string): {
|
||||
status: "active" | "suspended" | "disabled" | "expired" | "unknown";
|
||||
statusRaw: string | null;
|
||||
} {
|
||||
const line = stdout
|
||||
.split(/\r?\n/)
|
||||
.map((entry) => entry.trim())
|
||||
.find((entry) => /^domain\s+status\s*:/i.test(entry));
|
||||
|
||||
if (!line) return "unknown";
|
||||
|
||||
const value = line
|
||||
.replace(/^domain\s+status\s*:/i, "")
|
||||
.trim()
|
||||
.toLowerCase();
|
||||
|
||||
if (value.includes("ok")) return "active";
|
||||
if (value.includes("suspend") || value.includes("disabled")) {
|
||||
return "suspended";
|
||||
if (!line) {
|
||||
return { status: "unknown", statusRaw: null };
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
const value = line.replace(/^domain\s+status\s*:/i, "").trim();
|
||||
const normalized = value.toLowerCase();
|
||||
|
||||
if (normalized.includes("expired")) {
|
||||
return { status: "expired", statusRaw: value };
|
||||
}
|
||||
|
||||
if (normalized.includes("disabled")) {
|
||||
return { status: "disabled", statusRaw: value };
|
||||
}
|
||||
|
||||
if (normalized.includes("suspend")) {
|
||||
return { status: "suspended", statusRaw: value };
|
||||
}
|
||||
|
||||
if (
|
||||
normalized.includes("ok") ||
|
||||
normalized.includes("active") ||
|
||||
normalized.includes("enabled")
|
||||
) {
|
||||
return { status: "active", statusRaw: value };
|
||||
}
|
||||
|
||||
return { status: "unknown", statusRaw: value };
|
||||
}
|
||||
|
||||
export function parseSubscriptionStatusFromInfo(
|
||||
stdout: string,
|
||||
): "active" | "suspended" | "disabled" | "expired" | "unknown" {
|
||||
return parseSubscriptionStatusDetailsFromInfo(stdout).status;
|
||||
}
|
||||
|
||||
export async function pleskCliCall(
|
||||
|
||||
Reference in New Issue
Block a user