@nonstrict/recordkit 0.17.0 → 0.18.1

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.
package/bin/README.md CHANGED
@@ -1 +1 @@
1
- # recordkit-rpc 0.17.0
1
+ # recordkit-rpc 0.18.1
package/bin/recordkit-rpc CHANGED
Binary file
@@ -59,6 +59,10 @@ export declare class RecordKit {
59
59
  category: string;
60
60
  logLevel?: LogLevel;
61
61
  }): Promise<void>;
62
+ /**
63
+ * @group Discovery
64
+ */
65
+ getDisplays(): Promise<Display[]>;
62
66
  /**
63
67
  * @group Discovery
64
68
  */
@@ -157,6 +161,15 @@ export interface Microphone {
157
161
  manufacturer: string;
158
162
  availability: 'available' | 'lidClosed' | 'unknownSuspended' | 'notConnected';
159
163
  }
164
+ /**
165
+ * @group Discovery
166
+ */
167
+ export interface Display {
168
+ id: number;
169
+ localizedName?: string;
170
+ frame: Bounds;
171
+ isMain: boolean;
172
+ }
160
173
  /**
161
174
  * @group Discovery
162
175
  */
package/out/RecordKit.js CHANGED
@@ -63,6 +63,12 @@ export class RecordKit {
63
63
  async setCategoryLogLevel(params) {
64
64
  await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params });
65
65
  }
66
+ /**
67
+ * @group Discovery
68
+ */
69
+ async getDisplays() {
70
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getDisplays' });
71
+ }
66
72
  /**
67
73
  * @group Discovery
68
74
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RecordKit.js","sourceRoot":"","sources":["../src/RecordKit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,SAAS;IACZ,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;IAEzC,cAAc;IACd,gBAAgB,CAAC;IAEjB;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,IAiBhB;QACC,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACtC,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/B,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,4DAA4D,EAAE,uCAAuC,CAAC,CAAA;gBAC5I,OAAO,CAAC,KAAK,CAAC,uEAAuE,aAAa,EAAE,CAAC,CAAA;YACvG,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAEtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;YAC3E,MAAM,EAAE,sBAAsB;YAC9B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAElH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,QAAkB;QAClC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IACxG,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAiD;QACzE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAa,CAAA;IACtG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAa,CAAA;IACtG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAiB,CAAA;IAC9G,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAkB,CAAA;IAChH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,4BAA4B;QAChC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAwB,CAAA;IAC9I,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gCAAgC;QACpC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAwB,CAAA;IAClJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB;QAC5B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAY,CAAA;IAC9H,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAY,CAAA;IACzH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAY,CAAA;IAC7H,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,4BAA4B;QAChC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAS,CAAA;IAC/H,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAMC;QACD,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,cAAc;AACd,MAAM,CAAC,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"RecordKit.js","sourceRoot":"","sources":["../src/RecordKit.ts"],"names":[],"mappings":"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"}
package/out/Recorder.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  /// <reference types="node" resolution-mode="require"/>
3
3
  import { NSRPC } from "./NonstrictRPC.js";
4
4
  import { EventEmitter } from "stream";
5
- import { AppleDevice, Camera, Microphone, Window } from "./RecordKit.js";
5
+ import { AppleDevice, Camera, Display, Microphone, Window } from "./RecordKit.js";
6
6
  /**
7
7
  * @group Recording
8
8
  */
