@carlesandres/webreel-core 0.2.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 (107) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +200 -0
  3. package/assets/click-1.mp3 +0 -0
  4. package/assets/click-2.mp3 +0 -0
  5. package/assets/click-3.mp3 +0 -0
  6. package/assets/click-4.mp3 +0 -0
  7. package/assets/key-1.mp3 +0 -0
  8. package/assets/key-2.mp3 +0 -0
  9. package/assets/key-3.mp3 +0 -0
  10. package/assets/key-4.mp3 +0 -0
  11. package/dist/__tests__/actions.test.d.ts +2 -0
  12. package/dist/__tests__/actions.test.d.ts.map +1 -0
  13. package/dist/__tests__/actions.test.js +252 -0
  14. package/dist/__tests__/actions.test.js.map +1 -0
  15. package/dist/__tests__/chrome.test.d.ts +2 -0
  16. package/dist/__tests__/chrome.test.d.ts.map +1 -0
  17. package/dist/__tests__/chrome.test.js +29 -0
  18. package/dist/__tests__/chrome.test.js.map +1 -0
  19. package/dist/__tests__/cursor-motion.test.d.ts +2 -0
  20. package/dist/__tests__/cursor-motion.test.d.ts.map +1 -0
  21. package/dist/__tests__/cursor-motion.test.js +39 -0
  22. package/dist/__tests__/cursor-motion.test.js.map +1 -0
  23. package/dist/__tests__/ffmpeg.test.d.ts +2 -0
  24. package/dist/__tests__/ffmpeg.test.d.ts.map +1 -0
  25. package/dist/__tests__/ffmpeg.test.js +90 -0
  26. package/dist/__tests__/ffmpeg.test.js.map +1 -0
  27. package/dist/__tests__/fs.test.d.ts +2 -0
  28. package/dist/__tests__/fs.test.d.ts.map +1 -0
  29. package/dist/__tests__/fs.test.js +42 -0
  30. package/dist/__tests__/fs.test.js.map +1 -0
  31. package/dist/__tests__/media.test.d.ts +2 -0
  32. package/dist/__tests__/media.test.d.ts.map +1 -0
  33. package/dist/__tests__/media.test.js +98 -0
  34. package/dist/__tests__/media.test.js.map +1 -0
  35. package/dist/__tests__/overlays.test.d.ts +2 -0
  36. package/dist/__tests__/overlays.test.d.ts.map +1 -0
  37. package/dist/__tests__/overlays.test.js +109 -0
  38. package/dist/__tests__/overlays.test.js.map +1 -0
  39. package/dist/__tests__/recorder.test.d.ts +2 -0
  40. package/dist/__tests__/recorder.test.d.ts.map +1 -0
  41. package/dist/__tests__/recorder.test.js +60 -0
  42. package/dist/__tests__/recorder.test.js.map +1 -0
  43. package/dist/__tests__/recording-context.test.d.ts +2 -0
  44. package/dist/__tests__/recording-context.test.d.ts.map +1 -0
  45. package/dist/__tests__/recording-context.test.js +46 -0
  46. package/dist/__tests__/recording-context.test.js.map +1 -0
  47. package/dist/__tests__/timeline.test.d.ts +2 -0
  48. package/dist/__tests__/timeline.test.d.ts.map +1 -0
  49. package/dist/__tests__/timeline.test.js +88 -0
  50. package/dist/__tests__/timeline.test.js.map +1 -0
  51. package/dist/actions.d.ts +65 -0
  52. package/dist/actions.d.ts.map +1 -0
  53. package/dist/actions.js +729 -0
  54. package/dist/actions.js.map +1 -0
  55. package/dist/cdp.d.ts +3 -0
  56. package/dist/cdp.d.ts.map +1 -0
  57. package/dist/cdp.js +5 -0
  58. package/dist/cdp.js.map +1 -0
  59. package/dist/chrome.d.ts +16 -0
  60. package/dist/chrome.d.ts.map +1 -0
  61. package/dist/chrome.js +243 -0
  62. package/dist/chrome.js.map +1 -0
  63. package/dist/compositor.d.ts +8 -0
  64. package/dist/compositor.d.ts.map +1 -0
  65. package/dist/compositor.js +232 -0
  66. package/dist/compositor.js.map +1 -0
  67. package/dist/cursor-motion.d.ts +17 -0
  68. package/dist/cursor-motion.d.ts.map +1 -0
  69. package/dist/cursor-motion.js +138 -0
  70. package/dist/cursor-motion.js.map +1 -0
  71. package/dist/download.d.ts +6 -0
  72. package/dist/download.d.ts.map +1 -0
  73. package/dist/download.js +78 -0
  74. package/dist/download.js.map +1 -0
  75. package/dist/ffmpeg.d.ts +6 -0
  76. package/dist/ffmpeg.d.ts.map +1 -0
  77. package/dist/ffmpeg.js +106 -0
  78. package/dist/ffmpeg.js.map +1 -0
  79. package/dist/fs.d.ts +6 -0
  80. package/dist/fs.d.ts.map +1 -0
  81. package/dist/fs.js +20 -0
  82. package/dist/fs.js.map +1 -0
  83. package/dist/index.d.ts +13 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +12 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/media.d.ts +23 -0
  88. package/dist/media.d.ts.map +1 -0
  89. package/dist/media.js +167 -0
  90. package/dist/media.js.map +1 -0
  91. package/dist/overlays.d.ts +21 -0
  92. package/dist/overlays.d.ts.map +1 -0
  93. package/dist/overlays.js +97 -0
  94. package/dist/overlays.js.map +1 -0
  95. package/dist/recorder.d.ts +60 -0
  96. package/dist/recorder.d.ts.map +1 -0
  97. package/dist/recorder.js +283 -0
  98. package/dist/recorder.js.map +1 -0
  99. package/dist/timeline.d.ts +82 -0
  100. package/dist/timeline.d.ts.map +1 -0
  101. package/dist/timeline.js +140 -0
  102. package/dist/timeline.js.map +1 -0
  103. package/dist/types.d.ts +91 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +16 -0
  106. package/dist/types.js.map +1 -0
  107. package/package.json +58 -0
