Add level query to log websocket url fix #589 (#590)

This commit is contained in:
Kevin 2021-05-31 18:58:56 +08:00 committed by GitHub
parent 13dcb7d653
commit d4015f6423
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 12 deletions

View file

@ -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) {

View file

@ -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)
}

View file

@ -96,7 +96,7 @@ export const initialState: StateConfigs = {
'redir-port': 0,
'allow-lan': false,
mode: 'Rule',
'log-level': 'info',
'log-level': 'uninit',
},
haveFetchedConfig: false,
};

View file

@ -2,3 +2,5 @@ export type ClashAPIConfig = {
baseURL: string;
secret?: string;
};
export type LogsAPIConfig = ClashAPIConfig & { logLevel: string };