Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
f0eee9d
o
eldenpark Nov 10, 2025
fb2e72f
demo: update favicon
piatoss3612 Nov 10, 2025
b33b97f
o
piatoss3612 Nov 10, 2025
05abdfe
ctd: add frame image to sign-in form
piatoss3612 Nov 10, 2025
e739f0a
internals: fix api dockerfile
chihunmanse Nov 10, 2025
d1ea59c
internals: fix api dockerfile
chihunmanse Nov 10, 2025
6a43ec9
docs_web: Add "copy page as Markdown for LLMs" button. and llms.txt
lidarbtc Nov 10, 2025
8cf2e13
project: Update README license to Apache 2.0
lidarbtc Nov 10, 2025
c71c78f
project: replace product logo with oko logo
piatoss3612 Nov 10, 2025
a3f4398
common_ui: update button style
piatoss3612 Nov 10, 2025
292bdc0
oko_admin_web: Always expand nav submenus and move Manage Users to
lidarbtc Nov 11, 2025
6b1cee2
o
eldenpark Nov 11, 2025
2a1796f
o
eldenpark Nov 11, 2025
a4373ab
o
eldenpark Nov 11, 2025
dabfd6f
o
eldenpark Nov 11, 2025
00e81e7
o
eldenpark Nov 11, 2025
32a7297
docs_web: add algolia search
lidarbtc Nov 11, 2025
fe79792
project: change default logo size and header logo size
piatoss3612 Nov 11, 2025
c9c2b8e
update README
piatoss3612 Nov 11, 2025
fe95ada
o
piatoss3612 Nov 11, 2025
5944ee7
attached: add `SignWithOkoBox` component
piatoss3612 Nov 11, 2025
b157434
o
piatoss3612 Nov 11, 2025
e1a283d
attached: add ipfs gateway url
piatoss3612 Nov 11, 2025
185b837
o
piatoss3612 Nov 11, 2025
57fb0aa
o
lidarbtc Nov 12, 2025
5efacbf
o
chemonoworld Nov 12, 2025
2d686a6
biome: add Tailwind CSS parser configuration
chemonoworld Nov 12, 2025
6c053f7
internals: fix dockerfiles path
lidarbtc Nov 12, 2025
6c28e48
o
eldenpark Nov 11, 2025
e52a747
o
eldenpark Nov 12, 2025
34ad3f0
admin_api: add audit log to admin dashboard
lidarbtc Nov 12, 2025
fbf29a2
o
eldenpark Nov 13, 2025
98711eb
o
eldenpark Nov 13, 2025
1bdf3ae
o
eldenpark Nov 13, 2025
bcd8c6d
o
eldenpark Nov 13, 2025
7f52cfe
o
eldenpark Nov 13, 2025
4ad5b7d
o
lidarbtc Nov 13, 2025
af58105
o
lidarbtc Nov 13, 2025
a7f205b
o
lidarbtc Nov 13, 2025
51e8114
o
lidarbtc Nov 13, 2025
6f2ac6d
o
lidarbtc Nov 13, 2025
da54ad1
o
eldenpark Nov 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ TBD

## License

Distributed under the GPL v3 License. See
[GPL V3 License](https://opensource.org/license/gpl-3-0) for more information.
Distributed under the Apache License 2.0. See
[Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0) for more information.

## Development

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 7 additions & 6 deletions apps/customer_dashboard/src/app/users/sign_in/page.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
justify-content: center;
}

