Skip to content

Commit 4ce493e

Browse files
committed
refactor(server): remove LEGACY_ELEMENT_SELECTED support and dead code
- Remove LEGACY_ELEMENT_SELECTED message handling - only DOM_ELEMENT_POINTED supported - Delete unused mcp-handler.ts and websocket-server.ts files - Remove StateDataV1 and LegacySharedState types - Simplify SharedStateService to only handle V2 format - Update tests to remove legacy test cases
1 parent cbb4704 commit 4ce493e

File tree

7 files changed

+23
-311
lines changed

7 files changed

+23
-311
lines changed
Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { TargetedElement, RawPointedDOMElement, PointerMessageType } from '@mcp-pointer/shared/types';
1+
import { RawPointedDOMElement, PointerMessageType } from '@mcp-pointer/shared/types';
22
import {
3-
SharedState, StateDataV1, StateDataV2, ProcessedPointedDOMElement,
3+
SharedState, StateDataV2, ProcessedPointedDOMElement,
44
} from '../../types';
55

66
export const createProcessedElement = (
@@ -39,29 +39,6 @@ export const createRawElement = (
3939
...overrides,
4040
});
4141

42-
export const createLegacyElement = (
43-
overrides: Partial<TargetedElement> = {},
44-
): TargetedElement => ({
45-
selector: 'div',
46-
tagName: 'div',
47-
classes: [],
48-
innerText: 'test content',
49-
attributes: {},
50-
position: {
51-
x: 10, y: 20, width: 100, height: 50,
52-
},
53-
cssProperties: {
54-
display: 'block',
55-
position: 'relative',
56-
fontSize: '16px',
57-
color: '#000000',
58-
backgroundColor: '#ffffff',
59-
},
60-
timestamp: 1672531200000,
61-
url: 'https://example.com',
62-
...overrides,
63-
});
64-
6542
export const createStateV2 = (
6643
rawOverrides: Partial<RawPointedDOMElement> = {},
6744
processedOverrides: Partial<ProcessedPointedDOMElement> = {},
@@ -76,18 +53,3 @@ export const createStateV2 = (
7653
},
7754
} as StateDataV2,
7855
});
79-
80-
export const createStateV1 = (
81-
legacyOverrides: Partial<TargetedElement> = {},
82-
processedOverrides: Partial<ProcessedPointedDOMElement> = {},
83-
): SharedState => ({
84-
stateVersion: 1,
85-
data: {
86-
rawPointedDOMElement: createLegacyElement(legacyOverrides),
87-
processedPointedDOMElement: createProcessedElement(processedOverrides),
88-
metadata: {
89-
receivedAt: '2023-01-01T00:00:00.000Z',
90-
messageType: PointerMessageType.LEGACY_ELEMENT_SELECTED,
91-
},
92-
} as StateDataV1,
93-
});

packages/server/src/__tests__/services/shared-state-service.test.ts

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import fs from 'fs/promises';
22
import path from 'path';
33
import os from 'os';
44
import SharedStateService from '../../services/shared-state-service';
5-
import { createStateV1, createStateV2, createLegacyElement } from '../factories/shared-state-factory';
5+
import { createStateV2 } from '../factories/shared-state-factory';
66

