From 8ca768b95729fb87f1ff1e5fd6754cd691a84cb0 Mon Sep 17 00:00:00 2001
From: Lim Chee Aun <cheeaun@gmail.com>
Date: Sat, 23 Dec 2023 23:07:08 +0800
Subject: [PATCH] Apply auth for remote-instance API calls

---
 src/utils/api.js         | 17 +++++++++++++++++
 src/utils/store-utils.js |  5 +++++
 2 files changed, 22 insertions(+)

diff --git a/src/utils/api.js b/src/utils/api.js
index 2d101915..d1c9981a 100644
--- a/src/utils/api.js
+++ b/src/utils/api.js
@@ -4,6 +4,7 @@ import store from './store';
 import {
   getAccount,
   getAccountByAccessToken,
+  getAccountByInstance,
   getCurrentAccount,
   saveAccount,
 } from './store-utils';
@@ -249,6 +250,22 @@ export function api({ instance, accessToken, accountID, account } = {}) {
       };
     }
 
+    const instanceAccount = getAccountByInstance(instance);
+    if (instanceAccount) {
+      const accessToken = instanceAccount.accessToken;
+      const client =
+        accountApis[instance]?.[accessToken] ||
+        initClient({ instance, accessToken });
+      const { masto, streaming } = client;
+      return {
+        masto,
+        streaming,
+        client,
+        authenticated: true,
+        instance,
+      };
+    }
+
     const client = apis[instance] || initClient({ instance });
     const { masto, streaming, accessToken } = client;
     return {
diff --git a/src/utils/store-utils.js b/src/utils/store-utils.js
index 3c365efc..7746a080 100644
--- a/src/utils/store-utils.js
+++ b/src/utils/store-utils.js
@@ -10,6 +10,11 @@ export function getAccountByAccessToken(accessToken) {
   return accounts.find((a) => a.accessToken === accessToken);
 }
 
+export function getAccountByInstance(instance) {
+  const accounts = store.local.getJSON('accounts') || [];
+  return accounts.find((a) => a.instanceURL === instance);
+}
+
 export function getCurrentAccount() {
   if (!window.__IGNORE_GET_ACCOUNT_ERROR__) {
     // Track down getCurrentAccount() calls before account-based states are initialized