Верно, Obsidian — это приложение на базе Electron, работающее локально. Оно использует локальное хранилище, поэтому API-ключ остаётся на устройстве пользователя.
Оказывается, для проблемы CORS есть решение. Пока я тестировал его только на своём настольном компьютере. Кроме того, Discourse — это здорово!
Код, который я привёл выше, нужно было изменить следующим образом:
import DiscoursePlugin from "./main";
import { requestUrl, TFile } from "obsidian";
//...
const response = await requestUrl({
url: url,
method: "POST",
contentType: "application/json",
body,
headers,
});
//...
Следующий вопрос будет касаться возможности для пользователей запрашивать API-ключи пользователей непосредственно из приложения, но это отдельная тема.