Settings: clarify Codex 만료=결제, drop Claude expiry badge (#49)

- Codex expiry badge now says "결제 만료/까지" so it's unambiguous that
  this is the ChatGPT Pro/Team subscription end-date, not an OAuth
  access-token TTL.
- Claude rows no longer show an expiry badge: Claude credentials only
  expose an OAuth access_token TTL (auto-refreshed every few minutes
  by the existing claude token refresh loop), which is meaningless to
  the user. Replace it with a static "토큰 자동갱신" tag so the column
  alignment stays consistent.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Eyejoker
2026-04-27 22:26:17 +09:00
committed by GitHub
parent c2a6889567
commit dafb84fa4d

View File

@@ -1340,16 +1340,19 @@ function formatExpiry(
}); });
if (days < 0) { if (days < 0) {
const ago = Math.ceil(-days); const ago = Math.ceil(-days);
return { label: `${dateStr} 만료 (${ago}일 전)`, cls: 'is-expired' }; return {
label: `결제 만료 ${dateStr} (${ago}일 전)`,
cls: 'is-expired',
};
} }
if (days < 7) { if (days < 7) {
return { return {
label: `${dateStr}까지 (${Math.floor(days)}일)`, label: `결제 ${dateStr}까지 (${Math.floor(days)}일)`,
cls: 'is-soon', cls: 'is-soon',
}; };
} }
return { return {
label: `${dateStr}까지 (${Math.floor(days)}일)`, label: `결제 ${dateStr}까지 (${Math.floor(days)}일)`,
cls: 'is-active', cls: 'is-active',
}; };
} }
@@ -1475,39 +1478,33 @@ function AccountSettings({ onRestartStack }: { onRestartStack: () => void }) {
<p className="settings-hint"> </p> <p className="settings-hint"> </p>
) : ( ) : (
<ul className="settings-account-list"> <ul className="settings-account-list">
{data.claude.map((acc) => { {data.claude.map((acc) => (
const expiry = formatExpiry( <li key={acc.index} className="settings-account-row">
acc.expiresAt ? new Date(acc.expiresAt).toISOString() : null, <div className="settings-account-main">
); <span className="settings-account-tag">#{acc.index}</span>
return ( <span className="settings-account-email">
<li key={acc.index} className="settings-account-row"> {acc.subscriptionType ?? 'unknown'}
<div className="settings-account-main"> {acc.rateLimitTier ? ` · ${acc.rateLimitTier}` : ''}
<span className="settings-account-tag">#{acc.index}</span> </span>
<span className="settings-account-email"> <span className="settings-account-plan">claude</span>
{acc.subscriptionType ?? 'unknown'} <span className="settings-account-badge is-active">
{acc.rateLimitTier ? ` · ${acc.rateLimitTier}` : ''}
</span> </span>
{expiry ? ( </div>
<span className={`settings-account-badge ${expiry.cls}`}> {acc.index > 0 ? (
{expiry.label} <button
</span> className="settings-delete"
) : null} disabled={busy}
</div> onClick={() => void handleDelete('claude', acc.index)}
{acc.index > 0 ? ( type="button"
<button >
className="settings-delete"
disabled={busy} </button>
onClick={() => void handleDelete('claude', acc.index)} ) : (
type="button" <span className="settings-account-default"></span>
> )}
</li>
</button> ))}
) : (
<span className="settings-account-default"></span>
)}
</li>
);
})}
</ul> </ul>
)} )}
<div className="settings-add-token"> <div className="settings-add-token">