@webreel/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 (94) hide show
  1. package/README.md +188 -0
  2. package/assets/click-1.mp3 +0 -0
  3. package/assets/click-2.mp3 +0 -0
  4. package/assets/click-3.mp3 +0 -0
  5. package/assets/click-4.mp3 +0 -0
  6. package/assets/key-1.mp3 +0 -0
  7. package/assets/key-2.mp3 +0 -0
  8. package/assets/key-3.mp3 +0 -0
  9. package/assets/key-4.mp3 +0 -0
  10. package/dist/__tests__/actions.test.d.ts +2 -0
  11. package/dist/__tests__/actions.test.d.ts.map +1 -0
  12. package/dist/__tests__/actions.test.js +252 -0
  13. package/dist/__tests__/actions.test.js.map +1 -0
  14. package/dist/__tests__/chrome.test.d.ts +2 -0
  15. package/dist/__tests__/chrome.test.d.ts.map +1 -0
  16. package/dist/__tests__/chrome.test.js +29 -0
  17. package/dist/__tests__/chrome.test.js.map +1 -0
  18. package/dist/__tests__/cursor-motion.test.d.ts +2 -0
  19. package/dist/__tests__/cursor-motion.test.d.ts.map +1 -0
  20. package/dist/__tests__/cursor-motion.test.js +39 -0
  21. package/dist/__tests__/cursor-motion.test.js.map +1 -0
  22. package/dist/__tests__/ffmpeg.test.d.ts +2 -0
  23. package/dist/__tests__/ffmpeg.test.d.ts.map +1 -0
  24. package/dist/__tests__/ffmpeg.test.js +90 -0
  25. package/dist/__tests__/ffmpeg.test.js.map +1 -0
  26. package/dist/__tests__/media.test.d.ts +2 -0
  27. package/dist/__tests__/media.test.d.ts.map +1 -0
  28. package/dist/__tests__/media.test.js +98 -0
  29. package/dist/__tests__/media.test.js.map +1 -0
  30. package/dist/__tests__/overlays.test.d.ts +2 -0
  31. package/dist/__tests__/overlays.test.d.ts.map +1 -0
  32. package/dist/__tests__/overlays.test.js +109 -0
  33. package/dist/__tests__/overlays.test.js.map +1 -0
  34. package/dist/__tests__/recording-context.test.d.ts +2 -0
  35. package/dist/__tests__/recording-context.test.d.ts.map +1 -0
  36. package/dist/__tests__/recording-context.test.js +46 -0
  37. package/dist/__tests__/recording-context.test.js.map +1 -0
  38. package/dist/__tests__/timeline.test.d.ts +2 -0
  39. package/dist/__tests__/timeline.test.d.ts.map +1 -0
  40. package/dist/__tests__/timeline.test.js +88 -0
  41. package/dist/__tests__/timeline.test.js.map +1 -0
  42. package/dist/actions.d.ts +65 -0
  43. package/dist/actions.d.ts.map +1 -0
  44. package/dist/actions.js +729 -0
  45. package/dist/actions.js.map +1 -0
  46. package/dist/cdp.d.ts +3 -0
  47. package/dist/cdp.d.ts.map +1 -0
  48. package/dist/cdp.js +5 -0
  49. package/dist/cdp.js.map +1 -0
  50. package/dist/chrome.d.ts +12 -0
  51. package/dist/chrome.d.ts.map +1 -0
  52. package/dist/chrome.js +241 -0
  53. package/dist/chrome.js.map +1 -0
  54. package/dist/compositor.d.ts +8 -0
  55. package/dist/compositor.d.ts.map +1 -0
  56. package/dist/compositor.js +224 -0
  57. package/dist/compositor.js.map +1 -0
  58. package/dist/cursor-motion.d.ts +17 -0
  59. package/dist/cursor-motion.d.ts.map +1 -0
  60. package/dist/cursor-motion.js +138 -0
  61. package/dist/cursor-motion.js.map +1 -0
  62. package/dist/download.d.ts +6 -0
  63. package/dist/download.d.ts.map +1 -0
  64. package/dist/download.js +78 -0
  65. package/dist/download.js.map +1 -0
  66. package/dist/ffmpeg.d.ts +5 -0
  67. package/dist/ffmpeg.d.ts.map +1 -0
  68. package/dist/ffmpeg.js +106 -0
  69. package/dist/ffmpeg.js.map +1 -0
  70. package/dist/index.d.ts +12 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +11 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/media.d.ts +23 -0
  75. package/dist/media.d.ts.map +1 -0
  76. package/dist/media.js +155 -0
  77. package/dist/media.js.map +1 -0
  78. package/dist/overlays.d.ts +21 -0
  79. package/dist/overlays.d.ts.map +1 -0
  80. package/dist/overlays.js +97 -0
  81. package/dist/overlays.js.map +1 -0
  82. package/dist/recorder.d.ts +41 -0
  83. package/dist/recorder.d.ts.map +1 -0
  84. package/dist/recorder.js +223 -0
  85. package/dist/recorder.js.map +1 -0
  86. package/dist/timeline.d.ts +82 -0
  87. package/dist/timeline.d.ts.map +1 -0
  88. package/dist/timeline.js +140 -0
  89. package/dist/timeline.js.map +1 -0
  90. package/dist/types.d.ts +90 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +16 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +51 -0