.rectangleSection {
background: var(--bg-secondary);
height: 562px;
border-radius: 24px;
width: 683px;
flex-shrink: 0;
.formFrame {
position: relative;
padding: 40px;
background-image: url("/signin_form_frame.png");
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center;
}
5 changes: 3 additions & 2 deletions apps/customer_dashboard/src/app/users/sign_in/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ export default function Page() {
<DashboardHeader />

<div className={styles.body}>
<div className={styles.rectangleSection}></div>
<SignInForm />
<div className={styles.formFrame}>
<SignInForm />
</div>
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@

.cardHeader {
display: flex;
height: 140px;
justify-content: center;
align-items: flex-start;
gap: 10px;
margin-top: 20px;
margin-top: 24px;
margin-bottom: 32px;
}

.cardLogoContainer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export const SignInForm: React.FC = () => {
<Card className={styles.loginCard} variant="elevated" padding="lg">
<div className={styles.cardHeader}>
{/* NOTE: theme is hardcoded to light for now */}
<Logo theme={"light"} />
<Logo theme={"light"} width={58} height={22} />
</div>

<AccountForm
Expand Down
Binary file removed apps/demo_web/public/favicon.png
Binary file not shown.
Binary file added apps/demo_web/public/oko_favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion apps/demo_web/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const metadata: Metadata = {
title: "Oko Demo",
description: "Oko Demo",
icons: {
icon: "/favicon.png",
icon: "/oko_favicon.png",
},
openGraph: {
type: "website",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
}

.logoResponsive {
width: 74px;
width: auto;
height: 32px;
flex-shrink: 0;
aspect-ratio: 37/16;
// aspect-ratio: 37/16;

// TODO: new logo responsive size is required
// @media (min-width: $desktop_min_width) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import { Spacing } from "@oko-wallet/oko-common-ui/spacing";
import { TelegramIcon } from "@oko-wallet/oko-common-ui/icons/telegram_icon";
import { XIcon } from "@oko-wallet/oko-common-ui/icons/x_icon";
import { AppleIcon } from "@oko-wallet/oko-common-ui/icons/apple_icon";
import { OkoProductLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_product_logo_icon";
import { MailboxIcon } from "@oko-wallet/oko-common-ui/icons/mailbox";
import { OkoLogoIcon } from "@oko-wallet-common-ui/icons/oko_logo_icon";

import styles from "./login_widget.module.scss";

Expand All @@ -31,10 +31,7 @@ export const LoginDefaultView: FC<LoginDefaultViewProps> = ({
return (
<Fragment>
<div className={styles.logoWrapper}>
<Typography size="sm" weight="medium" color="primary">
Login or sign up
</Typography>
<Logo theme={"light"} />
<Logo theme={"light"} width={84} height={32} />
</div>

<Button
Expand Down Expand Up @@ -104,9 +101,9 @@ export const LoginDefaultView: FC<LoginDefaultViewProps> = ({

<div className={styles.getSupportRow}>
<div className={styles.byKeplrRow}>
<OkoProductLogoIcon width={43.26} height={20} theme={"light"} />
<Typography size="xs" weight="medium" color="secondary">
by Keplr
<OkoLogoIcon width={47} height={18} theme={"light"} />
<Typography size="sm" weight="medium" color="secondary">
Oko
</Typography>
</div>
<a
Expand Down
20 changes: 20 additions & 0 deletions apps/docs_web/docusaurus.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { themes as prismThemes } from "prism-react-renderer";
import type { Config } from "@docusaurus/types";
import type * as Preset from "@docusaurus/preset-classic";
import type { PluginOptions } from "@signalwire/docusaurus-plugin-llms-txt/public";

// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)

Expand Down Expand Up @@ -103,6 +104,25 @@ const config: Config = {
additionalLanguages: ["bash"],
},
} satisfies Preset.ThemeConfig,
themes: ["@signalwire/docusaurus-theme-llms-txt"],
plugins: [
[
"@signalwire/docusaurus-plugin-llms-txt",
{
llmsTxt: {
enableLlmsFullTxt: true,
},
ui: {
copyPageContent: {
contentStrategy: "prefer-markdown",
display: {
docs: true,
},
},
},
} satisfies PluginOptions,
],
],
};

export default config;
14 changes: 8 additions & 6 deletions apps/docs_web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,21 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.8.1",
"@docusaurus/plugin-client-redirects": "3.6.3",
"@docusaurus/preset-classic": "3.8.1",
"@docusaurus/core": "3.9.2",
"@docusaurus/plugin-client-redirects": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@mdx-js/react": "^3.0.0",
"@signalwire/docusaurus-plugin-llms-txt": "2.0.0-alpha.7",
"@signalwire/docusaurus-theme-llms-txt": "1.0.0-alpha.8",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.1",
"@docusaurus/tsconfig": "3.8.1",
"@docusaurus/types": "3.8.1",
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/tsconfig": "3.9.2",
"@docusaurus/types": "3.9.2",
"typescript": "~5.6.2"
},
"browserslist": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import { Spacing } from "@oko-wallet/oko-common-ui/spacing";
import { TelegramIcon } from "@oko-wallet/oko-common-ui/icons/telegram_icon";
import { XIcon } from "@oko-wallet/oko-common-ui/icons/x_icon";
import { AppleIcon } from "@oko-wallet/oko-common-ui/icons/apple_icon";
import { OkoProductLogoIcon } from "@oko-wallet/oko-common-ui/icons/oko_product_logo_icon";
import { MailboxIcon } from "@oko-wallet/oko-common-ui/icons/mailbox";
import { OkoLogoIcon } from "@oko-wallet-common-ui/icons/oko_logo_icon";

import styles from "./login_widget.module.scss";

Expand Down Expand Up @@ -104,7 +104,7 @@ export const LoginDefaultView: FC<LoginDefaultViewProps> = ({

<div className={styles.getSupportRow}>
<div className={styles.byKeplrRow}>
<OkoProductLogoIcon width={43.26} height={20} theme={"light"} />
<OkoLogoIcon width={47} height={18} theme={"light"} />
<Typography size="xs" weight="medium" color="secondary">
by Keplr
</Typography>
Expand Down
3 changes: 2 additions & 1 deletion apps/oko_admin_web/src/components/navigation/nav_items.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ export const navigationItems: NavigationItem[] = [
},
{
label: "Manage Users",
route: paths.user_list,
route: "manage-users-menu",
icon: <UsersIcon color="var(--gray-400)" className={styles.icon} />,
subItems: [{ label: "User List", route: paths.user_list }],
},
{
label: "Sig Shares",
Expand Down
55 changes: 12 additions & 43 deletions apps/oko_admin_web/src/components/navigation/navigation.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import { useEffect, useState } from "react";
import { usePathname, useRouter } from "next/navigation";

import styles from "./navigation.module.scss";
Expand All @@ -20,60 +19,30 @@ export interface NavigationProps {
}

export const Navigation: React.FC<NavigationProps> = () => {
const [openMenus, setOpenMenus] = useState<Record<string, boolean>>({});
const router = useRouter();
const pathname = usePathname();

useEffect(() => {
const newOpenMenus: Record<string, boolean> = {};
navigationItems.forEach((item) => {
if (item.subItems) {
const isCurrentPath = item.subItems.some(
(subItem) => pathname === subItem.route,
);
if (isCurrentPath) {
newOpenMenus[item.route] = true;
}
}
});
setOpenMenus(newOpenMenus);
}, [pathname]);

const toggleMenu = (route: string) => {
setOpenMenus((prev) => ({
...prev,
[route]: !prev[route],
}));
};

return (
<div className={styles.wrapper}>
{navigationItems.map((item) => {
if (item.subItems && item.subItems.length > 0) {
return (
// has sub items
<div key={item.route}>
<NavItem
kind="trigger"
// TODO: @elden
onClick={() => toggleMenu(item.route)}
icon={item.icon}
>
<NavItem kind="trigger" icon={item.icon}>
{item.label}
</NavItem>
{openMenus[item.route] && (
<NavMenu>
{item.subItems.map((subItem) => (
<NavItem
key={subItem.route}
onClick={() => router.push(subItem.route)}
active={pathname === subItem.route}
>
{subItem.label}
</NavItem>
))}
</NavMenu>
)}
<NavMenu>
{item.subItems.map((subItem) => (
<NavItem
key={subItem.route}
onClick={() => router.push(subItem.route)}
active={pathname === subItem.route}
>
{subItem.label}
</NavItem>
))}
</NavMenu>
</div>
);
} else {
Expand Down
45 changes: 45 additions & 0 deletions backend/admin_api/src/routes/activate_ks_node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import type { Response, Router } from "express";
import type { OkoApiResponse } from "@oko-wallet/oko-types/api_response";
import type {
GetAllKSNodeResponse,
CreateKSNodeResponse,
DeactivateKSNodeRequest,
DeactivateKSNodeResponse,
GetKSNodeByIdRequest,
GetKSNodeByIdResponse,
UpdateKSNodeRequest,
UpdateKSNodeResponse,
ActivateKSNodeRequest,
ActivateKSNodeResponse,
} from "@oko-wallet/oko-types/admin";
import type { CreateKSNodeRequest } from "@oko-wallet/oko-types/admin";
import { ErrorCodeMap } from "@oko-wallet/oko-api-error-codes";

import {
adminAuthMiddleware,
type AuthenticatedAdminRequest,
} from "@oko-wallet-admin-api/middleware";
import {
getAllKSNodes,
createKSNode,
deactivateKSNode,
getKSNodeById,
updateKSNode,
activateKSNode,
deleteKSNode,
} from "@oko-wallet-admin-api/api/ks_node";

export async function activate_ks_node(
req: AuthenticatedAdminRequest<ActivateKSNodeRequest>,
res: Response<OkoApiResponse<ActivateKSNodeResponse>>,
) {
const state = req.app.locals;

const result = await activateKSNode(state.db, req.body);
if (!result.success) {
res.status(ErrorCodeMap[result.code] ?? 500).json(result);
return;
}

res.status(200).json(result);
}
Loading