From d50261bf6a2436cb724d32926e330f32812c9919 Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 10:54:18 +0900 Subject: [PATCH 1/7] project: block new user signups for service shutdown Return 403 + SIGNUP_DISABLED from /tss/v1/keygen and /tss/v2/keygen and preserve the original handler bodies in block comments for rollback. Existing users continue to sign in, and /tss/v2/keygen_ed25519 stays open so secp256k1-only users can still add ed25519. SDK surfaces a new signup_disabled error type, and user_dashboard/demo_web/mobile host render a "signups are closed" message instead of the generic failure. --- .../src/app/mobile/login/complete/_client.tsx | 5 +++++ .../widgets/account_widget/account_widget.tsx | 19 ++++++++++++++--- .../account_widget/auth_progress_widget.tsx | 16 +++++++++++++- .../widgets/account_widget/account_widget.tsx | 19 ++++++++++++++--- .../account_widget/auth_progress_widget.tsx | 16 +++++++++++++- .../server/src/routes/tss_v1/keygen.ts | 21 ++++++++++++++----- .../server/src/routes/tss_v2/keygen.ts | 21 ++++++++++++++----- backend/oko_api_error_codes/src/index.ts | 1 + common/oko_types/src/api_response/index.ts | 1 + .../oauth_info_pass/handlers/new_user.ts | 6 ++++++ .../src/window_msgs/oauth_info_pass/user.ts | 6 ++++++ sdk/oko_sdk_core/src/types/sign_in.ts | 1 + 12 files changed, 114 insertions(+), 18 deletions(-) diff --git a/apps/attached_mobile_host_web/src/app/mobile/login/complete/_client.tsx b/apps/attached_mobile_host_web/src/app/mobile/login/complete/_client.tsx index 99442b16e..f793b4913 100644 --- a/apps/attached_mobile_host_web/src/app/mobile/login/complete/_client.tsx +++ b/apps/attached_mobile_host_web/src/app/mobile/login/complete/_client.tsx @@ -318,6 +318,11 @@ function formatOAuthSignInError(err: unknown): string { const type = "type" in err && typeof err.type === "string" ? err.type : "unknown"; + + if (type === "signup_disabled") { + return "New signups are disabled as the service is winding down."; + } + const detail = "error" in err && typeof err.error === "string" ? err.error : null; diff --git a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx index c8eb3d7a3..9eebdfd9b 100644 --- a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx @@ -11,7 +11,11 @@ import type { LoginMethod } from "@oko-wallet-demo-web/types/login"; type SigningInState = | { status: "ready" } | { status: "signing-in" } - | { status: "failed"; error: string }; + | { + status: "failed"; + error: string; + errorKind: "signup_disabled" | "generic"; + }; function authTypeToLoginMethod(authType: AuthType | null): LoginMethod { if (!authType) { @@ -78,7 +82,14 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - setSigningInState({ status: "failed", error: errorMessage }); + const errorKind = + errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + + setSigningInState({ + status: "failed", + error: errorMessage, + errorKind, + }); } } @@ -107,11 +118,13 @@ export const AccountWidget: FC = () => { } if (signingInState.status === "failed") { + const isSignupDisabled = signingInState.errorKind === "signup_disabled"; return ( ); } diff --git a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx index 710e5949e..8d795937f 100644 --- a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -18,15 +18,18 @@ import type { LoginMethod } from "@oko-wallet-demo-web/types/login"; type AuthProgressWidgetProps = { method: LoginMethod; status?: "loading" | "failed"; + errorKind?: "signup_disabled" | "generic"; onRetry?: () => void; }; export const AuthProgressWidget: FC = ({ method, status = "loading", + errorKind = "generic", onRetry, }) => { const isFailed = status === "failed"; + const isSignupDisabled = isFailed && errorKind === "signup_disabled"; return ( @@ -50,7 +53,18 @@ export const AuthProgressWidget: FC = ({ /> - {isFailed ? ( + {isSignupDisabled ? ( + <> + + Signups are closed + + + + Oko is winding down. Existing accounts can still sign in to + withdraw assets, but new signups are no longer accepted. + + + ) : isFailed ? ( <> Login failed diff --git a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx index 965cefc3b..dee20122e 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx @@ -17,7 +17,11 @@ import { refreshSvmEd25519Key } from "@oko-wallet-user-dashboard/utils/sdk"; type SigningInState = | { status: "ready" } | { status: "signing-in" } - | { status: "failed"; error: string }; + | { + status: "failed"; + error: string; + errorKind: "signup_disabled" | "generic"; + }; export const AccountWidget: FC = () => { const { wallet: okoWallet, isSignedIn } = useOko(); @@ -71,7 +75,14 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - setSigningInState({ status: "failed", error: errorMessage }); + const errorKind = + errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + + setSigningInState({ + status: "failed", + error: errorMessage, + errorKind, + }); } } @@ -99,11 +110,13 @@ export const AccountWidget: FC = () => { } if (signingInState.status === "failed") { + const isSignupDisabled = signingInState.errorKind === "signup_disabled"; return ( ); } diff --git a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx index ba723c888..94b4f33e7 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -16,15 +16,18 @@ import { Spinner } from "@oko-wallet-user-dashboard/components/spinner/spinner"; type AuthProgressWidgetProps = { method: AuthType; status?: "loading" | "failed"; + errorKind?: "signup_disabled" | "generic"; onRetry?: () => void; }; export const AuthProgressWidget: FC = ({ method, status = "loading", + errorKind = "generic", onRetry, }) => { const isFailed = status === "failed"; + const isSignupDisabled = isFailed && errorKind === "signup_disabled"; return (
@@ -42,7 +45,18 @@ export const AuthProgressWidget: FC = ({ />
- {isFailed ? ( + {isSignupDisabled ? ( + <> + + Signups are closed + + + + Oko is winding down. Existing accounts can still sign in to withdraw + assets, but new signups are no longer accepted. + + + ) : isFailed ? ( <> Login failed diff --git a/backend/oko_api/server/src/routes/tss_v1/keygen.ts b/backend/oko_api/server/src/routes/tss_v1/keygen.ts index b5a6b992f..feb011c7a 100644 --- a/backend/oko_api/server/src/routes/tss_v1/keygen.ts +++ b/backend/oko_api/server/src/routes/tss_v1/keygen.ts @@ -9,12 +9,13 @@ import { SignInSuccessResponseSchema, } from "@oko-wallet/oko-api-openapi/tss"; import type { OkoApiResponse } from "@oko-wallet/oko-types/api_response"; -import type { AuthType } from "@oko-wallet/oko-types/auth"; +// Service shutdown: signups blocked. Imports below are unused while the handler body is commented out. Re-enable together if restoring. +// import type { AuthType } from "@oko-wallet/oko-types/auth"; import type { KeygenBody } from "@oko-wallet/oko-types/tss"; import type { SignInResponse } from "@oko-wallet/oko-types/user"; import type { Response, Router } from "express"; -import { runKeygen } from "@oko-wallet-api/api/tss/v1/keygen"; +// import { runKeygen } from "@oko-wallet-api/api/tss/v1/keygen"; import { apiKeyMiddleware } from "@oko-wallet-api/middleware/auth/api_key_auth"; import { type OAuthAuthenticatedRequest, @@ -86,15 +87,24 @@ export function setKeygenV1Routes(router: Router) { oauthMiddleware, tssActivateMiddleware, async ( - req: OAuthAuthenticatedRequest, + _req: OAuthAuthenticatedRequest, res: Response, OAuthLocalsWithAPIKey>, ) => { - const state = req.app.locals; + // Service shutdown: signups permanently blocked. To restore, remove this response block and uncomment the block below. + res.status(ErrorCodeMap.SIGNUP_DISABLED).json({ + success: false, + code: "SIGNUP_DISABLED", + msg: "New signups are disabled as the service is winding down.", + }); + return; + + /* === Disabled due to service shutdown. Uncomment to restore. === + const state = _req.app.locals; const apiKey = res.locals.api_key; const oauthUser = res.locals.oauth_user; const auth_type = oauthUser.type as AuthType; const user_identifier = oauthUser.user_identifier; - const body = req.body; + const body = _req.body; if (!user_identifier) { res.status(401).json({ @@ -136,6 +146,7 @@ export function setKeygenV1Routes(router: Router) { data: runKeygenRes.data, }); return; + */ }, ); } diff --git a/backend/oko_api/server/src/routes/tss_v2/keygen.ts b/backend/oko_api/server/src/routes/tss_v2/keygen.ts index ae1e74b93..db11c6aee 100644 --- a/backend/oko_api/server/src/routes/tss_v2/keygen.ts +++ b/backend/oko_api/server/src/routes/tss_v2/keygen.ts @@ -9,12 +9,13 @@ import { SignInSuccessResponseV2Schema, } from "@oko-wallet/oko-api-openapi/tss"; import type { OkoApiResponse } from "@oko-wallet/oko-types/api_response"; -import type { AuthType } from "@oko-wallet/oko-types/auth"; +// Service shutdown: signups blocked. Imports below are unused while the handler body is commented out. Re-enable together if restoring. +// import type { AuthType } from "@oko-wallet/oko-types/auth"; import type { KeygenBodyV2 } from "@oko-wallet/oko-types/tss"; import type { SignInResponseV2 } from "@oko-wallet/oko-types/user"; import type { Response } from "express"; -import { runKeygenV2 } from "@oko-wallet-api/api/tss/v2/keygen"; +// import { runKeygenV2 } from "@oko-wallet-api/api/tss/v2/keygen"; import type { OAuthAuthenticatedRequest } from "@oko-wallet-api/middleware/auth/oauth"; import type { OAuthLocalsWithAPIKey } from "@oko-wallet-api/middleware/auth/types"; @@ -77,14 +78,23 @@ registry.registerPath({ }); export async function keygenV2( - req: OAuthAuthenticatedRequest, + _req: OAuthAuthenticatedRequest, res: Response, OAuthLocalsWithAPIKey>, ) { - const state = req.app.locals; + // Service shutdown: signups permanently blocked. To restore, remove this response block and uncomment the block below. + res.status(ErrorCodeMap.SIGNUP_DISABLED).json({ + success: false, + code: "SIGNUP_DISABLED", + msg: "New signups are disabled as the service is winding down.", + }); + return; + + /* === Disabled due to service shutdown. Uncomment to restore. === + const state = _req.app.locals; const oauthUser = res.locals.oauth_user; const auth_type = oauthUser.type as AuthType; const user_identifier = oauthUser.user_identifier; - const body = req.body; + const body = _req.body; const apiKey = res.locals.api_key; if (!user_identifier) { @@ -129,4 +139,5 @@ export async function keygenV2( data: runKeygenRes.data, }); return; + */ } diff --git a/backend/oko_api_error_codes/src/index.ts b/backend/oko_api_error_codes/src/index.ts index 950c4f15f..9c9c505b6 100644 --- a/backend/oko_api_error_codes/src/index.ts +++ b/backend/oko_api_error_codes/src/index.ts @@ -63,5 +63,6 @@ export const ErrorCodeMap: Record = { TARGET_USER_NOT_FOUND: 404, INVALID_EMAIL_FORMAT: 400, SERVICE_UNAVAILABLE: 503, + SIGNUP_DISABLED: 403, UNKNOWN_ERROR: 500, }; diff --git a/common/oko_types/src/api_response/index.ts b/common/oko_types/src/api_response/index.ts index 9bd889c6a..563f6f36f 100644 --- a/common/oko_types/src/api_response/index.ts +++ b/common/oko_types/src/api_response/index.ts @@ -74,4 +74,5 @@ export type ErrorCode = | "TARGET_USER_NOT_FOUND" | "INVALID_EMAIL_FORMAT" | "SERVICE_UNAVAILABLE" + | "SIGNUP_DISABLED" | "UNKNOWN_ERROR"; diff --git a/embed/oko_attached/src/window_msgs/oauth_info_pass/handlers/new_user.ts b/embed/oko_attached/src/window_msgs/oauth_info_pass/handlers/new_user.ts index cbcce6a72..405529300 100644 --- a/embed/oko_attached/src/window_msgs/oauth_info_pass/handlers/new_user.ts +++ b/embed/oko_attached/src/window_msgs/oauth_info_pass/handlers/new_user.ts @@ -209,6 +209,12 @@ export async function handleNewUserV2( apiKey, ); if (reqKeygenV2Res.success === false) { + if (reqKeygenV2Res.code === "SIGNUP_DISABLED") { + return { + success: false, + err: { type: "signup_disabled" }, + }; + } return { success: false, err: { type: "sign_in_request_fail", error: reqKeygenV2Res.msg }, diff --git a/embed/oko_attached/src/window_msgs/oauth_info_pass/user.ts b/embed/oko_attached/src/window_msgs/oauth_info_pass/user.ts index 743ca37ff..9c6e8e081 100644 --- a/embed/oko_attached/src/window_msgs/oauth_info_pass/user.ts +++ b/embed/oko_attached/src/window_msgs/oauth_info_pass/user.ts @@ -263,6 +263,12 @@ export async function handleNewUser( apiKey, ); if (reqKeygenRes.success === false) { + if (reqKeygenRes.code === "SIGNUP_DISABLED") { + return { + success: false, + err: { type: "signup_disabled" }, + }; + } return { success: false, err: { type: "sign_in_request_fail", error: reqKeygenRes.msg }, diff --git a/sdk/oko_sdk_core/src/types/sign_in.ts b/sdk/oko_sdk_core/src/types/sign_in.ts index 037ce0297..ce9739489 100644 --- a/sdk/oko_sdk_core/src/types/sign_in.ts +++ b/sdk/oko_sdk_core/src/types/sign_in.ts @@ -34,6 +34,7 @@ export type OAuthSignInError = | { type: "api_key_missing" } | { type: "wallet_not_initialized" } | { type: "insufficient_shares" } + | { type: "signup_disabled" } | { type: "unknown"; error: string; From 77f81466c982773f6ce50af382d0cde29233d8fb Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 14:26:49 +0900 Subject: [PATCH 2/7] project: detect wrapped signup_disabled error from email sign-in The email sign-in path wraps err.type in a "sign in fail, err: ..." prefix before throwing, so an exact string match skipped it and the widget fell back to the generic "Login failed" message. Switch to a substring check so both the plain and wrapped forms surface the service-shutdown copy. --- .../src/components/widgets/account_widget/account_widget.tsx | 5 +++-- .../src/components/widgets/account_widget/account_widget.tsx | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx index 9eebdfd9b..d860ec1a0 100644 --- a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx @@ -82,8 +82,9 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - const errorKind = - errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + const errorKind = errorMessage.includes("signup_disabled") + ? "signup_disabled" + : "generic"; setSigningInState({ status: "failed", diff --git a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx index dee20122e..807fcb5cd 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx @@ -75,8 +75,9 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - const errorKind = - errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + const errorKind = errorMessage.includes("signup_disabled") + ? "signup_disabled" + : "generic"; setSigningInState({ status: "failed", From 021038b3899f41ea5efaf1869a6a3123a4cf6c9e Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 14:26:49 +0900 Subject: [PATCH 3/7] project: detect wrapped signup_disabled error from email sign-in The email sign-in path wraps err.type in a "sign in fail, err: ..." prefix before throwing, so an exact string match skipped it and the widget fell back to the generic "Login failed" message. Switch to a substring check so both the plain and wrapped forms surface the service-shutdown copy. --- .../src/components/widgets/account_widget/account_widget.tsx | 5 +++-- .../src/components/widgets/account_widget/account_widget.tsx | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx index 9eebdfd9b..d860ec1a0 100644 --- a/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/account_widget.tsx @@ -82,8 +82,9 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - const errorKind = - errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + const errorKind = errorMessage.includes("signup_disabled") + ? "signup_disabled" + : "generic"; setSigningInState({ status: "failed", diff --git a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx index dee20122e..807fcb5cd 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/account_widget.tsx @@ -75,8 +75,9 @@ export const AccountWidget: FC = () => { const errorMessage = error instanceof Error ? error.message : "Login failed"; - const errorKind = - errorMessage === "signup_disabled" ? "signup_disabled" : "generic"; + const errorKind = errorMessage.includes("signup_disabled") + ? "signup_disabled" + : "generic"; setSigningInState({ status: "failed", From 9a62f43ef889efdd7d1cc664dbba8c4edf779e5c Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 15:24:43 +0900 Subject: [PATCH 4/7] project: break signup-disabled copy before "but new signups" --- .../widgets/account_widget/auth_progress_widget.tsx | 4 +++- .../widgets/account_widget/auth_progress_widget.tsx | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx index 8d795937f..d7dca5ac1 100644 --- a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -61,7 +61,9 @@ export const AuthProgressWidget: FC = ({ Oko is winding down. Existing accounts can still sign in to - withdraw assets, but new signups are no longer accepted. + withdraw assets, +
+ but new signups are no longer accepted.
) : isFailed ? ( diff --git a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx index 94b4f33e7..6d162c68a 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -53,7 +53,9 @@ export const AuthProgressWidget: FC = ({ Oko is winding down. Existing accounts can still sign in to withdraw - assets, but new signups are no longer accepted. + assets, +
+ but new signups are no longer accepted.
) : isFailed ? ( From a8ccea49c8d758961a89ff433e733a24259ddc86 Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 15:39:15 +0900 Subject: [PATCH 5/7] project: version bump to v0.1.2-alpha.14 --- common/oko_types/package.json | 2 +- key_share_node/ksn_interface/package.json | 4 +-- lerna.json | 2 +- sdk/oko_cosmos_kit/package.json | 6 ++-- sdk/oko_interchain_kit/package.json | 6 ++-- sdk/oko_sdk_core/package.json | 4 +-- sdk/oko_sdk_core_react_native/package.json | 6 ++-- sdk/oko_sdk_cosmos/package.json | 4 +-- sdk/oko_sdk_eth/package.json | 4 +-- sdk/oko_sdk_react/package.json | 12 +++---- sdk/oko_sdk_svm/package.json | 4 +-- yarn.lock | 42 +++++++++++----------- 12 files changed, 48 insertions(+), 48 deletions(-) diff --git a/common/oko_types/package.json b/common/oko_types/package.json index 71e746587..ce3c516b9 100644 --- a/common/oko_types/package.json +++ b/common/oko_types/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-types", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "publishConfig": { "access": "public" diff --git a/key_share_node/ksn_interface/package.json b/key_share_node/ksn_interface/package.json index 132d192e4..e1744a75b 100644 --- a/key_share_node/ksn_interface/package.json +++ b/key_share_node/ksn_interface/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/ksn-interface", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -56,7 +56,7 @@ }, "dependencies": { "@oko-wallet/bytes": "^0.1.2-alpha.12", - "@oko-wallet/oko-types": "^0.1.2-alpha.13" + "@oko-wallet/oko-types": "^0.1.2-alpha.14" }, "devDependencies": { "@types/jest": "^29.5.14", diff --git a/lerna.json b/lerna.json index 25ace21ad..88f4f8d0a 100644 --- a/lerna.json +++ b/lerna.json @@ -46,6 +46,6 @@ "ui/oko_common_ui" ], "npmClient": "yarn", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/sdk/oko_cosmos_kit/package.json b/sdk/oko_cosmos_kit/package.json index dbb3c1778..ae2207a2e 100644 --- a/sdk/oko_cosmos_kit/package.json +++ b/sdk/oko_cosmos_kit/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-cosmos-kit", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "description": "cosmos-kit wallet connector for Oko Wallet", "author": "oko-wallet", @@ -38,8 +38,8 @@ "dependencies": { "@cosmos-kit/core": "^2.16.7", "@keplr-wallet/types": "0.12.297", - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", - "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", + "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.14" }, "peerDependencies": { "@cosmjs/amino": ">= 0.28", diff --git a/sdk/oko_interchain_kit/package.json b/sdk/oko_interchain_kit/package.json index 6e2a39e98..d2b901d24 100644 --- a/sdk/oko_interchain_kit/package.json +++ b/sdk/oko_interchain_kit/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-interchain-kit", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "description": "interchain-kit wallet connector for Oko Wallet", "author": "oko-wallet", @@ -39,8 +39,8 @@ "dependencies": { "@interchain-kit/core": "^0.10.0", "@keplr-wallet/types": "0.12.297", - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", - "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", + "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.14" }, "devDependencies": { "@rollup/plugin-commonjs": "^25.0.0", diff --git a/sdk/oko_sdk_core/package.json b/sdk/oko_sdk_core/package.json index d0651b0f9..9732609a8 100644 --- a/sdk/oko_sdk_core/package.json +++ b/sdk/oko_sdk_core/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-core", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "scripts": { "build": "tsx ./scripts/build.ts", @@ -33,7 +33,7 @@ "dependencies": { "@keplr-wallet/types": "0.12.297", "@oko-wallet/bytes": "^0.1.2-alpha.12", - "@oko-wallet/oko-types": "^0.1.2-alpha.13", + "@oko-wallet/oko-types": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.1.2-alpha.12" }, "devDependencies": { diff --git a/sdk/oko_sdk_core_react_native/package.json b/sdk/oko_sdk_core_react_native/package.json index 43a830631..911bcabfa 100644 --- a/sdk/oko_sdk_core_react_native/package.json +++ b/sdk/oko_sdk_core_react_native/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-core-react-native", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "scripts": { "build": "tsx ./scripts/build.ts", @@ -30,8 +30,8 @@ "directory": "sdk/oko_sdk_core_react_native" }, "dependencies": { - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", - "@oko-wallet/oko-types": "^0.1.2-alpha.13", + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", + "@oko-wallet/oko-types": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.1.2-alpha.12", "buffer": "^6.0.3", "pako": "^2.1.0" diff --git a/sdk/oko_sdk_cosmos/package.json b/sdk/oko_sdk_cosmos/package.json index dbf7da3c0..f32b27281 100644 --- a/sdk/oko_sdk_cosmos/package.json +++ b/sdk/oko_sdk_cosmos/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-cosmos", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "type": "module", "publishConfig": { "access": "public" @@ -39,7 +39,7 @@ "@keplr-wallet/types": "0.12.297", "@noble/curves": "1.9.7", "@noble/hashes": "^1.8.0", - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.1.2-alpha.12", "bech32": "^2.0.0", "buffer": "^6.0.3", diff --git a/sdk/oko_sdk_eth/package.json b/sdk/oko_sdk_eth/package.json index a412b9c81..a97875d58 100644 --- a/sdk/oko_sdk_eth/package.json +++ b/sdk/oko_sdk_eth/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-eth", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "main": "./dist/index.js", "types": "./dist/index.d.ts", "type": "module", @@ -39,7 +39,7 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.1.2-alpha.12", "eventemitter3": "^5.0.1", "uuid": "^13.0.0", diff --git a/sdk/oko_sdk_react/package.json b/sdk/oko_sdk_react/package.json index 2a5db1b33..779d5889a 100644 --- a/sdk/oko_sdk_react/package.json +++ b/sdk/oko_sdk_react/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-react", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "main": "./dist/index.js", "types": "./dist/index.d.ts", "type": "module", @@ -50,11 +50,11 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", - "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.13", - "@oko-wallet/oko-sdk-eth": "^0.1.2-alpha.13", - "@oko-wallet/oko-sdk-svm": "^0.1.2-alpha.13", - "@oko-wallet/oko-types": "^0.1.2-alpha.13", + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", + "@oko-wallet/oko-sdk-cosmos": "^0.1.2-alpha.14", + "@oko-wallet/oko-sdk-eth": "^0.1.2-alpha.14", + "@oko-wallet/oko-sdk-svm": "^0.1.2-alpha.14", + "@oko-wallet/oko-types": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.1.2-alpha.12" }, "peerDependencies": { diff --git a/sdk/oko_sdk_svm/package.json b/sdk/oko_sdk_svm/package.json index 01a1af816..646eea282 100644 --- a/sdk/oko_sdk_svm/package.json +++ b/sdk/oko_sdk_svm/package.json @@ -1,6 +1,6 @@ { "name": "@oko-wallet/oko-sdk-svm", - "version": "0.1.2-alpha.13", + "version": "0.1.2-alpha.14", "main": "./dist/index.js", "types": "./dist/index.d.ts", "type": "module", @@ -36,7 +36,7 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.13", + "@oko-wallet/oko-sdk-core": "^0.1.2-alpha.14", "@oko-wallet/stdlib-js": "^0.0.2-rc.42", "@solana/wallet-standard-features": "^1.3.0", "@solana/web3.js": "^1.98.0", diff --git a/yarn.lock b/yarn.lock index a938d71ff..1ff2725fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11268,7 +11268,7 @@ __metadata: resolution: "@oko-wallet/ksn-interface@workspace:key_share_node/ksn_interface" dependencies: "@oko-wallet/bytes": "npm:^0.1.2-alpha.12" - "@oko-wallet/oko-types": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-types": "npm:^0.1.2-alpha.14" "@types/jest": "npm:^29.5.14" "@types/node": "npm:^24.10.1" del-cli: "npm:^6.0.0" @@ -11548,8 +11548,8 @@ __metadata: dependencies: "@cosmos-kit/core": "npm:^2.16.7" "@keplr-wallet/types": "npm:0.12.297" - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.14" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-node-resolve": "npm:^15.0.0" "@rollup/plugin-typescript": "npm:^11.0.0" @@ -11570,8 +11570,8 @@ __metadata: dependencies: "@interchain-kit/core": "npm:^0.10.0" "@keplr-wallet/types": "npm:0.12.297" - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.14" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-node-resolve": "npm:^15.0.0" "@rollup/plugin-typescript": "npm:^11.0.0" @@ -11612,8 +11612,8 @@ __metadata: resolution: "@oko-wallet/oko-sdk-core-react-native@workspace:sdk/oko_sdk_core_react_native" dependencies: "@expo/config-plugins": "npm:^55.0.6" - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-types": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-types": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.1.2-alpha.12" "@types/react": "npm:~19.1.0" buffer: "npm:^6.0.3" @@ -11647,13 +11647,13 @@ __metadata: languageName: node linkType: hard -"@oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.12, @oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.13, @oko-wallet/oko-sdk-core@workspace:*, @oko-wallet/oko-sdk-core@workspace:sdk/oko_sdk_core": +"@oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.12, @oko-wallet/oko-sdk-core@npm:^0.1.2-alpha.14, @oko-wallet/oko-sdk-core@workspace:*, @oko-wallet/oko-sdk-core@workspace:sdk/oko_sdk_core": version: 0.0.0-use.local resolution: "@oko-wallet/oko-sdk-core@workspace:sdk/oko_sdk_core" dependencies: "@keplr-wallet/types": "npm:0.12.297" "@oko-wallet/bytes": "npm:^0.1.2-alpha.12" - "@oko-wallet/oko-types": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-types": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.1.2-alpha.12" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-json": "npm:^6.1.0" @@ -11695,7 +11695,7 @@ __metadata: languageName: node linkType: hard -"@oko-wallet/oko-sdk-cosmos@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-cosmos@npm:^0.1.2-alpha.13, @oko-wallet/oko-sdk-cosmos@workspace:*, @oko-wallet/oko-sdk-cosmos@workspace:sdk/oko_sdk_cosmos": +"@oko-wallet/oko-sdk-cosmos@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-cosmos@npm:^0.1.2-alpha.14, @oko-wallet/oko-sdk-cosmos@workspace:*, @oko-wallet/oko-sdk-cosmos@workspace:sdk/oko_sdk_cosmos": version: 0.0.0-use.local resolution: "@oko-wallet/oko-sdk-cosmos@workspace:sdk/oko_sdk_cosmos" dependencies: @@ -11705,7 +11705,7 @@ __metadata: "@keplr-wallet/types": "npm:0.12.297" "@noble/curves": "npm:1.9.7" "@noble/hashes": "npm:^1.8.0" - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.1.2-alpha.12" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-json": "npm:^6.1.0" @@ -11729,11 +11729,11 @@ __metadata: languageName: unknown linkType: soft -"@oko-wallet/oko-sdk-eth@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-eth@npm:^0.1.2-alpha.13, @oko-wallet/oko-sdk-eth@workspace:*, @oko-wallet/oko-sdk-eth@workspace:sdk/oko_sdk_eth": +"@oko-wallet/oko-sdk-eth@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-eth@npm:^0.1.2-alpha.14, @oko-wallet/oko-sdk-eth@workspace:*, @oko-wallet/oko-sdk-eth@workspace:sdk/oko_sdk_eth": version: 0.0.0-use.local resolution: "@oko-wallet/oko-sdk-eth@workspace:sdk/oko_sdk_eth" dependencies: - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.1.2-alpha.12" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-json": "npm:^6.1.0" @@ -11762,11 +11762,11 @@ __metadata: version: 0.0.0-use.local resolution: "@oko-wallet/oko-sdk-react@workspace:sdk/oko_sdk_react" dependencies: - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-sdk-eth": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-sdk-svm": "npm:^0.1.2-alpha.13" - "@oko-wallet/oko-types": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-sdk-cosmos": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-sdk-eth": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-sdk-svm": "npm:^0.1.2-alpha.14" + "@oko-wallet/oko-types": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.1.2-alpha.12" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-json": "npm:^6.1.0" @@ -11783,11 +11783,11 @@ __metadata: languageName: unknown linkType: soft -"@oko-wallet/oko-sdk-svm@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-svm@npm:^0.1.2-alpha.13, @oko-wallet/oko-sdk-svm@workspace:*, @oko-wallet/oko-sdk-svm@workspace:sdk/oko_sdk_svm": +"@oko-wallet/oko-sdk-svm@npm:^0.1.2-alpha.1, @oko-wallet/oko-sdk-svm@npm:^0.1.2-alpha.14, @oko-wallet/oko-sdk-svm@workspace:*, @oko-wallet/oko-sdk-svm@workspace:sdk/oko_sdk_svm": version: 0.0.0-use.local resolution: "@oko-wallet/oko-sdk-svm@workspace:sdk/oko_sdk_svm" dependencies: - "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.13" + "@oko-wallet/oko-sdk-core": "npm:^0.1.2-alpha.14" "@oko-wallet/stdlib-js": "npm:^0.0.2-rc.42" "@rollup/plugin-commonjs": "npm:^25.0.0" "@rollup/plugin-node-resolve": "npm:^15.0.0" @@ -11828,7 +11828,7 @@ __metadata: languageName: node linkType: hard -"@oko-wallet/oko-types@npm:^0.1.2-alpha.1, @oko-wallet/oko-types@npm:^0.1.2-alpha.13, @oko-wallet/oko-types@npm:^0.1.2-alpha.2, @oko-wallet/oko-types@workspace:*, @oko-wallet/oko-types@workspace:common/oko_types": +"@oko-wallet/oko-types@npm:^0.1.2-alpha.1, @oko-wallet/oko-types@npm:^0.1.2-alpha.14, @oko-wallet/oko-types@npm:^0.1.2-alpha.2, @oko-wallet/oko-types@workspace:*, @oko-wallet/oko-types@workspace:common/oko_types": version: 0.0.0-use.local resolution: "@oko-wallet/oko-types@workspace:common/oko_types" dependencies: From 6c7284c953b32e20519bf1f814fbf85f0b107936 Mon Sep 17 00:00:00 2001 From: devmosis Date: Mon, 20 Apr 2026 16:22:48 +0900 Subject: [PATCH 6/7] project: center-align signup-disabled message --- .../account_widget/auth_progress_widget.tsx | 14 ++++++++++++-- .../account_widget/auth_progress_widget.tsx | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx index d7dca5ac1..408731ae1 100644 --- a/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/demo_web/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -55,11 +55,21 @@ export const AuthProgressWidget: FC = ({ {isSignupDisabled ? ( <> - + Signups are closed - + Oko is winding down. Existing accounts can still sign in to withdraw assets,
diff --git a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx index 6d162c68a..59a0b5435 100644 --- a/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx +++ b/apps/user_dashboard/src/components/widgets/account_widget/auth_progress_widget.tsx @@ -47,11 +47,21 @@ export const AuthProgressWidget: FC = ({ {isSignupDisabled ? ( <> - + Signups are closed - + Oko is winding down. Existing accounts can still sign in to withdraw assets,
From 744fd55741e088f397c785eb0a3e761863baefc8 Mon Sep 17 00:00:00 2001 From: devmosis Date: Wed, 29 Apr 2026 10:20:23 +0900 Subject: [PATCH 7/7] openapi: add 403 signup-disabled response to keygen routes --- backend/oko_api/server/src/routes/tss_v1/keygen.ts | 8 ++++++++ backend/oko_api/server/src/routes/tss_v2/keygen.ts | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/backend/oko_api/server/src/routes/tss_v1/keygen.ts b/backend/oko_api/server/src/routes/tss_v1/keygen.ts index feb011c7a..9ecd6561a 100644 --- a/backend/oko_api/server/src/routes/tss_v1/keygen.ts +++ b/backend/oko_api/server/src/routes/tss_v1/keygen.ts @@ -62,6 +62,14 @@ export function setKeygenV1Routes(router: Router) { }, }, }, + 403: { + description: "Forbidden - New signups are disabled", + content: { + "application/json": { + schema: ErrorResponseSchema, + }, + }, + }, 409: { description: "Conflict - Email already exists or public key already in use", diff --git a/backend/oko_api/server/src/routes/tss_v2/keygen.ts b/backend/oko_api/server/src/routes/tss_v2/keygen.ts index db11c6aee..39ea6296f 100644 --- a/backend/oko_api/server/src/routes/tss_v2/keygen.ts +++ b/backend/oko_api/server/src/routes/tss_v2/keygen.ts @@ -57,6 +57,14 @@ registry.registerPath({ }, }, }, + 403: { + description: "Forbidden - New signups are disabled", + content: { + "application/json": { + schema: ErrorResponseSchema, + }, + }, + }, 409: { description: "Conflict - Email already exists or public key already in use",