@@ -27,7 +27,7 @@ export declare class Recorder extends EventEmitter {
27
27
  /**
28
28
  * @group Recording
29
29
  */
30
- export type RecorderSchemaItem = WebcamSchema | WindowBasedCropSchema | AppleDeviceStaticOrientationSchema;
30
+ export type RecorderSchemaItem = WebcamSchema | DisplaySchema | WindowBasedCropSchema | AppleDeviceStaticOrientationSchema;
31
31
  /**
32
32
  * @group Recording Schemas
33
33
  */
@@ -40,14 +40,47 @@ export interface WebcamSchema {
40
40
  /**
41
41
  * @group Recording Schemas
42
42
  */
43
- export interface WindowBasedCropSchema {
43
+ export type DisplaySchema = {
44
+ type: 'display';
45
+ display: Display | number;
46
+ shows_cursor?: boolean;
47
+ mouse_events?: boolean;
48
+ keyboard_events?: boolean;
49
+ include_audio?: boolean;
50
+ output?: 'singleFile';
51
+ filename?: string;
52
+ } | {
53
+ type: 'display';
54
+ display: Display | number;
55
+ shows_cursor?: boolean;
56
+ mouse_events?: boolean;
57
+ keyboard_events?: boolean;
58
+ include_audio?: boolean;
59
+ output: 'segmented';
60
+ filenamePrefix?: string;
61
+ segmentCallback?: (url: string) => void;
62
+ };
63
+ /**
64
+ * @group Recording Schemas
65
+ */
66
+ export type WindowBasedCropSchema = {
44
67
  type: 'windowBasedCrop';
68
+ window: Window | number;
69
+ shows_cursor?: boolean;
70
+ mouse_events?: boolean;
71
+ keyboard_events?: boolean;
72
+ output?: 'singleFile';
45
73
  filename?: string;
74
+ } | {
75
+ type: 'windowBasedCrop';
46
76
  window: Window | number;
47
77
  shows_cursor?: boolean;
48
78
  mouse_events?: boolean;
49
79
  keyboard_events?: boolean;
50
- }
80
+ output: 'segmented';
81
+ filenamePrefix?: string;
82
+ segmentCallback?: (url: string) => void;
83
+ };
51
84
  /**
52
85
  * @group Recording Schemas
53
86
  */
package/out/Recorder.js CHANGED
@@ -19,10 +19,31 @@ export class Recorder extends EventEmitter {
19
19
  item.microphone = item.microphone.id;
20
20
  }
21
21
  }
22
+ if (item.type == 'display') {
23
+ if (typeof item.display != 'number') {
24
+ item.display = item.display.id;
25
+ }
26
+ if (item.output == 'segmented' && item.segmentCallback) {
27
+ const segmentHandler = item.segmentCallback;
28
+ item.segmentCallback = rpc.registerClosure({
29
+ handler: (params) => { segmentHandler(params.path); },
30
+ prefix: 'Display.onSegment',
31
+ lifecycle: object
32
+ });
33
+ }
34
+ }
22
35
  if (item.type == 'windowBasedCrop') {
23
36
  if (typeof item.window != 'number') {
24
37
  item.window = item.window.id;
25
38
  }
39
+ if (item.output == 'segmented' && item.segmentCallback) {
40
+ const segmentHandler = item.segmentCallback;
41
+ item.segmentCallback = rpc.registerClosure({
42
+ handler: (params) => { segmentHandler(params.path); },
43
+ prefix: 'Window.onSegment',
44
+ lifecycle: object
45
+ });
46
+ }
26
47
  }
27
48
  if (item.type == 'appleDeviceStaticOrientation') {
28
49
  if (typeof item.device != 'string') {
@@ -1 +1 @@
1
- {"version":3,"file":"Recorder.js","sourceRoot":"","sources":["../src/Recorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Recorder.js","sourceRoot":"","sources":["../src/Recorder.ts"],"names":[],"mappings":"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"}
package/out/index.cjs CHANGED
@@ -263,10 +263,31 @@ class Recorder extends stream.EventEmitter {
263
263
  item.microphone = item.microphone.id;
264
264
  }
265
265
  }
266
+ if (item.type == 'display') {
267
+ if (typeof item.display != 'number') {
268
+ item.display = item.display.id;
269
+ }
270
+ if (item.output == 'segmented' && item.segmentCallback) {
271
+ const segmentHandler = item.segmentCallback;
272
+ item.segmentCallback = rpc.registerClosure({
273
+ handler: (params) => { segmentHandler(params.path); },
274
+ prefix: 'Display.onSegment',
275
+ lifecycle: object
276
+ });
277
+ }
278
+ }
266
279
  if (item.type == 'windowBasedCrop') {
267
280
  if (typeof item.window != 'number') {
268
281
  item.window = item.window.id;
269
282
  }
283
+ if (item.output == 'segmented' && item.segmentCallback) {
284
+ const segmentHandler = item.segmentCallback;
285
+ item.segmentCallback = rpc.registerClosure({
286
+ handler: (params) => { segmentHandler(params.path); },
287
+ prefix: 'Window.onSegment',
288
+ lifecycle: object
289
+ });
290
+ }
270
291
  }
271
292
  if (item.type == 'appleDeviceStaticOrientation') {
272
293
  if (typeof item.device != 'string') {
@@ -370,6 +391,12 @@ class RecordKit {
370
391
  async setCategoryLogLevel(params) {
371
392
  await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params });
372
393
  }
394
+ /**
395
+ * @group Discovery
396
+ */
397
+ async getDisplays() {
398
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getDisplays' });
399
+ }
373
400
  /**
374
401
  * @group Discovery
375
402
  */
package/out/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["finalizationRegistry.js","NonstrictRPC.js","IpcRecordKit.js","Recorder.js","RecordKit.js"],"sourcesContent":["export const finalizationRegistry = new FinalizationRegistry(async (destructor) => { await destructor(); });\n//# sourceMappingURL=finalizationRegistry.js.map","import { randomUUID } from \"crypto\";\nimport { finalizationRegistry } from \"./finalizationRegistry.js\";\nexport class NSRPC {\n logMessages = false;\n send;\n responseHandlers = new Map();\n closureTargets = new Map();\n constructor(send) {\n this.send = send;\n }\n receive(data) {\n // TODO: For now we just assume the message is a valid NSRPC message, but we should:\n // - Check if the nsrpc property is set to a number in the range of 1..<2\n // - Validate the message against the defined interfaces above\n let message;\n try {\n if (this.logMessages) {\n console.log(\"RecordKit: [RPC] <\", data.trimEnd());\n }\n message = JSON.parse(data);\n }\n catch (error) {\n if (this.logMessages) {\n console.error(\"RecordKit: [RPC] !! Above message is invalid JSON, will be ignored.\");\n }\n return;\n }\n if (\"status\" in message) {\n // This is a response, dispatch it so it can be handled\n const responseHandler = this.responseHandlers.get(message.id);\n this.responseHandlers.delete(message.id);\n if (responseHandler === undefined) {\n console.error(\"RecordKit: [RPC] !! Got a response for an unknown request.\", message.id);\n return;\n }\n if (\"error\" in message) {\n responseHandler.reject(message.error);\n }\n else {\n responseHandler.resolve(message.result);\n }\n }\n else {\n // This is a request\n const responseBody = this.handleRequest(message);\n if (responseBody !== undefined) {\n this.sendResponse(message.id, responseBody);\n }\n }\n }\n /* Sending helpers */\n sendMessage(message) {\n const stringMessage = JSON.stringify(message);\n if (this.logMessages) {\n console.log(\"RecordKit: [RPC] >\", stringMessage);\n }\n this.send(stringMessage);\n }\n sendResponse(id, response) {\n if (id === undefined) {\n return;\n }\n this.sendMessage({ ...response, nsrpc: 1, id });\n }\n async sendRequest(request) {\n const id = \"req_\" + randomUUID();\n const response = new Promise((resolve, reject) => {\n this.responseHandlers.set(id, { resolve, reject });\n });\n this.sendMessage({ ...request, nsrpc: 1, id });\n return response;\n }\n /* Request handling */\n handleRequest(request) {\n switch (request.procedure) {\n case \"init\":\n return {\n status: 501,\n error: {\n debugDescription: \"Init procedure not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n case \"perform\":\n if (\"action\" in request) {\n return {\n status: 501,\n error: {\n debugDescription: \"Perform procedure for (static) methods not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n }\n else {\n return this.handleClosureRequest(request);\n }\n case \"release\":\n return {\n status: 501,\n error: {\n debugDescription: \"Release procedure not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n }\n }\n handleClosureRequest(request) {\n const handler = this.closureTargets.get(request.target);\n if (handler === undefined) {\n return {\n status: 404,\n error: {\n debugDescription: `Perform target '${request.target}' not found.`,\n userMessage: \"Failed to communicate with external process. (Target not found)\",\n },\n };\n }\n try {\n const rawresult = handler(request.params ?? {});\n const result = rawresult === undefined ? undefined : rawresult;\n return {\n status: 200,\n result,\n };\n }\n catch (error) {\n return {\n status: 202,\n // TODO: Would be good to have an error type that we can throw that fills these fields more specifically. (But for now it doesn't matter since this is just communicated back the the CLI and not to the user.)\n error: {\n debugDescription: `${error}`,\n userMessage: \"Handler failed to perform request.\",\n underlyingError: error,\n },\n };\n }\n }\n /* Perform remote procedures */\n async initialize(args) {\n const target = args.target;\n finalizationRegistry.register(args.lifecycle, async () => {\n await this.release(target);\n });\n await this.sendRequest({\n target: args.target,\n type: args.type,\n params: args.params,\n procedure: \"init\",\n });\n }\n async perform(body) {\n return await this.sendRequest({\n ...body,\n procedure: \"perform\",\n });\n }\n async release(target) {\n await this.sendRequest({\n procedure: \"release\",\n target,\n });\n }\n async manualRelease(target) {\n await this.sendRequest({\n procedure: \"manual-release\",\n target,\n });\n }\n /* Register locally available targets/actions */\n registerClosure(options) {\n const target = `target_${options.prefix}_${randomUUID()}`;\n this.closureTargets.set(target, options.handler);\n finalizationRegistry.register(options.lifecycle, () => {\n this.closureTargets.delete(target);\n });\n return target;\n }\n}\n//# sourceMappingURL=NonstrictRPC.js.map","import { spawn } from 'node:child_process';\nimport * as readline from 'readline';\nimport { NSRPC } from \"./NonstrictRPC.js\";\nexport class IpcRecordKit {\n childProcess;\n nsrpc;\n constructor() {\n this.nsrpc = new NSRPC((message) => this.write(message));\n }\n async initialize(recordKitRpcPath, logMessages = false) {\n if (this.childProcess !== undefined) {\n throw new Error('RecordKit: [RPC] Already initialized.');\n }\n this.nsrpc.logMessages = logMessages;\n this.childProcess = await new Promise((resolve, reject) => {\n const childProcess = spawn(recordKitRpcPath, { stdio: ['pipe', 'pipe', logMessages ? 'pipe' : 'ignore'] });\n childProcess.on('close', (code, signal) => { console.error(`RecordKit: [RPC] Closed with code ${code} and signal ${signal}`); });\n childProcess.on('error', (error) => { reject(error); });\n childProcess.on('exit', (code, signal) => { console.error(`RecordKit: [RPC] Exited with code ${code} and signal ${signal}`); });\n childProcess.on('spawn', () => { resolve(childProcess); });\n });\n const { stdout, stderr } = this.childProcess;\n if (!stdout) {\n throw new Error('RecordKit: [RPC] !! No stdout stream on child process.');\n }\n readline.createInterface({ input: stdout }).on('line', (line) => {\n this.nsrpc.receive(line);\n });\n if (stderr) {\n readline.createInterface({ input: stderr }).on('line', (line) => {\n console.log(`RecordKit: [RPC] Lognoise on stderr: ${line}`);\n });\n }\n }\n write(message) {\n const stdin = this.childProcess?.stdin;\n if (!stdin) {\n throw new Error('RecordKit: [RPC] !! Missing stdin stream.');\n }\n stdin.write(message + \"\\n\");\n }\n}\n//# sourceMappingURL=IpcRecordKit.js.map","import { randomUUID } from \"crypto\";\nimport { EventEmitter } from \"stream\";\n/**\n * @group Recording\n */\nexport class Recorder extends EventEmitter {\n rpc;\n target;\n /** @ignore */\n static async newInstance(rpc, schema) {\n const target = 'Recorder_' + randomUUID();\n const object = new Recorder(rpc, target);\n schema.items.forEach(item => {\n if (item.type == 'webcam') {\n if (typeof item.camera != 'string') {\n item.camera = item.camera.id;\n }\n if (typeof item.microphone != 'string') {\n item.microphone = item.microphone.id;\n }\n }\n if (item.type == 'windowBasedCrop') {\n if (typeof item.window != 'number') {\n item.window = item.window.id;\n }\n }\n if (item.type == 'appleDeviceStaticOrientation') {\n if (typeof item.device != 'string') {\n item.device = item.device.id;\n }\n }\n });\n const weakRefObject = new WeakRef(object);\n const onAbortInstance = rpc.registerClosure({\n handler: (params) => { weakRefObject.deref()?.emit('abort', params.reason); },\n prefix: 'Recorder.onAbort',\n lifecycle: object\n });\n await rpc.initialize({\n target,\n type: 'Recorder',\n params: { schema, onAbortInstance },\n lifecycle: object\n });\n return object;\n }\n /** @ignore */\n constructor(rpc, target) {\n super();\n this.rpc = rpc;\n this.target = target;\n }\n async prepare() {\n await this.rpc.perform({ target: this.target, action: 'prepare' });\n }\n async start() {\n await this.rpc.perform({ target: this.target, action: 'start' });\n }\n async stop() {\n return await this.rpc.perform({ target: this.target, action: 'stop' });\n }\n async cancel() {\n await this.rpc.manualRelease(this.target);\n }\n}\n//# sourceMappingURL=Recorder.js.map","import { IpcRecordKit } from \"./IpcRecordKit.js\";\nimport { Recorder } from \"./Recorder.js\";\nimport { existsSync } from \"node:fs\";\n/**\n * Entry point for the RecordKit SDK, an instance is available as `recordkit` that can be imported from the module. Do not instantiate this class directly.\n *\n * @groupDescription Discovery\n * Discover the windows and devices that are available to record.\n *\n * @groupDescription Permissions\n * Check and request the apps permission to access the recording devices.\n *\n * @groupDescription Logging\n * Log what's going on to the console for easy debugging and troubleshooting.\n */\nexport class RecordKit {\n ipcRecordKit = new IpcRecordKit();\n /** @ignore */\n constructor() { }\n /**\n * Initialize the RecordKit SDK.\n *\n * ⚠️ Must be called before calling any other RecordKit method.\n *\n * @param args\n */\n async initialize(args) {\n let rpcBinaryPath = args.rpcBinaryPath;\n if (args.fallbackToNodeModules ?? true) {\n if (!existsSync(rpcBinaryPath)) {\n rpcBinaryPath = rpcBinaryPath.replace('node_modules/electron/dist/Electron.app/Contents/Resources', 'node_modules/@nonstrict/recordkit/bin');\n console.error(`RecordKit: [RPC] !! Falling back to RPC binary from node_modules at ${rpcBinaryPath}`);\n }\n }\n await this.ipcRecordKit.initialize(rpcBinaryPath, args.logRpcMessages);\n const logHandlerInstance = this.ipcRecordKit.nsrpc.registerClosure({\n handler: (params) => { console.log('RecordKit:', params.formattedMessage); },\n prefix: 'RecordKit.logHandler',\n lifecycle: this\n });\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogHandler', params: { logHandlerInstance } });\n if (args.logLevel) {\n await this.setLogLevel(args.logLevel);\n }\n }\n /**\n * Set the global log level. Defaults to `debug`.\n *\n * Messages with a lower level than this will be ignored and not passed to any log handlers.\n *\n * @group Logging\n */\n async setLogLevel(logLevel) {\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params: { logLevel } });\n }\n /**\n * Overrides the global log level for a specific category. Defaults to the global log level.\n *\n * Messages in the given category with a lower level than this will be ignored and not passed to any log handlers.\n *\n * @group Logging\n */\n async setCategoryLogLevel(params) {\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params });\n }\n /**\n * @group Discovery\n */\n async getWindows() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getWindows' });\n }\n /**\n * @group Discovery\n */\n async getCameras() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getCameras' });\n }\n /**\n * @group Discovery\n */\n async getMicrophones() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getMicrophones' });\n }\n /**\n * @group Discovery\n */\n async getAppleDevices() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getAppleDevices' });\n }\n /**\n * @group Permissions\n */\n async getCameraAuthorizationStatus() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getCameraAuthorizationStatus' });\n }\n /**\n * @group Permissions\n */\n async getMicrophoneAuthorizationStatus() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getMicrophoneAuthorizationStatus' });\n }\n /**\n * @group Permissions\n */\n async getScreenRecordingAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getScreenRecordingAccess' });\n }\n /**\n * @group Permissions\n */\n async requestCameraAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestCameraAccess' });\n }\n /**\n * @group Permissions\n */\n async requestMicrophoneAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestMicrophoneAccess' });\n }\n /**\n * @group Permissions\n */\n async requestScreenRecordingAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestScreenRecordingAccess' });\n }\n async createRecorder(schema) {\n return Recorder.newInstance(this.ipcRecordKit.nsrpc, schema);\n }\n}\n/** @ignore */\nexport let recordkit = new RecordKit();\n//# sourceMappingURL=RecordKit.js.map"],"names":["randomUUID","spawn","readline","EventEmitter","existsSync"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["finalizationRegistry.js","NonstrictRPC.js","IpcRecordKit.js","Recorder.js","RecordKit.js"],"sourcesContent":["export const finalizationRegistry = new FinalizationRegistry(async (destructor) => { await destructor(); });\n//# sourceMappingURL=finalizationRegistry.js.map","import { randomUUID } from \"crypto\";\nimport { finalizationRegistry } from \"./finalizationRegistry.js\";\nexport class NSRPC {\n logMessages = false;\n send;\n responseHandlers = new Map();\n closureTargets = new Map();\n constructor(send) {\n this.send = send;\n }\n receive(data) {\n // TODO: For now we just assume the message is a valid NSRPC message, but we should:\n // - Check if the nsrpc property is set to a number in the range of 1..<2\n // - Validate the message against the defined interfaces above\n let message;\n try {\n if (this.logMessages) {\n console.log(\"RecordKit: [RPC] <\", data.trimEnd());\n }\n message = JSON.parse(data);\n }\n catch (error) {\n if (this.logMessages) {\n console.error(\"RecordKit: [RPC] !! Above message is invalid JSON, will be ignored.\");\n }\n return;\n }\n if (\"status\" in message) {\n // This is a response, dispatch it so it can be handled\n const responseHandler = this.responseHandlers.get(message.id);\n this.responseHandlers.delete(message.id);\n if (responseHandler === undefined) {\n console.error(\"RecordKit: [RPC] !! Got a response for an unknown request.\", message.id);\n return;\n }\n if (\"error\" in message) {\n responseHandler.reject(message.error);\n }\n else {\n responseHandler.resolve(message.result);\n }\n }\n else {\n // This is a request\n const responseBody = this.handleRequest(message);\n if (responseBody !== undefined) {\n this.sendResponse(message.id, responseBody);\n }\n }\n }\n /* Sending helpers */\n sendMessage(message) {\n const stringMessage = JSON.stringify(message);\n if (this.logMessages) {\n console.log(\"RecordKit: [RPC] >\", stringMessage);\n }\n this.send(stringMessage);\n }\n sendResponse(id, response) {\n if (id === undefined) {\n return;\n }\n this.sendMessage({ ...response, nsrpc: 1, id });\n }\n async sendRequest(request) {\n const id = \"req_\" + randomUUID();\n const response = new Promise((resolve, reject) => {\n this.responseHandlers.set(id, { resolve, reject });\n });\n this.sendMessage({ ...request, nsrpc: 1, id });\n return response;\n }\n /* Request handling */\n handleRequest(request) {\n switch (request.procedure) {\n case \"init\":\n return {\n status: 501,\n error: {\n debugDescription: \"Init procedure not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n case \"perform\":\n if (\"action\" in request) {\n return {\n status: 501,\n error: {\n debugDescription: \"Perform procedure for (static) methods not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n }\n else {\n return this.handleClosureRequest(request);\n }\n case \"release\":\n return {\n status: 501,\n error: {\n debugDescription: \"Release procedure not implemented.\",\n userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n },\n };\n }\n }\n handleClosureRequest(request) {\n const handler = this.closureTargets.get(request.target);\n if (handler === undefined) {\n return {\n status: 404,\n error: {\n debugDescription: `Perform target '${request.target}' not found.`,\n userMessage: \"Failed to communicate with external process. (Target not found)\",\n },\n };\n }\n try {\n const rawresult = handler(request.params ?? {});\n const result = rawresult === undefined ? undefined : rawresult;\n return {\n status: 200,\n result,\n };\n }\n catch (error) {\n return {\n status: 202,\n // TODO: Would be good to have an error type that we can throw that fills these fields more specifically. (But for now it doesn't matter since this is just communicated back the the CLI and not to the user.)\n error: {\n debugDescription: `${error}`,\n userMessage: \"Handler failed to perform request.\",\n underlyingError: error,\n },\n };\n }\n }\n /* Perform remote procedures */\n async initialize(args) {\n const target = args.target;\n finalizationRegistry.register(args.lifecycle, async () => {\n await this.release(target);\n });\n await this.sendRequest({\n target: args.target,\n type: args.type,\n params: args.params,\n procedure: \"init\",\n });\n }\n async perform(body) {\n return await this.sendRequest({\n ...body,\n procedure: \"perform\",\n });\n }\n async release(target) {\n await this.sendRequest({\n procedure: \"release\",\n target,\n });\n }\n async manualRelease(target) {\n await this.sendRequest({\n procedure: \"manual-release\",\n target,\n });\n }\n /* Register locally available targets/actions */\n registerClosure(options) {\n const target = `target_${options.prefix}_${randomUUID()}`;\n this.closureTargets.set(target, options.handler);\n finalizationRegistry.register(options.lifecycle, () => {\n this.closureTargets.delete(target);\n });\n return target;\n }\n}\n//# sourceMappingURL=NonstrictRPC.js.map","import { spawn } from 'node:child_process';\nimport * as readline from 'readline';\nimport { NSRPC } from \"./NonstrictRPC.js\";\nexport class IpcRecordKit {\n childProcess;\n nsrpc;\n constructor() {\n this.nsrpc = new NSRPC((message) => this.write(message));\n }\n async initialize(recordKitRpcPath, logMessages = false) {\n if (this.childProcess !== undefined) {\n throw new Error('RecordKit: [RPC] Already initialized.');\n }\n this.nsrpc.logMessages = logMessages;\n this.childProcess = await new Promise((resolve, reject) => {\n const childProcess = spawn(recordKitRpcPath, { stdio: ['pipe', 'pipe', logMessages ? 'pipe' : 'ignore'] });\n childProcess.on('close', (code, signal) => { console.error(`RecordKit: [RPC] Closed with code ${code} and signal ${signal}`); });\n childProcess.on('error', (error) => { reject(error); });\n childProcess.on('exit', (code, signal) => { console.error(`RecordKit: [RPC] Exited with code ${code} and signal ${signal}`); });\n childProcess.on('spawn', () => { resolve(childProcess); });\n });\n const { stdout, stderr } = this.childProcess;\n if (!stdout) {\n throw new Error('RecordKit: [RPC] !! No stdout stream on child process.');\n }\n readline.createInterface({ input: stdout }).on('line', (line) => {\n this.nsrpc.receive(line);\n });\n if (stderr) {\n readline.createInterface({ input: stderr }).on('line', (line) => {\n console.log(`RecordKit: [RPC] Lognoise on stderr: ${line}`);\n });\n }\n }\n write(message) {\n const stdin = this.childProcess?.stdin;\n if (!stdin) {\n throw new Error('RecordKit: [RPC] !! Missing stdin stream.');\n }\n stdin.write(message + \"\\n\");\n }\n}\n//# sourceMappingURL=IpcRecordKit.js.map","import { randomUUID } from \"crypto\";\nimport { EventEmitter } from \"stream\";\n/**\n * @group Recording\n */\nexport class Recorder extends EventEmitter {\n rpc;\n target;\n /** @ignore */\n static async newInstance(rpc, schema) {\n const target = 'Recorder_' + randomUUID();\n const object = new Recorder(rpc, target);\n schema.items.forEach(item => {\n if (item.type == 'webcam') {\n if (typeof item.camera != 'string') {\n item.camera = item.camera.id;\n }\n if (typeof item.microphone != 'string') {\n item.microphone = item.microphone.id;\n }\n }\n if (item.type == 'display') {\n if (typeof item.display != 'number') {\n item.display = item.display.id;\n }\n if (item.output == 'segmented' && item.segmentCallback) {\n const segmentHandler = item.segmentCallback;\n item.segmentCallback = rpc.registerClosure({\n handler: (params) => { segmentHandler(params.path); },\n prefix: 'Display.onSegment',\n lifecycle: object\n });\n }\n }\n if (item.type == 'windowBasedCrop') {\n if (typeof item.window != 'number') {\n item.window = item.window.id;\n }\n if (item.output == 'segmented' && item.segmentCallback) {\n const segmentHandler = item.segmentCallback;\n item.segmentCallback = rpc.registerClosure({\n handler: (params) => { segmentHandler(params.path); },\n prefix: 'Window.onSegment',\n lifecycle: object\n });\n }\n }\n if (item.type == 'appleDeviceStaticOrientation') {\n if (typeof item.device != 'string') {\n item.device = item.device.id;\n }\n }\n });\n const weakRefObject = new WeakRef(object);\n const onAbortInstance = rpc.registerClosure({\n handler: (params) => { weakRefObject.deref()?.emit('abort', params.reason); },\n prefix: 'Recorder.onAbort',\n lifecycle: object\n });\n await rpc.initialize({\n target,\n type: 'Recorder',\n params: { schema, onAbortInstance },\n lifecycle: object\n });\n return object;\n }\n /** @ignore */\n constructor(rpc, target) {\n super();\n this.rpc = rpc;\n this.target = target;\n }\n async prepare() {\n await this.rpc.perform({ target: this.target, action: 'prepare' });\n }\n async start() {\n await this.rpc.perform({ target: this.target, action: 'start' });\n }\n async stop() {\n return await this.rpc.perform({ target: this.target, action: 'stop' });\n }\n async cancel() {\n await this.rpc.manualRelease(this.target);\n }\n}\n//# sourceMappingURL=Recorder.js.map","import { IpcRecordKit } from \"./IpcRecordKit.js\";\nimport { Recorder } from \"./Recorder.js\";\nimport { existsSync } from \"node:fs\";\n/**\n * Entry point for the RecordKit SDK, an instance is available as `recordkit` that can be imported from the module. Do not instantiate this class directly.\n *\n * @groupDescription Discovery\n * Discover the windows and devices that are available to record.\n *\n * @groupDescription Permissions\n * Check and request the apps permission to access the recording devices.\n *\n * @groupDescription Logging\n * Log what's going on to the console for easy debugging and troubleshooting.\n */\nexport class RecordKit {\n ipcRecordKit = new IpcRecordKit();\n /** @ignore */\n constructor() { }\n /**\n * Initialize the RecordKit SDK.\n *\n * ⚠️ Must be called before calling any other RecordKit method.\n *\n * @param args\n */\n async initialize(args) {\n let rpcBinaryPath = args.rpcBinaryPath;\n if (args.fallbackToNodeModules ?? true) {\n if (!existsSync(rpcBinaryPath)) {\n rpcBinaryPath = rpcBinaryPath.replace('node_modules/electron/dist/Electron.app/Contents/Resources', 'node_modules/@nonstrict/recordkit/bin');\n console.error(`RecordKit: [RPC] !! Falling back to RPC binary from node_modules at ${rpcBinaryPath}`);\n }\n }\n await this.ipcRecordKit.initialize(rpcBinaryPath, args.logRpcMessages);\n const logHandlerInstance = this.ipcRecordKit.nsrpc.registerClosure({\n handler: (params) => { console.log('RecordKit:', params.formattedMessage); },\n prefix: 'RecordKit.logHandler',\n lifecycle: this\n });\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogHandler', params: { logHandlerInstance } });\n if (args.logLevel) {\n await this.setLogLevel(args.logLevel);\n }\n }\n /**\n * Set the global log level. Defaults to `debug`.\n *\n * Messages with a lower level than this will be ignored and not passed to any log handlers.\n *\n * @group Logging\n */\n async setLogLevel(logLevel) {\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params: { logLevel } });\n }\n /**\n * Overrides the global log level for a specific category. Defaults to the global log level.\n *\n * Messages in the given category with a lower level than this will be ignored and not passed to any log handlers.\n *\n * @group Logging\n */\n async setCategoryLogLevel(params) {\n await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params });\n }\n /**\n * @group Discovery\n */\n async getDisplays() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getDisplays' });\n }\n /**\n * @group Discovery\n */\n async getWindows() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getWindows' });\n }\n /**\n * @group Discovery\n */\n async getCameras() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getCameras' });\n }\n /**\n * @group Discovery\n */\n async getMicrophones() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getMicrophones' });\n }\n /**\n * @group Discovery\n */\n async getAppleDevices() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getAppleDevices' });\n }\n /**\n * @group Permissions\n */\n async getCameraAuthorizationStatus() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getCameraAuthorizationStatus' });\n }\n /**\n * @group Permissions\n */\n async getMicrophoneAuthorizationStatus() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getMicrophoneAuthorizationStatus' });\n }\n /**\n * @group Permissions\n */\n async getScreenRecordingAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getScreenRecordingAccess' });\n }\n /**\n * @group Permissions\n */\n async requestCameraAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestCameraAccess' });\n }\n /**\n * @group Permissions\n */\n async requestMicrophoneAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestMicrophoneAccess' });\n }\n /**\n * @group Permissions\n */\n async requestScreenRecordingAccess() {\n return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestScreenRecordingAccess' });\n }\n async createRecorder(schema) {\n return Recorder.newInstance(this.ipcRecordKit.nsrpc, schema);\n }\n}\n/** @ignore */\nexport let recordkit = new RecordKit();\n//# sourceMappingURL=RecordKit.js.map"],"names":["randomUUID","spawn","readline","EventEmitter","existsSync"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nonstrict/recordkit",
3
- "version": "0.17.0",
3
+ "version": "0.18.1",
4
4
  "description": "Powerful screen recording for your Electron app on macOS.",
5
5
  "homepage": "https://nonstrict.eu/recordkit",
6
6
  "repository": "nonstrict-hq/RecordKit.Electron",
package/src/RecordKit.ts CHANGED
@@ -89,6 +89,13 @@ export class RecordKit {
89
89
  await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params })
90
90
  }
91
91
 
92
+ /**
93
+ * @group Discovery
94
+ */
95
+ async getDisplays(): Promise<Display[]> {
96
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getDisplays' }) as Display[]
97
+ }
98
+
92
99
  /**
93
100
  * @group Discovery
94
101
  */
@@ -231,6 +238,16 @@ export interface Microphone {
231
238
  availability: 'available' | 'lidClosed' | 'unknownSuspended' | 'notConnected'
232
239
  }
233
240
 
241
+ /**
242
+ * @group Discovery
243
+ */
244
+ export interface Display {
245
+ id: number; // UInt32
246
+ localizedName?: string;
247
+ frame: Bounds
248
+ isMain: boolean
249
+ }
250
+
234
251
  /**
235
252
  * @group Discovery
236
253
  */
package/src/Recorder.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from "crypto";
2
2
  import { NSRPC } from "./NonstrictRPC.js";
3
3
  import { EventEmitter } from "stream";
4
- import { AppleDevice, Camera, Microphone, Window } from "./RecordKit.js";
4
+ import { AppleDevice, Camera, Display, Microphone, Window } from "./RecordKit.js";
5
5
 
6
6
  /**
7
7
  * @group Recording
@@ -30,10 +30,31 @@ export class Recorder extends EventEmitter {
30
30
  item.microphone = item.microphone.id
31
31
  }
32
32
  }
33
+ if (item.type == 'display') {
34
+ if (typeof item.display != 'number') {
35
+ item.display = item.display.id
36
+ }
37
+ if (item.output == 'segmented' && item.segmentCallback) {
38
+ const segmentHandler = item.segmentCallback;
39
+ (item as any).segmentCallback = rpc.registerClosure({
40
+ handler: (params) => { segmentHandler(params.path as string) },
41
+ prefix: 'Display.onSegment',
42
+ lifecycle: object
43
+ });
44
+ }
45
+ }
33
46
  if (item.type == 'windowBasedCrop') {
34
47
  if (typeof item.window != 'number') {
35
48
  item.window = item.window.id
36
49
  }
50
+ if (item.output == 'segmented' && item.segmentCallback) {
51
+ const segmentHandler = item.segmentCallback;
52
+ (item as any).segmentCallback = rpc.registerClosure({
53
+ handler: (params) => { segmentHandler(params.path as string) },
54
+ prefix: 'Window.onSegment',
55
+ lifecycle: object
56
+ });
57
+ }
37
58
  }
38
59
  if (item.type == 'appleDeviceStaticOrientation') {
39
60
  if (typeof item.device != 'string') {
@@ -88,6 +109,7 @@ export class Recorder extends EventEmitter {
88
109
  */
89
110
  export type RecorderSchemaItem =
90
111
  | WebcamSchema
112
+ | DisplaySchema
91
113
  | WindowBasedCropSchema
92
114
  | AppleDeviceStaticOrientationSchema
93
115
 
@@ -104,13 +126,47 @@ export interface WebcamSchema {
104
126
  /**
105
127
  * @group Recording Schemas
106
128
  */
107
- export interface WindowBasedCropSchema {
129
+ export type DisplaySchema = {
130
+ type: 'display'
131
+ display: Display | number // UInt32
132
+ shows_cursor?: boolean
133
+ mouse_events?: boolean
134
+ keyboard_events?: boolean
135
+ include_audio?: boolean
136
+ output?: 'singleFile'
137
+ filename?: string
138
+ } | {
139
+ type: 'display'
140
+ display: Display | number // UInt32
141
+ shows_cursor?: boolean
142
+ mouse_events?: boolean
143
+ keyboard_events?: boolean
144
+ include_audio?: boolean
145
+ output: 'segmented'
146
+ filenamePrefix?: string
147
+ segmentCallback?: (url: string) => void
148
+ }
149
+
150
+ /**
151
+ * @group Recording Schemas
152
+ */
153
+ export type WindowBasedCropSchema = {
108
154
  type: 'windowBasedCrop'
155
+ window: Window | number // UInt32
156
+ shows_cursor?: boolean
157
+ mouse_events?: boolean
158
+ keyboard_events?: boolean
159
+ output?: 'singleFile'
109
160
  filename?: string
161
+ } | {
162
+ type: 'windowBasedCrop'
110
163
  window: Window | number // UInt32
111
164
  shows_cursor?: boolean
112
165
  mouse_events?: boolean
113
166
  keyboard_events?: boolean
167
+ output: 'segmented'
168
+ filenamePrefix?: string
169
+ segmentCallback?: (url: string) => void
114
170
  }
115
171
 
116
172
  /**