@@ -0,0 +1,140 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { TARGET_FPS, DEFAULT_CURSOR_SVG, DEFAULT_VIEWPORT_SIZE, OFFSCREEN_MARGIN, DEFAULT_CURSOR_SIZE, DEFAULT_HUD_THEME, } from "./types.js";
3
+ export class InteractionTimeline {
4
+ cursorPath = null;
5
+ pathIndex = 0;
6
+ currentCursor = {
7
+ x: -OFFSCREEN_MARGIN,
8
+ y: -OFFSCREEN_MARGIN,
9
+ scale: 1,
10
+ };
11
+ currentHud = null;
12
+ frames = [];
13
+ events = [];
14
+ frameCount = 0;
15
+ tickResolvers = [];
16
+ width;
17
+ height;
18
+ zoom;
19
+ fps;
20
+ cursorSvg;
21
+ cursorSize;
22
+ cursorHotspot;
23
+ hudConfig;
24
+ constructor(width = DEFAULT_VIEWPORT_SIZE, height = DEFAULT_VIEWPORT_SIZE, options) {
25
+ this.width = width;
26
+ this.height = height;
27
+ this.zoom = options?.zoom ?? 1;
28
+ this.fps = options?.fps ?? TARGET_FPS;
29
+ if (options?.initialCursor) {
30
+ this.currentCursor = {
31
+ x: options.initialCursor.x,
32
+ y: options.initialCursor.y,
33
+ scale: 1,
34
+ };
35
+ }
36
+ this.cursorSvg = options?.cursorSvg ?? DEFAULT_CURSOR_SVG;
37
+ this.cursorSize = options?.cursorSize ?? DEFAULT_CURSOR_SIZE;
38
+ this.cursorHotspot = options?.cursorHotspot ?? "top-left";
39
+ this.hudConfig = {
40
+ background: options?.hud?.background ?? DEFAULT_HUD_THEME.background,
41
+ color: options?.hud?.color ?? DEFAULT_HUD_THEME.color,
42
+ fontSize: options?.hud?.fontSize ?? DEFAULT_HUD_THEME.fontSize,
43
+ fontFamily: options?.hud?.fontFamily ?? DEFAULT_HUD_THEME.fontFamily,
44
+ borderRadius: options?.hud?.borderRadius ?? DEFAULT_HUD_THEME.borderRadius,
45
+ position: options?.hud?.position ?? DEFAULT_HUD_THEME.position,
46
+ };
47
+ if (options?.loadedFrames) {
48
+ this.frames = options.loadedFrames;
49
+ this.frameCount = options.loadedFrames.length;
50
+ }
51
+ if (options?.loadedEvents) {
52
+ this.events = options.loadedEvents;
53
+ }
54
+ }
55
+ setCursorPath(positions) {
56
+ this.cursorPath = positions;
57
+ this.pathIndex = 0;
58
+ }
59
+ setCursorScale(scale) {
60
+ this.currentCursor.scale = scale;
61
+ }
62
+ showHud(labels) {
63
+ this.currentHud = { labels };
64
+ }
65
+ hideHud() {
66
+ this.currentHud = null;
67
+ }
68
+ addEvent(type) {
69
+ const timeMs = (this.frameCount / this.fps) * 1000;
70
+ this.events.push({ type, timeMs });
71
+ }
72
+ waitForNextTick() {
73
+ return new Promise((resolve) => {
74
+ this.tickResolvers.push(resolve);
75
+ });
76
+ }
77
+ tick() {
78
+ if (this.cursorPath && this.pathIndex < this.cursorPath.length) {
79
+ const p = this.cursorPath[this.pathIndex++];
80
+ this.currentCursor.x = p.x;
81
+ this.currentCursor.y = p.y;
82
+ if (this.pathIndex >= this.cursorPath.length) {
83
+ this.cursorPath = null;
84
+ }
85
+ }
86
+ this.pushCurrentState();
87
+ const resolvers = this.tickResolvers;
88
+ this.tickResolvers = [];
89
+ for (const resolve of resolvers)
90
+ resolve();
91
+ }
92
+ tickDuplicate() {
93
+ this.pushCurrentState();
94
+ }
95
+ pushCurrentState() {
96
+ this.frames.push({
97
+ cursor: { ...this.currentCursor },
98
+ hud: this.currentHud ? { labels: [...this.currentHud.labels] } : null,
99
+ });
100
+ this.frameCount++;
101
+ }
102
+ getEvents() {
103
+ return this.events;
104
+ }
105
+ getFrameCount() {
106
+ return this.frameCount;
107
+ }
108
+ toJSON() {
109
+ return {
110
+ fps: this.fps,
111
+ width: this.width,
112
+ height: this.height,
113
+ zoom: this.zoom,
114
+ theme: {
115
+ cursorSvg: this.cursorSvg,
116
+ cursorSize: this.cursorSize,
117
+ cursorHotspot: this.cursorHotspot,
118
+ hud: this.hudConfig,
119
+ },
120
+ frames: this.frames,
121
+ events: this.events,
122
+ };
123
+ }
124
+ save(path) {
125
+ writeFileSync(path, JSON.stringify(this.toJSON()));
126
+ }
127
+ static load(json) {
128
+ return new InteractionTimeline(json.width, json.height, {
129
+ zoom: json.zoom,
130
+ fps: json.fps,
131
+ cursorSvg: json.theme.cursorSvg,
132
+ cursorSize: json.theme.cursorSize,
133
+ cursorHotspot: json.theme.cursorHotspot,
134
+ hud: json.theme.hud,
135
+ loadedFrames: json.frames,
136
+ loadedEvents: json.events,
137
+ });
138
+ }
139
+ }
140
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
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 type CaptureFormat = "jpeg" | "png";
76
+ export declare const TARGET_FPS = 60;
77
+ export declare const FRAME_MS: number;
78
+ export declare const DEFAULT_VIEWPORT_SIZE = 1080;
79
+ export declare const OFFSCREEN_MARGIN = 40;
80
+ export declare const CAPTURE_CYCLE_MS = 35;
81
+ 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>";
82
+ export declare const DEFAULT_HUD_THEME: {
83
+ background: string;
84
+ color: string;
85
+ fontSize: number;
86
+ fontFamily: string;
87
+ borderRadius: number;
88
+ position: "bottom";
89
+ };
90
+ export declare const DEFAULT_CURSOR_SIZE = 24;
91
+ //# 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":"AAwEA,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,58 @@
1
+ {
2
+ "name": "@carlesandres/webreel-core",
3
+ "version": "0.2.0",
4
+ "description": "Core recording engine for webreel - headless Chrome capture, cursor animation, and video compositing.",
5
+ "homepage": "https://webreel.dev",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/carlesandres/webreel.git",
9
+ "directory": "packages/@webreel/core"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/vercel-labs/webreel/issues"
13
+ },
14
+ "keywords": [
15
+ "video",
16
+ "recording",
17
+ "browser",
18
+ "headless",
19
+ "chrome",
20
+ "cdp",
21
+ "screencast",
22
+ "automation"
23
+ ],
24
+ "license": "Apache-2.0",
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "type": "module",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js"
33
+ }
34
+ },
35
+ "engines": {
36
+ "node": ">=18"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "assets"
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
+ "scripts": {
52
+ "clean": "rm -rf dist",
53
+ "build": "rm -rf dist && tsc",
54
+ "type-check": "tsc --noEmit",
55
+ "dev": "tsc --watch",
56
+ "test": "vitest run"
57
+ }
58
+ }