@b0xs/recorder 1.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.
Files changed (46) hide show
  1. package/README.md +89 -0
  2. package/dist/api/client.d.ts +111 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +186 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/cli/commands/init.d.ts +7 -0
  7. package/dist/cli/commands/init.d.ts.map +1 -0
  8. package/dist/cli/commands/init.js +104 -0
  9. package/dist/cli/commands/init.js.map +1 -0
  10. package/dist/cli/commands/login.d.ts +7 -0
  11. package/dist/cli/commands/login.d.ts.map +1 -0
  12. package/dist/cli/commands/login.js +154 -0
  13. package/dist/cli/commands/login.js.map +1 -0
  14. package/dist/cli/commands/record.d.ts +14 -0
  15. package/dist/cli/commands/record.d.ts.map +1 -0
  16. package/dist/cli/commands/record.js +244 -0
  17. package/dist/cli/commands/record.js.map +1 -0
  18. package/dist/core/chunk-uploader.d.ts +52 -0
  19. package/dist/core/chunk-uploader.d.ts.map +1 -0
  20. package/dist/core/chunk-uploader.js +180 -0
  21. package/dist/core/chunk-uploader.js.map +1 -0
  22. package/dist/core/pty-manager.d.ts +72 -0
  23. package/dist/core/pty-manager.d.ts.map +1 -0
  24. package/dist/core/pty-manager.js +205 -0
  25. package/dist/core/pty-manager.js.map +1 -0
  26. package/dist/core/recorder.d.ts +104 -0
  27. package/dist/core/recorder.d.ts.map +1 -0
  28. package/dist/core/recorder.js +330 -0
  29. package/dist/core/recorder.js.map +1 -0
  30. package/dist/core/stream-client.d.ts +62 -0
  31. package/dist/core/stream-client.d.ts.map +1 -0
  32. package/dist/core/stream-client.js +185 -0
  33. package/dist/core/stream-client.js.map +1 -0
  34. package/dist/index.d.ts +8 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +75 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/storage/auth-store.d.ts +37 -0
  39. package/dist/storage/auth-store.d.ts.map +1 -0
  40. package/dist/storage/auth-store.js +168 -0
  41. package/dist/storage/auth-store.js.map +1 -0
  42. package/dist/storage/config-store.d.ts +74 -0
  43. package/dist/storage/config-store.d.ts.map +1 -0
  44. package/dist/storage/config-store.js +164 -0
  45. package/dist/storage/config-store.js.map +1 -0
  46. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-uploader.js","sourceRoot":"","sources":["../../src/core/chunk-uploader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * PTY Manager