@@ -0,0 +1,90 @@
1
+ export type CDPClient = {
2
+ close: () => Promise<void>;
3
+ Runtime: {
4
+ enable: () => Promise<void>;
5
+ evaluate: (params: {
6
+ expression: string;
7
+ returnByValue?: boolean;
8
+ awaitPromise?: boolean;
9
+ }) => Promise<{
10
+ result: {
11
+ value?: unknown;
12
+ };
13
+ }>;
14
+ };
15
+ Page: {
16
+ enable: () => Promise<void>;
17
+ navigate: (params: {
18
+ url: string;
19
+ }) => Promise<void>;
20
+ loadEventFired: () => Promise<void>;
21
+ captureScreenshot: (params: {
22
+ format?: string;
23
+ quality?: number;
24
+ optimizeForSpeed?: boolean;
25
+ }) => Promise<{
26
+ data: string;
27
+ }>;
28
+ };
29
+ Input: {
30
+ dispatchMouseEvent: (params: {
31
+ type: string;
32
+ x: number;
33
+ y: number;
34
+ button?: string;
35
+ buttons?: number;
36
+ clickCount?: number;
37
+ modifiers?: number;
38
+ }) => Promise<void>;
39
+ dispatchKeyEvent: (params: {
40
+ type: string;
41
+ key?: string;
42
+ code?: string;
43
+ text?: string;
44
+ windowsVirtualKeyCode?: number;
45
+ modifiers?: number;
46
+ commands?: string[];
47
+ }) => Promise<void>;
48
+ };
49
+ Emulation: {
50
+ setDeviceMetricsOverride: (params: {
51
+ width: number;
52
+ height: number;
53
+ deviceScaleFactor: number;
54
+ mobile: boolean;
55
+ }) => Promise<void>;
56
+ };
57
+ DOM: {
58
+ enable: () => Promise<void>;
59
+ };
60
+ };
61
+ export interface BoundingBox {
62
+ x: number;
63
+ y: number;
64
+ width: number;
65
+ height: number;
66
+ }
67
+ export interface Point {
68
+ x: number;
69
+ y: number;
70
+ }
71
+ export interface SoundEvent {
72
+ type: "click" | "key";
73
+ timeMs: number;
74
+ }
75
+ export declare const TARGET_FPS = 60;
76
+ export declare const FRAME_MS: number;
77
+ export declare const DEFAULT_VIEWPORT_SIZE = 1080;
78
+ export declare const OFFSCREEN_MARGIN = 40;
79
+ export declare const CAPTURE_CYCLE_MS = 35;
80
+ export declare const DEFAULT_CURSOR_SVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87c.45 0 .67-.54.35-.85L5.85 2.35a.5.5 0 0 0-.35.86z\" fill=\"#fff\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/></svg>";
81
+ export declare const DEFAULT_HUD_THEME: {
82
+ background: string;
83
+ color: string;
84
+ fontSize: number;
85
+ fontFamily: string;
86
+ borderRadius: number;
87
+ position: "bottom";
88
+ };
89
+ export declare const DEFAULT_CURSOR_SIZE = 24;
90
+ //# 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,16 @@
1
+ export const TARGET_FPS = 60;
2
+ export const FRAME_MS = 1000 / TARGET_FPS;
3
+ export const DEFAULT_VIEWPORT_SIZE = 1080;
4
+ export const OFFSCREEN_MARGIN = 40;
5
+ export const CAPTURE_CYCLE_MS = 35;
6
+ export const DEFAULT_CURSOR_SVG = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87c.45 0 .67-.54.35-.85L5.85 2.35a.5.5 0 0 0-.35.86z" fill="#fff" stroke="#000" stroke-width="1.5" stroke-linejoin="round"/></svg>';
7
+ export const DEFAULT_HUD_THEME = {
8
+ background: "rgba(0,0,0,0.5)",
9
+ color: "rgba(255,255,255,0.85)",
10
+ fontSize: 56,
11
+ fontFamily: '"Geist", -apple-system, BlinkMacSystemFont, sans-serif',
12
+ borderRadius: 18,
13
+ position: "bottom",
14
+ };
15
+ export const DEFAULT_CURSOR_SIZE = 24;
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsEA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,kBAAkB,GAC7B,4SAA4S,CAAC;AAE/S,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,iBAAiB;IAC7B,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,wDAAwD;IACpE,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,QAAiB;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@webreel/core",
3
+ "version": "0.1.0",
4
+ "description": "Core recording engine for webreel - headless Chrome capture, cursor animation, and video compositing.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/vercel-labs/webreel.git",
8
+ "directory": "packages/@webreel/core"
9
+ },
10
+ "keywords": [
11
+ "video",
12
+ "recording",
13
+ "browser",
14
+ "headless",
15
+ "chrome",
16
+ "cdp",
17
+ "screencast",
18
+ "automation"
19
+ ],
20
+ "license": "Apache-2.0",
21
+ "type": "module",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ }
27
+ },
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "assets"
34
+ ],
35
+ "scripts": {
36
+ "clean": "rm -rf dist",
37
+ "build": "rm -rf dist && tsc",
38
+ "type-check": "tsc --noEmit",
39
+ "dev": "tsc --watch",
40
+ "test": "vitest run"
41
+ },
42
+ "dependencies": {
43
+ "chrome-remote-interface": "^0.33.2",
44
+ "sharp": "^0.34.5"
45
+ },
46
+ "devDependencies": {
47
+ "@types/chrome-remote-interface": "^0.33.0",
48
+ "@types/node": "25.3.0",
49
+ "typescript": "5.9.3"
50
+ }
51
+ }