TeleportError.tsx
components/TeleportError.tsx
189
Lines
18824
Bytes
3
Exports
9
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with ui-flow. It contains 189 lines, 9 detected imports, and 3 detected exports.
Important relationships
Detected exports
TeleportLocalErrorTypeTeleportErrorgetTeleportErrors
Keywords
checkerrorselsereactneedsloginerrorstoignoreoncanceltextteleportlocalerrortypeneedsgitstashoncomplete
Detected imports
react/compiler-runtimereactsrc/utils/background/remote/preconditions.jssrc/utils/gracefulShutdown.js../ink.js./ConsoleOAuthFlow.js./CustomSelect/index.js./design-system/Dialog.js./TeleportStash.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
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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