parent
13dcb7d653
commit
d4015f6423
4 changed files with 29 additions and 12 deletions
|
@ -1,8 +1,7 @@
|
|||
import { ClashAPIConfig } from 'src/types';
|
||||
import { LogsAPIConfig } from 'src/types';
|
||||
|
||||
import { buildWebSocketURL, getURLAndInit } from '../misc/request-helper';
|
||||
import { buildLogsWebSocketURL, getURLAndInit } from '../misc/request-helper';
|
||||
|
||||
type LogsAPIConfig = ClashAPIConfig & { logLevel: string };
|
||||
type LogEntry = {
|
||||
time?: string;
|
||||
id?: string;
|
||||
|
@ -77,9 +76,10 @@ let controller: AbortController;
|
|||
// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState
|
||||
let wsState: number;
|
||||
export function fetchLogs(apiConfig: LogsAPIConfig, appendLog: AppendLogFn) {
|
||||
if (apiConfig.logLevel === 'uninit') return;
|
||||
if (fetched || wsState === 1) return;
|
||||
wsState = 1;
|
||||
const url = buildWebSocketURL(apiConfig, endpoint);
|
||||
const url = buildLogsWebSocketURL(apiConfig, endpoint);
|
||||
const ws = new WebSocket(url);
|
||||
ws.addEventListener('error', () => (wsState = 3));
|
||||
ws.addEventListener('close', function (_ev) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { trimTrailingSlash } from 'src/misc/utils';
|
||||
import { ClashAPIConfig } from 'src/types';
|
||||
import { LogsAPIConfig } from 'src/types';
|
||||
|
||||
const headersCommon = { 'Content-Type': 'application/json' };
|
||||
|
||||
|
@ -10,6 +11,12 @@ function genCommonHeaders({ secret }: { secret?: string }) {
|
|||
}
|
||||
return h;
|
||||
}
|
||||
function buildWebSocketURLBase(baseURL: string, params: URLSearchParams, endpoint: string) {
|
||||
let qs = '?' + params.toString()
|
||||
const url = new URL(baseURL);
|
||||
url.protocol === 'https:' ? (url.protocol = 'wss:') : (url.protocol = 'ws:');
|
||||
return `${trimTrailingSlash(url.href)}${endpoint}${qs}`;
|
||||
}
|
||||
|
||||
export function getURLAndInit({ baseURL, secret }: ClashAPIConfig) {
|
||||
const headers = genCommonHeaders({ secret });
|
||||
|
@ -21,11 +28,19 @@ export function getURLAndInit({ baseURL, secret }: ClashAPIConfig) {
|
|||
|
||||
export function buildWebSocketURL(apiConfig: ClashAPIConfig, endpoint: string) {
|
||||
const { baseURL, secret } = apiConfig;
|
||||
let qs = '';
|
||||
if (typeof secret === 'string' && secret !== '') {
|
||||
qs += '?token=' + encodeURIComponent(secret);
|
||||
}
|
||||
const url = new URL(baseURL);
|
||||
url.protocol === 'https:' ? (url.protocol = 'wss:') : (url.protocol = 'ws:');
|
||||
return `${trimTrailingSlash(url.href)}${endpoint}${qs}`;
|
||||
const params = new URLSearchParams({
|
||||
token: secret,
|
||||
});
|
||||
|
||||
return buildWebSocketURLBase(baseURL, params, endpoint)
|
||||
}
|
||||
|
||||
export function buildLogsWebSocketURL(apiConfig: LogsAPIConfig, endpoint: string) {
|
||||
const { baseURL, secret, logLevel } = apiConfig;
|
||||
const params = new URLSearchParams({
|
||||
token: secret,
|
||||
level: logLevel,
|
||||
});
|
||||
|
||||
return buildWebSocketURLBase(baseURL, params, endpoint)
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ export const initialState: StateConfigs = {
|
|||
'redir-port': 0,
|
||||
'allow-lan': false,
|
||||
mode: 'Rule',
|
||||
'log-level': 'info',
|
||||
'log-level': 'uninit',
|
||||
},
|
||||
haveFetchedConfig: false,
|
||||
};
|
||||
|
|
|
@ -2,3 +2,5 @@ export type ClashAPIConfig = {
|
|||
baseURL: string;
|
||||
secret?: string;
|
||||
};
|
||||
|
||||
export type LogsAPIConfig = ClashAPIConfig & { logLevel: string };
|
Loading…
Reference in a new issue