Skip to content

Commit 000de7e

Browse files
authored
Feat(client&extension): 온보딩<->익스텐션 데이터 통신 작업 (#99)
* feat: 익스텐션 설치 동시에 이메일 받아오기 * feat: 이메일, 토큰 각각 스토리지 업데이트 * feat: 익스텐션 배포 전 TODO 확인
1 parent f7645b4 commit 000de7e

File tree

9 files changed

+59
-48
lines changed

9 files changed

+59
-48
lines changed

apps/client/src/pages/onBoarding/components/funnel/MainCard.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ const MainCard = () => {
4646
// api 구간
4747
const {mutate:postSignData} = usePostSignUp();
4848

49+
// 익스텐션에서부터 이메일 받아오는 구간!
50+
const [userEmail, setUserEmail] = useState("");
51+
52+
useEffect(() => {
53+
const params = new URLSearchParams(location.search);
54+
const emailParam = params.get("email");
55+
if (emailParam) {
56+
setUserEmail(emailParam);
57+
}
58+
}, [location.search]);
59+
60+
4961
// FCM 구간
5062
const [fcmToken, setFcmToken] = useState<string | null>(null);
5163
const app = initializeApp(firebaseConfig);
@@ -126,7 +138,7 @@ const [remindTime, setRemindTime] = useState('09:00');
126138
setRemindTime(normalizeTime(raw));
127139

128140
postSignData({
129-
"email": "tesdfdfsst@gmail.com", // TODO : 익스텐션에게서 메일 받기
141+
"email": userEmail,
130142
"remindDefault": remindTime,
131143
"fcmToken": fcmToken,
132144
},

apps/client/src/shared/apis/queries.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,18 @@ export const usePostSignUp = () => {
6666
mutationFn: (data: postSignUpRequest) => postSignUp(data),
6767
onSuccess: (data) => {
6868
const newToken = data?.data?.token || data?.token;
69-
69+
const sendTokenToExtension = (token: string) => {
70+
window.postMessage(
71+
{
72+
type: 'SET_TOKEN',
73+
token,
74+
},
75+
window.location.origin
76+
);
77+
};
7078
if (newToken) {
7179
localStorage.setItem('token', newToken);
80+
sendTokenToExtension(newToken);
7281
}
7382

7483
console.log('회원가입 성공:', data);

apps/extension/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"icons": {
77
"128": "icon.png"
88
},
9-
"permissions": ["activeTab", "tabs", "storage", "scripting", "bookmarks"],
9+
"permissions": ["activeTab", "tabs", "storage", "bookmarks", "identity","identity.email"],
1010
"background": {
1111
"service_worker": "src/background.js",
1212
"type": "module"

apps/extension/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const App = () => {
2424
};
2525

2626
const handleDuplicateRightClick = () => {
27-
window.location.href = "/dashboard";
27+
window.location.href = "https://www.pinback.today/";
2828
};
2929

3030
return (

apps/extension/src/apis/axiosInstance.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ apiRequest.interceptors.request.use(async (config) => {
2828
if (isNoAuth) return config;
2929

3030
const email = await new Promise<string | undefined>((resolve) => {
31-
chrome.storage.local.get('email', (result) => {
32-
resolve(result.email);
33-
});
31+
chrome.storage.local.get('userEmail', (result) => resolve(result.userEmail));
3432
});
3533

3634
let token = await new Promise<string | undefined>((resolve) => {
3735
chrome.storage.local.get('token', (result) => {
38-
resolve(result.token);
36+
resolve(result.token);
3937
});
4038
});
4139

apps/extension/src/background.ts

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,24 @@
11
console.log('백그라운드 기능');
2-
chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
3-
if (message.type === 'FETCH_OG_META') {
4-
fetch(message.url)
5-
.then((res) => res.text())
6-
.then((html) => {
7-
const parser = new DOMParser();
8-
const doc = parser.parseFromString(html, 'text/html');
9-
10-
const getMeta = (prop) =>
11-
doc
12-
.querySelector(`meta[property="${prop}"]`)
13-
?.getAttribute('content') || '';
14-
15-
const makeAbsoluteUrl = (base, img) => {
16-
try {
17-
return img ? new URL(img, base).href : '';
18-
} catch {
19-
return img;
20-
}
21-
};
22-
23-
const image = getMeta('og:image');
24-
25-
sendResponse({
26-
title: getMeta('og:title'),
27-
description: getMeta('og:description'),
28-
siteName: getMeta('og:site_name'),
29-
image: makeAbsoluteUrl(message.url, image),
30-
url: getMeta('og:url') || message.url,
2+
chrome.runtime.onInstalled.addListener((details) => {
3+
if (details.reason === 'install') {
4+
chrome.identity.getProfileUserInfo(function (info) {
5+
chrome.storage.local.set({ 'userEmail': info.email }, () => {
6+
console.log(info.email);
317
});
32-
})
33-
.catch((err) => {
34-
console.error('OG fetch 실패:', err);
35-
sendResponse(null);
36-
});
37-
return true; // async 응답
8+
setTimeout(() => {
9+
chrome.tabs.create({
10+
url: `http://localhost:5173/onboarding?email=${info.email}`,
11+
});
12+
}, 1000);
13+
});
3814
}
3915
});
16+
17+
18+
chrome.runtime.onMessage.addListener((message) => {
19+
if (message.type === 'SET_TOKEN') {
20+
chrome.storage.local.set({ 'token': message.token }, () => {
21+
console.log('Token saved!', message.token);
22+
});
23+
}
24+
});

apps/extension/src/content.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
11
console.log('컨텐츠 스크립트 로드됨');
2+
window.addEventListener('message', (event) => {
3+
if (event.source !== window) return;
4+
if (event.data.type === 'SET_TOKEN') {
5+
chrome.runtime.sendMessage({
6+
type: 'SET_TOKEN',
7+
token: event.data.token,
8+
});
9+
}
10+
});

apps/extension/src/hooks/useSaveBookmarks.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ export const useSaveBookmark = () => {
3939
console.log('크롬 북마크바에 저장 완료: ', newBookmark);
4040
}
4141
);
42-
43-
// TODO: window.close();
42+
window.close();
4443
} catch (error) {
4544
console.error('저장 중 오류:', error);
4645
}

apps/extension/src/pages/MainPop.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ const MainPop = ({type, savedData}: MainPopProps) => {
3838

3939
useEffect(() => {
4040
if (!loading && !title) {
41-
// TODO 개발 중에는 주석처리 (최종엔 주석 제거할거임)
42-
// alert("이 페이지는 저장할 수 없어요 🐿️");
43-
// window.close();
41+
alert("이 페이지는 저장할 수 없어요 🐿️");
42+
window.close();
4443
}
4544
}, [loading, title]);
4645

0 commit comments

Comments
 (0)