From 6baa96ff84ec0b3d00a81ac245493a5c538ccfa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20De=20Freitas?= <6485562+adefreitas@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:00:33 +0100 Subject: [PATCH] fix(ENG-12551): update connection attempts URL to /hub/ path Move from /connect_sessions/connection_attempts to /hub/connection_attempts to leverage CloudFront's existing CORS handling for /hub/ paths. Co-Authored-By: Claude Sonnet 4.6 --- .../hooks/useIntegrationPicker.ts | 23 +++++++++++++------ src/modules/integration-picker/queries.ts | 10 ++++---- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/modules/integration-picker/hooks/useIntegrationPicker.ts b/src/modules/integration-picker/hooks/useIntegrationPicker.ts index f4836fd..da5479b 100644 --- a/src/modules/integration-picker/hooks/useIntegrationPicker.ts +++ b/src/modules/integration-picker/hooks/useIntegrationPicker.ts @@ -536,7 +536,9 @@ export const useIntegrationPicker = ({ const poll = async () => { if (!pollingIntervalRef.current) return; - const result = await pollConnectionAttempt(baseUrl, attemptId).catch(() => null); + const result = await pollConnectionAttempt(baseUrl, token, attemptId).catch( + () => null, + ); if (!result) { if (debugRef.current) { @@ -554,6 +556,13 @@ export const useIntegrationPicker = ({ oauthResolvedRef.current = true; teardownOAuth(); handleSuccess({ id: result.account.id, provider }); + parent.postMessage( + { + type: EventType.AccountConnected, + account: { id: result.account.id, provider }, + }, + '*', + ); } else if (result.status === 'error') { oauthResolvedRef.current = true; teardownOAuth(); @@ -575,7 +584,7 @@ export const useIntegrationPicker = ({ pollingIntervalRef.current = window.setTimeout(poll, 2000); }, - [baseUrl, teardownOAuth, handleSuccess], + [baseUrl, token, teardownOAuth, handleSuccess], ); const startPopupWatcher = useCallback(() => { @@ -608,7 +617,7 @@ export const useIntegrationPicker = ({ const connectionAttemptId = connectionAttemptIdRef.current; teardownOAuth(); if (connectionAttemptId) { - void cancelConnectionAttempt(baseUrl, connectionAttemptId); + void cancelConnectionAttempt(baseUrl, token, connectionAttemptId); } if (debugRef.current) { console.debug('[hub] popup closed, resetting state'); @@ -616,7 +625,7 @@ export const useIntegrationPicker = ({ setConnectionState({ loading: false, success: false }); }; checkStateTimeoutRef.current = window.setTimeout(check, 1000); - }, [processMessageCallback, teardownOAuth, baseUrl]); + }, [processMessageCallback, teardownOAuth, baseUrl, token]); const handleConnect = useCallback(async () => { if (!selectedIntegration) { @@ -726,7 +735,7 @@ export const useIntegrationPicker = ({ } teardownOAuth(); if (attemptId) { - void cancelConnectionAttempt(baseUrl, attemptId); + void cancelConnectionAttempt(baseUrl, token, attemptId); } setConnectionState({ loading: false, @@ -842,9 +851,9 @@ export const useIntegrationPicker = ({ teardownOAuth(); setConnectionState({ loading: false, success: false }); if (attemptId) { - void cancelConnectionAttempt(baseUrl, attemptId); + void cancelConnectionAttempt(baseUrl, token, attemptId); } - }, [baseUrl, teardownOAuth]); + }, [baseUrl, token, teardownOAuth]); const isLoading = isLoadingHubData || isLoadingConnectorData || isLoadingAccountData; const hasError = !!(errorHubData || errorConnectorData || errorAccountData); diff --git a/src/modules/integration-picker/queries.ts b/src/modules/integration-picker/queries.ts index 049631f..f569ee9 100644 --- a/src/modules/integration-picker/queries.ts +++ b/src/modules/integration-picker/queries.ts @@ -111,21 +111,21 @@ export interface ConnectionAttemptResult { export const createConnectionAttempt = async (baseUrl: string, token: string) => { return await postRequest<{ id: string }>({ url: `${baseUrl}/hub/connection_attempts`, - headers: { 'Content-Type': 'application/json' }, + headers: { 'Content-Type': 'application/json', 'x-hub-session-token': token }, body: { token }, }); }; -export const pollConnectionAttempt = async (baseUrl: string, id: string) => { +export const pollConnectionAttempt = async (baseUrl: string, token: string, id: string) => { return await getRequest({ url: `${baseUrl}/hub/connection_attempts/${id}`, - headers: { 'Content-Type': 'application/json' }, + headers: { 'Content-Type': 'application/json', 'x-hub-session-token': token }, }); }; -export const cancelConnectionAttempt = async (baseUrl: string, id: string) => { +export const cancelConnectionAttempt = async (baseUrl: string, token: string, id: string) => { return await deleteRequest({ url: `${baseUrl}/hub/connection_attempts/${id}`, - headers: { 'Content-Type': 'application/json' }, + headers: { 'Content-Type': 'application/json', 'x-hub-session-token': token }, }); };