Skip to content

Commit 15a5808

Browse files
committed
Updates
Signed-off-by: Tyler Smalley <[email protected]>
1 parent 0938637 commit 15a5808

File tree

6 files changed

+49
-27
lines changed

6 files changed

+49
-27
lines changed

src/serve-panel-provider.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,20 @@ export class ServePanelProvider implements vscode.WebviewViewProvider {
3636
case 'relayRequest': {
3737
const { id, endpoint, method } = m;
3838
Logger.info(`${id}, ${endpoint}, ${method}`, 'serve-panel');
39-
response = await this.ts.performFetch(endpoint, method, m.data);
40-
Logger.info(`response: ${JSON.stringify(response)}`, 'serve-panel');
41-
this.postMessage({
42-
id,
43-
endpoint,
44-
method,
45-
type: 'relayResponse',
46-
data: response,
47-
});
39+
try {
40+
response = await this.ts.performFetch(endpoint, method, m.data);
41+
Logger.info(`response: ${JSON.stringify(response)}`, 'serve-panel');
42+
this.postMessage({
43+
id,
44+
endpoint,
45+
method,
46+
type: 'relayResponse',
47+
data: response,
48+
});
49+
} catch (e) {
50+
vscode.window.showErrorMessage(`${e}`);
51+
}
52+
4853
break;
4954
}
5055

src/tailscale/cli.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ export class Tailscale {
251251
});
252252

253253
if (!resp.ok) {
254+
Logger.error(`${endpoint} failed: ${JSON.stringify(resp)}`);
254255
throw new Error(`${endpoint} failed`);
255256
}
256257

@@ -259,7 +260,9 @@ export class Tailscale {
259260
try {
260261
return JSON.parse(text);
261262
// eslint-disable-next-line no-empty
262-
} catch {}
263+
} catch {
264+
Logger.error(`failed to parse json: ${text}`);
265+
}
263266

264267
return text;
265268
} catch (e) {

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ interface OpenLink extends RequestBase {
112112
}
113113

114114
interface SudoPrompt {
115+
id?: number;
115116
type: 'sudoPrompt';
116117
operation: 'add' | 'delete';
117118
params?: ServeParams;

src/webviews/api.ts

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { vsCodeAPI } from '../vscode-api';
2-
import type { WebviewData, Message, Responses } from '../types';
2+
import type { Message, Responses } from '../types';
33

44
let currentMessageId = 1;
55
const messagePromises = new Map<
@@ -8,37 +8,50 @@ const messagePromises = new Map<
88
{ resolve: (value: Responses) => void; reject: (reason?: any) => void }
99
>();
1010

11-
export function postMessageWithResponse(message: Message) {
12-
return new Promise((resolve, reject) => {
11+
class MessageError extends Error {
12+
constructor(message: string) {
13+
super(message);
14+
this.name = 'MessageError';
15+
}
16+
}
17+
18+
/**
19+
* Sends a message to the VSCode extension and returns a promise that resolves with the response.
20+
* @param message The message to send.
21+
* @returns A promise that resolves with the response from the extension.
22+
*/
23+
export function postMessageWithResponse(message: Message): Promise<Responses> {
24+
return new Promise<Responses>((resolve, reject) => {
1325
message.id = currentMessageId++;
1426
messagePromises.set(message.id, { resolve, reject });
1527

1628
vsCodeAPI.postMessage(message);
1729
});
1830
}
1931

32+
/**
33+
* Handles incoming messages from the VSCode extension.
34+
* @param event The message event.
35+
*/
2036
window.addEventListener('message', (event) => {
21-
const message: Responses = event.data; // The JSON data that the extension sent
22-
const { id, type, data, error } = message;
23-
24-
console.log('message', message);
37+
const message = event.data ?? {};
2538

26-
if (!id || !type) {
39+
if (!message.id || !message.type) {
2740
return;
2841
}
2942

30-
const promiseMethods = messagePromises.get(id);
43+
const promiseMethods = messagePromises.get(message.id);
3144

3245
if (!promiseMethods) {
3346
return;
3447
}
3548

3649
const { resolve, reject } = promiseMethods;
37-
messagePromises.delete(id);
50+
messagePromises.delete(message.id);
3851

39-
if (error) {
40-
reject(new Error(error));
52+
if (message.error) {
53+
reject(new MessageError(`Message error: ${message.error}`));
4154
} else {
42-
resolve({ type, data } as Responses);
55+
resolve(message as Responses);
4356
}
4457
});

src/webviews/serve-panel/simple-view.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import { KB_FUNNEL_USE_CASES } from '../../utils/url';
88
import { useServe, useServeMutation } from './swr';
99
import { Tooltip } from './components/tooltip';
1010
import { errorForType } from '../../tailscale/error';
11-
import { serveReset, serveStatus } from '../tsrelay';
12-
import { ServeParams, WithErrors } from '../../types';
11+
import { serveReset } from '../tsrelay';
12+
import { ServeParams } from '../../types';
1313

1414
export const SimpleView = () => {
1515
const { data, mutate, isLoading } = useServe();
@@ -228,7 +228,7 @@ export const SimpleView = () => {
228228
funnel: true,
229229
};
230230

231-
const resp = await serveReset();
231+
const resp = await trigger(params);
232232
if (resp.Errors?.length && resp.Errors[0].Type === 'REQUIRES_SUDO') {
233233
vsCodeAPI.postMessage({
234234
type: 'sudoPrompt',

src/webviews/tsrelay.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ export async function serveUpdate(arg?: ServeParams) {
2929
data: arg,
3030
})) as RelayServeResponse;
3131

32-
return reponse.data as unknown;
32+
return reponse.data as WithErrors;
3333
}

0 commit comments

Comments
 (0)