GuestPassesUpsell.tsx
1 import { c as _c } from "react/compiler-runtime"; 2 import * as React from 'react'; 3 import { useState } from 'react'; 4 import { Text } from '../../ink.js'; 5 import { logEvent } from '../../services/analytics/index.js'; 6 import { checkCachedPassesEligibility, formatCreditAmount, getCachedReferrerReward, getCachedRemainingPasses } from '../../services/api/referral.js'; 7 import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js'; 8 function resetIfPassesRefreshed(): void { 9 const remaining = getCachedRemainingPasses(); 10 if (remaining == null || remaining <= 0) return; 11 const config = getGlobalConfig(); 12 const lastSeen = config.passesLastSeenRemaining ?? 0; 13 if (remaining > lastSeen) { 14 saveGlobalConfig(prev => ({ 15 ...prev, 16 passesUpsellSeenCount: 0, 17 hasVisitedPasses: false, 18 passesLastSeenRemaining: remaining 19 })); 20 } 21 } 22 function shouldShowGuestPassesUpsell(): boolean { 23 const { 24 eligible, 25 hasCache 26 } = checkCachedPassesEligibility(); 27 // Only show if eligible and cache exists (don't block on fetch) 28 if (!eligible || !hasCache) return false; 29 // Reset upsell counters if passes were refreshed (covers both campaign change and pass refresh) 30 resetIfPassesRefreshed(); 31 const config = getGlobalConfig(); 32 if ((config.passesUpsellSeenCount ?? 0) >= 3) return false; 33 if (config.hasVisitedPasses) return false; 34 return true; 35 } 36 export function useShowGuestPassesUpsell() { 37 const [show] = useState(_temp); 38 return show; 39 } 40 function _temp() { 41 return shouldShowGuestPassesUpsell(); 42 } 43 export function incrementGuestPassesSeenCount(): void { 44 let newCount = 0; 45 saveGlobalConfig(prev => { 46 newCount = (prev.passesUpsellSeenCount ?? 0) + 1; 47 return { 48 ...prev, 49 passesUpsellSeenCount: newCount 50 }; 51 }); 52 logEvent('tengu_guest_passes_upsell_shown', { 53 seen_count: newCount 54 }); 55 } 56 57 // Condensed layout for mini welcome screen 58 export function GuestPassesUpsell() { 59 const $ = _c(1); 60 let t0; 61 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 62 const reward = getCachedReferrerReward(); 63 t0 = <Text dimColor={true}><Text color="claude">[✻]</Text> <Text color="claude">[✻]</Text>{" "}<Text color="claude">[✻]</Text> ·{" "}{reward ? `Share Claude Code and earn ${formatCreditAmount(reward)} of extra usage · /passes` : "3 guest passes at /passes"}</Text>; 64 $[0] = t0; 65 } else { 66 t0 = $[0]; 67 } 68 return t0; 69 } 70 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiVGV4dCIsImxvZ0V2ZW50IiwiY2hlY2tDYWNoZWRQYXNzZXNFbGlnaWJpbGl0eSIsImZvcm1hdENyZWRpdEFtb3VudCIsImdldENhY2hlZFJlZmVycmVyUmV3YXJkIiwiZ2V0Q2FjaGVkUmVtYWluaW5nUGFzc2VzIiwiZ2V0R2xvYmFsQ29uZmlnIiwic2F2ZUdsb2JhbENvbmZpZyIsInJlc2V0SWZQYXNzZXNSZWZyZXNoZWQiLCJyZW1haW5pbmciLCJjb25maWciLCJsYXN0U2VlbiIsInBhc3Nlc0xhc3RTZWVuUmVtYWluaW5nIiwicHJldiIsInBhc3Nlc1Vwc2VsbFNlZW5Db3VudCIsImhhc1Zpc2l0ZWRQYXNzZXMiLCJzaG91bGRTaG93R3Vlc3RQYXNzZXNVcHNlbGwiLCJlbGlnaWJsZSIsImhhc0NhY2hlIiwidXNlU2hvd0d1ZXN0UGFzc2VzVXBzZWxsIiwic2hvdyIsIl90ZW1wIiwiaW5jcmVtZW50R3Vlc3RQYXNzZXNTZWVuQ291bnQiLCJuZXdDb3VudCIsInNlZW5fY291bnQiLCJHdWVzdFBhc3Nlc1Vwc2VsbCIsIiQiLCJfYyIsInQwIiwiU3ltYm9sIiwiZm9yIiwicmV3YXJkIl0sInNvdXJjZXMiOlsiR3Vlc3RQYXNzZXNVcHNlbGwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICcuLi8uLi9pbmsuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuYWx5dGljcy9pbmRleC5qcydcbmltcG9ydCB7XG4gIGNoZWNrQ2FjaGVkUGFzc2VzRWxpZ2liaWxpdHksXG4gIGZvcm1hdENyZWRpdEFtb3VudCxcbiAgZ2V0Q2FjaGVkUmVmZXJyZXJSZXdhcmQsXG4gIGdldENhY2hlZFJlbWFpbmluZ1Bhc3Nlcyxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBpL3JlZmVycmFsLmpzJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnLCBzYXZlR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uZmlnLmpzJ1xuXG5mdW5jdGlvbiByZXNldElmUGFzc2VzUmVmcmVzaGVkKCk6IHZvaWQge1xuICBjb25zdCByZW1haW5pbmcgPSBnZXRDYWNoZWRSZW1haW5pbmdQYXNzZXMoKVxuICBpZiAocmVtYWluaW5nID09IG51bGwgfHwgcmVtYWluaW5nIDw9IDApIHJldHVyblxuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBjb25zdCBsYXN0U2VlbiA9IGNvbmZpZy5wYXNzZXNMYXN0U2VlblJlbWFpbmluZyA/PyAwXG4gIGlmIChyZW1haW5pbmcgPiBsYXN0U2Vlbikge1xuICAgIHNhdmVHbG9iYWxDb25maWcocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIHBhc3Nlc1Vwc2VsbFNlZW5Db3VudDogMCxcbiAgICAgIGhhc1Zpc2l0ZWRQYXNzZXM6IGZhbHNlLFxuICAgICAgcGFzc2VzTGFzdFNlZW5SZW1haW5pbmc6IHJlbWFpbmluZyxcbiAgICB9KSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRTaG93R3Vlc3RQYXNzZXNVcHNlbGwoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZWxpZ2libGUsIGhhc0NhY2hlIH0gPSBjaGVja0NhY2hlZFBhc3Nlc0VsaWdpYmlsaXR5KClcbiAgLy8gT25seSBzaG93IGlmIGVsaWdpYmxlIGFuZCBjYWNoZSBleGlzdHMgKGRvbid0IGJsb2NrIG9uIGZldGNoKVxuICBpZiAoIWVsaWdpYmxlIHx8ICFoYXNDYWNoZSkgcmV0dXJuIGZhbHNlXG4gIC8vIFJlc2V0IHVwc2VsbCBjb3VudGVycyBpZiBwYXNzZXMgd2VyZSByZWZyZXNoZWQgKGNvdmVycyBib3RoIGNhbXBhaWduIGNoYW5nZSBhbmQgcGFzcyByZWZyZXNoKVxuICByZXNldElmUGFzc2VzUmVmcmVzaGVkKClcblxuICBjb25zdCBjb25maWcgPSBnZXRHbG9iYWxDb25maWcoKVxuICBpZiAoKGNvbmZpZy5wYXNzZXNVcHNlbGxTZWVuQ291bnQgPz8gMCkgPj0gMykgcmV0dXJuIGZhbHNlXG4gIGlmIChjb25maWcuaGFzVmlzaXRlZFBhc3NlcykgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNob3dHdWVzdFBhc3Nlc1Vwc2VsbCgpOiBib29sZWFuIHtcbiAgY29uc3QgW3Nob3ddID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkU2hvd0d1ZXN0UGFzc2VzVXBzZWxsKCkpXG4gIHJldHVybiBzaG93XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNyZW1lbnRHdWVzdFBhc3Nlc1NlZW5Db3VudCgpOiB2b2lkIHtcbiAgbGV0IG5ld0NvdW50ID0gMFxuICBzYXZlR2xvYmFsQ29uZmlnKHByZXYgPT4ge1xuICAgIG5ld0NvdW50ID0gKHByZXYucGFzc2VzVXBzZWxsU2VlbkNvdW50ID8/IDApICsgMVxuICAgIHJldHVybiB7XG4gICAgICAuLi5wcmV2LFxuICAgICAgcGFzc2VzVXBzZWxsU2VlbkNvdW50OiBuZXdDb3VudCxcbiAgICB9XG4gIH0pXG4gIGxvZ0V2ZW50KCd0ZW5ndV9ndWVzdF9wYXNzZXNfdXBzZWxsX3Nob3duJywge1xuICAgIHNlZW5fY291bnQ6IG5ld0NvdW50LFxuICB9KVxufVxuXG4vLyBDb25kZW5zZWQgbGF5b3V0IGZvciBtaW5pIHdlbGNvbWUgc2NyZWVuXG5leHBvcnQgZnVuY3Rpb24gR3Vlc3RQYXNzZXNVcHNlbGwoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgcmV3YXJkID0gZ2V0Q2FjaGVkUmVmZXJyZXJSZXdhcmQoKVxuICByZXR1cm4gKFxuICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgPFRleHQgY29sb3I9XCJjbGF1ZGVcIj5b4py7XTwvVGV4dD4gPFRleHQgY29sb3I9XCJjbGF1ZGVcIj5b4py7XTwvVGV4dD57JyAnfVxuICAgICAgPFRleHQgY29sb3I9XCJjbGF1ZGVcIj5b4py7XTwvVGV4dD4gwrd7JyAnfVxuICAgICAge3Jld2FyZFxuICAgICAgICA/IGBTaGFyZSBDbGF1ZGUgQ29kZSBhbmQgZWFybiAke2Zvcm1hdENyZWRpdEFtb3VudChyZXdhcmQpfSBvZiBleHRyYSB1c2FnZSDCtyAvcGFzc2VzYFxuICAgICAgICA6ICczIGd1ZXN0IHBhc3NlcyBhdCAvcGFzc2VzJ31cbiAgICA8L1RleHQ+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBS0EsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsUUFBUSxRQUFRLE9BQU87QUFDaEMsU0FBU0MsSUFBSSxRQUFRLGNBQWM7QUFDbkMsU0FBU0MsUUFBUSxRQUFRLG1DQUFtQztBQUM1RCxTQUNFQyw0QkFBNEIsRUFDNUJDLGtCQUFrQixFQUNsQkMsdUJBQXVCLEVBQ3ZCQyx3QkFBd0IsUUFDbkIsZ0NBQWdDO0FBQ3ZDLFNBQVNDLGVBQWUsRUFBRUMsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBRXpFLFNBQVNDLHNCQUFzQkEsQ0FBQSxDQUFFLEVBQUUsSUFBSSxDQUFDO0VBQ3RDLE1BQU1DLFNBQVMsR0FBR0osd0JBQXdCLENBQUMsQ0FBQztFQUM1QyxJQUFJSSxTQUFTLElBQUksSUFBSSxJQUFJQSxTQUFTLElBQUksQ0FBQyxFQUFFO0VBQ3pDLE1BQU1DLE1BQU0sR0FBR0osZUFBZSxDQUFDLENBQUM7RUFDaEMsTUFBTUssUUFBUSxHQUFHRCxNQUFNLENBQUNFLHVCQUF1QixJQUFJLENBQUM7RUFDcEQsSUFBSUgsU0FBUyxHQUFHRSxRQUFRLEVBQUU7SUFDeEJKLGdCQUFnQixDQUFDTSxJQUFJLEtBQUs7TUFDeEIsR0FBR0EsSUFBSTtNQUNQQyxxQkFBcUIsRUFBRSxDQUFDO01BQ3hCQyxnQkFBZ0IsRUFBRSxLQUFLO01BQ3ZCSCx1QkFBdUIsRUFBRUg7SUFDM0IsQ0FBQyxDQUFDLENBQUM7RUFDTDtBQUNGO0FBRUEsU0FBU08sMkJBQTJCQSxDQUFBLENBQUUsRUFBRSxPQUFPLENBQUM7RUFDOUMsTUFBTTtJQUFFQyxRQUFRO0lBQUVDO0VBQVMsQ0FBQyxHQUFHaEIsNEJBQTRCLENBQUMsQ0FBQztFQUM3RDtFQUNBLElBQUksQ0FBQ2UsUUFBUSxJQUFJLENBQUNDLFFBQVEsRUFBRSxPQUFPLEtBQUs7RUFDeEM7RUFDQVYsc0JBQXNCLENBQUMsQ0FBQztFQUV4QixNQUFNRSxNQUFNLEdBQUdKLGVBQWUsQ0FBQyxDQUFDO0VBQ2hDLElBQUksQ0FBQ0ksTUFBTSxDQUFDSSxxQkFBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sS0FBSztFQUMxRCxJQUFJSixNQUFNLENBQUNLLGdCQUFnQixFQUFFLE9BQU8sS0FBSztFQUV6QyxPQUFPLElBQUk7QUFDYjtBQUVBLE9BQU8sU0FBQUkseUJBQUE7RUFDTCxPQUFBQyxJQUFBLElBQWVyQixRQUFRLENBQUNzQixLQUFtQyxDQUFDO0VBQUEsT0FDckRELElBQUk7QUFBQTtBQUZOLFNBQUFDLE1BQUE7RUFBQSxPQUN5QkwsMkJBQTJCLENBQUMsQ0FBQztBQUFBO0FBSTdELE9BQU8sU0FBU00sNkJBQTZCQSxDQUFBLENBQUUsRUFBRSxJQUFJLENBQUM7RUFDcEQsSUFBSUMsUUFBUSxHQUFHLENBQUM7RUFDaEJoQixnQkFBZ0IsQ0FBQ00sSUFBSSxJQUFJO0lBQ3ZCVSxRQUFRLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoRCxPQUFPO01BQ0wsR0FBR0QsSUFBSTtNQUNQQyxxQkFBcUIsRUFBRVM7SUFDekIsQ0FBQztFQUNILENBQUMsQ0FBQztFQUNGdEIsUUFBUSxDQUFDLGlDQUFpQyxFQUFFO0lBQzFDdUIsVUFBVSxFQUFFRDtFQUNkLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0EsT0FBTyxTQUFBRSxrQkFBQTtFQUFBLE1BQUFDLENBQUEsR0FBQUMsRUFBQTtFQUFBLElBQUFDLEVBQUE7RUFBQSxJQUFBRixDQUFBLFFBQUFHLE1BQUEsQ0FBQUMsR0FBQTtJQUNMLE1BQUFDLE1BQUEsR0FBZTNCLHVCQUF1QixDQUFDLENBQUM7SUFFdEN3QixFQUFBLElBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBUixLQUFPLENBQUMsQ0FDWixDQUFDLElBQUksQ0FBTyxLQUFRLENBQVIsUUFBUSxDQUFDLEdBQUcsRUFBdkIsSUFBSSxDQUEwQixDQUFDLENBQUMsSUFBSSxDQUFPLEtBQVEsQ0FBUixRQUFRLENBQUMsR0FBRyxFQUF2QixJQUFJLENBQTJCLElBQUUsQ0FDbEUsQ0FBQyxJQUFJLENBQU8sS0FBUSxDQUFSLFFBQVEsQ0FBQyxHQUFHLEVBQXZCLElBQUksQ0FBMEIsRUFBRyxJQUFFLENBQ25DLENBQUFHLE1BQU0sR0FBTiw4QkFDaUM1QixrQkFBa0IsQ0FBQzRCLE1BQU0sQ0FBQywyQkFDN0IsR0FGOUIsMkJBRTZCLENBQ2hDLEVBTkMsSUFBSSxDQU1FO0lBQUFMLENBQUEsTUFBQUUsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQUYsQ0FBQTtFQUFBO0VBQUEsT0FOUEUsRUFNTztBQUFBIiwiaWdub3JlTGlzdCI6W119