3
+ *
4
+ * Manages pseudo-terminal spawning and I/O capture
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export interface PTYManagerOptions {
8
+ command?: string;
9
+ shell?: string;
10
+ cols?: number;
11
+ rows?: number;
12
+ cwd?: string;
13
+ env?: {
14
+ [key: string]: string;
15
+ };
16
+ }
17
+ export interface PTYData {
18
+ type: 'OUTPUT' | 'INPUT';
19
+ data: Buffer;
20
+ streamId?: number;
21
+ }
22
+ export interface PTYResize {
23
+ cols: number;
24
+ rows: number;
25
+ }
26
+ export interface PTYCommand {
27
+ command: string;
28
+ timestamp: number;
29
+ }
30
+ export declare class PTYManager extends EventEmitter {
31
+ private ptyProcess;
32
+ private commandBuffer;
33
+ private promptPatterns;
34
+ private isRunning;
35
+ constructor(promptPatterns?: string[]);
36
+ /**
37
+ * Spawn a new PTY
38
+ */
39
+ spawn(options?: PTYManagerOptions): void;
40
+ /**
41
+ * Handle data from PTY
42
+ */
43
+ private handleData;
44
+ /**
45
+ * Detect command boundaries using prompt patterns
46
+ */
47
+ private detectCommand;
48
+ /**
49
+ * Write data to PTY (user input)
50
+ */
51
+ write(data: string): void;
52
+ /**
53
+ * Resize PTY
54
+ */
55
+ resize(cols: number, rows: number): void;
56
+ /**
57
+ * Kill PTY process
58
+ */
59
+ kill(): void;
60
+ /**
61
+ * Check if PTY is running
62
+ */
63
+ isActive(): boolean;
64
+ /**
65
+ * Get current terminal size
66
+ */
67
+ getSize(): {
68
+ cols: number;
69
+ rows: number;
70
+ };
71
+ }
72
+ //# sourceMappingURL=pty-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../../src/core/pty-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,cAAc,CAAW;IACjC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,cAAc,CAAC,EAAE,MAAM,EAAE;IAWrC;;OAEG;IACH,KAAK,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;IA8D5C;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxC;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAM1C"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * PTY Manager
4
+ *
5
+ * Manages pseudo-terminal spawning and I/O capture
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.PTYManager = void 0;
42
+ const pty = __importStar(require("node-pty"));
43
+ const events_1 = require("events");
44
+ class PTYManager extends events_1.EventEmitter {
45
+ constructor(promptPatterns) {
46
+ super();
47
+ this.ptyProcess = null;
48
+ this.commandBuffer = '';
49
+ this.isRunning = false;
50
+ // Default prompt patterns
51
+ this.promptPatterns = (promptPatterns || [
52
+ '\\$\\s$', // $
53
+ '#\\s$', // #
54
+ '[\\w@\\-]+:[^\\$#]*[\\$#]\\s$', // user@host:path$
55
+ ]).map(pattern => new RegExp(pattern));
56
+ }
57
+ /**
58
+ * Spawn a new PTY
59
+ */
60
+ spawn(options = {}) {
61
+ const shell = options.shell || process.env.SHELL || '/bin/bash';
62
+ const cols = options.cols || process.stdout.columns || 80;
63
+ const rows = options.rows || process.stdout.rows || 24;
64
+ const cwd = options.cwd || process.cwd();
65
+ const env = options.env || process.env;
66
+ // Spawn PTY
67
+ const args = options.command ? ['-c', options.command] : [];
68
+ this.ptyProcess = pty.spawn(shell, args, {
69
+ name: 'xterm-256color',
70
+ cols,
71
+ rows,
72
+ cwd,
73
+ env: env,
74
+ });
75
+ this.isRunning = true;
76
+ // Handle data (output from PTY)
77
+ this.ptyProcess.onData((data) => {
78
+ this.handleData(data);
79
+ });
80
+ // Handle exit
81
+ this.ptyProcess.onExit(({ exitCode, signal }) => {
82
+ this.isRunning = false;
83
+ this.emit('exit', { exitCode, signal });
84
+ });
85
+ // Handle stdin from user
86
+ process.stdin.on('data', (data) => {
87
+ if (this.ptyProcess && this.isRunning) {
88
+ this.ptyProcess.write(data.toString());
89
+ // Emit input event
90
+ this.emit('input', {
91
+ type: 'INPUT',
92
+ data,
93
+ });
94
+ }
95
+ });
96
+ // Handle terminal resize
97
+ process.stdout.on('resize', () => {
98
+ if (this.ptyProcess && this.isRunning) {
99
+ const newCols = process.stdout.columns || 80;
100
+ const newRows = process.stdout.rows || 24;
101
+ this.resize(newCols, newRows);
102
+ }
103
+ });
104
+ // Enable raw mode for stdin
105
+ if (process.stdin.setRawMode) {
106
+ process.stdin.setRawMode(true);
107
+ }
108
+ process.stdin.resume();
109
+ this.emit('spawn', { cols, rows });
110
+ }
111
+ /**
112
+ * Handle data from PTY
113
+ */
114
+ handleData(data) {
115
+ // Write to stdout (mirror to user)
116
+ process.stdout.write(data);
117
+ // Emit output event
118
+ this.emit('output', {
119
+ type: 'OUTPUT',
120
+ data: Buffer.from(data),
121
+ streamId: 0, // stdout
122
+ });
123
+ // Try to detect commands
124
+ this.detectCommand(data);
125
+ }
126
+ /**
127
+ * Detect command boundaries using prompt patterns
128
+ */
129
+ detectCommand(data) {
130
+ this.commandBuffer += data;
131
+ // Keep buffer reasonable size (last 1000 chars)
132
+ if (this.commandBuffer.length > 1000) {
133
+ this.commandBuffer = this.commandBuffer.slice(-1000);
134
+ }
135
+ // Check for prompt patterns
136
+ for (const pattern of this.promptPatterns) {
137
+ if (pattern.test(this.commandBuffer)) {
138
+ // Extract potential command
139
+ const lines = this.commandBuffer.split('\n');
140
+ // The command is usually the line before the prompt
141
+ if (lines.length >= 2) {
142
+ const commandLine = lines[lines.length - 2]?.trim();
143
+ if (commandLine && commandLine.length > 0 && !pattern.test(commandLine)) {
144
+ this.emit('command', {
145
+ command: commandLine,
146
+ timestamp: Date.now(),
147
+ });
148
+ }
149
+ }
150
+ // Reset buffer after detecting prompt
151
+ this.commandBuffer = '';
152
+ break;
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Write data to PTY (user input)
158
+ */
159
+ write(data) {
160
+ if (this.ptyProcess && this.isRunning) {
161
+ this.ptyProcess.write(data);
162
+ }
163
+ }
164
+ /**
165
+ * Resize PTY
166
+ */
167
+ resize(cols, rows) {
168
+ if (this.ptyProcess && this.isRunning) {
169
+ this.ptyProcess.resize(cols, rows);
170
+ this.emit('resize', { cols, rows });
171
+ }
172
+ }
173
+ /**
174
+ * Kill PTY process
175
+ */
176
+ kill() {
177
+ if (this.ptyProcess && this.isRunning) {
178
+ this.isRunning = false;
179
+ // Restore terminal
180
+ if (process.stdin.setRawMode) {
181
+ process.stdin.setRawMode(false);
182
+ }
183
+ process.stdin.pause();
184
+ this.ptyProcess.kill();
185
+ this.ptyProcess = null;
186
+ }
187
+ }
188
+ /**
189
+ * Check if PTY is running
190
+ */
191
+ isActive() {
192
+ return this.isRunning;
193
+ }
194
+ /**
195
+ * Get current terminal size
196
+ */
197
+ getSize() {
198
+ return {
199
+ cols: process.stdout.columns || 80,
200
+ rows: process.stdout.rows || 24,
201
+ };
202
+ }
203
+ }
204
+ exports.PTYManager = PTYManager;
205
+ //# sourceMappingURL=pty-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../../src/core/pty-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Recorder
3
+ *
4
+ * Main orchestrator that coordinates PTY, encoder, and uploader
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { PTYManagerOptions } from './pty-manager';
8
+ import { APIClient } from '../api/client';
9
+ export interface RecorderOptions {
10
+ sessionId: string;
11
+ userId: string;
12
+ apiClient: APIClient;
13
+ terminalSize: {
14
+ cols: number;
15
+ rows: number;
16
+ };
17
+ chunkDuration?: number;
18
+ compression?: boolean;
19
+ streaming?: {
20
+ enabled: boolean;
21
+ wsUrl: string;
22
+ streamToken: string;
23
+ };
24
+ }
25
+ export interface RecordingStats {
26
+ duration: number;
27
+ chunksUploaded: number;
28
+ framesRecorded: number;
29
+ eventsRecorded: number;
30
+ bytesEncoded: number;
31
+ }
32
+ export declare class Recorder extends EventEmitter {
33
+ private sessionId;
34
+ private userId;
35
+ private apiClient;
36
+ private encoder;
37
+ private ptyManager;
38
+ private uploader;
39
+ private streamClient;
40
+ private sessionStartTime;
41
+ private chunkFlushInterval;
42
+ private chunkDuration;
43
+ private isRecording;
44
+ private isPaused;
45
+ private stats;
46
+ constructor(options: RecorderOptions);
47
+ /**
48
+ * Start recording
49
+ */
50
+ start(ptyOptions?: PTYManagerOptions): Promise<void>;
51
+ /**
52
+ * Handle PTY output
53
+ */
54
+ private handlePtyOutput;
55
+ /**
56
+ * Handle PTY input
57
+ */
58
+ private handlePtyInput;
59
+ /**
60
+ * Handle PTY resize
61
+ */
62
+ private handlePtyResize;
63
+ /**
64
+ * Handle detected command
65
+ */
66
+ private handlePtyCommand;
67
+ /**
68
+ * Handle PTY exit
69
+ */
70
+ private handlePtyExit;
71
+ /**
72
+ * Flush current chunk and upload
73
+ */
74
+ private flushChunk;
75
+ /**
76
+ * Pause recording
77
+ */
78
+ pause(): void;
79
+ /**
80
+ * Resume recording
81
+ */
82
+ resume(): void;
83
+ /**
84
+ * Stop recording
85
+ */
86
+ stop(): Promise<void>;
87
+ /**
88
+ * Get recording stats
89
+ */
90
+ getStats(): RecordingStats;
91
+ /**
92
+ * Check if recording
93
+ */
94
+ isActive(): boolean;
95
+ /**
96
+ * Check if paused
97
+ */
98
+ isPausedState(): boolean;
99
+ /**
100
+ * Get session URL
101
+ */
102
+ getSessionUrl(): string;
103
+ }
104
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/core/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAc,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,QAAS,SAAQ,YAAY;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,KAAK,CAMX;gBAEU,OAAO,EAAE,eAAe;IAkDpC;;OAEG;IACG,KAAK,CAAC,UAAU,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D9D;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;YACW,aAAa;IAO3B;;OAEG;YACW,UAAU;IAsBxB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3B;;OAEG;IACH,QAAQ,IAAI,cAAc;IAO1B;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}