source dump of claude code
at main 161 lines 17 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import React, { useEffect, useMemo, useState } from 'react'; 3import { extraUsage } from 'src/commands/extra-usage/index.js'; 4import { Box, Text } from 'src/ink.js'; 5import { useClaudeAiLimits } from 'src/services/claudeAiLimitsHook.js'; 6import { shouldProcessMockLimits } from 'src/services/rateLimitMocking.js'; // Used for /mock-limits command 7import { getRateLimitTier, getSubscriptionType, isClaudeAISubscriber } from 'src/utils/auth.js'; 8import { hasClaudeAiBillingAccess } from 'src/utils/billing.js'; 9import { MessageResponse } from '../MessageResponse.js'; 10type UpsellParams = { 11 shouldShowUpsell: boolean; 12 isMax20x: boolean; 13 isExtraUsageCommandEnabled: boolean; 14 shouldAutoOpenRateLimitOptionsMenu: boolean; 15 isTeamOrEnterprise: boolean; 16 hasBillingAccess: boolean; 17}; 18export function getUpsellMessage({ 19 shouldShowUpsell, 20 isMax20x, 21 isExtraUsageCommandEnabled, 22 shouldAutoOpenRateLimitOptionsMenu, 23 isTeamOrEnterprise, 24 hasBillingAccess 25}: UpsellParams): string | null { 26 if (!shouldShowUpsell) return null; 27 if (isMax20x) { 28 if (isExtraUsageCommandEnabled) { 29 return '/extra-usage to finish what you\u2019re working on.'; 30 } 31 return '/login to switch to an API usage-billed account.'; 32 } 33 if (shouldAutoOpenRateLimitOptionsMenu) { 34 return 'Opening your options\u2026'; 35 } 36 if (!isTeamOrEnterprise && !isExtraUsageCommandEnabled) { 37 return '/upgrade to increase your usage limit.'; 38 } 39 if (isTeamOrEnterprise) { 40 if (!isExtraUsageCommandEnabled) return null; 41 if (hasBillingAccess) { 42 return '/extra-usage to finish what you\u2019re working on.'; 43 } 44 return '/extra-usage to request more usage from your admin.'; 45 } 46 return '/upgrade or /extra-usage to finish what you\u2019re working on.'; 47} 48type RateLimitMessageProps = { 49 text: string; 50 onOpenRateLimitOptions?: () => void; 51}; 52export function RateLimitMessage(t0) { 53 const $ = _c(16); 54 const { 55 text, 56 onOpenRateLimitOptions 57 } = t0; 58 let t1; 59 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 60 t1 = getSubscriptionType(); 61 $[0] = t1; 62 } else { 63 t1 = $[0]; 64 } 65 const subscriptionType = t1; 66 let t2; 67 if ($[1] === Symbol.for("react.memo_cache_sentinel")) { 68 t2 = getRateLimitTier(); 69 $[1] = t2; 70 } else { 71 t2 = $[1]; 72 } 73 const rateLimitTier = t2; 74 const isTeamOrEnterprise = subscriptionType === "team" || subscriptionType === "enterprise"; 75 const isMax20x = rateLimitTier === "default_claude_max_20x"; 76 let t3; 77 if ($[2] === Symbol.for("react.memo_cache_sentinel")) { 78 t3 = shouldProcessMockLimits() || isClaudeAISubscriber(); 79 $[2] = t3; 80 } else { 81 t3 = $[2]; 82 } 83 const shouldShowUpsell = t3; 84 const canSeeRateLimitOptionsUpsell = shouldShowUpsell && !isMax20x; 85 const [hasOpenedInteractiveMenu, setHasOpenedInteractiveMenu] = useState(false); 86 const claudeAiLimits = useClaudeAiLimits(); 87 const isCurrentlyRateLimited = claudeAiLimits.status === "rejected" && claudeAiLimits.resetsAt !== undefined && !claudeAiLimits.isUsingOverage; 88 const shouldAutoOpenRateLimitOptionsMenu = canSeeRateLimitOptionsUpsell && !hasOpenedInteractiveMenu && isCurrentlyRateLimited && onOpenRateLimitOptions; 89 let t4; 90 let t5; 91 if ($[3] !== onOpenRateLimitOptions || $[4] !== shouldAutoOpenRateLimitOptionsMenu) { 92 t4 = () => { 93 if (shouldAutoOpenRateLimitOptionsMenu) { 94 setHasOpenedInteractiveMenu(true); 95 onOpenRateLimitOptions(); 96 } 97 }; 98 t5 = [shouldAutoOpenRateLimitOptionsMenu, onOpenRateLimitOptions]; 99 $[3] = onOpenRateLimitOptions; 100 $[4] = shouldAutoOpenRateLimitOptionsMenu; 101 $[5] = t4; 102 $[6] = t5; 103 } else { 104 t4 = $[5]; 105 t5 = $[6]; 106 } 107 useEffect(t4, t5); 108 let t6; 109 bb0: { 110 let t7; 111 if ($[7] !== shouldAutoOpenRateLimitOptionsMenu) { 112 t7 = getUpsellMessage({ 113 shouldShowUpsell, 114 isMax20x, 115 isExtraUsageCommandEnabled: extraUsage.isEnabled(), 116 shouldAutoOpenRateLimitOptionsMenu: !!shouldAutoOpenRateLimitOptionsMenu, 117 isTeamOrEnterprise, 118 hasBillingAccess: hasClaudeAiBillingAccess() 119 }); 120 $[7] = shouldAutoOpenRateLimitOptionsMenu; 121 $[8] = t7; 122 } else { 123 t7 = $[8]; 124 } 125 const message = t7; 126 if (!message) { 127 t6 = null; 128 break bb0; 129 } 130 let t8; 131 if ($[9] !== message) { 132 t8 = <Text dimColor={true}>{message}</Text>; 133 $[9] = message; 134 $[10] = t8; 135 } else { 136 t8 = $[10]; 137 } 138 t6 = t8; 139 } 140 const upsell = t6; 141 let t7; 142 if ($[11] !== text) { 143 t7 = <Text color="error">{text}</Text>; 144 $[11] = text; 145 $[12] = t7; 146 } else { 147 t7 = $[12]; 148 } 149 const t8 = hasOpenedInteractiveMenu ? null : upsell; 150 let t9; 151 if ($[13] !== t7 || $[14] !== t8) { 152 t9 = <MessageResponse><Box flexDirection="column">{t7}{t8}</Box></MessageResponse>; 153 $[13] = t7; 154 $[14] = t8; 155 $[15] = t9; 156 } else { 157 t9 = $[15]; 158 } 159 return t9; 160} 161//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImV4dHJhVXNhZ2UiLCJCb3giLCJUZXh0IiwidXNlQ2xhdWRlQWlMaW1pdHMiLCJzaG91bGRQcm9jZXNzTW9ja0xpbWl0cyIsImdldFJhdGVMaW1pdFRpZXIiLCJnZXRTdWJzY3JpcHRpb25UeXBlIiwiaXNDbGF1ZGVBSVN1YnNjcmliZXIiLCJoYXNDbGF1ZGVBaUJpbGxpbmdBY2Nlc3MiLCJNZXNzYWdlUmVzcG9uc2UiLCJVcHNlbGxQYXJhbXMiLCJzaG91bGRTaG93VXBzZWxsIiwiaXNNYXgyMHgiLCJpc0V4dHJhVXNhZ2VDb21tYW5kRW5hYmxlZCIsInNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnUiLCJpc1RlYW1PckVudGVycHJpc2UiLCJoYXNCaWxsaW5nQWNjZXNzIiwiZ2V0VXBzZWxsTWVzc2FnZSIsIlJhdGVMaW1pdE1lc3NhZ2VQcm9wcyIsInRleHQiLCJvbk9wZW5SYXRlTGltaXRPcHRpb25zIiwiUmF0ZUxpbWl0TWVzc2FnZSIsInQwIiwiJCIsIl9jIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJzdWJzY3JpcHRpb25UeXBlIiwidDIiLCJyYXRlTGltaXRUaWVyIiwidDMiLCJjYW5TZWVSYXRlTGltaXRPcHRpb25zVXBzZWxsIiwiaGFzT3BlbmVkSW50ZXJhY3RpdmVNZW51Iiwic2V0SGFzT3BlbmVkSW50ZXJhY3RpdmVNZW51IiwiY2xhdWRlQWlMaW1pdHMiLCJpc0N1cnJlbnRseVJhdGVMaW1pdGVkIiwic3RhdHVzIiwicmVzZXRzQXQiLCJ1bmRlZmluZWQiLCJpc1VzaW5nT3ZlcmFnZSIsInQ0IiwidDUiLCJ0NiIsImJiMCIsInQ3IiwiaXNFbmFibGVkIiwibWVzc2FnZSIsInQ4IiwidXBzZWxsIiwidDkiXSwic291cmNlcyI6WyJSYXRlTGltaXRNZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZXh0cmFVc2FnZSB9IGZyb20gJ3NyYy9jb21tYW5kcy9leHRyYS11c2FnZS9pbmRleC5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ3NyYy9pbmsuanMnXG5pbXBvcnQgeyB1c2VDbGF1ZGVBaUxpbWl0cyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9jbGF1ZGVBaUxpbWl0c0hvb2suanMnXG5pbXBvcnQgeyBzaG91bGRQcm9jZXNzTW9ja0xpbWl0cyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9yYXRlTGltaXRNb2NraW5nLmpzJyAvLyBVc2VkIGZvciAvbW9jay1saW1pdHMgY29tbWFuZFxuaW1wb3J0IHtcbiAgZ2V0UmF0ZUxpbWl0VGllcixcbiAgZ2V0U3Vic2NyaXB0aW9uVHlwZSxcbiAgaXNDbGF1ZGVBSVN1YnNjcmliZXIsXG59IGZyb20gJ3NyYy91dGlscy9hdXRoLmpzJ1xuaW1wb3J0IHsgaGFzQ2xhdWRlQWlCaWxsaW5nQWNjZXNzIH0gZnJvbSAnc3JjL3V0aWxzL2JpbGxpbmcuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuLi9NZXNzYWdlUmVzcG9uc2UuanMnXG5cbnR5cGUgVXBzZWxsUGFyYW1zID0ge1xuICBzaG91bGRTaG93VXBzZWxsOiBib29sZWFuXG4gIGlzTWF4MjB4OiBib29sZWFuXG4gIGlzRXh0cmFVc2FnZUNvbW1hbmRFbmFibGVkOiBib29sZWFuXG4gIHNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnU6IGJvb2xlYW5cbiAgaXNUZWFtT3JFbnRlcnByaXNlOiBib29sZWFuXG4gIGhhc0JpbGxpbmdBY2Nlc3M6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwc2VsbE1lc3NhZ2Uoe1xuICBzaG91bGRTaG93VXBzZWxsLFxuICBpc01heDIweCxcbiAgaXNFeHRyYVVzYWdlQ29tbWFuZEVuYWJsZWQsXG4gIHNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnUsXG4gIGlzVGVhbU9yRW50ZXJwcmlzZSxcbiAgaGFzQmlsbGluZ0FjY2Vzcyxcbn06IFVwc2VsbFBhcmFtcyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXNob3VsZFNob3dVcHNlbGwpIHJldHVybiBudWxsXG5cbiAgaWYgKGlzTWF4MjB4KSB7XG4gICAgaWYgKGlzRXh0cmFVc2FnZUNvbW1hbmRFbmFibGVkKSB7XG4gICAgICByZXR1cm4gJy9leHRyYS11c2FnZSB0byBmaW5pc2ggd2hhdCB5b3VcXHUyMDE5cmUgd29ya2luZyBvbi4nXG4gICAgfVxuICAgIHJldHVybiAnL2xvZ2luIHRvIHN3aXRjaCB0byBhbiBBUEkgdXNhZ2UtYmlsbGVkIGFjY291bnQuJ1xuICB9XG5cbiAgaWYgKHNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnUpIHtcbiAgICByZXR1cm4gJ09wZW5pbmcgeW91ciBvcHRpb25zXFx1MjAyNidcbiAgfVxuXG4gIGlmICghaXNUZWFtT3JFbnRlcnByaXNlICYmICFpc0V4dHJhVXNhZ2VDb21tYW5kRW5hYmxlZCkge1xuICAgIHJldHVybiAnL3VwZ3JhZGUgdG8gaW5jcmVhc2UgeW91ciB1c2FnZSBsaW1pdC4nXG4gIH1cblxuICBpZiAoaXNUZWFtT3JFbnRlcnByaXNlKSB7XG4gICAgaWYgKCFpc0V4dHJhVXNhZ2VDb21tYW5kRW5hYmxlZCkgcmV0dXJuIG51bGxcblxuICAgIGlmIChoYXNCaWxsaW5nQWNjZXNzKSB7XG4gICAgICByZXR1cm4gJy9leHRyYS11c2FnZSB0byBmaW5pc2ggd2hhdCB5b3VcXHUyMDE5cmUgd29ya2luZyBvbi4nXG4gICAgfVxuXG4gICAgcmV0dXJuICcvZXh0cmEtdXNhZ2UgdG8gcmVxdWVzdCBtb3JlIHVzYWdlIGZyb20geW91ciBhZG1pbi4nXG4gIH1cblxuICByZXR1cm4gJy91cGdyYWRlIG9yIC9leHRyYS11c2FnZSB0byBmaW5pc2ggd2hhdCB5b3VcXHUyMDE5cmUgd29ya2luZyBvbi4nXG59XG5cbnR5cGUgUmF0ZUxpbWl0TWVzc2FnZVByb3BzID0ge1xuICB0ZXh0OiBzdHJpbmdcbiAgb25PcGVuUmF0ZUxpbWl0T3B0aW9ucz86ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJhdGVMaW1pdE1lc3NhZ2Uoe1xuICB0ZXh0LFxuICBvbk9wZW5SYXRlTGltaXRPcHRpb25zLFxufTogUmF0ZUxpbWl0TWVzc2FnZVByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uVHlwZSA9IGdldFN1YnNjcmlwdGlvblR5cGUoKVxuICBjb25zdCByYXRlTGltaXRUaWVyID0gZ2V0UmF0ZUxpbWl0VGllcigpXG4gIGNvbnN0IGlzVGVhbU9yRW50ZXJwcmlzZSA9XG4gICAgc3Vic2NyaXB0aW9uVHlwZSA9PT0gJ3RlYW0nIHx8IHN1YnNjcmlwdGlvblR5cGUgPT09ICdlbnRlcnByaXNlJ1xuICBjb25zdCBpc01heDIweCA9IHJhdGVMaW1pdFRpZXIgPT09ICdkZWZhdWx0X2NsYXVkZV9tYXhfMjB4J1xuICAvLyBBbHdheXMgc2hvdyB1cHNlbGwgd2hlbiB1c2luZyAvbW9jay1saW1pdHMgY29tbWFuZCwgb3RoZXJ3aXNlIHNob3cgZm9yIHN1YnNjcmliZXJzXG4gIGNvbnN0IHNob3VsZFNob3dVcHNlbGwgPSBzaG91bGRQcm9jZXNzTW9ja0xpbWl0cygpIHx8IGlzQ2xhdWRlQUlTdWJzY3JpYmVyKClcblxuICBjb25zdCBjYW5TZWVSYXRlTGltaXRPcHRpb25zVXBzZWxsID0gc2hvdWxkU2hvd1Vwc2VsbCAmJiAhaXNNYXgyMHhcblxuICBjb25zdCBbaGFzT3BlbmVkSW50ZXJhY3RpdmVNZW51LCBzZXRIYXNPcGVuZWRJbnRlcmFjdGl2ZU1lbnVdID1cbiAgICB1c2VTdGF0ZShmYWxzZSlcblxuICAvLyBDaGVjayBhY3R1YWwgcmF0ZSBsaW1pdCBzdGF0dXMgLSBvbmx5IGF1dG8tb3BlbiBpZiB1c2VyIGlzIGN1cnJlbnRseSByYXRlIGxpbWl0ZWRcbiAgLy8gQU5EIHdlJ3ZlIHZlcmlmaWVkIHRoaXMgd2l0aCB0aGUgQVBJIChyZXNldHNBdCBpcyBvbmx5IHNldCBhZnRlciBBUEkgcmVzcG9uc2UpLlxuICAvLyBUaGlzIHByZXZlbnRzIGZhbHNlIGFsZXJ0cyB3aGVuIHJlc3VtaW5nIHNlc3Npb25zIHdpdGggb2xkIHJhdGUgbGltaXQgbWVzc2FnZXMuXG4gIGNvbnN0IGNsYXVkZUFpTGltaXRzID0gdXNlQ2xhdWRlQWlMaW1pdHMoKVxuICBjb25zdCBpc0N1cnJlbnRseVJhdGVMaW1pdGVkID1cbiAgICBjbGF1ZGVBaUxpbWl0cy5zdGF0dXMgPT09ICdyZWplY3RlZCcgJiZcbiAgICBjbGF1ZGVBaUxpbWl0cy5yZXNldHNBdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgIWNsYXVkZUFpTGltaXRzLmlzVXNpbmdPdmVyYWdlXG5cbiAgY29uc3Qgc2hvdWxkQXV0b09wZW5SYXRlTGltaXRPcHRpb25zTWVudSA9XG4gICAgY2FuU2VlUmF0ZUxpbWl0T3B0aW9uc1Vwc2VsbCAmJlxuICAgICFoYXNPcGVuZWRJbnRlcmFjdGl2ZU1lbnUgJiZcbiAgICBpc0N1cnJlbnRseVJhdGVMaW1pdGVkICYmXG4gICAgb25PcGVuUmF0ZUxpbWl0T3B0aW9uc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnUpIHtcbiAgICAgIHNldEhhc09wZW5lZEludGVyYWN0aXZlTWVudSh0cnVlKVxuICAgICAgb25PcGVuUmF0ZUxpbWl0T3B0aW9ucygpXG4gICAgfVxuICB9LCBbc2hvdWxkQXV0b09wZW5SYXRlTGltaXRPcHRpb25zTWVudSwgb25PcGVuUmF0ZUxpbWl0T3B0aW9uc10pXG5cbiAgY29uc3QgdXBzZWxsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGdldFVwc2VsbE1lc3NhZ2Uoe1xuICAgICAgc2hvdWxkU2hvd1Vwc2VsbCxcbiAgICAgIGlzTWF4MjB4LFxuICAgICAgaXNFeHRyYVVzYWdlQ29tbWFuZEVuYWJsZWQ6IGV4dHJhVXNhZ2UuaXNFbmFibGVkKCksXG4gICAgICBzaG91bGRBdXRvT3BlblJhdGVMaW1pdE9wdGlvbnNNZW51OiAhIXNob3VsZEF1dG9PcGVuUmF0ZUxpbWl0T3B0aW9uc01lbnUsXG4gICAgICBpc1RlYW1PckVudGVycHJpc2UsXG4gICAgICBoYXNCaWxsaW5nQWNjZXNzOiBoYXNDbGF1ZGVBaUJpbGxpbmdBY2Nlc3MoKSxcbiAgICB9KVxuICAgIGlmICghbWVzc2FnZSkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gPFRleHQgZGltQ29sb3I+e21lc3NhZ2V9PC9UZXh0PlxuICB9LCBbXG4gICAgc2hvdWxkU2hvd1Vwc2VsbCxcbiAgICBpc01heDIweCxcbiAgICBpc1RlYW1PckVudGVycHJpc2UsXG4gICAgc2hvdWxkQXV0b09wZW5SYXRlTGltaXRPcHRpb25zTWVudSxcbiAgXSlcblxuICByZXR1cm4gKFxuICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPnt0ZXh0fTwvVGV4dD5cbiAgICAgICAge2hhc09wZW5lZEludGVyYWN0aXZlTWVudSA/IG51bGwgOiB1cHNlbGx9XG4gICAgICA8L0JveD5cbiAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDM0QsU0FBU0MsVUFBVSxRQUFRLG1DQUFtQztBQUM5RCxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxZQUFZO0FBQ3RDLFNBQVNDLGlCQUFpQixRQUFRLG9DQUFvQztBQUN0RSxTQUFTQyx1QkFBdUIsUUFBUSxrQ0FBa0MsRUFBQztBQUMzRSxTQUNFQyxnQkFBZ0IsRUFDaEJDLG1CQUFtQixFQUNuQkMsb0JBQW9CLFFBQ2YsbUJBQW1CO0FBQzFCLFNBQVNDLHdCQUF3QixR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