From 37de06e6aab91b35800da40e931adf63763ce8aa Mon Sep 17 00:00:00 2001 From: alanrsoares Date: Thu, 18 Jan 2024 10:52:33 -0300 Subject: [PATCH 1/4] feat: expose admin procedures for managing global message & account stastuses --- apps/maestro/src/server/routers/_app.ts | 2 ++ .../src/server/routers/accounts/getAccountStatuses.ts | 5 +++++ apps/maestro/src/server/routers/accounts/index.ts | 8 ++++++++ apps/maestro/src/server/routers/messages/index.ts | 2 ++ .../src/server/routers/messages/setGlobalMessage.ts | 8 ++++++++ 5 files changed, 25 insertions(+) create mode 100644 apps/maestro/src/server/routers/accounts/getAccountStatuses.ts create mode 100644 apps/maestro/src/server/routers/accounts/index.ts create mode 100644 apps/maestro/src/server/routers/messages/setGlobalMessage.ts diff --git a/apps/maestro/src/server/routers/_app.ts b/apps/maestro/src/server/routers/_app.ts index 904c5fed8..3722dc013 100644 --- a/apps/maestro/src/server/routers/_app.ts +++ b/apps/maestro/src/server/routers/_app.ts @@ -1,4 +1,5 @@ import { publicProcedure, router } from "~/server/trpc"; +import { accountsRouter } from "./accounts"; import { authRouter } from "./auth"; import { axelarConfigsRouter } from "./axelarConfigs"; import { axelarjsSDKRouter } from "./axelarjsSDK"; @@ -22,6 +23,7 @@ export const appRouter = router({ auth: authRouter, openai: openaiRouter, messages: messagesRouter, + accounts: accountsRouter, }); export type AppRouter = typeof appRouter; diff --git a/apps/maestro/src/server/routers/accounts/getAccountStatuses.ts b/apps/maestro/src/server/routers/accounts/getAccountStatuses.ts new file mode 100644 index 000000000..a39a112fb --- /dev/null +++ b/apps/maestro/src/server/routers/accounts/getAccountStatuses.ts @@ -0,0 +1,5 @@ +import { publicProcedure } from "~/server/trpc"; + +export const getAccountStatuses = publicProcedure.query(async ({ ctx }) => { + return await ctx.persistence.kv.getAccounStatuses(); +}); diff --git a/apps/maestro/src/server/routers/accounts/index.ts b/apps/maestro/src/server/routers/accounts/index.ts new file mode 100644 index 000000000..e7f3cddc2 --- /dev/null +++ b/apps/maestro/src/server/routers/accounts/index.ts @@ -0,0 +1,8 @@ +import { router } from "~/server/trpc"; +import { getAccountStatuses } from "./getAccountStatuses"; + +export const accountsRouter = router({ + getAccountStatuses, +}); + +export type AccountsRouter = typeof accountsRouter; diff --git a/apps/maestro/src/server/routers/messages/index.ts b/apps/maestro/src/server/routers/messages/index.ts index 7fea3803e..5b952b8eb 100644 --- a/apps/maestro/src/server/routers/messages/index.ts +++ b/apps/maestro/src/server/routers/messages/index.ts @@ -1,8 +1,10 @@ import { router } from "~/server/trpc"; import { getGlobalMessage } from "./getMessages"; +import { setGlobalMessage } from "./setGlobalMessage"; export const messagesRouter = router({ getGlobalMessage, + setGlobalMessage, }); export type MessagesRouter = typeof messagesRouter; diff --git a/apps/maestro/src/server/routers/messages/setGlobalMessage.ts b/apps/maestro/src/server/routers/messages/setGlobalMessage.ts new file mode 100644 index 000000000..1646454d2 --- /dev/null +++ b/apps/maestro/src/server/routers/messages/setGlobalMessage.ts @@ -0,0 +1,8 @@ +import { publicProcedure } from "~/server/trpc"; +import { messageSchema } from "~/services/db/kv"; + +export const setGlobalMessage = publicProcedure + .input(messageSchema) + .mutation(async ({ ctx, input }) => { + return await ctx.persistence.kv.setGlobalMessage(input); + }); From 072ce67d4164df15135fcd5fbc3ae0df0a8d39e9 Mon Sep 17 00:00:00 2001 From: alanrsoares Date: Thu, 18 Jan 2024 10:54:24 -0300 Subject: [PATCH 2/4] feat: add basic admin management for global messages + listing account statuses --- apps/maestro/src/pages/admin/index.tsx | 88 +++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/apps/maestro/src/pages/admin/index.tsx b/apps/maestro/src/pages/admin/index.tsx index 42fcf58c3..f47858603 100644 --- a/apps/maestro/src/pages/admin/index.tsx +++ b/apps/maestro/src/pages/admin/index.tsx @@ -1,11 +1,97 @@ +import { Button, Card, CopyToClipboardButton, Table } from "@axelarjs/ui"; +import { useEffect, useState } from "react"; + import { withRouteProtection } from "~/lib/auth"; +import { trpc } from "~/lib/trpc"; import Page from "~/ui/layouts/Page"; const AdminIndexPage = () => { - return admin; + return ( + + Admin Panel + + + + + + ); }; export default withRouteProtection(AdminIndexPage, { redirectTo: "/", accountStatuses: ["privileged"], }); + +const GlobalMessageManager = () => { + const { data: globalMessage } = trpc.messages.getGlobalMessage.useQuery(); + const { mutateAsync: saveGlobalMessage, isLoading: isSavingGlobalMessage } = + trpc.messages.setGlobalMessage.useMutation(); + + const [newMessage, setNewMessage] = useState(globalMessage?.content || ""); + + useEffect(() => { + setNewMessage(globalMessage?.content || ""); + }, [globalMessage]); + + return ( + + + Global Message +