From 009d12d364f94e546eaf1a42c088290498e59536 Mon Sep 17 00:00:00 2001 From: devmosis Date: Thu, 23 Apr 2026 16:21:32 +0900 Subject: [PATCH 01/21] user_dashboard: add service shutdown notice modal --- apps/user_dashboard/src/app/layout.tsx | 6 +- .../service_shutdown_modal.module.scss | 146 ++++++++++++++++++ .../service_shutdown_modal.tsx | 124 +++++++++++++++ 3 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss create mode 100644 apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx diff --git a/apps/user_dashboard/src/app/layout.tsx b/apps/user_dashboard/src/app/layout.tsx index d428db613..80f4d57d8 100644 --- a/apps/user_dashboard/src/app/layout.tsx +++ b/apps/user_dashboard/src/app/layout.tsx @@ -8,6 +8,7 @@ import "@oko-wallet/oko-common-ui/styles/shadow.scss"; import "@oko-wallet/oko-common-ui/styles/animation.scss"; import { Providers } from "@oko-wallet-user-dashboard/components/providers/providers"; +import { ServiceShutdownModal } from "@oko-wallet-user-dashboard/components/service_shutdown_modal/service_shutdown_modal"; import "./globals.scss"; @@ -62,7 +63,10 @@ export default function RootLayout({ className={`${geistSans.variable} ${geistMono.variable} ${inter.variable} ${robotoMono.variable}`} suppressHydrationWarning > - {children} + + {children} + + ); diff --git a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss new file mode 100644 index 000000000..299d1b638 --- /dev/null +++ b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss @@ -0,0 +1,146 @@ +@use "../../styles/viewport.module.scss" as *; + +.pill { + position: fixed; + right: 24px; + bottom: 24px; + display: flex; + align-items: center; + gap: 10px; + height: 58px; + padding: 0 24px; + border: 1px solid var(--border-primary); + border-radius: 8px; + background: var(--bg-tertiary); + box-shadow: var(--shadow-xl); + cursor: pointer; + z-index: 9; + font-family: Inter, sans-serif; + + &:hover { + background: var(--bg-secondary); + } +} + +.pillIcon { + flex-shrink: 0; +} + +.modalBackground { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + background: rgba(0, 0, 0, 0.4); +} + +.modal { + position: relative; + width: 100%; + max-width: 90vw; + max-height: 90vh; + + @media (min-width: $desktop_min_width) { + width: auto; + } +} + +.modalCard { + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: 16px; + box-shadow: var(--shadow-xl); + width: 100%; + max-width: 400px; + box-sizing: border-box; + padding: 0; + + @media (min-width: $desktop_min_width) { + width: 400px; + } +} + +.header { + display: flex; + justify-content: flex-end; + align-items: center; + padding: 20px 20px 0; +} + +.closeButton { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 6px; + border: none; + background: none; + border-radius: 8px; + cursor: pointer; + color: var(--fg-quaternary); + + &:hover { + background: var(--bg-secondary); + } +} + +.content { + display: flex; + flex-direction: column; + align-items: center; + padding: 0 20px 8px; +} + +.logoWrapper { + display: flex; + justify-content: center; + width: 100%; +} + +.title { + text-align: center; + width: 100%; +} + +.body { + text-align: center; + width: 100%; +} + +.warningBox { + display: flex; + align-items: flex-start; + gap: 8px; + width: 100%; + padding: 12px; + border-radius: 12px; + background: #fef0c7; + box-sizing: border-box; +} + +.warningText { + flex: 1; + color: #dc6803; + font-family: Inter, sans-serif; + font-size: var(--font-size-sm); + font-weight: var(--font-weight-medium); + line-height: 20px; + text-align: center; +} + +.footer { + display: flex; + width: 100%; + padding: 12px 24px 16px; + box-sizing: border-box; +} + +.footerButton { + flex: 1; +} diff --git a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx new file mode 100644 index 000000000..d2a190dfa --- /dev/null +++ b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -0,0 +1,124 @@ +"use client"; + +import { Button } from "@oko-wallet/oko-common-ui/button"; +import { Card } from "@oko-wallet/oko-common-ui/card"; +import { AlertTriangleIcon } from "@oko-wallet/oko-common-ui/icons/alert_triangle_icon"; +import { OkoLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_icon"; +import { XCloseIcon } from "@oko-wallet/oko-common-ui/icons/x_close"; +import { Spacing } from "@oko-wallet/oko-common-ui/spacing"; +import { Typography } from "@oko-wallet/oko-common-ui/typography"; +import { type FC, useState } from "react"; + +import styles from "./service_shutdown_modal.module.scss"; + +const SHUTDOWN_DATE_DISPLAY = "MM/DD"; + +export const ServiceShutdownModal: FC = () => { + const [isOpen, setIsOpen] = useState(true); + + const onOpen = () => setIsOpen(true); + const onClose = () => setIsOpen(false); + + return ( + <> + + + {isOpen && ( +
+
e.stopPropagation()} + > + +
+ +
+ +
+
+ +
+ + + +
+ + Please Export Your Private Key + +
+ + + +
+ + Oko is shutting down its service. + +
+ + + +
+

+ You must export your keys and migrate your Oko wallet to + another wallet. +

+
+ + + +
+ + After {SHUTDOWN_DATE_DISPLAY}, your Private Key will no + longer be accessible. + +
+ + +
+ +
+ +
+
+
+
+ )} + + ); +}; From f1732aecb229f655d77ffbed8aebe1ad083a1014 Mon Sep 17 00:00:00 2001 From: devmosis Date: Fri, 24 Apr 2026 22:50:01 +0900 Subject: [PATCH 02/21] user_dashboard: set service shutdown date to June 1 in notice modal --- .../service_shutdown_modal/service_shutdown_modal.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx index d2a190dfa..0062af07c 100644 --- a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx +++ b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -11,8 +11,6 @@ import { type FC, useState } from "react"; import styles from "./service_shutdown_modal.module.scss"; -const SHUTDOWN_DATE_DISPLAY = "MM/DD"; - export const ServiceShutdownModal: FC = () => { const [isOpen, setIsOpen] = useState(true); @@ -79,7 +77,7 @@ export const ServiceShutdownModal: FC = () => {
- Oko is shutting down its service. + Oko is shutting down its service on June 1.
@@ -96,8 +94,8 @@ export const ServiceShutdownModal: FC = () => {
- After {SHUTDOWN_DATE_DISPLAY}, your Private Key will no - longer be accessible. + After this date, your Private Key will no longer be + accessible.
From 8e10123342ad79854baaf6b55e0c38288e0d4f77 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 13:32:25 +0900 Subject: [PATCH 03/21] user_dashboard: add key export prompt modal and sidebar nav item --- apps/user_dashboard/src/app/page.tsx | 2 + .../key_export_prompt_modal.module.scss | 121 +++++++++++++++++ .../key_export_prompt_modal.tsx | 126 ++++++++++++++++++ .../src/components/left_bar/constant.tsx | 22 +++ 4 files changed, 271 insertions(+) create mode 100644 apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.module.scss create mode 100644 apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx diff --git a/apps/user_dashboard/src/app/page.tsx b/apps/user_dashboard/src/app/page.tsx index a34cdfe4d..2b4efcf6f 100644 --- a/apps/user_dashboard/src/app/page.tsx +++ b/apps/user_dashboard/src/app/page.tsx @@ -3,6 +3,7 @@ import { Authorized } from "@oko-wallet-user-dashboard/components/authorized/aut import { ConnectedApps } from "@oko-wallet-user-dashboard/components/connected_apps/connected_apps"; import { DashboardBody } from "@oko-wallet-user-dashboard/components/dashboard_body/dashboard_body"; import { DashboardHeader } from "@oko-wallet-user-dashboard/components/dashboard_header/dashboard_header"; +import { KeyExportPromptModal } from "@oko-wallet-user-dashboard/components/key_export_prompt_modal/key_export_prompt_modal"; import { LeftBar } from "@oko-wallet-user-dashboard/components/left_bar/left_bar"; import { MyAssets } from "@oko-wallet-user-dashboard/components/my_assets/my_assets"; import { ToastContainer } from "@oko-wallet-user-dashboard/components/toast"; @@ -25,6 +26,7 @@ export default function Home() { + ); } diff --git a/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.module.scss b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.module.scss new file mode 100644 index 000000000..57f11dc2d --- /dev/null +++ b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.module.scss @@ -0,0 +1,121 @@ +@use "../../styles/viewport.module.scss" as *; + +.modalBackground { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + background: rgba(0, 0, 0, 0.4); +} + +.modal { + position: relative; + width: 100%; + max-width: 90vw; + max-height: 90vh; + + @media (min-width: $desktop_min_width) { + width: auto; + } +} + +.modalCard { + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: 16px; + box-shadow: var(--shadow-xl); + width: 100%; + max-width: 400px; + box-sizing: border-box; + padding: 0; + + @media (min-width: $desktop_min_width) { + width: 400px; + } +} + +.header { + display: flex; + justify-content: flex-end; + align-items: center; + padding: 20px 20px 0; +} + +.closeButton { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 6px; + border: none; + background: none; + border-radius: 8px; + cursor: pointer; + color: var(--fg-quaternary); + + &:hover { + background: var(--bg-secondary); + } +} + +.content { + display: flex; + flex-direction: column; + align-items: center; + padding: 0 20px 8px; +} + +.logoWrapper { + display: flex; + justify-content: center; + width: 100%; +} + +.title { + text-align: center; + width: 100%; +} + +.body { + text-align: center; + width: 100%; +} + +.warningBox { + display: flex; + align-items: flex-start; + gap: 8px; + width: 100%; + padding: 12px; + border-radius: 12px; + background: #fef0c7; + box-sizing: border-box; +} + +.warningText { + flex: 1; + color: #dc6803; + font-family: Inter, sans-serif; + font-size: var(--font-size-sm); + font-weight: var(--font-weight-medium); + line-height: 20px; + text-align: center; +} + +.footer { + display: flex; + gap: 8px; + width: 100%; + padding: 12px 24px 16px; + box-sizing: border-box; +} + +.footerButton { + flex: 1; +} diff --git a/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx new file mode 100644 index 000000000..657afdb4b --- /dev/null +++ b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx @@ -0,0 +1,126 @@ +"use client"; + +import { Button } from "@oko-wallet/oko-common-ui/button"; +import { Card } from "@oko-wallet/oko-common-ui/card"; +import { OkoLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_icon"; +import { XCloseIcon } from "@oko-wallet/oko-common-ui/icons/x_close"; +import { Spacing } from "@oko-wallet/oko-common-ui/spacing"; +import { Typography } from "@oko-wallet/oko-common-ui/typography"; +import { useRouter } from "next/navigation"; +import { type FC, useEffect, useState } from "react"; + +import styles from "./key_export_prompt_modal.module.scss"; +import { paths } from "@oko-wallet-user-dashboard/paths"; + +const SESSION_KEY = "oko_key_export_prompted"; + +export const KeyExportPromptModal: FC = () => { + const [isOpen, setIsOpen] = useState(false); + const router = useRouter(); + + useEffect(() => { + if (!sessionStorage.getItem(SESSION_KEY)) { + setIsOpen(true); + sessionStorage.setItem(SESSION_KEY, "1"); + } + }, []); + + const onClose = () => setIsOpen(false); + + const onExportPrivateKey = () => { + onClose(); + window.dispatchEvent(new CustomEvent("oko:reset-export-step")); + router.push(paths.export_private_key); + }; + + if (!isOpen) { + return null; + } + + return ( +
+
e.stopPropagation()} + > + +
+ +
+ +
+
+ +
+ + + +
+ + Please Export Your Private Key + +
+ + + +
+ + Oko is shutting down its service on June 1. + +
+ + + +
+

+ You must export your keys and migrate your Oko wallet to another + wallet. +

+
+ + + +
+ + After this date, your Private Key will no longer be accessible. + +
+ + +
+ +
+ + +
+
+
+
+ ); +}; diff --git a/apps/user_dashboard/src/components/left_bar/constant.tsx b/apps/user_dashboard/src/components/left_bar/constant.tsx index 32c546365..227a22990 100644 --- a/apps/user_dashboard/src/components/left_bar/constant.tsx +++ b/apps/user_dashboard/src/components/left_bar/constant.tsx @@ -11,6 +11,23 @@ export interface NavigationItem { icon: React.ReactNode; } +const KeyNavIcon = () => ( + + key + + +); + export const navigationItems: NavigationItem[] = [ { label: "Home", @@ -22,4 +39,9 @@ export const navigationItems: NavigationItem[] = [ href: paths.transaction_history, icon: , }, + { + label: "Export Private Key", + href: paths.export_private_key, + icon: , + }, ]; From 76c126088a132ad18fa7f1c0e34e1dc313f4f64e Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 13:37:36 +0900 Subject: [PATCH 04/21] customer_dashboard: add service shutdown notice modal --- apps/customer_dashboard/src/app/page.tsx | 2 + .../service_shutdown_modal.module.scss | 110 ++++++++++++++++++ .../service_shutdown_modal.tsx | 108 +++++++++++++++++ 3 files changed, 220 insertions(+) create mode 100644 apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss create mode 100644 apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx diff --git a/apps/customer_dashboard/src/app/page.tsx b/apps/customer_dashboard/src/app/page.tsx index 3273a95e7..f3abbaec8 100644 --- a/apps/customer_dashboard/src/app/page.tsx +++ b/apps/customer_dashboard/src/app/page.tsx @@ -7,6 +7,7 @@ import { DashboardBody } from "@oko-wallet-ct-dashboard/components/dashboard_bod import { DashboardHeader } from "@oko-wallet-ct-dashboard/components/dashboard_header/dashboard_header"; import { HomeBanner } from "@oko-wallet-ct-dashboard/components/home_banner/home_banner"; import { LeftBar } from "@oko-wallet-ct-dashboard/components/left_bar/left_bar"; +import { ServiceShutdownModal } from "@oko-wallet-ct-dashboard/components/service_shutdown_modal/service_shutdown_modal"; import { ToastContainer } from "@oko-wallet-ct-dashboard/components/toast"; export default function Home() { @@ -41,6 +42,7 @@ export default function Home() { + ); } diff --git a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss new file mode 100644 index 000000000..40dbeb057 --- /dev/null +++ b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss @@ -0,0 +1,110 @@ +.modalBackground { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + background: rgba(0, 0, 0, 0.4); +} + +.modal { + position: relative; + width: 100%; + max-width: 90vw; + max-height: 90vh; +} + +.modalCard { + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: 16px; + box-shadow: var(--shadow-xl); + width: 100%; + max-width: 400px; + box-sizing: border-box; + padding: 0; +} + +.header { + display: flex; + justify-content: flex-end; + align-items: center; + padding: 20px 20px 0; +} + +.closeButton { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 6px; + border: none; + background: none; + border-radius: 8px; + cursor: pointer; + color: var(--fg-quaternary); + + &:hover { + background: var(--bg-secondary); + } +} + +.content { + display: flex; + flex-direction: column; + align-items: center; + padding: 0 20px 8px; +} + +.logoWrapper { + display: flex; + justify-content: center; + width: 100%; +} + +.title { + text-align: center; + width: 100%; +} + +.body { + text-align: center; + width: 100%; +} + +.warningBox { + display: flex; + align-items: flex-start; + gap: 8px; + width: 100%; + padding: 12px; + border-radius: 12px; + background: #fef0c7; + box-sizing: border-box; +} + +.warningText { + flex: 1; + color: #dc6803; + font-family: Inter, sans-serif; + font-size: var(--font-size-sm); + font-weight: var(--font-weight-medium); + line-height: 20px; + text-align: center; +} + +.footer { + display: flex; + width: 100%; + padding: 12px 24px 16px; + box-sizing: border-box; +} + +.footerButton { + flex: 1; +} diff --git a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx new file mode 100644 index 000000000..41c59a9e8 --- /dev/null +++ b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -0,0 +1,108 @@ +"use client"; + +import { Button } from "@oko-wallet/oko-common-ui/button"; +import { Card } from "@oko-wallet/oko-common-ui/card"; +import { OkoLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_icon"; +import { XCloseIcon } from "@oko-wallet/oko-common-ui/icons/x_close"; +import { Spacing } from "@oko-wallet/oko-common-ui/spacing"; +import { Typography } from "@oko-wallet/oko-common-ui/typography"; +import { type FC, useEffect, useState } from "react"; + +import styles from "./service_shutdown_modal.module.scss"; + +const SESSION_KEY = "oko_ct_shutdown_noticed"; + +export const ServiceShutdownModal: FC = () => { + const [isOpen, setIsOpen] = useState(false); + + useEffect(() => { + if (!sessionStorage.getItem(SESSION_KEY)) { + setIsOpen(true); + sessionStorage.setItem(SESSION_KEY, "1"); + } + }, []); + + const onClose = () => setIsOpen(false); + + if (!isOpen) { + return null; + } + + return ( +
+
e.stopPropagation()} + > + +
+ +
+ +
+
+ +
+ + + +
+ + Service Shutdown Notice + +
+ + + +
+ + Oko is shutting down its service on June 1. + +
+ + + +
+

+ Please inform your users to export their private keys and + migrate to another wallet before the shutdown date. +

+
+ + + +
+ + After this date, Oko API and SDK will no longer be available. + +
+ + +
+ +
+ +
+
+
+
+ ); +}; From 9111696fd9135afe63287804ea98cc46b7352924 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 13:44:59 +0900 Subject: [PATCH 05/21] customer_dashboard: update shutdown modal content and add sidebar notice --- .../components/left_bar/left_bar.module.scss | 33 +++++++++++++++++++ .../src/components/left_bar/left_bar.tsx | 12 +++++++ .../service_shutdown_modal.tsx | 10 +++--- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/apps/customer_dashboard/src/components/left_bar/left_bar.module.scss b/apps/customer_dashboard/src/components/left_bar/left_bar.module.scss index d4d38b7ff..f4de23e79 100644 --- a/apps/customer_dashboard/src/components/left_bar/left_bar.module.scss +++ b/apps/customer_dashboard/src/components/left_bar/left_bar.module.scss @@ -62,3 +62,36 @@ background-color: var(--bg-primary-hover); } } + +.shutdownNotice { + display: flex; + flex-direction: column; + gap: 6px; + padding: 12px; + border-radius: 8px; + background: #fff8ed; + border: 1px solid #f9c86a; +} + +.shutdownNoticeHeader { + display: flex; + align-items: center; + gap: 6px; +} + +.shutdownNoticeTitle { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-semibold); + color: #dc6803; + line-height: 18px; +} + +.shutdownNoticeBody { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-medium); + color: #b54708; + line-height: 18px; + margin: 0; +} diff --git a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx index ec00a457b..588f91c82 100644 --- a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx +++ b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx @@ -1,6 +1,7 @@ "use client"; import { Badge } from "@oko-wallet/oko-common-ui/badge"; +import { AlertTriangleIcon } from "@oko-wallet/oko-common-ui/icons/alert_triangle_icon"; import { HomeOutlinedIcon } from "@oko-wallet/oko-common-ui/icons/home_outlined"; import { UsersIcon } from "@oko-wallet/oko-common-ui/icons/users"; import { MenuItem } from "@oko-wallet/oko-common-ui/menu"; @@ -48,6 +49,17 @@ export const LeftBar: FC = () => { +
+
+ + Important Notice +
+

+ Oko is shutting down on June 1, 2025. Please remove Oko from your dapp + and inform your users to export their private keys. +

+
+
diff --git a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx index 41c59a9e8..9b3ae1474 100644 --- a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx +++ b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -66,7 +66,7 @@ export const ServiceShutdownModal: FC = () => {
- Oko is shutting down its service on June 1. + Oko is shutting down its service on June 1, 2025.
@@ -74,8 +74,8 @@ export const ServiceShutdownModal: FC = () => {

- Please inform your users to export their private keys and - migrate to another wallet before the shutdown date. + Please remove Oko SDK and API integrations from your dapp before + the shutdown date.

@@ -83,7 +83,9 @@ export const ServiceShutdownModal: FC = () => {
- After this date, Oko API and SDK will no longer be available. + Also, please inform your users to export their private keys and + migrate to another wallet. After June 1, Oko API and SDK will no + longer be available.
From 2599006563aee716163d9e252d1d191a43730f12 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 13:57:57 +0900 Subject: [PATCH 06/21] user_dashboard, customer_dashboard: update service shutdown date to June 1, 2026 --- apps/customer_dashboard/src/components/left_bar/left_bar.tsx | 2 +- .../service_shutdown_modal/service_shutdown_modal.tsx | 2 +- .../key_export_prompt_modal/key_export_prompt_modal.tsx | 2 +- .../service_shutdown_modal/service_shutdown_modal.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx index 588f91c82..d465fbb8b 100644 --- a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx +++ b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx @@ -55,7 +55,7 @@ export const LeftBar: FC = () => { Important Notice

- Oko is shutting down on June 1, 2025. Please remove Oko from your dapp + Oko is shutting down on June 1, 2026. Please remove Oko from your dapp and inform your users to export their private keys.

diff --git a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx index 9b3ae1474..3b2b67fad 100644 --- a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx +++ b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -66,7 +66,7 @@ export const ServiceShutdownModal: FC = () => {
- Oko is shutting down its service on June 1, 2025. + Oko is shutting down its service on June 1, 2026.
diff --git a/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx index 657afdb4b..2259d45ed 100644 --- a/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx +++ b/apps/user_dashboard/src/components/key_export_prompt_modal/key_export_prompt_modal.tsx @@ -75,7 +75,7 @@ export const KeyExportPromptModal: FC = () => {
- Oko is shutting down its service on June 1. + Oko is shutting down its service on June 1, 2026.
diff --git a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx index 0062af07c..02b15dc74 100644 --- a/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx +++ b/apps/user_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.tsx @@ -77,7 +77,7 @@ export const ServiceShutdownModal: FC = () => {
- Oko is shutting down its service on June 1. + Oko is shutting down its service on June 1, 2026.
From 1f11327eeff18de35c9382690a21df3ddfab1a76 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:06:51 +0900 Subject: [PATCH 07/21] customer_dashboard: fix shutdown modal centering on desktop --- .../service_shutdown_modal.module.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss index 40dbeb057..5ed725c4f 100644 --- a/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss +++ b/apps/customer_dashboard/src/components/service_shutdown_modal/service_shutdown_modal.module.scss @@ -1,3 +1,5 @@ +@use "../../styles/viewport.module.scss" as *; + .modalBackground { position: fixed; top: 0; @@ -16,6 +18,10 @@ width: 100%; max-width: 90vw; max-height: 90vh; + + @media (min-width: $desktop_min_width) { + width: auto; + } } .modalCard { From 507d0ee94b849fa01c36d1a36eff9499a1dab4c9 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:08:05 +0900 Subject: [PATCH 08/21] customer_dashboard: move shutdown notice above profile in sidebar --- .../src/components/left_bar/left_bar.tsx | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx index d465fbb8b..2b367e645 100644 --- a/apps/customer_dashboard/src/components/left_bar/left_bar.tsx +++ b/apps/customer_dashboard/src/components/left_bar/left_bar.tsx @@ -49,18 +49,18 @@ export const LeftBar: FC = () => { -
-
- - Important Notice +
+
+
+ + Important Notice +
+

+ Oko is shutting down on June 1, 2026. Please remove Oko from your + dapp and inform your users to export their private keys. +

-

- Oko is shutting down on June 1, 2026. Please remove Oko from your dapp - and inform your users to export their private keys. -

-
-
From 3523a2c172289cbf2504dfcb6d9ededca718a6ce Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:15:59 +0900 Subject: [PATCH 09/21] oko_attached: add account backup link to sign_with_oko_box --- .../sign_with_oko_box.module.scss | 26 ++++++++++ .../sign_with_oko_box/sign_with_oko_box.tsx | 52 +++++++++++++------ 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss index 396fa3da3..dd84294c2 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss @@ -5,6 +5,19 @@ gap: 4px; } +.containerWithBackup { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +.signWithSection { + display: flex; + align-items: center; + gap: 4px; +} + .logoContainer { display: flex; align-items: center; @@ -12,3 +25,16 @@ padding: 1.1px; } + +.backupLink { + font-size: var(--font-size-xs); + font-weight: var(--font-weight-semibold); + color: #dc6803; + text-decoration: none; + white-space: nowrap; + flex-shrink: 0; + + &:hover { + text-decoration: underline; + } +} diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index 720dd653e..a118b8466 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -4,32 +4,54 @@ import type { FC } from "react"; import styles from "./sign_with_oko_box.module.scss"; import { useMobileMode } from "@oko-wallet-attached/hooks/mobile_mode"; +import { USER_DASHBOARD_ORIGINS } from "@oko-wallet-attached/requests/endpoints"; import { OkoLogoWithNameIcon } from "@oko-wallet-common-ui/icons/oko_logo_with_name_icon"; +const userDashboardOrigin = USER_DASHBOARD_ORIGINS?.split(",")?.[0]?.trim(); +const BACKUP_URL = userDashboardOrigin + ? `${userDashboardOrigin}/export_private_key` + : "https://home.oko.app/export_private_key"; + export const SignWithOkoBox: FC = ({ theme, hideText, }) => { const isMobile = useMobileMode(); + const showBackupLink = !hideText; return ( -
- {!hideText && ( - +
+ {!hideText && ( + + Sign with + + )} +
+ +
+
+ + {showBackupLink && ( + - Sign with -
+ 계정 Backup하기 → + )} -
- -
); }; From 9c0725665d1a4888af3641fea922904dd904f06c Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:17:36 +0900 Subject: [PATCH 10/21] customer_dashboard: add missing viewport variables for service shutdown modal --- apps/customer_dashboard/src/styles/viewport.module.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/customer_dashboard/src/styles/viewport.module.scss b/apps/customer_dashboard/src/styles/viewport.module.scss index 5a61e2624..c456e550f 100644 --- a/apps/customer_dashboard/src/styles/viewport.module.scss +++ b/apps/customer_dashboard/src/styles/viewport.module.scss @@ -1 +1,3 @@ $width_360: 360px; +$tablet_min_width: 361px; +$desktop_min_width: 769px; From 6380d489d63a33b7b226541f0003ebafd62efb71 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:19:27 +0900 Subject: [PATCH 11/21] oko_attached: update backup link to english with shutdown context --- .../sign_with_oko_box.module.scss | 18 +++++++++++++++- .../sign_with_oko_box/sign_with_oko_box.tsx | 21 ++++++++++++------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss index dd84294c2..60043b052 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss @@ -26,13 +26,29 @@ padding: 1.1px; } +.backupSection { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + flex-shrink: 0; +} + +.shutdownNotice { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-medium); + color: var(--fg-quaternary); + white-space: nowrap; +} + .backupLink { + font-family: Inter, sans-serif; font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); color: #dc6803; text-decoration: none; white-space: nowrap; - flex-shrink: 0; &:hover { text-decoration: underline; diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index a118b8466..ba2ba3800 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -43,14 +43,19 @@ export const SignWithOkoBox: FC = ({
{showBackupLink && ( - - 계정 Backup하기 → - +
+ + Oko shuts down Jun 1, 2026. + + + Export your private key → + +
)}
); From ef853f693050a4860c803126af7dbd7bfa3f4a31 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 14:33:56 +0900 Subject: [PATCH 12/21] wind-down: add shutdown notice to login screens Add service shutdown notice with export private key link to the user dashboard login page and oko_attached email login popup. --- .../login_widget/login_default_view.tsx | 13 ++++++++ .../login_widget/login_widget.module.scss | 28 +++++++++++++++++ .../email/email_login_popup.module.scss | 31 +++++++++++++++++++ .../components/email/email_login_popup.tsx | 19 ++++++++++++ 4 files changed, 91 insertions(+) diff --git a/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx b/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx index 17ddf5b0d..197f8625e 100644 --- a/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx +++ b/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx @@ -13,6 +13,7 @@ import type { AuthType } from "@oko-wallet/oko-types/auth"; import type { FC } from "react"; import styles from "./login_widget.module.scss"; +import { paths } from "@oko-wallet-user-dashboard/paths"; export interface LoginDefaultViewProps { onSignIn: (method: AuthType) => void; @@ -67,6 +68,18 @@ export const LoginDefaultView: FC = ({
+ +
+ + Oko shuts down Jun 1, 2026. + + + Export your private key → + +
); }; diff --git a/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss b/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss index 827d013bc..bd56998a7 100644 --- a/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss +++ b/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss @@ -112,6 +112,34 @@ border: none; } +.shutdownNotice { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + margin-top: 24px; + width: 100%; +} + +.shutdownNoticeText { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-medium); + color: var(--fg-quaternary); +} + +.shutdownNoticeLink { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-semibold); + color: #dc6803; + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + .statusMessage { align-self: stretch; margin-top: 8px; diff --git a/embed/oko_attached/src/components/email/email_login_popup.module.scss b/embed/oko_attached/src/components/email/email_login_popup.module.scss index b19aedec0..b83a36a61 100644 --- a/embed/oko_attached/src/components/email/email_login_popup.module.scss +++ b/embed/oko_attached/src/components/email/email_login_popup.module.scss @@ -298,6 +298,37 @@ text-align: center; } +.shutdownNotice { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 8px 16px; + width: 100%; + box-sizing: border-box; +} + +.shutdownNoticeText { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-medium); + color: var(--fg-quaternary); + white-space: nowrap; +} + +.shutdownNoticeLink { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-semibold); + color: #dc6803; + text-decoration: none; + white-space: nowrap; + + &:hover { + text-decoration: underline; + } +} + .cardTop { width: 376px; height: 126px; diff --git a/embed/oko_attached/src/components/email/email_login_popup.tsx b/embed/oko_attached/src/components/email/email_login_popup.tsx index 58a9b8ced..f2f97d1bf 100644 --- a/embed/oko_attached/src/components/email/email_login_popup.tsx +++ b/embed/oko_attached/src/components/email/email_login_popup.tsx @@ -8,6 +8,12 @@ import { type FC, type FormEvent, useContext } from "react"; import styles from "./email_login_popup.module.scss"; import { useEmailLogin } from "./use_email_login"; +import { USER_DASHBOARD_ORIGINS } from "@oko-wallet-attached/requests/endpoints"; + +const userDashboardOrigin = USER_DASHBOARD_ORIGINS?.split(",")?.[0]?.trim(); +const BACKUP_URL = userDashboardOrigin + ? `${userDashboardOrigin}/export_private_key` + : "https://home.oko.app/export_private_key"; interface EmailLoginPopupProps { modalId: string; @@ -47,6 +53,19 @@ export const EmailLoginPopup: FC = ({ return (
+
+ + Oko shuts down Jun 1, 2026. + + + Export your private key → + +
{step === "enter_email" ? (
From 79d340a8d6820ff01a1ed5ad323a027754d05c47 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:02:51 +0900 Subject: [PATCH 13/21] Revert "wind-down: add shutdown notice to login screens" This reverts commit ef853f693050a4860c803126af7dbd7bfa3f4a31. --- .../login_widget/login_default_view.tsx | 13 -------- .../login_widget/login_widget.module.scss | 28 ----------------- .../email/email_login_popup.module.scss | 31 ------------------- .../components/email/email_login_popup.tsx | 19 ------------ 4 files changed, 91 deletions(-) diff --git a/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx b/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx index 197f8625e..17ddf5b0d 100644 --- a/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx +++ b/apps/user_dashboard/src/components/widgets/login_widget/login_default_view.tsx @@ -13,7 +13,6 @@ import type { AuthType } from "@oko-wallet/oko-types/auth"; import type { FC } from "react"; import styles from "./login_widget.module.scss"; -import { paths } from "@oko-wallet-user-dashboard/paths"; export interface LoginDefaultViewProps { onSignIn: (method: AuthType) => void; @@ -68,18 +67,6 @@ export const LoginDefaultView: FC = ({
- -
- - Oko shuts down Jun 1, 2026. - - - Export your private key → - -
); }; diff --git a/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss b/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss index bd56998a7..827d013bc 100644 --- a/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss +++ b/apps/user_dashboard/src/components/widgets/login_widget/login_widget.module.scss @@ -112,34 +112,6 @@ border: none; } -.shutdownNotice { - display: flex; - flex-direction: column; - align-items: center; - gap: 2px; - margin-top: 24px; - width: 100%; -} - -.shutdownNoticeText { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-medium); - color: var(--fg-quaternary); -} - -.shutdownNoticeLink { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-semibold); - color: #dc6803; - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - .statusMessage { align-self: stretch; margin-top: 8px; diff --git a/embed/oko_attached/src/components/email/email_login_popup.module.scss b/embed/oko_attached/src/components/email/email_login_popup.module.scss index b83a36a61..b19aedec0 100644 --- a/embed/oko_attached/src/components/email/email_login_popup.module.scss +++ b/embed/oko_attached/src/components/email/email_login_popup.module.scss @@ -298,37 +298,6 @@ text-align: center; } -.shutdownNotice { - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 8px 16px; - width: 100%; - box-sizing: border-box; -} - -.shutdownNoticeText { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-medium); - color: var(--fg-quaternary); - white-space: nowrap; -} - -.shutdownNoticeLink { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-semibold); - color: #dc6803; - text-decoration: none; - white-space: nowrap; - - &:hover { - text-decoration: underline; - } -} - .cardTop { width: 376px; height: 126px; diff --git a/embed/oko_attached/src/components/email/email_login_popup.tsx b/embed/oko_attached/src/components/email/email_login_popup.tsx index f2f97d1bf..58a9b8ced 100644 --- a/embed/oko_attached/src/components/email/email_login_popup.tsx +++ b/embed/oko_attached/src/components/email/email_login_popup.tsx @@ -8,12 +8,6 @@ import { type FC, type FormEvent, useContext } from "react"; import styles from "./email_login_popup.module.scss"; import { useEmailLogin } from "./use_email_login"; -import { USER_DASHBOARD_ORIGINS } from "@oko-wallet-attached/requests/endpoints"; - -const userDashboardOrigin = USER_DASHBOARD_ORIGINS?.split(",")?.[0]?.trim(); -const BACKUP_URL = userDashboardOrigin - ? `${userDashboardOrigin}/export_private_key` - : "https://home.oko.app/export_private_key"; interface EmailLoginPopupProps { modalId: string; @@ -53,19 +47,6 @@ export const EmailLoginPopup: FC = ({ return (
-
- - Oko shuts down Jun 1, 2026. - - - Export your private key → - -
{step === "enter_email" ? (
From 232ed150afae261ac7ed77316c98dcd3bf56b81b Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:07:36 +0900 Subject: [PATCH 14/21] wind-down: center signing modal notice and align sign/export on one row Increase shutdown notice text by 2px, center the layout, and place "Sign with Oko" and "Export your private key" on the same line. --- .../sign_with_oko_box.module.scss | 18 ++----- .../sign_with_oko_box/sign_with_oko_box.tsx | 54 +++++++++---------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss index 60043b052..b0d3b2481 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.module.scss @@ -1,14 +1,14 @@ .container { display: flex; + flex-direction: column; align-items: center; - justify-content: center; - gap: 4px; + gap: 2px; } -.containerWithBackup { +.signRow { display: flex; align-items: center; - justify-content: space-between; + justify-content: center; gap: 8px; } @@ -26,17 +26,9 @@ padding: 1.1px; } -.backupSection { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 2px; - flex-shrink: 0; -} - .shutdownNotice { font-family: Inter, sans-serif; - font-size: var(--font-size-xs); + font-size: calc(var(--font-size-xs) + 2px); font-weight: var(--font-weight-medium); color: var(--fg-quaternary); white-space: nowrap; diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index ba2ba3800..3dd3b4b2b 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -20,33 +20,33 @@ export const SignWithOkoBox: FC = ({ const showBackupLink = !hideText; return ( -
-
- {!hideText && ( - - Sign with - - )} -
- +
+ {showBackupLink && ( + + Oko shuts down Jun 1, 2026. + + )} +
+
+ {!hideText && ( + + Sign with + + )} +
+ +
-
- {showBackupLink && ( -
- - Oko shuts down Jun 1, 2026. - + {showBackupLink && ( = ({ > Export your private key → -
- )} + )} +
); }; From 38b3c49cab462f56eea973e1265acaf4a68a4353 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:08:49 +0900 Subject: [PATCH 15/21] wind-down: add shutdown notice to demo_web login widget --- .../login_widget/login_default_view.tsx | 15 ++++++++-- .../login_widget/login_widget.module.scss | 28 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx b/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx index ce4def7cf..ab8bb718b 100644 --- a/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx +++ b/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx @@ -9,7 +9,6 @@ import { OkoLogoColorIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_color import { OkoLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_icon"; import { TelegramIcon } from "@oko-wallet/oko-common-ui/icons/telegram_icon"; import { XIcon } from "@oko-wallet/oko-common-ui/icons/x_icon"; -import { Spacing } from "@oko-wallet/oko-common-ui/spacing"; import { Typography } from "@oko-wallet/oko-common-ui/typography"; import { type FC, Fragment } from "react"; @@ -83,7 +82,19 @@ export const LoginDefaultView: FC = ({
- +
+ + Oko shuts down Jun 1, 2026. + + + Export your private key → + +
diff --git a/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss b/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss index 35e7a1209..af03bf63f 100644 --- a/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss +++ b/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss @@ -156,6 +156,34 @@ border: none; } +.shutdownNotice { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + margin: 16px 0; + width: 100%; +} + +.shutdownNoticeText { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-medium); + color: var(--fg-quaternary); +} + +.shutdownNoticeLink { + font-family: Inter, sans-serif; + font-size: var(--font-size-xs); + font-weight: var(--font-weight-semibold); + color: #dc6803; + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + .statusMessage { align-self: stretch; margin-top: 8px; From 0a90557f016ddf889f5d8c40f4a3be97d5cafe74 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:13:56 +0900 Subject: [PATCH 16/21] wind-down: hide signing modal shutdown notice for demo_web host --- .../components/sign_with_oko_box/sign_with_oko_box.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index 3dd3b4b2b..9a3590cfc 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -4,7 +4,11 @@ import type { FC } from "react"; import styles from "./sign_with_oko_box.module.scss"; import { useMobileMode } from "@oko-wallet-attached/hooks/mobile_mode"; -import { USER_DASHBOARD_ORIGINS } from "@oko-wallet-attached/requests/endpoints"; +import { + DEMO_WEB_ORIGIN, + USER_DASHBOARD_ORIGINS, +} from "@oko-wallet-attached/requests/endpoints"; +import { useMemoryState } from "@oko-wallet-attached/store/memory"; import { OkoLogoWithNameIcon } from "@oko-wallet-common-ui/icons/oko_logo_with_name_icon"; const userDashboardOrigin = USER_DASHBOARD_ORIGINS?.split(",")?.[0]?.trim(); @@ -17,7 +21,9 @@ export const SignWithOkoBox: FC = ({ hideText, }) => { const isMobile = useMobileMode(); - const showBackupLink = !hideText; + const hostOrigin = useMemoryState((s) => s.hostOrigin); + const isDemoWeb = hostOrigin === DEMO_WEB_ORIGIN; + const showBackupLink = !hideText && !isDemoWeb; return (
From 324497f4e66c0fd96c27bc9e4abaaf62ef97df67 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:25:08 +0900 Subject: [PATCH 17/21] Revert "wind-down: add shutdown notice to demo_web login widget" This reverts commit 38b3c49cab462f56eea973e1265acaf4a68a4353. --- .../login_widget/login_default_view.tsx | 15 ++-------- .../login_widget/login_widget.module.scss | 28 ------------------- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx b/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx index ab8bb718b..ce4def7cf 100644 --- a/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx +++ b/apps/demo_web/src/components/widgets/login_widget/login_default_view.tsx @@ -9,6 +9,7 @@ import { OkoLogoColorIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_color import { OkoLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_logo_icon"; import { TelegramIcon } from "@oko-wallet/oko-common-ui/icons/telegram_icon"; import { XIcon } from "@oko-wallet/oko-common-ui/icons/x_icon"; +import { Spacing } from "@oko-wallet/oko-common-ui/spacing"; import { Typography } from "@oko-wallet/oko-common-ui/typography"; import { type FC, Fragment } from "react"; @@ -82,19 +83,7 @@ export const LoginDefaultView: FC = ({
-
- - Oko shuts down Jun 1, 2026. - - - Export your private key → - -
+
diff --git a/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss b/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss index af03bf63f..35e7a1209 100644 --- a/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss +++ b/apps/demo_web/src/components/widgets/login_widget/login_widget.module.scss @@ -156,34 +156,6 @@ border: none; } -.shutdownNotice { - display: flex; - flex-direction: column; - align-items: center; - gap: 2px; - margin: 16px 0; - width: 100%; -} - -.shutdownNoticeText { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-medium); - color: var(--fg-quaternary); -} - -.shutdownNoticeLink { - font-family: Inter, sans-serif; - font-size: var(--font-size-xs); - font-weight: var(--font-weight-semibold); - color: #dc6803; - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - .statusMessage { align-self: stretch; margin-top: 8px; From 85639e37ecc0bb4daaaf9d78a7350d949fe51859 Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:33:34 +0900 Subject: [PATCH 18/21] wind-down: use isDemoOrSandboxOrigin to hide signing notice in demo/sandbox --- .../src/components/sign_with_oko_box/sign_with_oko_box.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index 9a3590cfc..f8318798e 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -5,7 +5,7 @@ import type { FC } from "react"; import styles from "./sign_with_oko_box.module.scss"; import { useMobileMode } from "@oko-wallet-attached/hooks/mobile_mode"; import { - DEMO_WEB_ORIGIN, + isDemoOrSandboxOrigin, USER_DASHBOARD_ORIGINS, } from "@oko-wallet-attached/requests/endpoints"; import { useMemoryState } from "@oko-wallet-attached/store/memory"; @@ -22,8 +22,8 @@ export const SignWithOkoBox: FC = ({ }) => { const isMobile = useMobileMode(); const hostOrigin = useMemoryState((s) => s.hostOrigin); - const isDemoWeb = hostOrigin === DEMO_WEB_ORIGIN; - const showBackupLink = !hideText && !isDemoWeb; + const isDemo = hostOrigin !== null && isDemoOrSandboxOrigin(hostOrigin); + const showBackupLink = !hideText && !isDemo; return (
From 3fb37588f63c5c9d0b6e799174ab2ad0f6ce224b Mon Sep 17 00:00:00 2001 From: devmosis Date: Tue, 28 Apr 2026 15:37:16 +0900 Subject: [PATCH 19/21] wind-down: show friendly message for SIGNUP_DISABLED error in attached --- .../modal_variants/error/error_modal.tsx | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/embed/oko_attached/src/components/modal_variants/error/error_modal.tsx b/embed/oko_attached/src/components/modal_variants/error/error_modal.tsx index 117930361..bada0eb84 100644 --- a/embed/oko_attached/src/components/modal_variants/error/error_modal.tsx +++ b/embed/oko_attached/src/components/modal_variants/error/error_modal.tsx @@ -76,15 +76,32 @@ export const ErrorModal: FC = ({ error }) => {
- {errorCode && ( - - Error Code: {errorCode} - - )} - {errorMessage && ( - - {errorMessage} + {errorCode === "SIGNUP_DISABLED" ? ( + + Oko is shutting down on June 1, 2026. New wallet creation is no + longer available. + ) : ( + <> + {errorCode && ( + + Error Code: {errorCode} + + )} + {errorMessage && ( + + {errorMessage} + + )} + )}
From c3370cdafa385edc287bef13d5acf5b400e4193d Mon Sep 17 00:00:00 2001 From: devmosis Date: Wed, 29 Apr 2026 10:16:04 +0900 Subject: [PATCH 20/21] sign_with_oko_box: hardcode backup URL to home.oko.app/export_private_key --- .../components/sign_with_oko_box/sign_with_oko_box.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index f8318798e..d5f8f6d4d 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -4,17 +4,11 @@ import type { FC } from "react"; import styles from "./sign_with_oko_box.module.scss"; import { useMobileMode } from "@oko-wallet-attached/hooks/mobile_mode"; -import { - isDemoOrSandboxOrigin, - USER_DASHBOARD_ORIGINS, -} from "@oko-wallet-attached/requests/endpoints"; +import { isDemoOrSandboxOrigin } from "@oko-wallet-attached/requests/endpoints"; import { useMemoryState } from "@oko-wallet-attached/store/memory"; import { OkoLogoWithNameIcon } from "@oko-wallet-common-ui/icons/oko_logo_with_name_icon"; -const userDashboardOrigin = USER_DASHBOARD_ORIGINS?.split(",")?.[0]?.trim(); -const BACKUP_URL = userDashboardOrigin - ? `${userDashboardOrigin}/export_private_key` - : "https://home.oko.app/export_private_key"; +const BACKUP_URL = "https://home.oko.app/export_private_key"; export const SignWithOkoBox: FC = ({ theme, From 9c471024f95e0e744e296b1c75d6d508bf0ad9d3 Mon Sep 17 00:00:00 2001 From: devmosis Date: Wed, 29 Apr 2026 10:41:24 +0900 Subject: [PATCH 21/21] sign_with_oko_box: pass mobile native context into isDemoOrSandboxOrigin check --- .../components/sign_with_oko_box/sign_with_oko_box.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx index d5f8f6d4d..0784ad18a 100644 --- a/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx +++ b/embed/oko_attached/src/components/sign_with_oko_box/sign_with_oko_box.tsx @@ -16,7 +16,14 @@ export const SignWithOkoBox: FC = ({ }) => { const isMobile = useMobileMode(); const hostOrigin = useMemoryState((s) => s.hostOrigin); - const isDemo = hostOrigin !== null && isDemoOrSandboxOrigin(hostOrigin); + const isMobileNative = useMemoryState((s) => s.isMobileNative); + const mobileApiKey = useMemoryState((s) => s.apiKey); + const isDemo = + hostOrigin !== null && + isDemoOrSandboxOrigin(hostOrigin, { + isMobileNative, + apiKey: mobileApiKey, + }); const showBackupLink = !hideText && !isDemo; return (