Initial commit
This commit is contained in:
		
							
								
								
									
										130
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
# Logs
 | 
			
		||||
logs
 | 
			
		||||
*.log
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
lerna-debug.log*
 | 
			
		||||
.pnpm-debug.log*
 | 
			
		||||
 | 
			
		||||
# Diagnostic reports (https://nodejs.org/api/report.html)
 | 
			
		||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
 | 
			
		||||
 | 
			
		||||
# Runtime data
 | 
			
		||||
pids
 | 
			
		||||
*.pid
 | 
			
		||||
*.seed
 | 
			
		||||
*.pid.lock
 | 
			
		||||
 | 
			
		||||
# Directory for instrumented libs generated by jscoverage/JSCover
 | 
			
		||||
lib-cov
 | 
			
		||||
 | 
			
		||||
# Coverage directory used by tools like istanbul
 | 
			
		||||
coverage
 | 
			
		||||
*.lcov
 | 
			
		||||
 | 
			
		||||
# nyc test coverage
 | 
			
		||||
.nyc_output
 | 
			
		||||
 | 
			
		||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
 | 
			
		||||
.grunt
 | 
			
		||||
 | 
			
		||||
# Bower dependency directory (https://bower.io/)
 | 
			
		||||
bower_components
 | 
			
		||||
 | 
			
		||||
# node-waf configuration
 | 
			
		||||
.lock-wscript
 | 
			
		||||
 | 
			
		||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
 | 
			
		||||
build/Release
 | 
			
		||||
 | 
			
		||||
# Dependency directories
 | 
			
		||||
node_modules/
 | 
			
		||||
jspm_packages/
 | 
			
		||||
 | 
			
		||||
# Snowpack dependency directory (https://snowpack.dev/)
 | 
			
		||||
web_modules/
 | 
			
		||||
 | 
			
		||||
# TypeScript cache
 | 
			
		||||
*.tsbuildinfo
 | 
			
		||||
 | 
			
		||||
# Optional npm cache directory
 | 
			
		||||
.npm
 | 
			
		||||
 | 
			
		||||
# Optional eslint cache
 | 
			
		||||
.eslintcache
 | 
			
		||||
 | 
			
		||||
# Optional stylelint cache
 | 
			
		||||
.stylelintcache
 | 
			
		||||
 | 
			
		||||
# Microbundle cache
 | 
			
		||||
.rpt2_cache/
 | 
			
		||||
.rts2_cache_cjs/
 | 
			
		||||
.rts2_cache_es/
 | 
			
		||||
.rts2_cache_umd/
 | 
			
		||||
 | 
			
		||||
# Optional REPL history
 | 
			
		||||
.node_repl_history
 | 
			
		||||
 | 
			
		||||
# Output of 'npm pack'
 | 
			
		||||
*.tgz
 | 
			
		||||
 | 
			
		||||
# Yarn Integrity file
 | 
			
		||||
.yarn-integrity
 | 
			
		||||
 | 
			
		||||
# dotenv environment variable files
 | 
			
		||||
.env
 | 
			
		||||
.env.development.local
 | 
			
		||||
.env.test.local
 | 
			
		||||
.env.production.local
 | 
			
		||||
.env.local
 | 
			
		||||
 | 
			
		||||
# parcel-bundler cache (https://parceljs.org/)
 | 
			
		||||
.cache
 | 
			
		||||
.parcel-cache
 | 
			
		||||
 | 
			
		||||
# Next.js build output
 | 
			
		||||
.next
 | 
			
		||||
out
 | 
			
		||||
 | 
			
		||||
# Nuxt.js build / generate output
 | 
			
		||||
.nuxt
 | 
			
		||||
dist
 | 
			
		||||
 | 
			
		||||
# Gatsby files
 | 
			
		||||
.cache/
 | 
			
		||||
# Comment in the public line in if your project uses Gatsby and not Next.js
 | 
			
		||||
# https://nextjs.org/blog/next-9-1#public-directory-support
 | 
			
		||||
# public
 | 
			
		||||
 | 
			
		||||
# vuepress build output
 | 
			
		||||
.vuepress/dist
 | 
			
		||||
 | 
			
		||||
# vuepress v2.x temp and cache directory
 | 
			
		||||
.temp
 | 
			
		||||
.cache
 | 
			
		||||
 | 
			
		||||
# Docusaurus cache and generated files
 | 
			
		||||
.docusaurus
 | 
			
		||||
 | 
			
		||||
# Serverless directories
 | 
			
		||||
.serverless/
 | 
			
		||||
 | 
			
		||||
# FuseBox cache
 | 
			
		||||
