Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit a96c460

Browse files
committed
fix: add guards to reject built-in source in hooks message handlers
Add runtime guards in 5 hooks message handlers to reject 'built-in' source before calling HooksService methods. This fixes TypeScript error where message.source has type 'global | project | built-in' but HooksService methods only accept 'global | project'. Built-in hooks are read-only and cannot be modified, deleted, reordered, moved, or have their folder opened. Handlers updated: - hooks/save - hooks/delete - hooks/reorder - hooks/move - hooks/openFolder
1 parent abb8ee3 commit a96c460

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

src/core/webview/webviewMessageHandler.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3372,6 +3372,9 @@ export const webviewMessageHandler = async (
33723372
if (!message.hook || !message.eventType || !message.source) {
33733373
throw new Error("Missing required fields: hook, eventType, source")
33743374
}
3375+
if (message.source === "built-in") {
3376+
throw new Error("Cannot modify built-in hooks")
3377+
}
33753378
await hooksService.saveHook(message.hook, message.eventType, message.source)
33763379
// Reload and send updated hooks
33773380
const hooks = await hooksService.loadHooks()
@@ -3393,6 +3396,9 @@ export const webviewMessageHandler = async (
33933396
if (!message.hookId || !message.eventType || !message.source) {
33943397
throw new Error("Missing required fields: hookId, eventType, source")
33953398
}
3399+
if (message.source === "built-in") {
3400+
throw new Error("Cannot delete built-in hooks")
3401+
}
33963402
await hooksService.deleteHook(message.hookId, message.eventType, message.source)
33973403
// Reload and send updated hooks
33983404
const hooks = await hooksService.loadHooks()
@@ -3414,6 +3420,9 @@ export const webviewMessageHandler = async (
34143420
if (!message.eventType || !message.hookIds || !message.source) {
34153421
throw new Error("Missing required fields: eventType, hookIds, source")
34163422
}
3423+
if (message.source === "built-in") {
3424+
throw new Error("Cannot reorder built-in hooks")
3425+
}
34173426
await hooksService.reorderHooks(message.eventType, message.hookIds, message.source)
34183427
// Reload and send updated hooks
34193428
const hooks = await hooksService.loadHooks()
@@ -3435,6 +3444,9 @@ export const webviewMessageHandler = async (
34353444
if (!message.hook || !message.fromEventType || !message.toEventType || !message.source) {
34363445
throw new Error("Missing required fields: hook, fromEventType, toEventType, source")
34373446
}
3447+
if (message.source === "built-in") {
3448+
throw new Error("Cannot move built-in hooks")
3449+
}
34383450
await hooksService.moveHook(message.hook, message.fromEventType, message.toEventType, message.source)
34393451
// Reload and send updated hooks
34403452
const hooks = await hooksService.loadHooks()
@@ -3456,6 +3468,9 @@ export const webviewMessageHandler = async (
34563468
if (!message.source) {
34573469
throw new Error("Missing required field: source")
34583470
}
3471+
if (message.source === "built-in") {
3472+
throw new Error("Cannot open folder for built-in hooks")
3473+
}
34593474
await hooksService.openHooksFolder(message.source)
34603475
} catch (error) {
34613476
const errorMessage = error instanceof Error ? error.message : String(error)

0 commit comments

Comments
 (0)