mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-06 15:22:12 +03:00
OmniRoute is an intelligent API gateway that unifies 20+ AI providers behind a single OpenAI-compatible endpoint. Features include intelligent routing with 6 strategies, multi-format translation (OpenAI/Claude/Gemini/Responses API), circuit breakers, semantic caching, combo fallback chains, real-time health monitoring, and a full dashboard with provider management, analytics, and CLI tool integration. Key highlights: - 20+ providers (Claude Code, Codex, Gemini CLI, GitHub Copilot, iFlow, Qwen, Kiro, etc.) - 6 routing strategies (Fill First, Round Robin, P2C, Random, Least Used, Cost Optimized) - Export/Import database backup with full archive support - Translator Playground with 4 modes (Playground, Chat Tester, Test Bench, Live Monitor) - 100% TypeScript across src/ and open-sse/ - Docker support with multi-stage builds - Comprehensive documentation and 9 dashboard screenshots
99 lines
2.7 KiB
TypeScript
99 lines
2.7 KiB
TypeScript
"use client";
|
|
|
|
import { useState, useCallback } from "react";
|
|
import PropTypes from "prop-types";
|
|
import OAuthModal from "./OAuthModal";
|
|
import KiroAuthModal from "./KiroAuthModal";
|
|
import KiroSocialOAuthModal from "./KiroSocialOAuthModal";
|
|
|
|
/**
|
|
* Kiro OAuth Wrapper
|
|
* Orchestrates between method selection, device code flow, and social login flow
|
|
*/
|
|
export default function KiroOAuthWrapper({ isOpen, providerInfo, onSuccess, onClose }) {
|
|
const [authMethod, setAuthMethod] = useState(null); // null | "builder-id" | "idc" | "social" | "import"
|
|
const [socialProvider, setSocialProvider] = useState(null); // "google" | "github"
|
|
const [idcConfig, setIdcConfig] = useState(null);
|
|
|
|
const handleMethodSelect = useCallback(
|
|
(method, config) => {
|
|
if (method === "builder-id") {
|
|
// Use device code flow (AWS Builder ID)
|
|
setAuthMethod("builder-id");
|
|
} else if (method === "idc") {
|
|
// Use device code flow with IDC config
|
|
setAuthMethod("idc");
|
|
setIdcConfig(config);
|
|
} else if (method === "social") {
|
|
// Use social login with manual callback
|
|
setAuthMethod("social");
|
|
setSocialProvider(config.provider);
|
|
} else if (method === "import") {
|
|
// Import handled in KiroAuthModal, just close
|
|
onSuccess?.();
|
|
}
|
|
},
|
|
[onSuccess]
|
|
);
|
|
|
|
const handleBack = () => {
|
|
setAuthMethod(null);
|
|
setSocialProvider(null);
|
|
setIdcConfig(null);
|
|
};
|
|
|
|
const handleSocialSuccess = () => {
|
|
setAuthMethod(null);
|
|
setSocialProvider(null);
|
|
onSuccess?.();
|
|
};
|
|
|
|
const handleDeviceSuccess = () => {
|
|
setAuthMethod(null);
|
|
setIdcConfig(null);
|
|
onSuccess?.();
|
|
};
|
|
|
|
// Show method selection first
|
|
if (!authMethod) {
|
|
return <KiroAuthModal isOpen={isOpen} onMethodSelect={handleMethodSelect} onClose={onClose} />;
|
|
}
|
|
|
|
// Show device code flow (Builder ID or IDC)
|
|
if (authMethod === "builder-id" || authMethod === "idc") {
|
|
return (
|
|
<OAuthModal
|
|
isOpen={isOpen}
|
|
provider="kiro"
|
|
providerInfo={providerInfo}
|
|
onSuccess={handleDeviceSuccess}
|
|
onClose={handleBack}
|
|
idcConfig={idcConfig}
|
|
/>
|
|
);
|
|
}
|
|
|
|
// Show social login flow (Google/GitHub with manual callback)
|
|
if (authMethod === "social" && socialProvider) {
|
|
return (
|
|
<KiroSocialOAuthModal
|
|
isOpen={isOpen}
|
|
provider={socialProvider}
|
|
onSuccess={handleSocialSuccess}
|
|
onClose={handleBack}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
KiroOAuthWrapper.propTypes = {
|
|
isOpen: PropTypes.bool.isRequired,
|
|
providerInfo: PropTypes.shape({
|
|
name: PropTypes.string,
|
|
}),
|
|
onSuccess: PropTypes.func,
|
|
onClose: PropTypes.func.isRequired,
|
|
};
|