slapify 0.0.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.
@@ -0,0 +1,403 @@
1
+ import { BrowserAgent } from "../browser/agent.js";
2
+ import { AIInterpreter } from "../ai/interpreter.js";
3
+ /**
4
+ * Test runner that executes flow files
5
+ */
6
+ export class TestRunner {
7
+ config;
8
+ credentials;
9
+ browser;
10
+ ai;
11
+ autoHandled = [];
12
+ allAssumptions = [];
13
+ constructor(config, credentials) {
14
+ this.config = config;
15
+ this.credentials = credentials;
16
+ this.browser = new BrowserAgent(config.browser);
17
+ this.ai = new AIInterpreter(config.llm);
18
+ }
19
+ /**
20
+ * Run a flow file
21
+ * @param flow The flow file to run
22
+ * @param onStep Optional callback for real-time step progress
23
+ */
24
+ async runFlow(flow, onStep) {
25
+ const startTime = new Date();
26
+ const stepResults = [];
27
+ try {
28
+ for (const step of flow.steps) {
29
+ let result = await this.executeStep(step);
30
+ // Retry once on failure (for non-optional steps)
31
+ if (result.status === "failed" && !step.optional) {
32
+ // Wait a bit before retry
33
+ await this.browser.wait(1000);
34
+ // Try again
35
+ const retryResult = await this.executeStep(step);
36
+ retryResult.retried = true;
37
+ // Combine durations
38
+ retryResult.duration += result.duration;
39
+ // If retry succeeded or failed, use retry result
40
+ result = retryResult;
41
+ }
42
+ stepResults.push(result);
43
+ // Call progress callback
44
+ if (onStep) {
45
+ onStep(result);
46
+ }
47
+ // Stop on required step failure (after retry)
48
+ if (result.status === "failed" && !step.optional) {
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ finally {
54
+ await this.browser.close();
55
+ }
56
+ const endTime = new Date();
57
+ const passed = stepResults.filter((r) => r.status === "passed").length;
58
+ const failed = stepResults.filter((r) => r.status === "failed").length;
59
+ const skipped = stepResults.filter((r) => r.status === "skipped").length;
60
+ return {
61
+ flowFile: flow.path || flow.name,
62
+ status: failed === 0 ||
63
+ stepResults.every((r) => r.status !== "failed" ||
64
+ flow.steps[stepResults.indexOf(r)]?.optional)
65
+ ? "passed"
66
+ : "failed",
67
+ steps: stepResults,
68
+ totalSteps: flow.steps.length,
69
+ passedSteps: passed,
70
+ failedSteps: failed,
71
+ skippedSteps: skipped,
72
+ duration: endTime.getTime() - startTime.getTime(),
73
+ startTime,
74
+ endTime,
75
+ autoHandled: this.autoHandled,
76
+ assumptions: this.allAssumptions,
77
+ };
78
+ }
79
+ /**
80
+ * Execute a single step
81
+ */
82
+ async executeStep(step) {
83
+ const startTime = Date.now();
84
+ const actions = [];
85
+ const assumptions = [];
86
+ try {
87
+ // Get current browser state
88
+ const state = await this.browser.getState();
89
+ // Check for auto-handle opportunities
90
+ await this.handleInterruptions(actions);
91
+ // Check if this is a credential-related step
92
+ const credentialMatch = step.text.match(/login\s+with\s+(\w+)\s+credentials/i);
93
+ if (credentialMatch) {
94
+ const profileName = credentialMatch[1];
95
+ const profile = this.credentials.profiles[profileName];
96
+ if (!profile) {
97
+ throw new Error(`Credential profile not found: ${profileName}`);
98
+ }
99
+ await this.handleLogin(profile, actions);
100
+ }
101
+ else {
102
+ // Interpret step with AI
103
+ const interpreted = await this.ai.interpretStep(step, state, this.credentials.profiles);
104
+ // Handle skip reason
105
+ if (interpreted.skipReason) {
106
+ if (step.optional || step.conditional) {
107
+ return {
108
+ step,
109
+ status: "skipped",
110
+ duration: Date.now() - startTime,
111
+ actions: [
112
+ {
113
+ type: "info",
114
+ description: interpreted.skipReason,
115
+ timestamp: Date.now(),
116
+ },
117
+ ],
118
+ };
119
+ }
120
+ else {
121
+ throw new Error(interpreted.skipReason);
122
+ }
123
+ }
124
+ // Record assumptions
125
+ if (interpreted.assumptions.length > 0) {
126
+ assumptions.push(...interpreted.assumptions);
127
+ this.allAssumptions.push(...interpreted.assumptions);
128
+ }
129
+ // Execute browser commands
130
+ for (const cmd of interpreted.actions) {
131
+ await this.executeCommand(cmd, actions);
132
+ }
133
+ }
134
+ // Take screenshot if enabled
135
+ let screenshot;
136
+ if (this.config.report?.screenshots) {
137
+ const screenshotPath = `step-${step.line}.png`;
138
+ await this.browser.screenshot(screenshotPath);
139
+ screenshot = screenshotPath;
140
+ }
141
+ return {
142
+ step,
143
+ status: "passed",
144
+ duration: Date.now() - startTime,
145
+ actions,
146
+ assumptions: assumptions.length > 0 ? assumptions : undefined,
147
+ screenshot,
148
+ };
149
+ }
150
+ catch (error) {
151
+ // Take failure screenshot
152
+ let screenshot;
153
+ try {
154
+ if (this.config.report?.screenshots) {
155
+ const screenshotPath = `step-${step.line}-failed.png`;
156
+ await this.browser.screenshot(screenshotPath);
157
+ screenshot = screenshotPath;
158
+ }
159
+ }
160
+ catch {
161
+ // Ignore screenshot errors
162
+ }
163
+ if (step.optional) {
164
+ return {
165
+ step,
166
+ status: "skipped",
167
+ duration: Date.now() - startTime,
168
+ actions,
169
+ error: error.message,
170
+ screenshot,
171
+ };
172
+ }
173
+ return {
174
+ step,
175
+ status: "failed",
176
+ duration: Date.now() - startTime,
177
+ actions,
178
+ error: error.message,
179
+ screenshot,
180
+ };
181
+ }
182
+ }
183
+ /**
184
+ * Execute a browser command
185
+ */
186
+ async executeCommand(cmd, actions) {
187
+ actions.push({
188
+ type: this.getActionType(cmd.command),
189
+ description: cmd.description,
190
+ selector: cmd.args[0],
191
+ value: cmd.args[1],
192
+ timestamp: Date.now(),
193
+ });
194
+ switch (cmd.command) {
195
+ case "navigate":
196
+ await this.browser.navigate(cmd.args[0]);
197
+ // Wait for page to stabilize after navigation
198
+ await this.browser.waitForStable();
199
+ break;
200
+ case "click":
201
+ await this.browser.click(cmd.args[0]);
202
+ // Brief wait after click in case it triggers navigation
203
+ await this.browser.wait(300);
204
+ break;
205
+ case "fill":
206
+ await this.browser.fill(cmd.args[0], cmd.args[1]);
207
+ break;
208
+ case "type":
209
+ await this.browser.type(cmd.args[0], cmd.args[1]);
210
+ break;
211
+ case "press":
212
+ await this.browser.press(cmd.args[0]);
213
+ break;
214
+ case "hover":
215
+ await this.browser.hover(cmd.args[0]);
216
+ break;
217
+ case "select":
218
+ await this.browser.select(cmd.args[0], cmd.args[1]);
219
+ break;
220
+ case "scroll":
221
+ await this.browser.scroll(cmd.args[0], parseInt(cmd.args[1]));
222
+ break;
223
+ case "wait":
224
+ await this.browser.wait(parseInt(cmd.args[0]));
225
+ break;
226
+ case "waitForText":
227
+ await this.browser.wait(`text=${cmd.args[0]}`);
228
+ break;
229
+ case "getText":
230
+ await this.browser.getText(cmd.args[0]);
231
+ break;
232
+ case "screenshot":
233
+ await this.browser.screenshot(cmd.args[0]);
234
+ break;
235
+ case "goBack":
236
+ await this.browser.goBack();
237
+ break;
238
+ case "reload":
239
+ await this.browser.reload();
240
+ break;
241
+ default:
242
+ throw new Error(`Unknown command: ${cmd.command}`);
243
+ }
244
+ // Small delay between actions for stability
245
+ await this.browser.wait(100);
246
+ }
247
+ /**
248
+ * Handle automatic dismissal of interruptions
249
+ */
250
+ async handleInterruptions(actions) {
251
+ try {
252
+ const state = await this.browser.getState();
253
+ const interruptions = await this.ai.checkAutoHandle(state);
254
+ for (const int of interruptions) {
255
+ try {
256
+ await this.browser.click(int.ref);
257
+ const description = `Auto-handled: ${int.description}`;
258
+ this.autoHandled.push(description);
259
+ actions.push({
260
+ type: "auto-handle",
261
+ description,
262
+ selector: int.ref,
263
+ timestamp: Date.now(),
264
+ });
265
+ // Wait for any animations
266
+ await this.browser.wait(500);
267
+ }
268
+ catch {
269
+ // Ignore failed auto-handles
270
+ }
271
+ }
272
+ }
273
+ catch {
274
+ // Ignore auto-handle errors
275
+ }
276
+ }
277
+ /**
278
+ * Handle login with credentials
279
+ */
280
+ async handleLogin(profile, actions) {
281
+ // Handle inject type (cookies/localStorage)
282
+ if (profile.type === "inject") {
283
+ if (profile.cookies) {
284
+ for (const cookie of profile.cookies) {
285
+ await this.browser.setCookie(cookie.name, cookie.value);
286
+ actions.push({
287
+ type: "fill",
288
+ description: `Set cookie: ${cookie.name}`,
289
+ timestamp: Date.now(),
290
+ });
291
+ }
292
+ }
293
+ if (profile.localStorage) {
294
+ for (const [key, value] of Object.entries(profile.localStorage)) {
295
+ await this.browser.setLocalStorage(key, value);
296
+ actions.push({
297
+ type: "fill",
298
+ description: `Set localStorage: ${key}`,
299
+ timestamp: Date.now(),
300
+ });
301
+ }
302
+ }
303
+ if (profile.sessionStorage) {
304
+ for (const [key, value] of Object.entries(profile.sessionStorage)) {
305
+ await this.browser.setSessionStorage(key, value);
306
+ actions.push({
307
+ type: "fill",
308
+ description: `Set sessionStorage: ${key}`,
309
+ timestamp: Date.now(),
310
+ });
311
+ }
312
+ }
313
+ await this.browser.reload();
314
+ return;
315
+ }
316
+ // Handle login form type
317
+ if (profile.type === "login-form" && profile.username && profile.password) {
318
+ const state = await this.browser.getState();
319
+ const loginForm = await this.ai.findLoginForm(state);
320
+ if (!loginForm) {
321
+ throw new Error("Could not find login form on page");
322
+ }
323
+ // Fill username
324
+ await this.browser.fill(loginForm.usernameRef, profile.username);
325
+ actions.push({
326
+ type: "fill",
327
+ description: "Filled username field",
328
+ selector: loginForm.usernameRef,
329
+ timestamp: Date.now(),
330
+ });
331
+ // Fill password
332
+ await this.browser.fill(loginForm.passwordRef, profile.password);
333
+ actions.push({
334
+ type: "fill",
335
+ description: "Filled password field",
336
+ selector: loginForm.passwordRef,
337
+ timestamp: Date.now(),
338
+ });
339
+ // Click submit
340
+ await this.browser.click(loginForm.submitRef);
341
+ actions.push({
342
+ type: "click",
343
+ description: "Clicked login button",
344
+ selector: loginForm.submitRef,
345
+ timestamp: Date.now(),
346
+ });
347
+ // Wait for navigation
348
+ await this.browser.wait(2000);
349
+ // Handle TOTP if configured
350
+ if (profile.totp_secret) {
351
+ const totp = this.generateTOTP(profile.totp_secret);
352
+ // TODO: Find OTP input and fill
353
+ actions.push({
354
+ type: "fill",
355
+ description: `Entered TOTP code`,
356
+ timestamp: Date.now(),
357
+ });
358
+ }
359
+ // Handle fixed OTP
360
+ if (profile.fixed_otp) {
361
+ // TODO: Find OTP input and fill
362
+ actions.push({
363
+ type: "fill",
364
+ description: `Entered fixed OTP`,
365
+ timestamp: Date.now(),
366
+ });
367
+ }
368
+ }
369
+ }
370
+ /**
371
+ * Generate TOTP code from secret
372
+ */
373
+ generateTOTP(secret) {
374
+ // Basic TOTP implementation
375
+ // In production, use a proper TOTP library
376
+ const epoch = Math.floor(Date.now() / 1000 / 30);
377
+ // Simplified - would need proper HMAC-SHA1 implementation
378
+ return "000000"; // Placeholder
379
+ }
380
+ /**
381
+ * Get action type from command
382
+ */
383
+ getActionType(command) {
384
+ switch (command) {
385
+ case "navigate":
386
+ return "navigate";
387
+ case "click":
388
+ case "hover":
389
+ case "press":
390
+ return "click";
391
+ case "fill":
392
+ case "type":
393
+ case "select":
394
+ return "fill";
395
+ case "wait":
396
+ case "waitForText":
397
+ return "wait";
398
+ default:
399
+ return "info";
400
+ }
401
+ }
402
+ }
403
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ export interface SlapifyConfig {
2
+ llm: LLMConfig;
3
+ browser?: BrowserConfig;
4
+ report?: ReportConfig;
5
+ }
6
+ export interface LLMConfig {
7
+ provider: "anthropic" | "openai" | "google" | "mistral" | "groq" | "ollama";
8
+ model: string;
9
+ api_key?: string;
10
+ base_url?: string;
11
+ }
12
+ export interface BrowserConfig {
13
+ headless?: boolean;
14
+ timeout?: number;
15
+ viewport?: {
16
+ width: number;
17
+ height: number;
18
+ };
19
+ executablePath?: string;
20
+ }
21
+ export interface ReportConfig {
22
+ format?: "markdown" | "html" | "json";
23
+ screenshots?: boolean;
24
+ output_dir?: string;
25
+ }
26
+ export interface CredentialsConfig {
27
+ profiles: Record<string, CredentialProfile>;
28
+ }
29
+ export interface CredentialProfile {
30
+ type: "login-form" | "oauth" | "otp" | "inject" | "headers";
31
+ username?: string;
32
+ password?: string;
33
+ email?: string;
34
+ phone?: string;
35
+ totp_secret?: string;
36
+ fixed_otp?: string;
37
+ backup_codes?: string[];
38
+ cookies?: CookieConfig[];
39
+ localStorage?: Record<string, string>;
40
+ sessionStorage?: Record<string, string>;
41
+ headers?: Record<string, string>;
42
+ }
43
+ export interface CookieConfig {
44
+ name: string;
45
+ value: string;
46
+ domain?: string;
47
+ path?: string;
48
+ }
49
+ export interface FlowFile {
50
+ path: string;
51
+ name: string;
52
+ steps: FlowStep[];
53
+ comments: string[];
54
+ }
55
+ export interface FlowStep {
56
+ line: number;
57
+ text: string;
58
+ optional: boolean;
59
+ conditional: boolean;
60
+ condition?: string;
61
+ action?: string;
62
+ }
63
+ export interface StepResult {
64
+ step: FlowStep;
65
+ status: "passed" | "failed" | "skipped";
66
+ duration: number;
67
+ actions: ActionLog[];
68
+ assumptions?: string[];
69
+ error?: string;
70
+ screenshot?: string;
71
+ retried?: boolean;
72
+ }
73
+ export interface ActionLog {
74
+ type: "navigate" | "click" | "fill" | "verify" | "wait" | "auto-handle" | "info";
75
+ description: string;
76
+ selector?: string;
77
+ value?: string;
78
+ timestamp: number;
79
+ }
80
+ export interface TestResult {
81
+ flowFile: string;
82
+ status: "passed" | "failed";
83
+ steps: StepResult[];
84
+ totalSteps: number;
85
+ passedSteps: number;
86
+ failedSteps: number;
87
+ skippedSteps: number;
88
+ duration: number;
89
+ startTime: Date;
90
+ endTime: Date;
91
+ autoHandled: string[];
92
+ assumptions: string[];
93
+ }
94
+ export interface BrowserState {
95
+ url: string;
96
+ title: string;
97
+ snapshot: string;
98
+ refs: Record<string, RefInfo>;
99
+ }
100
+ export interface RefInfo {
101
+ role: string;
102
+ name?: string;
103
+ text?: string;
104
+ }
105
+ //# 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "slapify",
3
+ "version": "0.0.0",
4
+ "description": "AI-powered E2E testing that slaps - write tests in plain English",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "slapify": "./bin/slapify.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "bin"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "start": "node dist/index.js",
19
+ "lint": "tsc --noEmit",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "testing",
24
+ "e2e",
25
+ "automation",
26
+ "ai",
27
+ "natural-language",
28
+ "browser",
29
+ "playwright",
30
+ "slaps"
31
+ ],
32
+ "author": "slaps.dev",
33
+ "license": "MIT",
34
+ "homepage": "https://slaps.dev",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/vgulerianb/slapify"
38
+ },
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ },
42
+ "dependencies": {
43
+ "agent-browser": "^0.9.0",
44
+ "ai": "^3.0.0",
45
+ "@ai-sdk/anthropic": "^0.0.30",
46
+ "@ai-sdk/openai": "^0.0.30",
47
+ "@ai-sdk/google": "^1.0.0",
48
+ "@ai-sdk/mistral": "^1.0.0",
49
+ "@ai-sdk/groq": "^1.0.0",
50
+ "commander": "^12.0.0",
51
+ "yaml": "^2.3.4",
52
+ "chalk": "^5.3.0",
53
+ "ora": "^8.0.1",
54
+ "glob": "^10.3.10",
55
+ "dotenv": "^16.4.1"
56
+ },
57
+ "devDependencies": {
58
+ "@types/node": "^20.10.0",
59
+ "typescript": "^5.3.0"
60
+ }
61
+ }