Use frontend callback for broker reconnect
This commit is contained in:
parent
434be478e4
commit
fb9a5dbb18
@ -38,6 +38,12 @@ type BrokerStatusResponse = {
|
||||
const CALLBACK_STORAGE_KEY = "zerodha:callback";
|
||||
const CALLBACK_MAX_AGE_MS = 5 * 60 * 1000;
|
||||
|
||||
function buildReconnectRedirectUrl() {
|
||||
const url = new URL(`${window.location.origin}/login`);
|
||||
url.searchParams.set("flow", "reconnect");
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
export default function BrokerConnectDialog({
|
||||
layout = "desktop",
|
||||
open,
|
||||
@ -100,7 +106,9 @@ export default function BrokerConnectDialog({
|
||||
|
||||
const reconnectSavedMutation = useMutation({
|
||||
mutationFn: async () => {
|
||||
const res = await apiRequest("GET", "/broker/login-url");
|
||||
const redirectUrl = buildReconnectRedirectUrl();
|
||||
const params = new URLSearchParams({ redirectUrl });
|
||||
const res = await apiRequest("GET", `/broker/login-url?${params.toString()}`);
|
||||
return res.json() as Promise<{ loginUrl: string }>;
|
||||
},
|
||||
onSuccess: ({ loginUrl }) => {
|
||||
|
||||
@ -148,6 +148,12 @@ function formatRelativeSeconds(seconds: number) {
|
||||
return `in ${parts.join(" ")}`;
|
||||
}
|
||||
|
||||
function buildReconnectRedirectUrl() {
|
||||
const url = new URL(`${window.location.origin}/login`);
|
||||
url.searchParams.set("flow", "reconnect");
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
function firstNumber(...values: unknown[]) {
|
||||
for (const value of values) {
|
||||
const parsed = Number(value);
|
||||
@ -259,7 +265,9 @@ export default function PortfolioSection() {
|
||||
|
||||
async function startSavedBrokerReconnect() {
|
||||
try {
|
||||
const res = await apiRequest("GET", "/broker/login-url");
|
||||
const redirectUrl = buildReconnectRedirectUrl();
|
||||
const params = new URLSearchParams({ redirectUrl });
|
||||
const res = await apiRequest("GET", `/broker/login-url?${params.toString()}`);
|
||||
const data = (await res.json()) as { loginUrl?: string };
|
||||
if (!data?.loginUrl) {
|
||||
throw new Error("Reconnect link unavailable.");
|
||||
|
||||
@ -8,6 +8,7 @@ const CALLBACK_STORAGE_KEY = "zerodha:callback";
|
||||
const RETURN_PATH = "/portfolio";
|
||||
|
||||
type CallbackParams = {
|
||||
flow: string;
|
||||
status: string;
|
||||
requestToken: string;
|
||||
error: string;
|
||||
@ -17,6 +18,7 @@ type CallbackParams = {
|
||||
const parseParams = (): CallbackParams => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
return {
|
||||
flow: (params.get("flow") || "").trim(),
|
||||
status: (params.get("status") || "").trim(),
|
||||
requestToken: (params.get("request_token") || "").trim(),
|
||||
error: (params.get("error") || params.get("error_type") || "").trim(),
|
||||
@ -48,7 +50,9 @@ export default function ZerodhaCallback() {
|
||||
return;
|
||||
}
|
||||
|
||||
const url = `/broker/zerodha/callback?request_token=${encodeURIComponent(params.requestToken)}`;
|
||||
const callbackPath =
|
||||
params.flow === "reconnect" ? "/broker/callback" : "/broker/zerodha/callback";
|
||||
const url = `${callbackPath}?request_token=${encodeURIComponent(params.requestToken)}`;
|
||||
apiRequest("GET", url)
|
||||
.then(() => finalize("success"))
|
||||
.catch((err: any) => finalize("error", err?.message || "Unable to complete the login."));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user