@hasna/testers 0.0.28 → 0.0.29

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 (77) hide show
  1. package/LICENSE +1 -154
  2. package/README.md +60 -0
  3. package/dist/cli/index.js +944 -76
  4. package/dist/db/database.d.ts.map +1 -1
  5. package/dist/db/personas.d.ts.map +1 -1
  6. package/dist/db/runs.d.ts +29 -0
  7. package/dist/db/runs.d.ts.map +1 -1
  8. package/dist/db/scenarios.d.ts +12 -0
  9. package/dist/db/scenarios.d.ts.map +1 -1
  10. package/dist/db/sessions.d.ts +36 -0
  11. package/dist/db/sessions.d.ts.map +1 -0
  12. package/dist/db/step-results.d.ts +30 -0
  13. package/dist/db/step-results.d.ts.map +1 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +439 -24
  17. package/dist/lib/a11y-audit.d.ts +54 -0
  18. package/dist/lib/a11y-audit.d.ts.map +1 -0
  19. package/dist/lib/api-discovery.d.ts +46 -0
  20. package/dist/lib/api-discovery.d.ts.map +1 -0
  21. package/dist/lib/assertions.d.ts.map +1 -1
  22. package/dist/lib/auth-profiles.d.ts +16 -0
  23. package/dist/lib/auth-profiles.d.ts.map +1 -0
  24. package/dist/lib/auth-session-pool.d.ts +57 -0
  25. package/dist/lib/auth-session-pool.d.ts.map +1 -0
  26. package/dist/lib/batch-actions.d.ts +44 -0
  27. package/dist/lib/batch-actions.d.ts.map +1 -0
  28. package/dist/lib/browser-compat.d.ts +14 -0
  29. package/dist/lib/browser-compat.d.ts.map +1 -0
  30. package/dist/lib/browser.d.ts +7 -8
  31. package/dist/lib/browser.d.ts.map +1 -1
  32. package/dist/lib/ci.d.ts +12 -0
  33. package/dist/lib/ci.d.ts.map +1 -1
  34. package/dist/lib/discovery.d.ts +23 -0
  35. package/dist/lib/discovery.d.ts.map +1 -0
  36. package/dist/lib/dom-mutation.d.ts +53 -0
  37. package/dist/lib/dom-mutation.d.ts.map +1 -0
  38. package/dist/lib/environment.d.ts +26 -0
  39. package/dist/lib/environment.d.ts.map +1 -0
  40. package/dist/lib/health-scan.d.ts +2 -1
  41. package/dist/lib/health-scan.d.ts.map +1 -1
  42. package/dist/lib/junit-export.d.ts +24 -0
  43. package/dist/lib/junit-export.d.ts.map +1 -0
  44. package/dist/lib/network-mock.d.ts +38 -0
  45. package/dist/lib/network-mock.d.ts.map +1 -0
  46. package/dist/lib/offline-mode.d.ts +31 -0
  47. package/dist/lib/offline-mode.d.ts.map +1 -0
  48. package/dist/lib/pdf-export.d.ts +27 -0
  49. package/dist/lib/pdf-export.d.ts.map +1 -0
  50. package/dist/lib/performance.d.ts +65 -0
  51. package/dist/lib/performance.d.ts.map +1 -0
  52. package/dist/lib/pr-comment.d.ts +27 -0
  53. package/dist/lib/pr-comment.d.ts.map +1 -0
  54. package/dist/lib/preview-detect.d.ts +27 -0
  55. package/dist/lib/preview-detect.d.ts.map +1 -0
  56. package/dist/lib/recorder.d.ts +42 -0
  57. package/dist/lib/recorder.d.ts.map +1 -1
  58. package/dist/lib/repo-discovery.d.ts +102 -0
  59. package/dist/lib/repo-discovery.d.ts.map +1 -0
  60. package/dist/lib/repo-executor.d.ts +56 -0
  61. package/dist/lib/repo-executor.d.ts.map +1 -0
  62. package/dist/lib/responsive.d.ts +43 -0
  63. package/dist/lib/responsive.d.ts.map +1 -0
  64. package/dist/lib/runner.d.ts +1 -0
  65. package/dist/lib/runner.d.ts.map +1 -1
  66. package/dist/lib/scenario-chain.d.ts +52 -0
  67. package/dist/lib/scenario-chain.d.ts.map +1 -0
  68. package/dist/lib/templates.d.ts.map +1 -1
  69. package/dist/lib/webhooks.d.ts +3 -0
  70. package/dist/lib/webhooks.d.ts.map +1 -1
  71. package/dist/mcp/index.js +491 -38
  72. package/dist/sdk/index.d.ts +47 -0
  73. package/dist/sdk/index.d.ts.map +1 -0
  74. package/dist/server/index.js +274 -28
  75. package/dist/types/index.d.ts +64 -2
  76. package/dist/types/index.d.ts.map +1 -1
  77. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ import type { Page } from "playwright";
