feat: replace browser login with imported Reddit sessions
This commit is contained in:
1 parent
2b0545afcf
commit
c483c7b8be
76 files changed
+2048
-2828
No files matched your search
@@ -4,13 +4,14 @@ import {
|
||||
ConfigUpdateRequestSchema,
|
||||
ConfigUpdateResponseSchema,
|
||||
ErrorResponseSchema,
|
||||
LoginInfoResponseSchema,
|
||||
LoginStartResponseSchema,
|
||||
LoginStatusResponseSchema,
|
||||
RedditCookieImportRequestSchema,
|
||||
RedditCookieImportResponseSchema,
|
||||
type ConfigResponse,
|
||||
type ConfigUpdateRequest,
|
||||
type LoginStatusResponse,
|
||||
} from '../../../../../packages/api-contracts/src/index.js';
|
||||
import { dashboardRequest } from '../../api/request.js';
|
||||
|
||||
async function parseResponse<T>(response: Response, schema: ZodType<T>): Promise<T> {
|
||||
const payload: unknown = await response.json();
|
||||
@@ -22,7 +23,7 @@ async function parseResponse<T>(response: Response, schema: ZodType<T>): Promise
|
||||
}
|
||||
|
||||
function request(path: string, init?: RequestInit): Promise<Response> {
|
||||
return globalThis.fetch(path, { credentials: 'same-origin', ...init });
|
||||
return dashboardRequest(path, init);
|
||||
}
|
||||
|
||||
export function fetchSettings(): Promise<ConfigResponse> {
|
||||
@@ -41,18 +42,19 @@ export async function saveSettings(updates: ConfigUpdateRequest) {
|
||||
);
|
||||
}
|
||||
|
||||
export function fetchLoginInfo() {
|
||||
return request('/api/login/info').then((response) => parseResponse(response, LoginInfoResponseSchema));
|
||||
}
|
||||
|
||||
export function fetchLoginStatus(): Promise<LoginStatusResponse> {
|
||||
return request('/api/login/status').then((response) => parseResponse(response, LoginStatusResponseSchema));
|
||||
}
|
||||
|
||||
export async function startLogin(): Promise<void> {
|
||||
export async function importRedditSession(exported: unknown): Promise<void> {
|
||||
const body = RedditCookieImportRequestSchema.parse(exported);
|
||||
const response = await parseResponse(
|
||||
await request('/api/login/start', { method: 'POST' }),
|
||||
LoginStartResponseSchema,
|
||||
await request('/api/login/session-import', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(body),
|
||||
}),
|
||||
RedditCookieImportResponseSchema,
|
||||
);
|
||||
if (!response.ok) throw new Error(response.error);
|
||||
}
|
||||
Reference in new issue
Block a user