77
jest.mock('../../logger', () => ({
88
debug: jest.fn(),
@@ -41,7 +41,7 @@ describe('SharedStateService', () => {
4141

4242
it('overwrites corrupted file', async () => {
4343
await fs.writeFile(testPath, 'invalid json');
44-
const state = createStateV1();
44+
const state = createStateV2();
4545

4646
await service.saveState(state);
4747

@@ -53,7 +53,7 @@ describe('SharedStateService', () => {
5353
});
5454

5555
describe('getPointedElement', () => {
56-
it('returns processed element from v2 state', async () => {
56+
it('returns processed element from state', async () => {
5757
const state = createStateV2();
5858
await fs.writeFile(testPath, JSON.stringify(state));
5959

@@ -62,24 +62,6 @@ describe('SharedStateService', () => {
6262
expect(result).toEqual(state.data.processedPointedDOMElement);
6363
});
6464

65-
it('returns processed element from v1 state', async () => {
66-
const state = createStateV1();
67-
await fs.writeFile(testPath, JSON.stringify(state));
68-
69-
const result = await service.getPointedElement();
70-
71-
expect(result).toEqual(state.data.processedPointedDOMElement);
72-
});
73-
74-
it('returns legacy element as-is', async () => {
75-
const legacyElement = createLegacyElement();
76-
await fs.writeFile(testPath, JSON.stringify(legacyElement));
77-
78-
const result = await service.getPointedElement();
79-
80-
expect(result).toEqual(legacyElement);
81-
});
82-
8365
it('returns null for invalid json', async () => {
8466
await fs.writeFile(testPath, 'invalid json');
8567

packages/server/src/mcp-handler.ts

Lines changed: 0 additions & 121 deletions
This file was deleted.

packages/server/src/message-handler.ts

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { PointerMessageType, type TargetedElement, type RawPointedDOMElement } from '@mcp-pointer/shared/types';
1+
import { PointerMessageType, type RawPointedDOMElement } from '@mcp-pointer/shared/types';
22
import logger from './logger';
33
import ElementProcessor from './services/element-processor';
44
import SharedStateService from './services/shared-state-service';
5-
import { SharedState, StateDataV1, StateDataV2 } from './types';
5+
import { SharedState, StateDataV2 } from './types';
66

77
function buildMetadata(messageType: string) {
88
const now = new Date().toISOString();
@@ -13,32 +13,12 @@ function buildMetadata(messageType: string) {
1313
};
1414
}
1515

16-
function buildLegacyState(type: string, data: any): SharedState {
17-
logger.info('Processing legacy element format');
18-
const element = data as TargetedElement;
19-
20-
const stateData: StateDataV1 = {
21-
rawPointedDOMElement: element,
22-
processedPointedDOMElement: {
23-
...element,
24-
timestamp: new Date(element.timestamp).toISOString(),
25-
warnings: undefined,
26-
},
27-
metadata: buildMetadata(type),
28-
};
29-
30-
return {
31-
stateVersion: 1,
32-
data: stateData,
33-
};
34-
}
35-
36-
function buildNewState(
16+
function buildState(
3717
type: string,
3818
data: any,
3919
elementProcessor: ElementProcessor,
4020
): SharedState {
41-
logger.info('Processing new raw element format');
21+
logger.info('Processing raw element format');
4222
const raw = data as RawPointedDOMElement;
4323
const processed = elementProcessor.processFromRaw(raw);
4424

@@ -59,15 +39,12 @@ function buildStateFromMessage(
5939
data: any,
6040
services: HandlerServices,
6141
): SharedState | null {
62-
switch (type) {
63-
case PointerMessageType.LEGACY_ELEMENT_SELECTED:
64-
return buildLegacyState(type, data);
65-
case PointerMessageType.DOM_ELEMENT_POINTED:
66-
return buildNewState(type, data, services.elementProcessor);
67-
default:
68-
logger.warn(`Received unknown message type: ${type}`);
69-
return null;
42+
if (type === PointerMessageType.DOM_ELEMENT_POINTED) {
43+
return buildState(type, data, services.elementProcessor);
7044
}
45+
46+
logger.warn(`Received unknown message type: ${type}`);
47+
return null;
7148
}
7249

7350
interface HandlerServices {

packages/server/src/services/shared-state-service.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import fs from 'fs/promises';
2-
import { type TargetedElement } from '@mcp-pointer/shared/types';
3-
import { SharedState, ProcessedPointedDOMElement, LegacySharedState } from '../types';
2+
import { SharedState, ProcessedPointedDOMElement } from '../types';
43
import logger from '../logger';
54

65
export default class SharedStateService {
76
static SHARED_STATE_PATH = '/tmp/mcp-pointer-shared-state.json';
87

9-
// New method for storing versioned data
108
public async saveState(state: SharedState): Promise<void> {
119
try {
1210
const json = JSON.stringify(state, null, 2);
@@ -18,23 +16,14 @@ export default class SharedStateService {
1816
}
1917
}
2018

21-
// Get processed element for MCP service
22-
public async getPointedElement(): Promise<ProcessedPointedDOMElement | TargetedElement | null> {
19+
public async getPointedElement(): Promise<ProcessedPointedDOMElement | null> {
2320
const state = await this.readState();
24-
if (!state || typeof state !== 'object') return null;
21+
if (!state) return null;
2522

26-
// If it's the new format, return the processed element
27-
if ('stateVersion' in state) {
28-
const sharedState = state as SharedState;
29-
return sharedState.data.processedPointedDOMElement;
30-
}
31-
32-
// Legacy format - return as-is
33-
const legacyState = state as LegacySharedState;
34-
return legacyState;
23+
return state.data.processedPointedDOMElement;
3524
}
3625

37-
private async readState(): Promise<SharedState | LegacySharedState | null> {
26+
private async readState(): Promise<SharedState | null> {
3827
try {
3928
const json = await fs.readFile(SharedStateService.SHARED_STATE_PATH, 'utf8');
4029
return JSON.parse(json);

packages/server/src/types.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {
33
CSSProperties,
44
ComponentInfo,
55
RawPointedDOMElement,
6-
TargetedElement,
76
} from '@mcp-pointer/shared/types';
87

98
// Server-processed data (extracted & enhanced)
@@ -33,16 +32,7 @@ export interface ProcessedPointedDOMElement {
3332
warnings?: string[];
3433
}
3534

36-
// Version-specific data types
37-
export interface StateDataV1 {
38-
rawPointedDOMElement: TargetedElement;
39-
processedPointedDOMElement: ProcessedPointedDOMElement;
40-
metadata: {
41-
receivedAt: string;
42-
messageType: string;
43-
};
44-
}
45-
35+
// State data structure
4636
export interface StateDataV2 {
4737
rawPointedDOMElement: RawPointedDOMElement;
4838
processedPointedDOMElement: ProcessedPointedDOMElement;
@@ -52,11 +42,8 @@ export interface StateDataV2 {
5242
};
5343
}
5444

55-
// Storage format with versioned data
45+
// Storage format
5646
export interface SharedState {
57-
stateVersion: number;
58-
data: StateDataV1 | StateDataV2;
47+
stateVersion: 2;
48+
data: StateDataV2;
5949
}
60-
61-
// Legacy format alias
62-
export type LegacySharedState = TargetedElement;

0 commit comments

Comments
 (0)