{"id":16773853,"url":"https://github.com/ziflex/electron-ipc-socket","last_synced_at":"2025-03-21T23:34:30.846Z","repository":{"id":12665582,"uuid":"72493426","full_name":"ziflex/electron-ipc-socket","owner":"ziflex","description":"Two-way communication on top of Electron IPC system","archived":false,"fork":false,"pushed_at":"2023-01-07T22:35:42.000Z","size":1358,"stargazers_count":14,"open_issues_count":8,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-14T12:24:47.209Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://ziflex.github.io/electron-ipc-socket","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ziflex.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-01T01:40:37.000Z","updated_at":"2022-05-19T14:58:53.000Z","dependencies_parsed_at":"2023-01-13T17:04:15.846Z","dependency_job_id":null,"html_url":"https://github.com/ziflex/electron-ipc-socket","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Felectron-ipc-socket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Felectron-ipc-socket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Felectron-ipc-socket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Felectron-ipc-socket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ziflex","download_url":"https://codeload.github.com/ziflex/electron-ipc-socket/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221820632,"owners_count":16886222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T06:47:12.760Z","updated_at":"2024-10-28T11:16:59.265Z","avatar_url":"https://github.com/ziflex.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# electron-ipc-socket\n\n\u003e Event based communication\n\nResponse-request abstraction on top of Electron IPC system.\n\n[![npm version](https://badge.fury.io/js/electron-ipc-socket.svg)](https://www.npmjs.com/package/electron-ipc-socket)\n[![Actions Status](https://github.com/ziflex/electron-ipc-socket/workflows/Node%20CI/badge.svg)](https://github.com/ziflex/electron-ipc-socket/workflows/Node%20CI/badge.svg)\n\n```sh\n    npm install --save electron-ipc-socket\n```\n\n## Motivation\n\nEvents are good, but sometimes you want something more than just 'emit and forget'.\nCurrent package provides an abstraction on top of Electron IPC system that allows you to make 'request-response' communication.\n\n## Usage\n\n### Events\n\n```typescript\n// main-process.js\n\nimport { ipcMain, BrowserWindow } from 'electron';\nimport { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';\nimport fs from 'fs';\n\nconst win = new BrowserWindow();\n\nconst socket = new Socket(new Transport(ipcMain, win));\n\nsocket.open('main-win');\n\nsocket.onEvent('ready', (evt: Event) =\u003e {\n    console.log('Renderer process is ready');\n});\n```\n\n```typescript\n// renderer-process.js\n\nimport { ipcRenderer } from 'electron';\nimport { Socket } from 'electron-ipc-socket';\n\nconst socket = new Socket(ipcRenderer);\n\nsocket.open('main-win');\n\nsocket.send('ready');\n```\n\n### Request-response\n\n```typescript\n// main-process.js\n\nimport { ipcMain, BrowserWindow } from 'electron';\nimport { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';\nimport fs from 'fs';\n\nconst win = new BrowserWindow();\n\nconst socket = new Socket(new Transport(ipcMain, win));\n\nsocket.open('main-win');\n\nsocket.onRequest('ping', (req: InboundRequest) =\u003e {\n    return 'pong';\n});\n```\n\n```typescript\n// renderer-process.js\n\nimport { ipcRenderer } from 'electron';\nimport { Socket } from 'electron-ipc-socket';\n\nconst socket = new Socket(ipcRenderer);\n\nsocket.open('main-win');\n\nsocket\n    .request('ping')\n    .then(content =\u003e console.log(content))\n    .catch(err =\u003e console.error(err));\n```\n\n##### Async request handler\n\n```typescript\n// main-process.js\n\nimport { ipcMain, BrowserWindow } from 'electron';\nimport { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';\nimport fs from 'fs';\nimport util from 'util';\n\nconst read = util.promisify(fs.read);\nconst win = new BrowserWindow();\n\nconst socket = new Socket(new Transport(ipcMain, win));\n\nsocket.open('main-win');\n\nsocket.onRequest('file', async (req: InboundRequest) =\u003e {\n    return read(req.data);\n});\n```\n\n```typescript\n// renderer-process.js\n\nimport { ipcRenderer } from 'electron';\nimport { Socket } from 'electron-ipc-socket';\n\nconst socket = new Socket(ipcRenderer);\n\nsocket.open('main-win');\n\nsocket\n    .request('file', 'package.json')\n    .then(content =\u003e console.log(content))\n    .catch(err =\u003e console.error(err));\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziflex%2Felectron-ipc-socket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziflex%2Felectron-ipc-socket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziflex%2Felectron-ipc-socket/lists"}