@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.
Files changed (49) hide show
  1. package/dist/__tests__/data-store.property.test.d.ts +2 -0
  2. package/dist/__tests__/data-store.property.test.d.ts.map +1 -0
  3. package/dist/__tests__/data-store.property.test.js +146 -0
  4. package/dist/__tests__/data-store.property.test.js.map +1 -0
  5. package/dist/__tests__/data-store.test.d.ts +2 -0
  6. package/dist/__tests__/data-store.test.d.ts.map +1 -0
  7. package/dist/__tests__/data-store.test.js +163 -0
  8. package/dist/__tests__/data-store.test.js.map +1 -0
  9. package/dist/__tests__/http-server.property.test.d.ts +2 -0
  10. package/dist/__tests__/http-server.property.test.d.ts.map +1 -0
  11. package/dist/__tests__/http-server.property.test.js +173 -0
  12. package/dist/__tests__/http-server.property.test.js.map +1 -0
  13. package/dist/__tests__/http-server.test.d.ts +2 -0
  14. package/dist/__tests__/http-server.test.d.ts.map +1 -0
  15. package/dist/__tests__/http-server.test.js +180 -0
  16. package/dist/__tests__/http-server.test.js.map +1 -0
  17. package/dist/__tests__/mcp-tools.property.test.d.ts +2 -0
  18. package/dist/__tests__/mcp-tools.property.test.d.ts.map +1 -0
  19. package/dist/__tests__/mcp-tools.property.test.js +189 -0
  20. package/dist/__tests__/mcp-tools.property.test.js.map +1 -0
  21. package/dist/__tests__/mcp-tools.test.d.ts +2 -0
  22. package/dist/__tests__/mcp-tools.test.d.ts.map +1 -0
  23. package/dist/__tests__/mcp-tools.test.js +53 -0
  24. package/dist/__tests__/mcp-tools.test.js.map +1 -0
  25. package/dist/__tests__/validator.test.d.ts +2 -0
  26. package/dist/__tests__/validator.test.d.ts.map +1 -0
  27. package/dist/__tests__/validator.test.js +143 -0
  28. package/dist/__tests__/validator.test.js.map +1 -0
  29. package/dist/data-store.d.ts +20 -0
  30. package/dist/data-store.d.ts.map +1 -0
  31. package/dist/data-store.js +59 -0
  32. package/dist/data-store.js.map +1 -0
  33. package/dist/http-server.d.ts +30 -0
  34. package/dist/http-server.d.ts.map +1 -0
  35. package/dist/http-server.js +164 -0
  36. package/dist/http-server.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +39 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/mcp-tools.d.ts +8 -0
  42. package/dist/mcp-tools.d.ts.map +1 -0
  43. package/dist/mcp-tools.js +77 -0
  44. package/dist/mcp-tools.js.map +1 -0
  45. package/dist/validator.d.ts +10 -0
  46. package/dist/validator.d.ts.map +1 -0
  47. package/dist/validator.js +68 -0
  48. package/dist/validator.js.map +1 -0
  49. package/package.json +39 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-store.property.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-store.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-server.property.test.d.ts.map
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,mCAAqE;AACrE,4DAA4B;AAC5B,gDAAkC;AAClC,gDAA4C;AAC5C,8CAA0C;AAG1C,MAAM,cAAc,GAAG,oBAAE,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,oBAAE,CAAC,UAAU,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,oBAAE,CAAC,MAAM,EAAE,CAAC;IACnE,UAAU,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAsC,oBAAE,CAAC,MAAM,CAAC;IAC1E,EAAE,EAAE,oBAAE,CAAC,IAAI,EAAE;IACb,SAAS,EAAE,oBAAE,CAAC,GAAG,EAAE;IACnB,GAAG,EAAE,oBAAE,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE,oBAAE,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,oBAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC9F,IAAI,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QACjC,IAAI,EAAE,oBAAE,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,oBAAE,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAChE,EAAE,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACzD,UAAU,EAAE,oBAAE,CAAC,UAAU,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,oBAAE,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACnF,OAAO,EAAE,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;KACrC,CAAC;IACF,MAAM,EAAE,oBAAE,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,oBAAE,CAAC,UAAU,CAAC,oBAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,oBAAE,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,oBAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;KACpD,CAAC;IACF,UAAU,EAAE,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;CACzE,CAAC,CAAC;AAEH,SAAS,WAAW,CAClB,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB;YACE,QAAQ,EAAE,WAAW;YACrB,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,OAAO,EAAE,OAAO;gBACd,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBACtF,CAAC,CAAC,SAAS;SACd,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpD,OAAO,CAAC;oBACN,MAAM,EAAE,GAAG,CAAC,UAAW;oBACvB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;iBACnC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,OAAO;YAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAA,iBAAQ,EAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE;;;OAGG;IACH,IAAI,MAAkB,CAAC;IACvB,IAAI,SAAoB,CAAC;IACzB,IAAI,IAAY,CAAC;IAEjB,IAAA,mBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,IAAI,wBAAU,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAI,MAAc,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,oBAAE,CAAC,MAAM,CACd,oBAAE,CAAC,aAAa,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAA,eAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAA,eAAM,EAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC,EACF,EAAE,OAAO,EAAE,GAAG,EAAE,CACjB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,oDAAoD;QACpD,MAAM,cAAc,GAAG,oBAAE,CAAC,KAAK,CAC7B,oBAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,oBAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAC/B,oBAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EACf,oBAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB;QACpD,oBAAE,CAAC,MAAM,CAAC;YACR,GAAG,EAAE,oBAAE,CAAC,MAAM,EAAE;YAChB,KAAK,EAAE,oBAAE,CAAC,MAAM,EAAE;YAClB,6BAA6B;SAC9B,CAAC,CACH,CAAC;QAEF,OAAO,oBAAE,CAAC,MAAM,CACd,oBAAE,CAAC,aAAa,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAA,eAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAA,eAAM,EAAC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC,EACF,EAAE,OAAO,EAAE,GAAG,EAAE,CACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D;;;OAGG;IACH,IAAI,MAAkB,CAAC;IACvB,IAAI,SAAoB,CAAC;IACzB,IAAI,IAAY,CAAC;IAEjB,IAAA,mBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,IAAI,wBAAU,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAI,MAAc,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,oBAAE,CAAC,KAAK,CACzB,oBAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC9D,oBAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrE,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC,EACH,oBAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAC3E,CAAC;QAEF,OAAO,oBAAE,CAAC,MAAM,CACd,oBAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YAC5D,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACxD,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,EACF,EAAE,OAAO,EAAE,GAAG,EAAE,CACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/http-server.test.ts"],"names":[],"mappings":""}