From 8b3bcd88b1a503b9cae14814ce1166b16b4aa2c5 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sat, 3 Jan 2026 16:42:49 -0300 Subject: [PATCH 1/3] feat: add workwonders --- package.json | 1 + src/renderer/src/app.tsx | 57 ++++++++++++++++------ src/renderer/src/hooks/use-user-details.ts | 1 + src/types/index.ts | 1 + yarn.lock | 12 +++++ 5 files changed, 56 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index bb74198f..e60f83f8 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "user-agents": "^1.1.387", "uuid": "^13.0.0", "winreg": "^1.2.5", + "workwonders-sdk": "0.0.9", "ws": "^8.18.1", "yaml": "^2.6.1", "yup": "^1.5.0" diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 9334b5b9..376818d3 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { Sidebar, BottomPanel, Header, Toast } from "@renderer/components"; - +import { WorkWondersSdk } from "workwonders-sdk"; import { useAppDispatch, useAppSelector, @@ -52,6 +52,8 @@ export function App() { const { clearDownload, setLastPacket } = useDownload(); + const wokwondersRef = useRef(null); + const { hasActiveSubscription, fetchUserDetails, @@ -114,7 +116,24 @@ export function App() { return () => unsubscribe(); }, [updateLibrary]); - useEffect(() => { + const setupWorkWonders = useCallback( + async (token?: string, locale?: string) => { + if (wokwondersRef.current) return; + + wokwondersRef.current = new WorkWondersSdk(); + await wokwondersRef.current.init({ + organization: "hydra", + token, + locale, + }); + + await wokwondersRef.current.initChangelogWidget(); + wokwondersRef.current.initChangelogWidgetMini(); + }, + [wokwondersRef] + ); + + const setupExternalResources = useCallback(async () => { const cachedUserDetails = window.localStorage.getItem("userDetails"); if (cachedUserDetails) { @@ -125,21 +144,26 @@ export function App() { dispatch(setProfileBackground(profileBackground)); } - fetchUserDetails() - .then((response) => { - if (response) { - updateUserDetails(response); - } - }) - .finally(() => { - if (document.getElementById("external-resources")) return; + const userPreferences = await window.electron.getUserPreferences(); + const userDetails = await fetchUserDetails().catch(() => null); - const $script = document.createElement("script"); - $script.id = "external-resources"; - $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; - document.head.appendChild($script); - }); - }, [fetchUserDetails, updateUserDetails, dispatch]); + if (userDetails) { + updateUserDetails(userDetails); + } + + setupWorkWonders(userDetails?.workwondersJwt, userPreferences?.language); + + if (!document.getElementById("external-resources")) { + const $script = document.createElement("script"); + $script.id = "external-resources"; + $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; + document.head.appendChild($script); + } + }, [fetchUserDetails, updateUserDetails, dispatch, setupWorkWonders]); + + useEffect(() => { + setupExternalResources(); + }, [setupExternalResources]); const onSignIn = useCallback(() => { fetchUserDetails().then((response) => { @@ -203,6 +227,7 @@ export function App() { useEffect(() => { if (contentRef.current) contentRef.current.scrollTop = 0; + wokwondersRef.current?.notifyUrlChange(); }, [location.pathname, location.search]); useEffect(() => { diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index d8b9bbd2..3a60be22 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -59,6 +59,7 @@ export function useUserDetails() { username: userDetails?.username || "", subscription: userDetails?.subscription || null, featurebaseJwt: userDetails?.featurebaseJwt || "", + workwondersJwt: userDetails?.workwondersJwt || "", karma: userDetails?.karma || 0, }); }, diff --git a/src/types/index.ts b/src/types/index.ts index de792b05..d3d36006 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -187,6 +187,7 @@ export interface UserDetails { profileVisibility: ProfileVisibility; bio: string; featurebaseJwt: string; + workwondersJwt: string; subscription: Subscription | null; karma: number; quirks?: { diff --git a/yarn.lock b/yarn.lock index 9d354966..9950f599 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6354,6 +6354,11 @@ keyv@^4.0.0, keyv@^4.5.3: dependencies: json-buffer "3.0.1" +ky@^1.11.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/ky/-/ky-1.14.1.tgz#16f20b3bf3939abcc04e2a9613f47360fe5f64c9" + integrity sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw== + language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -9123,6 +9128,13 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +workwonders-sdk@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/workwonders-sdk/-/workwonders-sdk-0.0.9.tgz#ec2cf8f47304cc9c52b273383443f3978cd381a1" + integrity sha512-ZhzOXL+/Vq9wCzneE8NUvL3RVIaFMygFtjO5BKXSXsP1iSq2jZ9l3xedmxwZyyTvMYN5t4oIwCwFE0NWujtH9A== + dependencies: + ky "^1.11.0" + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" From 7ed514b6ef49e8bc3ac496e05836b3c6dbce5c16 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sat, 3 Jan 2026 16:54:42 -0300 Subject: [PATCH 2/3] feat: parse locale before ww init --- src/renderer/src/app.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 376818d3..ac7ded9f 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -120,11 +120,16 @@ export function App() { async (token?: string, locale?: string) => { if (wokwondersRef.current) return; + const possibleLocales = ["en", "pt", "ru"]; + + const parsedLocale = + possibleLocales.find((l) => l === locale?.slice(0, 2)) ?? "en"; + wokwondersRef.current = new WorkWondersSdk(); await wokwondersRef.current.init({ organization: "hydra", token, - locale, + locale: parsedLocale, }); await wokwondersRef.current.initChangelogWidget(); From e52f10a5ff858c36bdfdac62652d706800c8cdd2 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sat, 3 Jan 2026 17:17:16 -0300 Subject: [PATCH 3/3] chore: bump ww version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e60f83f8..99545c6e 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "user-agents": "^1.1.387", "uuid": "^13.0.0", "winreg": "^1.2.5", - "workwonders-sdk": "0.0.9", + "workwonders-sdk": "0.0.10", "ws": "^8.18.1", "yaml": "^2.6.1", "yup": "^1.5.0" diff --git a/yarn.lock b/yarn.lock index 9950f599..d98c554d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9128,10 +9128,10 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -workwonders-sdk@0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/workwonders-sdk/-/workwonders-sdk-0.0.9.tgz#ec2cf8f47304cc9c52b273383443f3978cd381a1" - integrity sha512-ZhzOXL+/Vq9wCzneE8NUvL3RVIaFMygFtjO5BKXSXsP1iSq2jZ9l3xedmxwZyyTvMYN5t4oIwCwFE0NWujtH9A== +workwonders-sdk@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/workwonders-sdk/-/workwonders-sdk-0.0.10.tgz#377167370a39c905c5228f8972c37c19004b7b21" + integrity sha512-bnswhlLRz1TCiqGV8l+VEOBej7u1SAkzLMEv6A60Sp0+S4j4pnmSve92KeOts/GYtUeNDuNM7fLPwZwMKY3sAg== dependencies: ky "^1.11.0"