.fusebox/
 | 
			
		||||
 | 
			
		||||
# DynamoDB Local files
 | 
			
		||||
.dynamodb/
 | 
			
		||||
 | 
			
		||||
# TernJS port file
 | 
			
		||||
.tern-port
 | 
			
		||||
 | 
			
		||||
# Stores VSCode versions used for testing VSCode extensions
 | 
			
		||||
.vscode-test
 | 
			
		||||
 | 
			
		||||
# yarn v2
 | 
			
		||||
.yarn/cache
 | 
			
		||||
.yarn/unplugged
 | 
			
		||||
.yarn/build-state.yml
 | 
			
		||||
.yarn/install-state.gz
 | 
			
		||||
.pnp.*
 | 
			
		||||
							
								
								
									
										3
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# Electron Unix Socket Relay
 | 
			
		||||
 | 
			
		||||
Example project for relaying API requests to a Unix Socket via Electron
 | 
			
		||||
							
								
								
									
										25
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="UTF-8" />
 | 
			
		||||
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
 | 
			
		||||
    <meta
 | 
			
		||||
      http-equiv="Content-Security-Policy"
 | 
			
		||||
      content="default-src 'self'; script-src 'self'"
 | 
			
		||||
    />
 | 
			
		||||
    <meta
 | 
			
		||||
      http-equiv="X-Content-Security-Policy"
 | 
			
		||||
      content="default-src 'self'; script-src 'self'"
 | 
			
		||||
    />
 | 
			
		||||
    <title>Hello from Electron renderer!</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <h1>Hello from Electron renderer!</h1>
 | 
			
		||||
    <p>👋</p>
 | 
			
		||||
 | 
			
		||||
    <h2>Data:</h2>
 | 
			
		||||
    <pre id="data">To be replaced...</pre>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
<script src="./renderer.js"></script>
 | 
			
		||||
							
								
								
									
										44
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
const { app, BrowserWindow, ipcMain } = require('electron');
 | 
			
		||||
const http = require('http');
 | 
			
		||||
const path = require('path')
 | 
			
		||||
 | 
			
		||||
async function handleHttpRequest(_, options) {
 | 
			
		||||
    return new Promise((resolve, reject) => {
 | 
			
		||||
        console.log(options);
 | 
			
		||||
        const req = http.request(options, res => {
 | 
			
		||||
            console.log(`Status: ${res.statusCode}`);
 | 
			
		||||
            res.setEncoding('utf-8');
 | 
			
		||||
            res.on('data', data => {
 | 
			
		||||
                console.log(data)
 | 
			
		||||
                resolve(data)
 | 
			
		||||
            });
 | 
			
		||||
            res.on('error', data => {
 | 
			
		||||
                console.error(data)
 | 
			
		||||
                reject(data)
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        req.end();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const createWindow = () => {
 | 
			
		||||
    const win = new BrowserWindow({
 | 
			
		||||
        width: 800,
 | 
			
		||||
        height: 600,
 | 
			
		||||
        webPreferences: {
 | 
			
		||||
            preload: path.join(__dirname, 'preload.js'),
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    win.loadFile('index.html');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
app.whenReady().then(() => {
 | 
			
		||||
    createWindow();
 | 
			
		||||
    ipcMain.handle('request', handleHttpRequest);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.on('window-all-closed', () => {
 | 
			
		||||
    if (process.platform !== 'darwin') app.quit();
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										1423
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1423
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "electron-ipc-relay",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "main": "main.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "electron .",
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "electron": "^23.2.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								preload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								preload.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
const { contextBridge, ipcRenderer } = require('electron');
 | 
			
		||||
 | 
			
		||||
contextBridge.exposeInMainWorld('http', {
 | 
			
		||||
    request: options => ipcRenderer.invoke('request', options),
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										20
									
								
								renderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								renderer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
document.addEventListener("DOMContentLoaded", getData);
 | 
			
		||||
 | 
			
		||||
async function getData() {
 | 
			
		||||
    console.log("Hi from renderer.js!");
 | 
			
		||||
    const dataNode = document.getElementById('data');
 | 
			
		||||
 | 
			
		||||
    function setData(data) {
 | 
			
		||||
        console.log(data);
 | 
			
		||||
        const text = data ? JSON.stringify(JSON.parse(data), null, 4) : "no data";
 | 
			
		||||
        dataNode.innerText = text;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const options = {
 | 
			
		||||
        socketPath: '/tmp/sample-rest.sock',
 | 
			
		||||
        path: 'http://localhost/WeatherForecast',
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const data = await window.http.request(options);
 | 
			
		||||
    setData(data);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user