84 lines
2.6 KiB
TypeScript
84 lines
2.6 KiB
TypeScript
import log from "electron-log";
|
|
import { db } from "../../db";
|
|
import { eq } from "drizzle-orm";
|
|
import { apps } from "../../db/schema";
|
|
import { getSupabaseClient } from "../../supabase_admin/supabase_management_client";
|
|
import {
|
|
createLoggedHandler,
|
|
createTestOnlyLoggedHandler,
|
|
} from "./safe_handle";
|
|
import { handleSupabaseOAuthReturn } from "../../supabase_admin/supabase_return_handler";
|
|
import { safeSend } from "../utils/safe_sender";
|
|
|
|
const logger = log.scope("supabase_handlers");
|
|
const handle = createLoggedHandler(logger);
|
|
const testOnlyHandle = createTestOnlyLoggedHandler(logger);
|
|
|
|
export function registerSupabaseHandlers() {
|
|
handle("supabase:list-projects", async () => {
|
|
const supabase = await getSupabaseClient();
|
|
return supabase.getProjects();
|
|
});
|
|
|
|
// Set app project - links a Dyad app to a Supabase project
|
|
handle(
|
|
"supabase:set-app-project",
|
|
async (_, { project, app }: { project: string; app: number }) => {
|
|
await db
|
|
.update(apps)
|
|
.set({ supabaseProjectId: project })
|
|
.where(eq(apps.id, app));
|
|
|
|
logger.info(`Associated app ${app} with Supabase project ${project}`);
|
|
},
|
|
);
|
|
|
|
// Unset app project - removes the link between a Dyad app and a Supabase project
|
|
handle("supabase:unset-app-project", async (_, { app }: { app: number }) => {
|
|
await db
|
|
.update(apps)
|
|
.set({ supabaseProjectId: null })
|
|
.where(eq(apps.id, app));
|
|
|
|
logger.info(`Removed Supabase project association for app ${app}`);
|
|
});
|
|
|
|
testOnlyHandle(
|
|
"supabase:fake-connect-and-set-project",
|
|
async (
|
|
event,
|
|
{ appId, fakeProjectId }: { appId: number; fakeProjectId: string },
|
|
) => {
|
|
// Call handleSupabaseOAuthReturn with fake data
|
|
handleSupabaseOAuthReturn({
|
|
token: "fake-access-token",
|
|
refreshToken: "fake-refresh-token",
|
|
expiresIn: 3600, // 1 hour
|
|
});
|
|
logger.info(
|
|
`Called handleSupabaseOAuthReturn with fake data for app ${appId} during testing.`,
|
|
);
|
|
|
|
// Set the supabase project for the currently selected app
|
|
await db
|
|
.update(apps)
|
|
.set({
|
|
supabaseProjectId: fakeProjectId,
|
|
})
|
|
.where(eq(apps.id, appId));
|
|
logger.info(
|
|
`Set fake Supabase project ${fakeProjectId} for app ${appId} during testing.`,
|
|
);
|
|
|
|
// Simulate the deep link event
|
|
safeSend(event.sender, "deep-link-received", {
|
|
type: "supabase-oauth-return",
|
|
url: "https://supabase-oauth.dyad.sh/api/connect-supabase/login",
|
|
});
|
|
logger.info(
|
|
`Sent fake deep-link-received event for app ${appId} during testing.`,
|
|
);
|
|
},
|
|
);
|
|
}
|