2
+ export interface WebVitals {
3
+ /** Largest Contentful Paint - loading performance */
4
+ lcp: number | null;
5
+ /** First Input Delay - interactivity */
6
+ fid: number | null;
7
+ /** Cumulative Layout Shift - visual stability */
8
+ cls: number | null;
9
+ /** Time to First Byte - server response time */
10
+ ttfb: number | null;
11
+ /** First Contentful Paint - initial content render */
12
+ fcp: number | null;
13
+ /** Total Blocking Time - main thread blocked time */
14
+ tbt: number | null;
15
+ /** Time to Interactive - page fully interactive */
16
+ tti: number | null;
17
+ /** DOM Content Loaded event time */
18
+ domContentLoaded: number | null;
19
+ /** Full page load time */
20
+ loadComplete: number | null;
21
+ }
22
+ export interface PerformanceBudget {
23
+ lcp?: number;
24
+ cls?: number;
25
+ ttfb?: number;
26
+ fcp?: number;
27
+ tbt?: number;
28
+ tti?: number;
29
+ loadComplete?: number;
30
+ }
31
+ export interface BudgetViolation {
32
+ metric: string;
33
+ actual: number;
34
+ budget: number;
35
+ unit: string;
36
+ }
37
+ export interface PerformanceResult {
38
+ vitals: WebVitals;
39
+ budgetViolations: BudgetViolation[];
40
+ url: string;
41
+ timestamp: string;
42
+ pass: boolean;
43
+ }
44
+ /**
45
+ * Collect Core Web Vitals and performance metrics from the current page.
46
+ * Uses the Performance API and web-vitals library via CDN.
47
+ */
48
+ export declare function collectWebVitals(page: Page): Promise<WebVitals>;
49
+ /**
50
+ * Collect performance metrics from the Navigation Timing API without external deps.
51
+ */
52
+ export declare function collectPerformanceMetrics(page: Page): Promise<WebVitals>;
53
+ /**
54
+ * Check collected vitals against a performance budget.
55
+ */
56
+ export declare function checkBudget(vitals: WebVitals, budget: PerformanceBudget): BudgetViolation[];
57
+ /**
58
+ * Default performance budgets based on Google's "good" thresholds.
59
+ */
60
+ export declare const DEFAULT_BUDGET: PerformanceBudget;
61
+ /**
62
+ * Format performance results as a human-readable report.
63
+ */
64
+ export declare function formatPerformanceResult(result: PerformanceResult): string;
65
+ //# sourceMappingURL=performance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/lib/performance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,wCAAwC;IACxC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,iDAAiD;IACjD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gDAAgD;IAChD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sDAAsD;IACtD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,qDAAqD;IACrD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,mDAAmD;IACnD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0BAA0B;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAuDrE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CA6C9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,eAAe,EAAE,CA2B3F;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,iBAQ5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAoCzE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Format and post structured PR comments with test results.
3
+ * Generates markdown suitable for GitHub PR comments.
4
+ */
5
+ import type { Run, Result } from "../types/index.js";
6
+ export interface PRCommentOptions {
7
+ run: Run;
8
+ results: Result[];
9
+ /** Link to the full report (optional) */
10
+ reportUrl?: string;
11
+ /** Link to the PR (optional) */
12
+ prUrl?: string;
13
+ /** Number of retries for this run */
14
+ retries?: number;
15
+ /** Total cost of the run */
16
+ costCents?: number;
17
+ }
18
+ /**
19
+ * Generate a structured markdown comment for a PR with test results.
20
+ */
21
+ export declare function formatPRComment(options: PRCommentOptions): string;
22
+ /**
23
+ * Generate a compact check summary for GitHub commit status.
24
+ * Returns a simple pass/fail line suitable for check runs.
25
+ */
26
+ export declare function formatCommitStatus(run: Run, results: Result[]): string;
27
+ //# sourceMappingURL=pr-comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-comment.d.ts","sourceRoot":"","sources":["../../src/lib/pr-comment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA0EjE;AAuBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAStE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Detect preview deploy URLs from PR context.
3
+ * Supports Vercel, Railway, Render, Fly.io, Netlify, and Cloudflare Pages.
4
+ */
5
+ export type DeployProvider = "vercel" | "railway" | "render" | "fly" | "netlify" | "cloudflare" | "custom";
6
+ export interface DeployInfo {
7
+ provider: DeployProvider;
8
+ url: string;
9
+ commit?: string;
10
+ branch?: string;
11
+ prNumber?: number;
12
+ }
13
+ /**
14
+ * Extract preview deploy URL from environment variables.
15
+ * CI platforms and deployment providers set specific env vars.
16
+ */
17
+ export declare function detectDeployUrl(env?: Record<string, string | undefined>): DeployInfo | null;
18
+ /**
19
+ * Parse a PR number from the deploy URL or environment.
20
+ * Common patterns: pr-123, pr_123, pull-123, /pulls/123
21
+ */
22
+ export declare function parsePrNumber(value: string): number | null;
23
+ /**
24
+ * Build a PR-specific test URL from common preview URL patterns.
25
+ */
26
+ export declare function buildPreviewUrl(baseUrl: string, prNumber: number, provider?: DeployProvider): string | null;
27
+ //# sourceMappingURL=preview-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-detect.d.ts","sourceRoot":"","sources":["../../src/lib/preview-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE3G,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAAG,UAAU,GAAG,IAAI,CAkE9I;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,cAAc,GACxB,MAAM,GAAG,IAAI,CAoBf"}
@@ -1,3 +1,4 @@
1
+ import { type BrowserContext } from "playwright";
1
2
  import type { CreateScenarioInput } from "../types/index.js";
