import { ipcMain, Event, shell } from "electron" import Mastodon, { Status, Response } from "megalodon" import Datastore from 'nedb' import Window from "./Window" export default class Auth { public static ready() { let clientId: string let clientSecret: string ipcMain.on("new-account-setup", async (event: Event, instance: string) => { const SCOPES: string = "read write follow" let url: string | null Mastodon.registerApp( "TheDesk", { scopes: SCOPES }, "https://" + instance ) .then(appData => { clientId = appData.clientId clientSecret = appData.clientSecret url = appData.url if (url) { shell.openExternal( url, { activate: false }, err => { if (err) console.log(err) } ) } else { Window.windowMap .get("main")! .webContents.send(`error`, { id: "ERROR_GET_AUTHURL", message: "Failed to get auth URL to login." }) } }) .catch((err: Error) => Window.windowMap .get("main")! .webContents.send(`error`, { id: "ERROR_CONNECTION", message: "Connection error", meta: err }) ) }) ipcMain.on( "new-account-auth", async (event: Event, code: string, instance: string) => { let url: string = "https://" + instance Mastodon.fetchAccessToken(clientId, clientSecret, code, url) .then((tokenData: Partial<{ accessToken: string }>) => { if (tokenData.accessToken) { const client = new Mastodon( tokenData.accessToken, url + "/api/v1" ) client .get<[Status]>("/accounts/verify_credentials") .then((resp: Response<[Status]>) => { console.log(resp.data) }) } else { Window.windowMap .get("main")! .webContents.send(`error`, { id: "ERROR_GET_TOKEN", message: "Failed to get access token." }) } }) .catch((err: Error) => Window.windowMap .get("main")! .webContents.send(`error`, { id: "ERROR_CONNECTION", message: "Connection error", meta: err }) ) } ) } }