electron-native-speech-preload 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.
@@ -0,0 +1,60 @@
1
+ /**
2
+ * electron-native-speech-preload
3
+ *
4
+ * Exposes speech recognition to the renderer through a secure contextBridge.
5
+ *
6
+ * Usage in your preload script:
7
+ *
8
+ * import { exposeElectronSpeech } from "electron-native-speech-preload"
9
+ * exposeElectronSpeech()
10
+ *
11
+ * Then in the renderer:
12
+ *
13
+ * const av = await window.electronSpeech.getSpeechAvailability()
14
+ * const result = await window.electronSpeech.transcribeFile({ filePath: "..." })
15
+ *
16
+ * const session = window.electronSpeech.createSpeechSession()
17
+ * session.on("result", r => console.log(r.text))
18
+ * await session.start({ locale: "en-US", interimResults: true })
19
+ */
20
+ import type { SpeechAvailability, FileTranscriptionOptions, FileTranscriptionResult, SpeechSessionStartOptions, LiveSpeechResult, SpeechSessionState, SpeechError } from "electron-native-speech";
21
+ export declare const IPC_CHANNELS: {
22
+ readonly GET_AVAILABILITY: "ens:getAvailability";
23
+ readonly TRANSCRIBE_FILE: "ens:transcribeFile";
24
+ readonly SESSION_START: "ens:session:start";
25
+ readonly SESSION_STOP: "ens:session:stop";
26
+ readonly SESSION_ABORT: "ens:session:abort";
27
+ readonly SESSION_DISPOSE: "ens:session:dispose";
28
+ readonly SESSION_EVENT: "ens:session:event";
29
+ };
30
+ type SessionEventType = "result" | "error" | "state";
31
+ type SessionListener<T extends SessionEventType> = T extends "result" ? (r: LiveSpeechResult) => void : T extends "error" ? (e: SpeechError) => void : T extends "state" ? (s: SpeechSessionState) => void : never;
32
+ declare class RendererSpeechSession {
33
+ private sessionId;
34
+ private listeners;
35
+ private ipcOff;
36
+ constructor(sessionId: string);
37
+ on<T extends SessionEventType>(event: T, listener: SessionListener<T>): () => void;
38
+ start(options?: SpeechSessionStartOptions): Promise<void>;
39
+ stop(): Promise<void>;
40
+ abort(): Promise<void>;
41
+ dispose(): Promise<void>;
42
+ private emit;
43
+ }
44
+ export interface ElectronSpeechAPI {
45
+ getSpeechAvailability(): Promise<SpeechAvailability>;
46
+ transcribeFile(options: FileTranscriptionOptions): Promise<FileTranscriptionResult>;
47
+ createSpeechSession(): RendererSpeechSession;
48
+ }
49
+ /**
50
+ * Call this in your Electron preload script to expose the speech API
51
+ * to the renderer under `window.electronSpeech`.
52
+ */
53
+ export declare function exposeElectronSpeech(key?: string): void;
54
+ declare global {
55
+ interface Window {
56
+ electronSpeech: ElectronSpeechAPI;
57
+ }
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,wBAAwB,CAAA;AAE/B,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAA;AAIV,KAAK,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AACpD,KAAK,eAAe,CAAC,CAAC,SAAS,gBAAgB,IAC7C,CAAC,SAAS,QAAQ,GAAG,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,GAChD,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAC5C,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,GACnD,KAAK,CAAA;AAET,cAAM,qBAAqB;IACzB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAuD;IACxE,OAAO,CAAC,MAAM,CAA4B;gBAE9B,SAAS,EAAE,MAAM;IAe7B,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAM5E,KAAK,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,IAAI;CAGb;AAID,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpD,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACnF,mBAAmB,IAAI,qBAAqB,CAAA;CAC7C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,SAAmB,GAAG,IAAI,CAmBjE;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,cAAc,EAAE,iBAAiB,CAAA;KAClC;CACF"}
package/dist/index.js ADDED
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * electron-native-speech-preload
4
+ *
5
+ * Exposes speech recognition to the renderer through a secure contextBridge.
6
+ *
7
+ * Usage in your preload script:
8
+ *
9
+ * import { exposeElectronSpeech } from "electron-native-speech-preload"
10
+ * exposeElectronSpeech()
11
+ *
12
+ * Then in the renderer:
13
+ *
14
+ * const av = await window.electronSpeech.getSpeechAvailability()
15
+ * const result = await window.electronSpeech.transcribeFile({ filePath: "..." })
16
+ *
17
+ * const session = window.electronSpeech.createSpeechSession()
18
+ * session.on("result", r => console.log(r.text))
19
+ * await session.start({ locale: "en-US", interimResults: true })
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.IPC_CHANNELS = void 0;
23
+ exports.exposeElectronSpeech = exposeElectronSpeech;
24
+ const electron_1 = require("electron");
25
+ exports.IPC_CHANNELS = {
26
+ GET_AVAILABILITY: "ens:getAvailability",
27
+ TRANSCRIBE_FILE: "ens:transcribeFile",
28
+ SESSION_START: "ens:session:start",
29
+ SESSION_STOP: "ens:session:stop",
30
+ SESSION_ABORT: "ens:session:abort",
31
+ SESSION_DISPOSE: "ens:session:dispose",
32
+ SESSION_EVENT: "ens:session:event",
33
+ };
34
+ class RendererSpeechSession {
35
+ constructor(sessionId) {
36
+ this.listeners = new Map();
37
+ this.ipcOff = null;
38
+ this.sessionId = sessionId;
39
+ const ipcListener = (_, event) => {
40
+ if (event.sessionId !== this.sessionId)
41
+ return;
42
+ this.emit(event.type, event.payload);
43
+ };
44
+ electron_1.ipcRenderer.on(exports.IPC_CHANNELS.SESSION_EVENT, ipcListener);
45
+ this.ipcOff = () => electron_1.ipcRenderer.off(exports.IPC_CHANNELS.SESSION_EVENT, ipcListener);
46
+ }
47
+ on(event, listener) {
48
+ if (!this.listeners.has(event))
49
+ this.listeners.set(event, new Set());
50
+ this.listeners.get(event).add(listener);
51
+ return () => this.listeners.get(event)?.delete(listener);
52
+ }
53
+ async start(options) {
54
+ await electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.SESSION_START, this.sessionId, options ?? {});
55
+ }
56
+ async stop() {
57
+ await electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.SESSION_STOP, this.sessionId);
58
+ }
59
+ async abort() {
60
+ await electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.SESSION_ABORT, this.sessionId);
61
+ }
62
+ async dispose() {
63
+ await electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.SESSION_DISPOSE, this.sessionId);
64
+ this.ipcOff?.();
65
+ this.ipcOff = null;
66
+ this.listeners.clear();
67
+ }
68
+ emit(event, payload) {
69
+ this.listeners.get(event)?.forEach((l) => l(payload));
70
+ }
71
+ }
72
+ /**
73
+ * Call this in your Electron preload script to expose the speech API
74
+ * to the renderer under `window.electronSpeech`.
75
+ */
76
+ function exposeElectronSpeech(key = "electronSpeech") {
77
+ let sessionCounter = 0;
78
+ const api = {
79
+ getSpeechAvailability() {
80
+ return electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.GET_AVAILABILITY);
81
+ },
82
+ transcribeFile(options) {
83
+ return electron_1.ipcRenderer.invoke(exports.IPC_CHANNELS.TRANSCRIBE_FILE, options);
84
+ },
85
+ createSpeechSession() {
86
+ const sessionId = `session-${Date.now()}-${++sessionCounter}`;
87
+ return new RendererSpeechSession(sessionId);
88
+ },
89
+ };
90
+ electron_1.contextBridge.exposeInMainWorld(key, api);
91
+ }
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * IPC handler registration for the Electron main process.
3
+ *
4
+ * Call `registerSpeechHandlers(ipcMain, webContents)` in your main process
5
+ * to wire up all speech recognition IPC channels.
6
+ *
7
+ * @example
8
+ * import { app, BrowserWindow, ipcMain } from "electron"
9
+ * import { registerSpeechHandlers } from "electron-native-speech-preload/main-handlers"
10
+ *
11
+ * app.whenReady().then(async () => {
12
+ * const win = new BrowserWindow({ webPreferences: { preload: "..." } })
13
+ * registerSpeechHandlers(ipcMain, win.webContents)
14
+ * })
15
+ */
16
+ import type { IpcMain, WebContents } from "electron";
17
+ export declare function registerSpeechHandlers(ipcMain: IpcMain, webContents: WebContents): () => void;
18
+ //# sourceMappingURL=main-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-handlers.d.ts","sourceRoot":"","sources":["../src/main-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AASpD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,IAAI,CAuD7F"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * IPC handler registration for the Electron main process.
4
+ *
5
+ * Call `registerSpeechHandlers(ipcMain, webContents)` in your main process
6
+ * to wire up all speech recognition IPC channels.
7
+ *
8
+ * @example
9
+ * import { app, BrowserWindow, ipcMain } from "electron"
10
+ * import { registerSpeechHandlers } from "electron-native-speech-preload/main-handlers"
11
+ *
12
+ * app.whenReady().then(async () => {
13
+ * const win = new BrowserWindow({ webPreferences: { preload: "..." } })
14
+ * registerSpeechHandlers(ipcMain, win.webContents)
15
+ * })
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.registerSpeechHandlers = registerSpeechHandlers;
19
+ const electron_native_speech_1 = require("electron-native-speech");
20
+ const index_1 = require("./index");
21
+ function registerSpeechHandlers(ipcMain, webContents) {
22
+ const sessions = new Map();
23
+ const forwardEvent = (sessionId, type, payload) => {
24
+ if (!webContents.isDestroyed()) {
25
+ webContents.send(index_1.IPC_CHANNELS.SESSION_EVENT, { sessionId, type, payload });
26
+ }
27
+ };
28
+ ipcMain.handle(index_1.IPC_CHANNELS.GET_AVAILABILITY, () => (0, electron_native_speech_1.getSpeechAvailability)());
29
+ ipcMain.handle(index_1.IPC_CHANNELS.TRANSCRIBE_FILE, (_e, options) => (0, electron_native_speech_1.transcribeFile)(options));
30
+ ipcMain.handle(index_1.IPC_CHANNELS.SESSION_START, async (_e, sessionId, options) => {
31
+ let session = sessions.get(sessionId);
32
+ if (!session) {
33
+ session = await (0, electron_native_speech_1.createSpeechSession)();
34
+ sessions.set(sessionId, session);
35
+ session.on("result", (result) => forwardEvent(sessionId, "result", result));
36
+ session.on("error", (error) => forwardEvent(sessionId, "error", error));
37
+ session.on("state", (state) => forwardEvent(sessionId, "state", state));
38
+ }
39
+ await session.start(options);
40
+ });
41
+ ipcMain.handle(index_1.IPC_CHANNELS.SESSION_STOP, async (_e, sessionId) => {
42
+ await sessions.get(sessionId)?.stop();
43
+ });
44
+ ipcMain.handle(index_1.IPC_CHANNELS.SESSION_ABORT, async (_e, sessionId) => {
45
+ await sessions.get(sessionId)?.abort();
46
+ });
47
+ ipcMain.handle(index_1.IPC_CHANNELS.SESSION_DISPOSE, async (_e, sessionId) => {
48
+ const session = sessions.get(sessionId);
49
+ if (session) {
50
+ await session.dispose();
51
+ sessions.delete(sessionId);
52
+ }
53
+ });
54
+ // Cleanup function — call on window close
55
+ return async () => {
56
+ for (const [, session] of sessions) {
57
+ await session.dispose().catch(() => { });
58
+ }
59
+ sessions.clear();
60
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.GET_AVAILABILITY);
61
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.TRANSCRIBE_FILE);
62
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.SESSION_START);
63
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.SESSION_STOP);
64
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.SESSION_ABORT);
65
+ ipcMain.removeHandler(index_1.IPC_CHANNELS.SESSION_DISPOSE);
66
+ };
67
+ }
68
+ //# sourceMappingURL=main-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-handlers.js","sourceRoot":"","sources":["../src/main-handlers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAWH,wDAuDC;AA/DD,mEAI+B;AAE/B,mCAAsC;AAEtC,SAAgB,sBAAsB,CAAC,OAAgB,EAAE,WAAwB;IAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAEjD,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAE,OAAgB,EAAE,EAAE;QACzE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,oBAAY,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAA,8CAAqB,GAAE,CAAC,CAAA;IAE5E,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,uCAAc,EAAC,OAAO,CAAC,CAAC,CAAA;IAEtF,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,SAAiB,EAAE,OAAO,EAAE,EAAE;QAClF,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,MAAM,IAAA,4CAAmB,GAAE,CAAA;YACrC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;YAC3E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;YACvE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,SAAiB,EAAE,EAAE;QACxE,MAAM,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,SAAiB,EAAE,EAAE;QACzE,MAAM,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,SAAiB,EAAE,EAAE;QAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,0CAA0C;IAC1C,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAA;QAChB,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,gBAAgB,CAAC,CAAA;QACpD,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,eAAe,CAAC,CAAA;QACnD,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,aAAa,CAAC,CAAA;QACjD,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,YAAY,CAAC,CAAA;QAChD,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,aAAa,CAAC,CAAA;QACjD,OAAO,CAAC,aAAa,CAAC,oBAAY,CAAC,eAAe,CAAC,CAAA;IACrD,CAAC,CAAA;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "electron-native-speech-preload",
3
+ "version": "0.1.0",
4
+ "description": "Electron preload bridge for electron-native-speech",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "require": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ },
12
+ "./main-handlers": {
13
+ "require": "./dist/main-handlers.js",
14
+ "types": "./dist/main-handlers.d.ts"
15
+ }
16
+ },
17
+ "typesVersions": {
18
+ "*": {
19
+ "main-handlers": ["dist/main-handlers.d.ts"]
20
+ }
21
+ },
22
+ "files": [
23
+ "dist/"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit",
28
+ "clean": "rm -rf dist"
29
+ },
30
+ "license": "MIT",
31
+ "devDependencies": {
32
+ "typescript": "^5.4.0",
33
+ "electron": ">=28.0.0"
34
+ },
35
+ "peerDependencies": {
36
+ "electron": ">=28.0.0"
37
+ }
38
+ }