2
3
  import { createScenario } from "../db/scenarios.js";
3
4
  export interface RecordedAction {
@@ -25,4 +26,45 @@ export declare function recordAndSave(url: string, name: string, projectId?: str
25
26
  recording: RecordingResult;
26
27
  scenario: ReturnType<typeof createScenario>;
27
28
  }>;
29
+ export interface AuthRecordingOptions {
30
+ email: string;
31
+ password: string;
32
+ loginUrl: string;
33
+ emailSelector?: string;
34
+ passwordSelector?: string;
35
+ submitSelector?: string;
36
+ waitForUrl?: string | RegExp;
37
+ timeoutMs?: number;
38
+ }
39
+ export interface SavedAuthState {
40
+ cookies: {
41
+ name: string;
42
+ value: string;
43
+ domain: string;
44
+ path: string;
45
+ }[];
46
+ localStorage: {
47
+ origin: string;
48
+ entries: {
49
+ name: string;
50
+ value: string;
51
+ }[];
52
+ }[];
53
+ loginUrl: string;
54
+ recordedAt: string;
55
+ }
56
+ /**
57
+ * Navigate to login, fill credentials, and capture auth state (cookies + localStorage).
58
+ * Returns the saved auth state for replay in future test runs.
59
+ */
60
+ export declare function recordAuthFlow(loginUrl: string, options: AuthRecordingOptions): Promise<SavedAuthState>;
61
+ /**
62
+ * Restore a previously saved auth state into a browser context.
63
+ * Injects cookies and localStorage so the page is already authenticated.
64
+ */
65
+ export declare function replayAuthState(context: BrowserContext, authState: SavedAuthState): Promise<void>;
66
+ /**
67
+ * Convert saved auth state into a scenario with auth metadata.
68
+ */
69
+ export declare function authStateToScenarioMetadata(authState: SavedAuthState, name: string, projectId?: string): ReturnType<typeof createScenario>;
28
70
  //# sourceMappingURL=recorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/lib/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,eAAe,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsIrD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,mBAAmB,CAsCrB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,SAAS,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAAE,CAAC,CAKtF"}
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/lib/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,eAAe,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsIrD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,mBAAmB,CAsCrB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,SAAS,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAAE,CAAC,CAKtF;AAID,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAC;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAkEzB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,CAAC,OAAO,cAAc,CAAC,CAWnC"}
@@ -0,0 +1,102 @@
1
+ export interface RepoSpec {
2
+ /** Relative path to the spec file */
3
+ file: string;
4
+ /** Glob pattern that matched this file */
5
+ fromGlob: string;
6
+ /** Number of tests described in the file (approximate, parsed from file text) */
7
+ testCount: number;
8
+ /** File mtime in ms (used for cache invalidation) */
9
+ mtimeMs: number;
10
+ /** File content hash (used for cache invalidation) */
11
+ contentHash: string;
12
+ }
13
+ export interface PackageManagers {
14
+ npm: boolean;
15
+ yarn: boolean;
16
+ pnpm: boolean;
17
+ bun: boolean;
18
+ /** Detected preferred package manager */
19
+ preferred: "npm" | "yarn" | "pnpm" | "bun";
20
+ }
21
+ export interface DevScripts {
22
+ /** Script that starts the dev/test server (if found) */
23
+ dev: string | null;
24
+ /** Script for test-only mode (if found) */
25
+ test: string | null;
26
+ /** Script to seed/fill test database */
27
+ seed: string | null;
28
+ /** Script to build the app */
29
+ build: string | null;
30
+ }
31
+ export interface ReadinessCheck {
32
+ /** Playwright is installed */
33
+ playwrightInstalled: boolean;
34
+ /** Browsers are downloaded */
35
+ browsersInstalled: boolean;
36
+ /** Playwright config file exists */
37
+ configExists: boolean;
38
+ /** Spec files exist and are readable */
39
+ specsFound: boolean;
40
+ /** All checks passed */
41
+ ready: boolean;
42
+ /** Human-readable issues if not ready */
43
+ issues: string[];
44
+ }
45
+ export interface RepoPrep {
46
+ /** Command to install dependencies */
47
+ installCmd: string | null;
48
+ /** Command to install Playwright browsers */
49
+ installBrowsersCmd: string | null;
50
+ /** Command to start dev server */
51
+ startDevCmd: string | null;
52
+ /** Command to build */
53
+ buildCmd: string | null;
54
+ /** Command to seed database */
55
+ seedCmd: string | null;
56
+ }
57
+ export interface RepoDiscoverySnapshot {
58
+ /** Absolute path to the repo root */
59
+ repoPath: string;
60
+ /** Playwright config file path (relative to repo) */
61
+ configPath: string | null;
62
+ /** Playwright config content parsed (or null if unparseable) */
63
+ configRaw: string | null;
64
+ /** Spec files discovered */
65
+ specs: RepoSpec[];
66
+ /** Total approximate test count across all specs */
67
+ totalTests: number;
68
+ /** Package manager detection */
69
+ packageManager: PackageManagers;
70
+ /** Dev-related scripts from package.json */
71
+ devScripts: DevScripts;
72
+ /** Readiness assessment */
73
+ readiness: ReadinessCheck;
74
+ /** Prep commands that could be run with --apply */
75
+ prep: RepoPrep;
76
+ /** Suggested base URL for the dev server */
77
+ suggestedUrl: string | null;
78
+ /** Suggested working directory for running tests */
79
+ workingDir: string;
80
+ /** When the snapshot was taken (ISO timestamp) */
81
+ snapshotAt: string;
82
+ /** Cache key for this snapshot (path hash + spec file hashes) */
83
+ cacheKey: string;
84
+ }
85
+ export interface DiscoveryOptions {
86
+ /** Absolute path to the repo root */
87
+ repoPath: string;
88
+ /** Force a fresh scan, ignoring cache */
89
+ refresh?: boolean;
90
+ /** Override the working directory for running tests */
91
+ workingDir?: string;
92
+ /** Override base URL */
93
+ baseUrl?: string;
94
+ }
95
+ export declare function discoverRepo(opts: DiscoveryOptions): RepoDiscoverySnapshot;
96
+ export declare function clearDiscoveryCache(repoPath?: string): void;
97
+ export declare function getDiscoveryCacheInfo(repoPath: string): {
98
+ cached: boolean;
99
+ stale: boolean;
100
+ path: string;
101
+ } | null;
102
+ //# sourceMappingURL=repo-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-discovery.d.ts","sourceRoot":"","sources":["../../src/lib/repo-discovery.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,yCAAyC;IACzC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,wCAAwC;IACxC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,8BAA8B;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oCAAoC;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kCAAkC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gEAAgE;IAChE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4BAA4B;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,cAAc,EAAE,eAAe,CAAC;IAChC,4CAA4C;IAC5C,UAAU,EAAE,UAAU,CAAC;IACvB,2BAA2B;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,mDAAmD;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,4CAA4C;IAC5C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AA+TD,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,qBAAqB,CAoG1E;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAgB3D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYhH"}
@@ -0,0 +1,56 @@
1
+ import type { RepoDiscoverySnapshot } from "./repo-discovery.js";
2
+ export interface RepoRunSpecResult {
3
+ specFile: string;
4
+ status: "passed" | "failed" | "error" | "skipped";
5
+ exitCode: number | null;
6
+ stdout: string;
7
+ stderr: string;
8
+ durationMs: number;
9
+ /** Parseable test names and their individual status */
10
+ testResults: {
11
+ name: string;
12
+ status: "passed" | "failed" | "skipped";
13
+ }[];
14
+ error?: string;
15
+ }
16
+ export interface RepoRunOptions {
17
+ /** Discovery snapshot for the repo */
18
+ snapshot: RepoDiscoverySnapshot;
19
+ /** Specific spec files to run (defaults to all discovered) */
20
+ specFiles?: string[];
21
+ /** Extra args to pass to Playwright */
22
+ extraArgs?: string[];
23
+ /** Timeout per spec file in ms */
24
+ timeout?: number;
25
+ /** Project ID for result storage */
26
+ projectId?: string;
27
+ /** URL the dev server is running on */
28
+ url?: string;
29
+ /** Model hint (stored in run metadata) */
30
+ model?: string;
31
+ /** Run label */
32
+ label?: string;
33
+ }
34
+ export interface RepoRunResult {
35
+ runId: string;
36
+ specResults: RepoRunSpecResult[];
37
+ total: number;
38
+ passed: number;
39
+ failed: number;
40
+ skipped: number;
41
+ errored: number;
42
+ durationMs: number;
43
+ status: "passed" | "failed" | "error";
44
+ }
45
+ export declare function runRepoTests(opts: RepoRunOptions): Promise<RepoRunResult>;
46
+ export interface PrepResult {
47
+ steps: {
48
+ cmd: string;
49
+ success: boolean;
50
+ output: string;
51
+ durationMs: number;
52
+ }[];
53
+ allSucceeded: boolean;
54
+ }
55
+ export declare function runPrep(snapshot: RepoDiscoverySnapshot, steps: ("install" | "browsers" | "dev" | "build" | "seed")[]): PrepResult;
56
+ //# sourceMappingURL=repo-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-executor.d.ts","sourceRoot":"","sources":["../../src/lib/repo-executor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAY,MAAM,qBAAqB,CAAC;AAI3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAClD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACvC;AAoMD,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAyH/E;AAID,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,CAAC,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,EAAE,GAC3D,UAAU,CAkDZ"}
@@ -0,0 +1,43 @@
1
+ import type { Page } from "playwright";
2
+ /**
3
+ * Device presets for mobile/responsive testing.
4
+ */
5
+ export declare const DEVICE_PRESETS: Record<string, {
6
+ viewport: {
7
+ width: number;
8
+ height: number;
9
+ };
10
+ userAgent: string;
11
+ deviceScaleFactor?: number;
12
+ }>;
13
+ export type DevicePreset = keyof typeof DEVICE_PRESETS;
14
+ /**
15
+ * Resize the browser viewport to a specific device preset.
16
+ */
17
+ export declare function setDevicePreset(page: Page, deviceName: string): Promise<void>;
18
+ /**
19
+ * Resize the viewport to custom dimensions.
20
+ */
21
+ export declare function setViewport(page: Page, width: number, height: number): Promise<void>;
22
+ /**
23
+ * Capture screenshots at multiple breakpoints for responsive testing.
24
+ */
25
+ export declare function captureResponsiveScreenshots(page: Page, breakpoints: {
26
+ name: string;
27
+ width: number;
28
+ height: number;
29
+ }[]): Promise<Array<{
30
+ name: string;
31
+ width: number;
32
+ height: number;
33
+ screenshot: Buffer;
34
+ }>>;
35
+ /**
36
+ * Check if the current viewport is mobile (width < 768).
37
+ */
38
+ export declare function isMobileViewport(page: Page): boolean;
39
+ /**
40
+ * Get a list of all available device preset names.
41
+ */
42
+ export declare function listDevicePresets(): string[];
43
+ //# sourceMappingURL=responsive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.d.ts","sourceRoot":"","sources":["../../src/lib/responsive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAsBzI,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,cAAc,CAAC;AAEvD;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBnF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7D,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAYrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
@@ -22,6 +22,7 @@ export interface RunOptions {
22
22
  skipBudgetCheck?: boolean;
23
23
  cacheMaxAgeMs?: number;
24
24
  minimal?: boolean;
25
+ recordVideo?: boolean;
25
26
  }
26
27
  export interface RunEvent {
27
28
  type: "scenario:start" | "scenario:pass" | "scenario:fail" | "scenario:error" | "screenshot:captured" | "run:complete" | "step:tool_call" | "step:tool_result" | "step:thinking" | "scenario:timeout_warning";
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Scenario, Result } from "../types/index.js";
2
+ /**
3
+ * Extract data from a scenario's result that can be used as input
4
+ * for chained scenarios. This captures URLs, text content, form values,
5
+ * or any data the scenario produced.
6
+ */
7
+ export interface ChainOutput {
8
+ /** The scenario that produced this output */
9
+ scenarioId: string;
10
+ scenarioName: string;
11
+ /** Extracted data key-value pairs */
12
+ data: Record<string, string>;
13
+ /** URL the scenario ended on */
14
+ finalUrl?: string;
15
+ /** Whether the scenario passed (only passed scenarios produce valid output) */
16
+ passed: boolean;
17
+ }
18
+ /**
19
+ * Chain configuration: links one scenario's output to another's input.
20
+ */
21
+ export interface ChainLink {
22
+ /** The source scenario ID whose output will be used */
23
+ sourceId: string;
24
+ /** The target scenario ID that will receive the input */
25
+ targetId: string;
26
+ /** Mapping: { targetParam: sourceDataKey } */
27
+ mapping: Record<string, string>;
28
+ }
29
+ /**
30
+ * Extract chainable output from a scenario result.
31
+ * Uses reasoning text, final URL, and result data as output sources.
32
+ */
33
+ export declare function extractChainOutput(result: Result, scenarioName: string): ChainOutput;
34
+ /**
35
+ * Build a parameterized scenario by merging chain output into
36
+ * the target scenario's steps and parameters.
37
+ */
38
+ export declare function applyChainOutput(scenario: Scenario, chainData: Record<string, string>): Scenario;
39
+ /**
40
+ * Resolve a chain of scenarios, applying outputs from each passed
41
+ * scenario to its downstream dependents.
42
+ * Returns the ordered list of scenarios with chain data applied.
43
+ */
44
+ export declare function resolveChain(scenarios: Scenario[], results: Result[], links: ChainLink[]): {
45
+ scenario: Scenario;
46
+ sourceOutput?: ChainOutput;
47
+ }[];
48
+ /**
49
+ * Check if a scenario has chain dependencies.
50
+ */
51
+ export declare function hasChainDependency(scenario: Scenario): boolean;
52
+ //# sourceMappingURL=scenario-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-chain.d.ts","sourceRoot":"","sources":["../../src/lib/scenario-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,CAoBpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,QAAQ,CAsBV;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,SAAS,EAAE,GACjB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,WAAW,CAAA;CAAE,EAAE,CAwCtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAyBpE,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAEtE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAqCpE,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAEtE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
@@ -33,6 +33,9 @@ export interface WebhookPayload {
33
33
  };
34
34
  timestamp: string;
35
35
  }
36
+ export declare function signPayload(body: string, secret: string): string;
37
+ export declare function formatDiscordPayload(payload: WebhookPayload): Record<string, unknown>;
38
+ export declare function formatSlackPayload(payload: WebhookPayload): Record<string, unknown>;
36
39
  export declare function dispatchWebhooks(event: string, run: Run, schedule?: {
37
40
  name: string;
38
41
  cronExpression: string;
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/lib/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcvE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAYV;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUrD;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAW1D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAMjD;AAID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAwCD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB9D"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/lib/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcvE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAYV;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUrD;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAW1D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAMjD;AAID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwBnF;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB9D"}