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