π File detail
components/TeleportError.tsx
π― Use case
This file lives under βcomponents/β, which covers shared React UI pieces. On the API surface it exposes TeleportLocalErrorType, TeleportError, and getTeleportErrors β mainly types, interfaces, or factory objects. Dependencies touch React UI and src. It composes internal code from ink, ConsoleOAuthFlow, CustomSelect, design-system, and TeleportStash (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { c as _c } from "react/compiler-runtime"; import React, { useCallback, useEffect, useState } from 'react'; import { checkIsGitClean, checkNeedsClaudeAiLogin } from 'src/utils/background/remote/preconditions.js'; import { gracefulShutdownSync } from 'src/utils/gracefulShutdown.js'; import { Box, Text } from '../ink.js';
π€ Exports (heuristic)
TeleportLocalErrorTypeTeleportErrorgetTeleportErrors
π External import roots
Package roots from from "β¦" (relative paths omitted).
reactsrc
π₯οΈ Source preview
import { c as _c } from "react/compiler-runtime";
import React, { useCallback, useEffect, useState } from 'react';
import { checkIsGitClean, checkNeedsClaudeAiLogin } from 'src/utils/background/remote/preconditions.js';
import { gracefulShutdownSync } from 'src/utils/gracefulShutdown.js';
import { Box, Text } from '../ink.js';
import { ConsoleOAuthFlow } from './ConsoleOAuthFlow.js';
import { Select } from './CustomSelect/index.js';
import { Dialog } from './design-system/Dialog.js';
import { TeleportStash } from './TeleportStash.js';
export type TeleportLocalErrorType = 'needsLogin' | 'needsGitStash';
type TeleportErrorProps = {
onComplete: () => void;
errorsToIgnore?: ReadonlySet<TeleportLocalErrorType>;
};
// Module-level sentinel so the default parameter has stable identity.
// Previously `= new Set()` created a fresh Set every render, which put
// a new object in checkErrors' deps and caused the mount effect to
// re-fire on every render.
const EMPTY_ERRORS_TO_IGNORE: ReadonlySet<TeleportLocalErrorType> = new Set();
export function TeleportError(t0) {
const $ = _c(18);
const {
onComplete,
errorsToIgnore: t1
} = t0;
const errorsToIgnore = t1 === undefined ? EMPTY_ERRORS_TO_IGNORE : t1;
const [currentError, setCurrentError] = useState(null);
const [isLoggingIn, setIsLoggingIn] = useState(false);
let t2;
if ($[0] !== errorsToIgnore || $[1] !== onComplete) {
t2 = async () => {
const currentErrors = await getTeleportErrors();
const filteredErrors = new Set(Array.from(currentErrors).filter(error => !errorsToIgnore.has(error)));
if (filteredErrors.size === 0) {
onComplete();
return;
}
if (filteredErrors.has("needsLogin")) {
setCurrentError("needsLogin");
} else {
if (filteredErrors.has("needsGitStash")) {
setCurrentError("needsGitStash");
}
}
};
$[0] = errorsToIgnore;
$[1] = onComplete;
$[2] = t2;
} else {
t2 = $[2];
}
const checkErrors = t2;
let t3;
let t4;
if ($[3] !== checkErrors) {
t3 = () => {
checkErrors();
};
t4 = [checkErrors];
$[3] = checkErrors;
$[4] = t3;
$[5] = t4;
} else {
t3 = $[4];
t4 = $[5];
}
useEffect(t3, t4);
const onCancel = _temp;
let t5;
if ($[6] !== checkErrors) {
t5 = () => {
setIsLoggingIn(false);
checkErrors();
};
$[6] = checkErrors;
$[7] = t5;
} else {
t5 = $[7];
}
const handleLoginComplete = t5;
let t6;
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
t6 = () => {
setIsLoggingIn(true);
};
$[8] = t6;
} else {
t6 = $[8];
}
const handleLoginWithClaudeAI = t6;
let t7;
if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
t7 = value => {
if (value === "login") {
handleLoginWithClaudeAI();
} else {
onCancel();
}
};
$[9] = t7;
} else {
t7 = $[9];
}
const handleLoginDialogSelect = t7;
let t8;
if ($[10] !== checkErrors) {
t8 = () => {
checkErrors();
};
$[10] = checkErrors;
$[11] = t8;
} else {
t8 = $[11];
}
const handleStashComplete = t8;
if (!currentError) {
return null;
}
switch (currentError) {
case "needsGitStash":
{
let t9;
if ($[12] !== handleStashComplete) {
t9 = <TeleportStash onStashAndContinue={handleStashComplete} onCancel={onCancel} />;
$[12] = handleStashComplete;
$[13] = t9;
} else {
t9 = $[13];
}
return t9;
}
case "needsLogin":
{
if (isLoggingIn) {
let t9;
if ($[14] !== handleLoginComplete) {
t9 = <ConsoleOAuthFlow onDone={handleLoginComplete} mode="login" forceLoginMethod="claudeai" />;
$[14] = handleLoginComplete;
$[15] = t9;
} else {
t9 = $[15];
}
return t9;
}
let t9;
if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
t9 = <Box flexDirection="column"><Text dimColor={true}>Teleport requires a Claude.ai account.</Text><Text dimColor={true}>Your Claude Pro/Max subscription will be used by Claude Code.</Text></Box>;
$[16] = t9;
} else {
t9 = $[16];
}
let t10;
if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
t10 = <Dialog title="Log in to Claude" onCancel={onCancel}>{t9}<Select options={[{
label: "Login with Claude account",
value: "login"
}, {
label: "Exit",
value: "exit"
}]} onChange={handleLoginDialogSelect} /></Dialog>;
$[17] = t10;
} else {
t10 = $[17];
}
return t10;
}
}
}
/**
* Gets current teleport errors that need to be resolved
* @returns Set of teleport error types that need to be handled
*/
function _temp() {
gracefulShutdownSync(0);
}
export async function getTeleportErrors(): Promise<Set<TeleportLocalErrorType>> {
const errors = new Set<TeleportLocalErrorType>();
const [needsLogin, isGitClean] = await Promise.all([checkNeedsClaudeAiLogin(), checkIsGitClean()]);
if (needsLogin) {
errors.add('needsLogin');
}
if (!isGitClean) {
errors.add('needsGitStash');
}
return errors;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJjaGVja0lzR2l0Q2xlYW4iLCJjaGVja05lZWRzQ2xhdWRlQWlMb2dpbiIsImdyYWNlZnVsU2h1dGRvd25TeW5jIiwiQm94IiwiVGV4dCIsIkNvbnNvbGVPQXV0aEZsb3ciLCJTZWxlY3QiLCJEaWFsb2ciLCJUZWxlcG9ydFN0YXNoIiwiVGVsZXBvcnRMb2NhbEVycm9yVHlwZSIsIlRlbGVwb3J0RXJyb3JQcm9wcyIsIm9uQ29tcGxldGUiLCJlcnJvcnNUb0lnbm9yZSIsIlJlYWRvbmx5U2V0IiwiRU1QVFlfRVJST1JTX1RPX0lHTk9SRSIsIlNldCIsIlRlbGVwb3J0RXJyb3IiLCJ0MCIsIiQiLCJfYyIsInQxIiwidW5kZWZpbmVkIiwiY3VycmVudEVycm9yIiwic2V0Q3VycmVudEVycm9yIiwiaXNMb2dnaW5nSW4iLCJzZXRJc0xvZ2dpbmdJbiIsInQyIiwiY3VycmVudEVycm9ycyIsImdldFRlbGVwb3J0RXJyb3JzIiwiZmlsdGVyZWRFcnJvcnMiLCJBcnJheSIsImZyb20iLCJmaWx0ZXIiLCJlcnJvciIsImhhcyIsInNpemUiLCJjaGVja0Vycm9ycyIsInQzIiwidDQiLCJvbkNhbmNlbCIsIl90ZW1wIiwidDUiLCJoYW5kbGVMb2dpbkNvbXBsZXRlIiwidDYiLCJTeW1ib2wiLCJmb3IiLCJoYW5kbGVMb2dpbldpdGhDbGF1ZGVBSSIsInQ3IiwidmFsdWUiLCJoYW5kbGVMb2dpbkRpYWxvZ1NlbGVjdCIsInQ4IiwiaGFuZGxlU3Rhc2hDb21wbGV0ZSIsInQ5IiwidDEwIiwibGFiZWwiLCJQcm9taXNlIiwiZXJyb3JzIiwibmVlZHNMb2dpbiIsImlzR2l0Q2xlYW4iLCJhbGwiLCJhZGQiXSwic291cmNlcyI6WyJUZWxlcG9ydEVycm9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNoZWNrSXNHaXRDbGVhbixcbiAgY2hlY2tOZWVkc0NsYXVkZUFpTG9naW4sXG59IGZyb20gJ3NyYy91dGlscy9iYWNrZ3JvdW5kL3JlbW90ZS9wcmVjb25kaXRpb25zLmpzJ1xuaW1wb3J0IHsgZ3JhY2VmdWxTaHV0ZG93blN5bmMgfSBmcm9tICdzcmMvdXRpbHMvZ3JhY2VmdWxTaHV0ZG93bi5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IENvbnNvbGVPQXV0aEZsb3cgfSBmcm9tICcuL0NvbnNvbGVPQXV0aEZsb3cuanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJy4vZGVzaWduLXN5c3RlbS9EaWFsb2cuanMnXG5pbXBvcnQgeyBUZWxlcG9ydFN0YXNoIH0gZnJvbSAnLi9UZWxlcG9ydFN0YXNoLmpzJ1xuXG5leHBvcnQgdHlwZSBUZWxlcG9ydExvY2FsRXJyb3JUeXBlID0gJ25lZWRzTG9naW4nIHwgJ25lZWRzR2l0U3Rhc2gnXG5cbnR5cGUgVGVsZXBvcnRFcnJvclByb3BzID0ge1xuICBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkXG4gIGVycm9yc1RvSWdub3JlPzogUmVhZG9ubHlTZXQ8VGVsZXBvcnRMb2NhbEVycm9yVHlwZT5cbn1cblxuLy8gTW9kdWxlLWxldmVsIHNlbnRpbmVsIHNvIHRoZSBkZWZhdWx0IHBhcmFtZXRlciBoYXMgc3RhYmxlIGlkZW50aXR5LlxuLy8gUHJldmlvdXNseSBgPSBuZXcgU2V0KClgIGNyZWF0ZWQgYSBmcmVzaCBTZXQgZXZlcnkgcmVuZGVyLCB3aGljaCBwdXRcbi8vIGEgbmV3IG9iamVjdCBpbiBjaGVja0Vycm9ycycgZGVwcyBhbmQgY2F1c2VkIHRoZSBtb3VudCBlZmZlY3QgdG9cbi8vIHJlLWZpcmUgb24gZXZlcnkgcmVuZGVyLlxuY29uc3QgRU1QVFlfRVJST1JTX1RPX0lHTk9SRTogUmVhZG9ubHlTZXQ8VGVsZXBvcnRMb2NhbEVycm9yVHlwZT4gPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIFRlbGVwb3J0RXJyb3Ioe1xuICBvbkNvbXBsZXRlLFxuICBlcnJvcnNUb0lnbm9yZSA9IEVNUFRZX0VSUk9SU19UT19JR05PUkUsXG59OiBUZWxlcG9ydEVycm9yUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbY3VycmVudEVycm9yLCBzZXRDdXJyZW50RXJyb3JdID1cbiAgICB1c2VTdGF0ZTxUZWxlcG9ydExvY2FsRXJyb3JUeXBlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9nZ2luZ0luLCBzZXRJc0xvZ2dpbmdJbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcblxuICAvLyBDaGVjayBmb3IgZXJyb3JzIG9uIG1vdW50IGFuZCB3aGVuIGVycm9yIHJlc29sdXRpb24gb2NjdXJzXG4gIGNvbnN0IGNoZWNrRXJyb3JzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRFcnJvcnMgPSBhd2FpdCBnZXRUZWxlcG9ydEVycm9ycygpXG4gICAgY29uc3QgZmlsdGVyZWRFcnJvcnMgPSBuZXcgU2V0KFxuICAgICAgQXJyYXkuZnJvbShjdXJyZW50RXJyb3JzKS5maWx0ZXIoXG4gICAgICAgIChlcnJvcjogVGVsZXBvcnRMb2NhbEVycm9yVHlwZSkgPT4gIWVycm9yc1RvSWdub3JlLmhhcyhlcnJvciksXG4gICAgICApLFxuICAgIClcblxuICAgIC8vIElmIG5vIGVycm9ycyByZW1haW4sIGNhbGwgb25Db21wbGV0ZVxuICAgIGlmIChmaWx0ZXJlZEVycm9ycy5zaXplID09PSAwKSB7XG4gICAgICBvbkNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNldCBjdXJyZW50IGVycm9yIHRvIGhhbmRsZSAocHJpb3JpdGl6ZSBsb2dpbiBvdmVyIGdpdClcbiAgICBpZiAoZmlsdGVyZWRFcnJvcnMuaGFzKCduZWVkc0xvZ2luJykpIHtcbiAgICAgIHNldEN1cnJlbnRFcnJvcignbmVlZHNMb2dpbicpXG4gICAgfSBlbHNlIGlmIChmaWx0ZXJlZEVycm9ycy5oYXMoJ25lZWRzR2l0U3Rhc2gnKSkge1xuICAgICAgc2V0Q3VycmVudEVycm9yKCduZWVkc0dpdFN0YXNoJylcbiAgICB9XG4gIH0sIFtvbkNvbXBsZXRlLCBlcnJvcnNUb0lnbm9yZV0pXG5cbiAgLy8gQ2hlY2sgZXJyb3JzIG9uIG1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBjaGVja0Vycm9ycygpXG4gIH0sIFtjaGVja0Vycm9yc10pXG5cbiAgY29uc3Qgb25DYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZ3JhY2VmdWxTaHV0ZG93blN5bmMoMClcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlTG9naW5Db21wbGV0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvZ2dpbmdJbihmYWxzZSlcbiAgICB2b2lkIGNoZWNrRXJyb3JzKClcbiAgfSwgW2NoZWNrRXJyb3JzXSlcblxuICBjb25zdCBoYW5kbGVMb2dpbldpdGhDbGF1ZGVBSSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvZ2dpbmdJbih0cnVlKVxuICB9LCBbc2V0SXNMb2dnaW5nSW5dKVxuXG4gIGNvbnN0IGhhbmRsZUxvZ2luRGlhbG9nU2VsZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ2xvZ2luJykge1xuICAgICAgICBoYW5kbGVMb2dpbldpdGhDbGF1ZGVBSSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2VyIHNlbGVjdGVkIGV4aXRcbiAgICAgICAgb25DYW5jZWwoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUxvZ2luV2l0aENsYXVkZUFJLCBvbkNhbmNlbF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVTdGFzaENvbXBsZXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHZvaWQgY2hlY2tFcnJvcnMoKVxuICB9LCBbY2hlY2tFcnJvcnNdKVxuXG4gIC8vIERvbid0IHJlbmRlciBhbnl0aGluZyBpZiBubyBjdXJyZW50IGVycm9yIChvbkNvbXBsZXRlIHdpbGwgYmUgY2FsbGVkKVxuICBpZiAoIWN1cnJlbnRFcnJvcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBzd2l0Y2ggKGN1cnJlbnRFcnJvcikge1xuICAgIGNhc2UgJ25lZWRzR2l0U3Rhc2gnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRlbGVwb3J0U3Rhc2hcbiAgICAgICAgICBvblN0YXNoQW5kQ29udGludWU9e2hhbmRsZVN0YXNoQ29tcGxldGV9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICAvPlxuICAgICAgKVxuXG4gICAgY2FzZSAnbmVlZHNMb2dpbic6IHtcbiAgICAgIGlmIChpc0xvZ2dpbmdJbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDb25zb2xlT0F1dGhGbG93XG4gICAgICAgICAgICBvbkRvbmU9e2hhbmRsZUxvZ2luQ29tcGxldGV9XG4gICAgICAgICAgICBtb2RlPVwibG9naW5cIlxuICAgICAgICAgICAgZm9yY2VMb2dpbk1ldGhvZD1cImNsYXVkZWFpXCJcbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEaWFsb2cgdGl0bGU9XCJMb2cgaW4gdG8gQ2xhdWRlXCIgb25DYW5jZWw9e29uQ2FuY2VsfT5cbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlRlbGVwb3J0IHJlcXVpcmVzIGEgQ2xhdWRlLmFpIGFjY291bnQuPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgIFlvdXIgQ2xhdWRlIFByby9NYXggc3Vic2NyaXB0aW9uIHdpbGwgYmUgdXNlZCBieSBDbGF1ZGUgQ29kZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdMb2dpbiB3aXRoIENsYXVkZSBhY2NvdW50JywgdmFsdWU6ICdsb2dpbicgfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ0V4aXQnLCB2YWx1ZTogJ2V4aXQnIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUxvZ2luRGlhbG9nU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRGlhbG9nPlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldHMgY3VycmVudCB0ZWxlcG9ydCBlcnJvcnMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkXG4gKiBAcmV0dXJucyBTZXQgb2YgdGVsZXBvcnQgZXJyb3IgdHlwZXMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFRlbGVwb3J0RXJyb3JzKCk6IFByb21pc2U8XG4gIFNldDxUZWxlcG9ydExvY2FsRXJyb3JUeXBlPlxuPiB7XG4gIGNvbnN0IGVycm9ycyA9IG5ldyBTZXQ8VGVsZXBvcnRMb2NhbEVycm9yVHlwZT4oKVxuXG4gIGNvbnN0IFtuZWVkc0xvZ2luLCBpc0dpdENsZWFuXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBjaGVja05lZWRzQ2xhdWRlQWlMb2dpbigpLFxuICAgIGNoZWNrSXNHaXRDbGVhbigpLFxuICBdKVxuXG4gIGlmIChuZWVkc0xvZ2luKSB7XG4gICAgZXJyb3JzLmFkZCgnbmVlZHNMb2dpbicpXG4gIH1cbiAgaWYgKCFpc0dpdENsZWFuKSB7XG4gICAgZXJyb3JzLmFkZCgnbmVlZHNHaXRTdGFzaCcpXG4gIH1cblxuICBy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