@chrome-agent-bridge/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/data-store.property.test.d.ts +2 -0
- package/dist/__tests__/data-store.property.test.d.ts.map +1 -0
- package/dist/__tests__/data-store.property.test.js +146 -0
- package/dist/__tests__/data-store.property.test.js.map +1 -0
- package/dist/__tests__/data-store.test.d.ts +2 -0
- package/dist/__tests__/data-store.test.d.ts.map +1 -0
- package/dist/__tests__/data-store.test.js +163 -0
- package/dist/__tests__/data-store.test.js.map +1 -0
- package/dist/__tests__/http-server.property.test.d.ts +2 -0
- package/dist/__tests__/http-server.property.test.d.ts.map +1 -0
- package/dist/__tests__/http-server.property.test.js +173 -0
- package/dist/__tests__/http-server.property.test.js.map +1 -0
- package/dist/__tests__/http-server.test.d.ts +2 -0
- package/dist/__tests__/http-server.test.d.ts.map +1 -0
- package/dist/__tests__/http-server.test.js +180 -0
- package/dist/__tests__/http-server.test.js.map +1 -0
- package/dist/__tests__/mcp-tools.property.test.d.ts +2 -0
- package/dist/__tests__/mcp-tools.property.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-tools.property.test.js +189 -0
- package/dist/__tests__/mcp-tools.property.test.js.map +1 -0
- package/dist/__tests__/mcp-tools.test.d.ts +2 -0
- package/dist/__tests__/mcp-tools.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-tools.test.js +53 -0
- package/dist/__tests__/mcp-tools.test.js.map +1 -0
- package/dist/__tests__/validator.test.d.ts +2 -0
- package/dist/__tests__/validator.test.d.ts.map +1 -0
- package/dist/__tests__/validator.test.js +143 -0
- package/dist/__tests__/validator.test.js.map +1 -0
- package/dist/data-store.d.ts +20 -0
- package/dist/data-store.d.ts.map +1 -0
- package/dist/data-store.js +59 -0
- package/dist/data-store.js.map +1 -0
- package/dist/http-server.d.ts +30 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +164 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +8 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +77 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/validator.d.ts +10 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +68 -0
- package/dist/validator.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.property.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/data-store.property.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* Data Store Property Tests
|
|
8
|
+
* Properties 3, 4, 5, 6
|
|
9
|
+
*/
|
|
10
|
+
const vitest_1 = require("vitest");
|
|
11
|
+
const fast_check_1 = __importDefault(require("fast-check"));
|
|
12
|
+
const data_store_1 = require("../data-store");
|
|
13
|
+
const cssRuleInfoArb = fast_check_1.default.record({
|
|
14
|
+
selector: fast_check_1.default.string({ minLength: 1 }),
|
|
15
|
+
properties: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string()),
|
|
16
|
+
mediaQuery: fast_check_1.default.option(fast_check_1.default.string({ minLength: 1 }), { nil: null }),
|
|
17
|
+
source: fast_check_1.default.string({ minLength: 1 }),
|
|
18
|
+
});
|
|
19
|
+
const capturedElementDataArb = fast_check_1.default.record({
|
|
20
|
+
id: fast_check_1.default.uuid(),
|
|
21
|
+
timestamp: fast_check_1.default.nat(),
|
|
22
|
+
url: fast_check_1.default.webUrl(),
|
|
23
|
+
title: fast_check_1.default.string({ minLength: 1 }),
|
|
24
|
+
element: fast_check_1.default.record({
|
|
25
|
+
tagName: fast_check_1.default.constantFrom('div', 'span', 'p', 'section', 'article', 'main', 'header', 'footer'),
|
|
26
|
+
html: fast_check_1.default.string({ minLength: 1 }),
|
|
27
|
+
text: fast_check_1.default.string(),
|
|
28
|
+
classes: fast_check_1.default.array(fast_check_1.default.string({ minLength: 1 })),
|
|
29
|
+
id: fast_check_1.default.option(fast_check_1.default.string({ minLength: 1 }), { nil: null }),
|
|
30
|
+
attributes: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string()),
|
|
31
|
+
domPath: fast_check_1.default.string({ minLength: 1 }),
|
|
32
|
+
}),
|
|
33
|
+
styles: fast_check_1.default.record({
|
|
34
|
+
computed: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string()),
|
|
35
|
+
matched: fast_check_1.default.array(cssRuleInfoArb),
|
|
36
|
+
}),
|
|
37
|
+
screenshot: fast_check_1.default.option(fast_check_1.default.base64String(), { nil: null }),
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.describe)('Property 3: Data Store store/getById round-trip consistency', () => {
|
|
40
|
+
/**
|
|
41
|
+
* Validates: Requirements 5.1, 5.3
|
|
42
|
+
* For any valid CapturedElementData, store() then getById() returns equivalent object
|
|
43
|
+
* (note: id will be replaced by store)
|
|
44
|
+
*/
|
|
45
|
+
(0, vitest_1.it)('should return equivalent object after store/getById round-trip', () => {
|
|
46
|
+
const store = new data_store_1.DataStore();
|
|
47
|
+
fast_check_1.default.assert(fast_check_1.default.property(capturedElementDataArb, (data) => {
|
|
48
|
+
const id = store.store(data);
|
|
49
|
+
const retrieved = store.getById(id);
|
|
50
|
+
(0, vitest_1.expect)(retrieved).not.toBeNull();
|
|
51
|
+
(0, vitest_1.expect)(retrieved.id).toBe(id);
|
|
52
|
+
// All fields except id should match
|
|
53
|
+
(0, vitest_1.expect)(retrieved.url).toBe(data.url);
|
|
54
|
+
(0, vitest_1.expect)(retrieved.title).toBe(data.title);
|
|
55
|
+
(0, vitest_1.expect)(retrieved.timestamp).toBe(data.timestamp);
|
|
56
|
+
(0, vitest_1.expect)(retrieved.element).toEqual(data.element);
|
|
57
|
+
(0, vitest_1.expect)(retrieved.styles).toEqual(data.styles);
|
|
58
|
+
(0, vitest_1.expect)(retrieved.screenshot).toBe(data.screenshot);
|
|
59
|
+
}), { numRuns: 100 });
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.describe)('Property 4: Data Store capacity invariant', () => {
|
|
63
|
+
/**
|
|
64
|
+
* Validates: Requirements 5.2
|
|
65
|
+
* For 1-50 random items stored, list().length <= 20 and oldest are evicted
|
|
66
|
+
*/
|
|
67
|
+
(0, vitest_1.it)('should never exceed 20 items and evict oldest', () => {
|
|
68
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.array(capturedElementDataArb, { minLength: 1, maxLength: 50 }), (items) => {
|
|
69
|
+
const store = new data_store_1.DataStore();
|
|
70
|
+
const ids = [];
|
|
71
|
+
for (const item of items) {
|
|
72
|
+
ids.push(store.store(item));
|
|
73
|
+
}
|
|
74
|
+
const list = store.list();
|
|
75
|
+
(0, vitest_1.expect)(list.length).toBeLessThanOrEqual(20);
|
|
76
|
+
if (items.length <= 20) {
|
|
77
|
+
(0, vitest_1.expect)(list.length).toBe(items.length);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
(0, vitest_1.expect)(list.length).toBe(20);
|
|
81
|
+
// First (items.length - 20) should be evicted
|
|
82
|
+
const evictedCount = items.length - 20;
|
|
83
|
+
for (let i = 0; i < evictedCount; i++) {
|
|
84
|
+
(0, vitest_1.expect)(store.getById(ids[i])).toBeNull();
|
|
85
|
+
}
|
|
86
|
+
// Last 20 should still exist
|
|
87
|
+
for (let i = evictedCount; i < items.length; i++) {
|
|
88
|
+
(0, vitest_1.expect)(store.getById(ids[i])).not.toBeNull();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}), { numRuns: 100 });
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.describe)('Property 5: Data Store getLatest correctness', () => {
|
|
95
|
+
/**
|
|
96
|
+
* Validates: Requirements 5.4
|
|
97
|
+
* For any non-empty sequence of stores, getLatest() returns the last stored item
|
|
98
|
+
*/
|
|
99
|
+
(0, vitest_1.it)('should return the last stored item', () => {
|
|
100
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.array(capturedElementDataArb, { minLength: 1, maxLength: 30 }), (items) => {
|
|
101
|
+
const store = new data_store_1.DataStore();
|
|
102
|
+
let lastId = '';
|
|
103
|
+
for (const item of items) {
|
|
104
|
+
lastId = store.store(item);
|
|
105
|
+
}
|
|
106
|
+
const latest = store.getLatest();
|
|
107
|
+
(0, vitest_1.expect)(latest).not.toBeNull();
|
|
108
|
+
(0, vitest_1.expect)(latest.id).toBe(lastId);
|
|
109
|
+
}), { numRuns: 100 });
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.describe)('Property 6: Data Store list summary consistency', () => {
|
|
113
|
+
/**
|
|
114
|
+
* Validates: Requirements 5.5, 6.5
|
|
115
|
+
* list() count matches stored count, and summary fields match full records
|
|
116
|
+
*/
|
|
117
|
+
(0, vitest_1.it)('should have consistent summaries matching full records', () => {
|
|
118
|
+
fast_check_1.default.assert(fast_check_1.default.property(fast_check_1.default.array(capturedElementDataArb, { minLength: 1, maxLength: 25 }), (items) => {
|
|
119
|
+
const store = new data_store_1.DataStore();
|
|
120
|
+
const ids = [];
|
|
121
|
+
for (const item of items) {
|
|
122
|
+
ids.push(store.store(item));
|
|
123
|
+
}
|
|
124
|
+
const summaries = store.list();
|
|
125
|
+
const expectedCount = Math.min(items.length, 20);
|
|
126
|
+
(0, vitest_1.expect)(summaries.length).toBe(expectedCount);
|
|
127
|
+
for (const summary of summaries) {
|
|
128
|
+
const full = store.getById(summary.id);
|
|
129
|
+
(0, vitest_1.expect)(full).not.toBeNull();
|
|
130
|
+
(0, vitest_1.expect)(summary.id).toBe(full.id);
|
|
131
|
+
(0, vitest_1.expect)(summary.timestamp).toBe(full.timestamp);
|
|
132
|
+
(0, vitest_1.expect)(summary.url).toBe(full.url);
|
|
133
|
+
(0, vitest_1.expect)(summary.tagName).toBe(full.element.tagName);
|
|
134
|
+
(0, vitest_1.expect)(summary.classes).toEqual(full.element.classes);
|
|
135
|
+
// text may be truncated
|
|
136
|
+
if (full.element.text.length > 100) {
|
|
137
|
+
(0, vitest_1.expect)(summary.text).toBe(full.element.text.slice(0, 100) + '...');
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
(0, vitest_1.expect)(summary.text).toBe(full.element.text);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}), { numRuns: 100 });
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
//# sourceMappingURL=data-store.property.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.property.test.js","sourceRoot":"","sources":["../../src/__tests__/data-store.property.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/data-store.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const data_store_1 = require("../data-store");
|
|
5
|
+
function makeCapturedData(overrides = {}) {
|
|
6
|
+
return {
|
|
7
|
+
id: '',
|
|
8
|
+
timestamp: Date.now(),
|
|
9
|
+
url: 'https://example.com',
|
|
10
|
+
title: 'Example',
|
|
11
|
+
element: {
|
|
12
|
+
tagName: 'div',
|
|
13
|
+
html: '<div>hello</div>',
|
|
14
|
+
text: 'hello',
|
|
15
|
+
classes: ['test'],
|
|
16
|
+
id: null,
|
|
17
|
+
attributes: {},
|
|
18
|
+
domPath: 'body > div',
|
|
19
|
+
},
|
|
20
|
+
styles: {
|
|
21
|
+
computed: { color: 'red' },
|
|
22
|
+
matched: [],
|
|
23
|
+
},
|
|
24
|
+
screenshot: null,
|
|
25
|
+
...overrides,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
(0, vitest_1.describe)('DataStore', () => {
|
|
29
|
+
let store;
|
|
30
|
+
(0, vitest_1.beforeEach)(() => {
|
|
31
|
+
store = new data_store_1.DataStore();
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('should return null for getById on empty store', () => {
|
|
34
|
+
(0, vitest_1.expect)(store.getById('nonexistent')).toBeNull();
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('should return null for getLatest on empty store', () => {
|
|
37
|
+
(0, vitest_1.expect)(store.getLatest()).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)('should return empty array for list on empty store', () => {
|
|
40
|
+
(0, vitest_1.expect)(store.list()).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('should store data and return a valid UUID', () => {
|
|
43
|
+
const data = makeCapturedData();
|
|
44
|
+
const id = store.store(data);
|
|
45
|
+
(0, vitest_1.expect)(id).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('should retrieve stored data by ID', () => {
|
|
48
|
+
const data = makeCapturedData();
|
|
49
|
+
const id = store.store(data);
|
|
50
|
+
const result = store.getById(id);
|
|
51
|
+
(0, vitest_1.expect)(result).not.toBeNull();
|
|
52
|
+
(0, vitest_1.expect)(result.id).toBe(id);
|
|
53
|
+
(0, vitest_1.expect)(result.url).toBe(data.url);
|
|
54
|
+
(0, vitest_1.expect)(result.element.tagName).toBe(data.element.tagName);
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)('should return the latest stored record', () => {
|
|
57
|
+
store.store(makeCapturedData({ url: 'https://first.com' }));
|
|
58
|
+
store.store(makeCapturedData({ url: 'https://second.com' }));
|
|
59
|
+
const id3 = store.store(makeCapturedData({ url: 'https://third.com' }));
|
|
60
|
+
const latest = store.getLatest();
|
|
61
|
+
(0, vitest_1.expect)(latest).not.toBeNull();
|
|
62
|
+
(0, vitest_1.expect)(latest.id).toBe(id3);
|
|
63
|
+
(0, vitest_1.expect)(latest.url).toBe('https://third.com');
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)('should list summaries with correct fields', () => {
|
|
66
|
+
store.store(makeCapturedData({ url: 'https://a.com' }));
|
|
67
|
+
store.store(makeCapturedData({ url: 'https://b.com' }));
|
|
68
|
+
const summaries = store.list();
|
|
69
|
+
(0, vitest_1.expect)(summaries).toHaveLength(2);
|
|
70
|
+
(0, vitest_1.expect)(summaries[0].url).toBe('https://a.com');
|
|
71
|
+
(0, vitest_1.expect)(summaries[1].url).toBe('https://b.com');
|
|
72
|
+
(0, vitest_1.expect)(summaries[0]).toHaveProperty('id');
|
|
73
|
+
(0, vitest_1.expect)(summaries[0]).toHaveProperty('timestamp');
|
|
74
|
+
(0, vitest_1.expect)(summaries[0]).toHaveProperty('tagName');
|
|
75
|
+
(0, vitest_1.expect)(summaries[0]).toHaveProperty('classes');
|
|
76
|
+
(0, vitest_1.expect)(summaries[0]).toHaveProperty('text');
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.it)('should truncate text in summaries to 100 chars', () => {
|
|
79
|
+
const longText = 'a'.repeat(200);
|
|
80
|
+
store.store(makeCapturedData({
|
|
81
|
+
element: {
|
|
82
|
+
tagName: 'p',
|
|
83
|
+
html: '<p>' + longText + '</p>',
|
|
84
|
+
text: longText,
|
|
85
|
+
classes: [],
|
|
86
|
+
id: null,
|
|
87
|
+
attributes: {},
|
|
88
|
+
domPath: 'body > p',
|
|
89
|
+
},
|
|
90
|
+
}));
|
|
91
|
+
const summaries = store.list();
|
|
92
|
+
(0, vitest_1.expect)(summaries[0].text).toBe('a'.repeat(100) + '...');
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)('should clear all data', () => {
|
|
95
|
+
store.store(makeCapturedData());
|
|
96
|
+
store.store(makeCapturedData());
|
|
97
|
+
store.clear();
|
|
98
|
+
(0, vitest_1.expect)(store.getLatest()).toBeNull();
|
|
99
|
+
(0, vitest_1.expect)(store.list()).toEqual([]);
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.it)('should evict oldest records when exceeding capacity of 20', () => {
|
|
102
|
+
const ids = [];
|
|
103
|
+
for (let i = 0; i < 25; i++) {
|
|
104
|
+
ids.push(store.store(makeCapturedData({ url: `https://site${i}.com` })));
|
|
105
|
+
}
|
|
106
|
+
// Should have exactly 20 records
|
|
107
|
+
(0, vitest_1.expect)(store.list()).toHaveLength(20);
|
|
108
|
+
// First 5 should be evicted
|
|
109
|
+
for (let i = 0; i < 5; i++) {
|
|
110
|
+
(0, vitest_1.expect)(store.getById(ids[i])).toBeNull();
|
|
111
|
+
}
|
|
112
|
+
// Last 20 should still exist
|
|
113
|
+
for (let i = 5; i < 25; i++) {
|
|
114
|
+
(0, vitest_1.expect)(store.getById(ids[i])).not.toBeNull();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.it)('should keep exactly 20 records when storing exactly 20', () => {
|
|
118
|
+
const ids = [];
|
|
119
|
+
for (let i = 0; i < 20; i++) {
|
|
120
|
+
ids.push(store.store(makeCapturedData({ url: `https://site${i}.com` })));
|
|
121
|
+
}
|
|
122
|
+
(0, vitest_1.expect)(store.list()).toHaveLength(20);
|
|
123
|
+
// All 20 should be retrievable
|
|
124
|
+
for (const id of ids) {
|
|
125
|
+
(0, vitest_1.expect)(store.getById(id)).not.toBeNull();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
(0, vitest_1.it)('should evict only the first record when storing exactly 21', () => {
|
|
129
|
+
const ids = [];
|
|
130
|
+
for (let i = 0; i < 21; i++) {
|
|
131
|
+
ids.push(store.store(makeCapturedData({ url: `https://site${i}.com` })));
|
|
132
|
+
}
|
|
133
|
+
(0, vitest_1.expect)(store.list()).toHaveLength(20);
|
|
134
|
+
// First record should be evicted
|
|
135
|
+
(0, vitest_1.expect)(store.getById(ids[0])).toBeNull();
|
|
136
|
+
// Records 1-20 should still exist
|
|
137
|
+
for (let i = 1; i < 21; i++) {
|
|
138
|
+
(0, vitest_1.expect)(store.getById(ids[i])).not.toBeNull();
|
|
139
|
+
}
|
|
140
|
+
// Latest should be the 21st
|
|
141
|
+
(0, vitest_1.expect)(store.getLatest().id).toBe(ids[20]);
|
|
142
|
+
});
|
|
143
|
+
(0, vitest_1.it)('should return null for getById after record is evicted', () => {
|
|
144
|
+
const firstId = store.store(makeCapturedData({ url: 'https://first.com' }));
|
|
145
|
+
(0, vitest_1.expect)(store.getById(firstId)).not.toBeNull();
|
|
146
|
+
// Fill to capacity and push one more to evict the first
|
|
147
|
+
for (let i = 0; i < 20; i++) {
|
|
148
|
+
store.store(makeCapturedData());
|
|
149
|
+
}
|
|
150
|
+
(0, vitest_1.expect)(store.getById(firstId)).toBeNull();
|
|
151
|
+
});
|
|
152
|
+
(0, vitest_1.it)('should maintain correct order in list after evictions', () => {
|
|
153
|
+
for (let i = 0; i < 25; i++) {
|
|
154
|
+
store.store(makeCapturedData({ url: `https://site${i}.com` }));
|
|
155
|
+
}
|
|
156
|
+
const summaries = store.list();
|
|
157
|
+
// Should contain sites 5-24 in order
|
|
158
|
+
for (let i = 0; i < 20; i++) {
|
|
159
|
+
(0, vitest_1.expect)(summaries[i].url).toBe(`https://site${i + 5}.com`);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=data-store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.test.js","sourceRoot":"","sources":["../../src/__tests__/data-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.property.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/http-server.property.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
/**
|
|
40
|
+
* HTTP Server Property Tests
|
|
41
|
+
* Properties 7, 8
|
|
42
|
+
*/
|
|
43
|
+
const vitest_1 = require("vitest");
|
|
44
|
+
const fast_check_1 = __importDefault(require("fast-check"));
|
|
45
|
+
const http = __importStar(require("node:http"));
|
|
46
|
+
const http_server_1 = require("../http-server");
|
|
47
|
+
const data_store_1 = require("../data-store");
|
|
48
|
+
const cssRuleInfoArb = fast_check_1.default.record({
|
|
49
|
+
selector: fast_check_1.default.string({ minLength: 1 }),
|
|
50
|
+
properties: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string()),
|
|
51
|
+
mediaQuery: fast_check_1.default.option(fast_check_1.default.string({ minLength: 1 }), { nil: null }),
|
|
52
|
+
source: fast_check_1.default.string({ minLength: 1 }),
|
|
53
|
+
});
|
|
54
|
+
const capturedElementDataArb = fast_check_1.default.record({
|
|
55
|
+
id: fast_check_1.default.uuid(),
|
|
56
|
+
timestamp: fast_check_1.default.nat(),
|
|
57
|
+
url: fast_check_1.default.webUrl(),
|
|
58
|
+
title: fast_check_1.default.string({ minLength: 1 }),
|
|
59
|
+
element: fast_check_1.default.record({
|
|
60
|
+
tagName: fast_check_1.default.constantFrom('div', 'span', 'p', 'section', 'article', 'main', 'header', 'footer'),
|
|
61
|
+
html: fast_check_1.default.string({ minLength: 1 }),
|
|
62
|
+
text: fast_check_1.default.string(),
|
|
63
|
+
classes: fast_check_1.default.array(fast_check_1.default.string({ minLength: 1 }), { maxLength: 5 }),
|
|
64
|
+
id: fast_check_1.default.option(fast_check_1.default.string({ minLength: 1 }), { nil: null }),
|
|
65
|
+
attributes: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string(), { maxKeys: 3 }),
|
|
66
|
+
domPath: fast_check_1.default.string({ minLength: 1 }),
|
|
67
|
+
}),
|
|
68
|
+
styles: fast_check_1.default.record({
|
|
69
|
+
computed: fast_check_1.default.dictionary(fast_check_1.default.string({ minLength: 1 }), fast_check_1.default.string(), { maxKeys: 3 }),
|
|
70
|
+
matched: fast_check_1.default.array(cssRuleInfoArb, { maxLength: 3 }),
|
|
71
|
+
}),
|
|
72
|
+
screenshot: fast_check_1.default.option(fast_check_1.default.base64String({ maxLength: 50 }), { nil: null }),
|
|
73
|
+
});
|
|
74
|
+
function httpRequest(port, method, path, body) {
|
|
75
|
+
return new Promise((resolve, reject) => {
|
|
76
|
+
const payload = body !== undefined ? JSON.stringify(body) : undefined;
|
|
77
|
+
const req = http.request({
|
|
78
|
+
hostname: '127.0.0.1',
|
|
79
|
+
port,
|
|
80
|
+
path,
|
|
81
|
+
method,
|
|
82
|
+
headers: payload
|
|
83
|
+
? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(payload) }
|
|
84
|
+
: undefined,
|
|
85
|
+
}, (res) => {
|
|
86
|
+
const chunks = [];
|
|
87
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
88
|
+
res.on('end', () => {
|
|
89
|
+
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
90
|
+
resolve({
|
|
91
|
+
status: res.statusCode,
|
|
92
|
+
headers: res.headers,
|
|
93
|
+
body: raw ? JSON.parse(raw) : null,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
req.on('error', reject);
|
|
98
|
+
if (payload)
|
|
99
|
+
req.write(payload);
|
|
100
|
+
req.end();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
(0, vitest_1.describe)('Property 7: HTTP /capture data validation correctness', () => {
|
|
104
|
+
/**
|
|
105
|
+
* Validates: Requirements 4.2, 4.3
|
|
106
|
+
* Valid CapturedElementData → 200; invalid data → 400
|
|
107
|
+
*/
|
|
108
|
+
let server;
|
|
109
|
+
let dataStore;
|
|
110
|
+
let port;
|
|
111
|
+
(0, vitest_1.beforeEach)(async () => {
|
|
112
|
+
dataStore = new data_store_1.DataStore();
|
|
113
|
+
server = new http_server_1.HttpServer(dataStore);
|
|
114
|
+
await server.start(0);
|
|
115
|
+
port = server.server.address().port;
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.afterEach)(async () => {
|
|
118
|
+
await server.stop();
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('should return 200 for valid CapturedElementData', () => {
|
|
121
|
+
return fast_check_1.default.assert(fast_check_1.default.asyncProperty(capturedElementDataArb, async (data) => {
|
|
122
|
+
const res = await httpRequest(port, 'POST', '/capture', data);
|
|
123
|
+
(0, vitest_1.expect)(res.status).toBe(200);
|
|
124
|
+
(0, vitest_1.expect)(res.body.success).toBe(true);
|
|
125
|
+
(0, vitest_1.expect)(typeof res.body.id).toBe('string');
|
|
126
|
+
}), { numRuns: 100 });
|
|
127
|
+
});
|
|
128
|
+
(0, vitest_1.it)('should return 400 for invalid data', () => {
|
|
129
|
+
// Generate objects that are missing required fields
|
|
130
|
+
const invalidDataArb = fast_check_1.default.oneof(fast_check_1.default.record({ bad: fast_check_1.default.string() }), fast_check_1.default.constant({}), fast_check_1.default.constant({ url: 'test' }), // missing most fields
|
|
131
|
+
fast_check_1.default.record({
|
|
132
|
+
url: fast_check_1.default.string(),
|
|
133
|
+
title: fast_check_1.default.string(),
|
|
134
|
+
// missing element and styles
|
|
135
|
+
}));
|
|
136
|
+
return fast_check_1.default.assert(fast_check_1.default.asyncProperty(invalidDataArb, async (data) => {
|
|
137
|
+
const res = await httpRequest(port, 'POST', '/capture', data);
|
|
138
|
+
(0, vitest_1.expect)(res.status).toBe(400);
|
|
139
|
+
(0, vitest_1.expect)(res.body.success).toBe(false);
|
|
140
|
+
(0, vitest_1.expect)(typeof res.body.error).toBe('string');
|
|
141
|
+
}), { numRuns: 100 });
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.describe)('Property 8: HTTP response CORS header invariant', () => {
|
|
145
|
+
/**
|
|
146
|
+
* Validates: Requirements 4.6
|
|
147
|
+
* All responses should have Access-Control-Allow-Origin: *
|
|
148
|
+
*/
|
|
149
|
+
let server;
|
|
150
|
+
let dataStore;
|
|
151
|
+
let port;
|
|
152
|
+
(0, vitest_1.beforeEach)(async () => {
|
|
153
|
+
dataStore = new data_store_1.DataStore();
|
|
154
|
+
server = new http_server_1.HttpServer(dataStore);
|
|
155
|
+
await server.start(0);
|
|
156
|
+
port = server.server.address().port;
|
|
157
|
+
});
|
|
158
|
+
(0, vitest_1.afterEach)(async () => {
|
|
159
|
+
await server.stop();
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.it)('should include CORS headers on all responses', () => {
|
|
162
|
+
const requestArb = fast_check_1.default.oneof(fast_check_1.default.constant({ method: 'GET', path: '/ping', body: undefined }), fast_check_1.default.constant({ method: 'OPTIONS', path: '/capture', body: undefined }), capturedElementDataArb.map((data) => ({
|
|
163
|
+
method: 'POST',
|
|
164
|
+
path: '/capture',
|
|
165
|
+
body: data,
|
|
166
|
+
})), fast_check_1.default.constant({ method: 'POST', path: '/capture', body: { invalid: true } }));
|
|
167
|
+
return fast_check_1.default.assert(fast_check_1.default.asyncProperty(requestArb, async ({ method, path, body }) => {
|
|
168
|
+
const res = await httpRequest(port, method, path, body);
|
|
169
|
+
(0, vitest_1.expect)(res.headers['access-control-allow-origin']).toBe('*');
|
|
170
|
+
}), { numRuns: 100 });
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=http-server.property.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.property.test.js","sourceRoot":"","sources":["../../src/__tests__/http-server.property.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/http-server.test.ts"],"names":[],"mappings":""}
|