@keak/webmcp-core 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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/config.d.ts +103 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +54 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/exporter/manifest.d.ts +6 -0
  8. package/dist/exporter/manifest.d.ts.map +1 -0
  9. package/dist/exporter/manifest.js +36 -0
  10. package/dist/exporter/manifest.js.map +1 -0
  11. package/dist/exporter/snippet.d.ts +7 -0
  12. package/dist/exporter/snippet.d.ts.map +1 -0
  13. package/dist/exporter/snippet.js +197 -0
  14. package/dist/exporter/snippet.js.map +1 -0
  15. package/dist/exporter/userscript.d.ts +6 -0
  16. package/dist/exporter/userscript.d.ts.map +1 -0
  17. package/dist/exporter/userscript.js +53 -0
  18. package/dist/exporter/userscript.js.map +1 -0
  19. package/dist/exporter/yaml.d.ts +6 -0
  20. package/dist/exporter/yaml.d.ts.map +1 -0
  21. package/dist/exporter/yaml.js +90 -0
  22. package/dist/exporter/yaml.js.map +1 -0
  23. package/dist/extractor/api-extractor.d.ts +3 -0
  24. package/dist/extractor/api-extractor.d.ts.map +1 -0
  25. package/dist/extractor/api-extractor.js +274 -0
  26. package/dist/extractor/api-extractor.js.map +1 -0
  27. package/dist/extractor/click-extractor.d.ts +3 -0
  28. package/dist/extractor/click-extractor.d.ts.map +1 -0
  29. package/dist/extractor/click-extractor.js +52 -0
  30. package/dist/extractor/click-extractor.js.map +1 -0
  31. package/dist/extractor/form-extractor.d.ts +3 -0
  32. package/dist/extractor/form-extractor.d.ts.map +1 -0
  33. package/dist/extractor/form-extractor.js +27 -0
  34. package/dist/extractor/form-extractor.js.map +1 -0
  35. package/dist/extractor/route-extractor.d.ts +3 -0
  36. package/dist/extractor/route-extractor.d.ts.map +1 -0
  37. package/dist/extractor/route-extractor.js +84 -0
  38. package/dist/extractor/route-extractor.js.map +1 -0
  39. package/dist/extractor/schema-inferrer.d.ts +4 -0
  40. package/dist/extractor/schema-inferrer.d.ts.map +1 -0
  41. package/dist/extractor/schema-inferrer.js +128 -0
  42. package/dist/extractor/schema-inferrer.js.map +1 -0
  43. package/dist/index.d.ts +88 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +170 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/linter/linter.d.ts +10 -0
  48. package/dist/linter/linter.d.ts.map +1 -0
  49. package/dist/linter/linter.js +39 -0
  50. package/dist/linter/linter.js.map +1 -0
  51. package/dist/linter/rules.d.ts +4 -0
  52. package/dist/linter/rules.d.ts.map +1 -0
  53. package/dist/linter/rules.js +111 -0
  54. package/dist/linter/rules.js.map +1 -0
  55. package/dist/scanner/browser.d.ts +14 -0
  56. package/dist/scanner/browser.d.ts.map +1 -0
  57. package/dist/scanner/browser.js +42 -0
  58. package/dist/scanner/browser.js.map +1 -0
  59. package/dist/scanner/crawler.d.ts +12 -0
  60. package/dist/scanner/crawler.d.ts.map +1 -0
  61. package/dist/scanner/crawler.js +80 -0
  62. package/dist/scanner/crawler.js.map +1 -0
  63. package/dist/scanner/dom-capture.d.ts +4 -0
  64. package/dist/scanner/dom-capture.d.ts.map +1 -0
  65. package/dist/scanner/dom-capture.js +148 -0
  66. package/dist/scanner/dom-capture.js.map +1 -0
  67. package/dist/scanner/network-capture.d.ts +8 -0
  68. package/dist/scanner/network-capture.d.ts.map +1 -0
  69. package/dist/scanner/network-capture.js +112 -0
  70. package/dist/scanner/network-capture.js.map +1 -0
  71. package/dist/scanner/screenshot.d.ts +3 -0
  72. package/dist/scanner/screenshot.d.ts.map +1 -0
  73. package/dist/scanner/screenshot.js +10 -0
  74. package/dist/scanner/screenshot.js.map +1 -0
  75. package/dist/synthesizer/clusterer.d.ts +7 -0
  76. package/dist/synthesizer/clusterer.d.ts.map +1 -0
  77. package/dist/synthesizer/clusterer.js +310 -0
  78. package/dist/synthesizer/clusterer.js.map +1 -0
  79. package/dist/synthesizer/describer.d.ts +3 -0
  80. package/dist/synthesizer/describer.d.ts.map +1 -0
  81. package/dist/synthesizer/describer.js +92 -0
  82. package/dist/synthesizer/describer.js.map +1 -0
  83. package/dist/synthesizer/llm-client.d.ts +7 -0
  84. package/dist/synthesizer/llm-client.d.ts.map +1 -0
  85. package/dist/synthesizer/llm-client.js +7 -0
  86. package/dist/synthesizer/llm-client.js.map +1 -0
  87. package/dist/synthesizer/namer.d.ts +3 -0
  88. package/dist/synthesizer/namer.d.ts.map +1 -0
  89. package/dist/synthesizer/namer.js +154 -0
  90. package/dist/synthesizer/namer.js.map +1 -0
  91. package/dist/synthesizer/safety-classifier.d.ts +3 -0
  92. package/dist/synthesizer/safety-classifier.d.ts.map +1 -0
  93. package/dist/synthesizer/safety-classifier.js +68 -0
  94. package/dist/synthesizer/safety-classifier.js.map +1 -0
  95. package/dist/synthesizer/schema-builder.d.ts +3 -0
  96. package/dist/synthesizer/schema-builder.d.ts.map +1 -0
  97. package/dist/synthesizer/schema-builder.js +99 -0
  98. package/dist/synthesizer/schema-builder.js.map +1 -0
  99. package/dist/types.d.ts +271 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +3 -0
  102. package/dist/types.js.map +1 -0
  103. package/dist/utils/redact.d.ts +3 -0
  104. package/dist/utils/redact.d.ts.map +1 -0
  105. package/dist/utils/redact.js +42 -0
  106. package/dist/utils/redact.js.map +1 -0
  107. package/dist/utils/validation.d.ts +876 -0
  108. package/dist/utils/validation.d.ts.map +1 -0
  109. package/dist/utils/validation.js +108 -0
  110. package/dist/utils/validation.js.map +1 -0
  111. package/package.json +69 -0
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifySafety = classifySafety;
4
+ function classifySafety(actions) {
5
+ let level = "read";
6
+ for (const action of actions) {
7
+ const actionLevel = classifyAction(action);
8
+ level = promoteSafety(level, actionLevel);
9
+ }
10
+ return {
11
+ level,
12
+ requiresConfirm: level !== "read",
13
+ };
14
+ }
15
+ function classifyAction(action) {
16
+ switch (action.kind) {
17
+ case "form_submit":
18
+ return classifyFormAction(action);
19
+ case "api_call":
20
+ return classifyApiAction(action);
21
+ case "click_flow":
22
+ return "write"; // Clicks can trigger side effects
23
+ case "route_change":
24
+ return "read"; // Navigation is read-only
25
+ }
26
+ }
27
+ function classifyFormAction(action) {
28
+ const labels = action.labels.join(" ").toLowerCase();
29
+ const method = action.method || "POST";
30
+ if (/delete|remove|cancel|destroy|purge/i.test(labels))
31
+ return "danger";
32
+ if (/payment|pay|purchase|checkout|billing/i.test(labels))
33
+ return "danger";
34
+ // GET forms are typically searches
35
+ if (method === "GET")
36
+ return "read";
37
+ if (/search|find|filter|sort|lookup/i.test(labels))
38
+ return "read";
39
+ // Login creates a session, so it's a write not a read
40
+ if (/login|sign.?in|auth/i.test(labels))
41
+ return "write";
42
+ return "write";
43
+ }
44
+ function classifyApiAction(action) {
45
+ const method = action.request.method;
46
+ const path = action.request.url.toLowerCase();
47
+ if (method === "DELETE")
48
+ return "danger";
49
+ if (/payment|charge|billing|purchase|checkout/i.test(path))
50
+ return "danger";
51
+ if (/delete|destroy|remove|purge/i.test(path))
52
+ return "danger";
53
+ if (method === "GET")
54
+ return "read";
55
+ if (action.request.operationType === "query")
56
+ return "read";
57
+ if (action.request.operationType === "mutation")
58
+ return "write";
59
+ return "write";
60
+ }
61
+ // Returns the more restrictive of two safety levels.
62
+ function promoteSafety(a, b) {
63
+ const order = ["read", "write", "danger"];
64
+ const ai = order.indexOf(a);
65
+ const bi = order.indexOf(b);
66
+ return order[Math.max(ai, bi)];
67
+ }
68
+ //# sourceMappingURL=safety-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety-classifier.js","sourceRoot":"","sources":["../../src/synthesizer/safety-classifier.ts"],"names":[],"mappings":";;AAEA,wCAYC;AAZD,SAAgB,cAAc,CAAC,OAAiB;IAC9C,IAAI,KAAK,GAAgB,MAAM,CAAC;IAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,KAAK;QACL,eAAe,EAAE,KAAK,KAAK,MAAM;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,CAAC,kCAAkC;QACpD,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,CAAC,0BAA0B;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAwC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;IAEvC,IAAI,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxE,IAAI,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE3E,mCAAmC;IACnC,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACpC,IAAI,iCAAiC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAElE,sDAAsD;IACtD,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAExD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAEzC,IAAI,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5E,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE/D,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IAEpC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC;IAEhE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qDAAqD;AACrD,SAAS,aAAa,CAAC,CAAc,EAAE,CAAc;IACnD,MAAM,KAAK,GAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Action, JsonSchema } from "../types.js";
2
+ export declare function buildInputSchema(actions: Action[]): JsonSchema;
3
+ //# sourceMappingURL=schema-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.d.ts","sourceRoot":"","sources":["../../src/synthesizer/schema-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAGX,MAAM,aAAa,CAAC;AAGrB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CA2B9D"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildInputSchema = buildInputSchema;
4
+ const schema_inferrer_js_1 = require("../extractor/schema-inferrer.js");
5
+ function buildInputSchema(actions) {
6
+ const schemas = [];
7
+ for (const action of actions) {
8
+ switch (action.kind) {
9
+ case "form_submit":
10
+ schemas.push(buildFormSchema(action));
11
+ break;
12
+ case "api_call":
13
+ schemas.push(buildApiSchema(action));
14
+ break;
15
+ case "click_flow":
16
+ break;
17
+ case "route_change":
18
+ break;
19
+ }
20
+ }
21
+ if (schemas.length === 0) {
22
+ return { type: "object", properties: {} };
23
+ }
24
+ if (schemas.length === 1) {
25
+ return schemas[0];
26
+ }
27
+ return mergeSchemas(schemas);
28
+ }
29
+ function buildFormSchema(action) {
30
+ return (0, schema_inferrer_js_1.schemaFromFields)(action.fields);
31
+ }
32
+ function buildApiSchema(action) {
33
+ if (action.request.requestBodySample &&
34
+ ["POST", "PUT", "PATCH"].includes(action.request.method)) {
35
+ return (0, schema_inferrer_js_1.schemaFromSample)(action.request.requestBodySample);
36
+ }
37
+ if (action.request.requestBodySchema) {
38
+ return action.request.requestBodySchema;
39
+ }
40
+ if (action.request.method === "GET") {
41
+ return schemaFromQueryParams(action.request.url);
42
+ }
43
+ return { type: "object", properties: {} };
44
+ }
45
+ function schemaFromQueryParams(url) {
46
+ try {
47
+ const parsed = new URL(url);
48
+ const properties = {};
49
+ for (const [key, value] of parsed.searchParams) {
50
+ properties[key] = inferParamType(value);
51
+ }
52
+ if (Object.keys(properties).length === 0) {
53
+ return { type: "object", properties: {} };
54
+ }
55
+ return { type: "object", properties };
56
+ }
57
+ catch {
58
+ return { type: "object", properties: {} };
59
+ }
60
+ }
61
+ function inferParamType(value) {
62
+ if (/^\d+$/.test(value))
63
+ return { type: "integer" };
64
+ if (/^\d+\.\d+$/.test(value))
65
+ return { type: "number" };
66
+ if (value === "true" || value === "false")
67
+ return { type: "boolean" };
68
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
69
+ return { type: "string", format: "date" };
70
+ }
71
+ return { type: "string" };
72
+ }
73
+ function mergeSchemas(schemas) {
74
+ const allProperties = {};
75
+ const allRequired = new Set();
76
+ for (const schema of schemas) {
77
+ if (schema.properties) {
78
+ for (const [key, value] of Object.entries(schema.properties)) {
79
+ if (!allProperties[key]) {
80
+ allProperties[key] = value;
81
+ }
82
+ }
83
+ }
84
+ if (schema.required) {
85
+ for (const r of schema.required) {
86
+ allRequired.add(r);
87
+ }
88
+ }
89
+ }
90
+ const merged = {
91
+ type: "object",
92
+ properties: allProperties,
93
+ };
94
+ if (allRequired.size > 0) {
95
+ merged.required = Array.from(allRequired);
96
+ }
97
+ return merged;
98
+ }
99
+ //# sourceMappingURL=schema-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builder.js","sourceRoot":"","sources":["../../src/synthesizer/schema-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ export interface JsonSchema {
2
+ type?: "object" | "string" | "number" | "integer" | "boolean" | "array";
3
+ properties?: Record<string, JsonSchema>;
4
+ required?: string[];
5
+ items?: JsonSchema;
6
+ enum?: string[];
7
+ description?: string;
8
+ default?: unknown;
9
+ format?: "email" | "uri" | "date" | "time" | "date-time";
10
+ pattern?: string;
11
+ minimum?: number;
12
+ maximum?: number;
13
+ minLength?: number;
14
+ maxLength?: number;
15
+ minItems?: number;
16
+ maxItems?: number;
17
+ additionalProperties?: boolean | JsonSchema;
18
+ examples?: unknown[];
19
+ anyOf?: JsonSchema[];
20
+ oneOf?: JsonSchema[];
21
+ }
22
+ export interface FieldSpec {
23
+ name: string;
24
+ type: "string" | "number" | "boolean" | "enum" | "date" | "email" | "tel" | "url";
25
+ required: boolean;
26
+ label?: string;
27
+ placeholder?: string;
28
+ options?: string[];
29
+ pattern?: string;
30
+ min?: number;
31
+ max?: number;
32
+ defaultValue?: string;
33
+ }
34
+ export interface NetworkCall {
35
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
36
+ url: string;
37
+ status?: number;
38
+ requestHeaders?: Record<string, string>;
39
+ requestBodySchema?: JsonSchema;
40
+ responseBodySchema?: JsonSchema;
41
+ requestBodySample?: unknown;
42
+ responseBodySample?: unknown;
43
+ operationName?: string;
44
+ operationType?: "query" | "mutation" | "subscription";
45
+ }
46
+ export type Action = FormSubmitAction | ClickFlowAction | ApiCallAction | RouteChangeAction;
47
+ export interface FormSubmitAction {
48
+ kind: "form_submit";
49
+ id: string;
50
+ pageUrl: string;
51
+ formSelector: string;
52
+ fields: FieldSpec[];
53
+ submitSelector: string;
54
+ labels: string[];
55
+ method?: "GET" | "POST";
56
+ action?: string;
57
+ networkCalls: NetworkCall[];
58
+ }
59
+ export interface ClickFlowAction {
60
+ kind: "click_flow";
61
+ id: string;
62
+ pageUrl: string;
63
+ startSelector: string;
64
+ intermediateSteps?: string[];
65
+ resultingUrl?: string;
66
+ networkCalls: NetworkCall[];
67
+ labels: string[];
68
+ screenshotPath?: string;
69
+ }
70
+ export interface ApiCallAction {
71
+ kind: "api_call";
72
+ id: string;
73
+ pageUrl: string;
74
+ request: NetworkCall;
75
+ triggerSelector?: string;
76
+ labels: string[];
77
+ }
78
+ export interface RouteChangeAction {
79
+ kind: "route_change";
80
+ id: string;
81
+ from: string;
82
+ to: string;
83
+ trigger?: string;
84
+ labels: string[];
85
+ }
86
+ export type HandlerStep = {
87
+ step: "ensure_page";
88
+ urlPattern: string;
89
+ } | {
90
+ step: "fill_form";
91
+ formSelector: string;
92
+ mapping: Record<string, string>;
93
+ } | {
94
+ step: "click";
95
+ selector: string;
96
+ waitFor?: string;
97
+ } | {
98
+ step: "wait_network";
99
+ match: {
100
+ urlIncludes?: string;
101
+ operationName?: string;
102
+ };
103
+ } | {
104
+ step: "wait_element";
105
+ selector: string;
106
+ timeout?: number;
107
+ } | {
108
+ step: "extract";
109
+ selector: string;
110
+ attribute?: string;
111
+ } | {
112
+ step: "return";
113
+ format: "text" | "json";
114
+ mapping?: Record<string, string>;
115
+ };
116
+ export interface HandlerTemplate {
117
+ steps: HandlerStep[];
118
+ }
119
+ export type SafetyLevel = "read" | "write" | "danger";
120
+ export interface Safety {
121
+ level: SafetyLevel;
122
+ requiresConfirm: boolean;
123
+ }
124
+ export interface ToolSpec {
125
+ id: string;
126
+ name: string;
127
+ description: string;
128
+ inputSchema: JsonSchema;
129
+ outputSchema?: JsonSchema;
130
+ safety: Safety;
131
+ availability: {
132
+ urlPatterns: string[];
133
+ requiresAuth: boolean;
134
+ };
135
+ implementation: {
136
+ kind: "js_handler" | "form_declarative";
137
+ handlerTemplate?: HandlerTemplate;
138
+ form?: {
139
+ toolname: string;
140
+ tooldescription: string;
141
+ toolautosubmit?: boolean;
142
+ formSelector: string;
143
+ };
144
+ };
145
+ provenance: {
146
+ actions: string[];
147
+ createdFrom: "autogen-v1";
148
+ confidence: number;
149
+ pageUrl: string;
150
+ };
151
+ }
152
+ export type AuthMethod = "none" | "cookie" | "browser-login";
153
+ export type OutputTarget = "snippet" | "userscript" | "manifest" | "yaml";
154
+ export type OutputLang = "ts" | "js";
155
+ export type Framework = "vanilla" | "react" | "vue";
156
+ export interface AutogenConfig {
157
+ baseUrl: string;
158
+ auth: {
159
+ method: AuthMethod;
160
+ profilePath?: string | null;
161
+ cookie?: string | null;
162
+ };
163
+ output: {
164
+ target: OutputTarget;
165
+ lang: OutputLang;
166
+ outDir: string;
167
+ framework: Framework;
168
+ };
169
+ browser: {
170
+ executablePath?: string | null;
171
+ headless: boolean;
172
+ };
173
+ scan: {
174
+ depth: number;
175
+ ignore: string[];
176
+ timeout: number;
177
+ };
178
+ }
179
+ export interface DomSnapshot {
180
+ url: string;
181
+ title: string;
182
+ forms: DomForm[];
183
+ buttons: DomButton[];
184
+ links: DomLink[];
185
+ timestamp: string;
186
+ }
187
+ export interface DomForm {
188
+ selector: string;
189
+ id?: string;
190
+ action?: string;
191
+ method?: string;
192
+ fields: FieldSpec[];
193
+ submitSelector?: string;
194
+ labels: string[];
195
+ }
196
+ export interface DomButton {
197
+ selector: string;
198
+ text: string;
199
+ ariaLabel?: string;
200
+ type?: string;
201
+ isInsideForm: boolean;
202
+ }
203
+ export interface DomLink {
204
+ selector: string;
205
+ text: string;
206
+ href: string;
207
+ ariaLabel?: string;
208
+ isInternal: boolean;
209
+ }
210
+ export interface ScanResult {
211
+ pages: DomSnapshot[];
212
+ networkCalls: NetworkCall[];
213
+ actions: Action[];
214
+ metadata: {
215
+ baseUrl: string;
216
+ startedAt: string;
217
+ completedAt: string;
218
+ pagesVisited: number;
219
+ depth: number;
220
+ };
221
+ }
222
+ export type ScanProgressEvent = {
223
+ type: "page_visiting";
224
+ url: string;
225
+ depth: number;
226
+ } | {
227
+ type: "page_visited";
228
+ url: string;
229
+ formsFound: number;
230
+ buttonsFound: number;
231
+ } | {
232
+ type: "network_call";
233
+ method: string;
234
+ url: string;
235
+ } | {
236
+ type: "action_discovered";
237
+ kind: Action["kind"];
238
+ label: string;
239
+ } | {
240
+ type: "screenshot";
241
+ path: string;
242
+ } | {
243
+ type: "error";
244
+ message: string;
245
+ } | {
246
+ type: "complete";
247
+ summary: ScanResult["metadata"];
248
+ };
249
+ export type LintSeverity = "error" | "warning" | "info";
250
+ export interface LintWarning {
251
+ toolId: string;
252
+ toolName: string;
253
+ rule: string;
254
+ severity: LintSeverity;
255
+ message: string;
256
+ suggestion?: string;
257
+ }
258
+ export interface LintResult {
259
+ tool: ToolSpec;
260
+ warnings: LintWarning[];
261
+ }
262
+ export interface ExportResult {
263
+ files: ExportFile[];
264
+ target: OutputTarget;
265
+ }
266
+ export interface ExportFile {
267
+ name: string;
268
+ content: string;
269
+ language: string;
270
+ }
271
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare function redact(data: unknown, maxStringLength?: number): unknown;
2
+ export declare function isSensitiveFieldName(name: string): boolean;
3
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAYA,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,EACb,eAAe,GAAE,MAAY,GAC5B,OAAO,CAmBT;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redact = redact;
4
+ exports.isSensitiveFieldName = isSensitiveFieldName;
5
+ const SENSITIVE_PATTERNS = [
6
+ /password/i,
7
+ /secret/i,
8
+ /token/i,
9
+ /key/i,
10
+ /auth/i,
11
+ /credit.?card/i,
12
+ /cvv/i,
13
+ /ssn/i,
14
+ /social.?security/i,
15
+ ];
16
+ function redact(data, maxStringLength = 200) {
17
+ if (data === null || data === undefined)
18
+ return data;
19
+ if (typeof data === "string") {
20
+ return data.length > maxStringLength
21
+ ? data.slice(0, 50) + "...[truncated]"
22
+ : data;
23
+ }
24
+ if (typeof data !== "object")
25
+ return data;
26
+ if (Array.isArray(data))
27
+ return data.map((item) => redact(item, maxStringLength));
28
+ const result = {};
29
+ for (const [key, value] of Object.entries(data)) {
30
+ if (SENSITIVE_PATTERNS.some((p) => p.test(key))) {
31
+ result[key] = "[REDACTED]";
32
+ }
33
+ else {
34
+ result[key] = redact(value, maxStringLength);
35
+ }
36
+ }
37
+ return result;
38
+ }
39
+ function isSensitiveFieldName(name) {
40
+ return SENSITIVE_PATTERNS.some((p) => p.test(name));
41
+ }
42
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":";;AAYA,wBAsBC;AAED,oDAEC;AAtCD,MAAM,kBAAkB,GAAG;IACzB,WAAW;IACX,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,eAAe;IACf,MAAM;IACN,MAAM;IACN,mBAAmB;CACpB,CAAC;AAEF,SAAgB,MAAM,CACpB,IAAa,EACb,kBAA0B,GAAG;IAE7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,GAAG,eAAe;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,gBAAgB;YACtC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAElF,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC3E,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC"}