@holochain/hc-spin 0.300.2 → 0.300.4
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/README.md +8 -15
- package/cli/cli.js +33 -11
- package/dist/cli.js +33 -11
- package/dist/main/index.js +10027 -8740
- package/package.json +6 -5
- package/scripts/replace-electron-version.js +11 -0
- package/src/main/index.ts +36 -4
- package/src/main/menu.ts +38 -0
- package/src/main/windows.ts +3 -2
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holochain/hc-spin",
|
|
3
|
-
"version": "0.300.
|
|
3
|
+
"version": "0.300.4",
|
|
4
|
+
"holochainVersion": "0.3.x",
|
|
4
5
|
"description": "CLI to run Holochain aps during development.",
|
|
5
6
|
"author": "matthme",
|
|
6
7
|
"homepage": "https://developer.holochain.org",
|
|
@@ -29,16 +30,17 @@
|
|
|
29
30
|
"typecheck": "npm run typecheck:node && npm run typecheck:web",
|
|
30
31
|
"start": "electron-vite preview",
|
|
31
32
|
"dev": "electron-vite dev",
|
|
32
|
-
"build": "rimraf dist && npm run typecheck && electron-vite build && mv ./out ./dist && cp ./cli/cli.js ./dist/cli.js"
|
|
33
|
+
"build": "rimraf dist && npm run typecheck && electron-vite build && mv ./out ./dist && cp ./cli/cli.js ./dist/cli.js && node ./scripts/replace-electron-version.js"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
36
|
"@electron-toolkit/preload": "^3.0.0",
|
|
36
37
|
"@electron-toolkit/utils": "^3.0.0",
|
|
37
|
-
"@holochain/client": "
|
|
38
|
+
"@holochain/client": "0.17.0-rc.0",
|
|
38
39
|
"@holochain/hc-spin-rust-utils": "^0.300.1",
|
|
39
40
|
"@msgpack/msgpack": "^2.8.0",
|
|
41
|
+
"bufferutil": "4.0.8",
|
|
40
42
|
"commander": "11.1.0",
|
|
41
|
-
"electron": "^
|
|
43
|
+
"electron": "^29.3.1",
|
|
42
44
|
"electron-context-menu": "3.6.1",
|
|
43
45
|
"get-port": "7.0.0",
|
|
44
46
|
"nanoid": "5.0.4",
|
|
@@ -49,7 +51,6 @@
|
|
|
49
51
|
"@electron-toolkit/eslint-config-ts": "^1.0.1",
|
|
50
52
|
"@electron-toolkit/tsconfig": "^1.0.1",
|
|
51
53
|
"@types/node": "^18.19.5",
|
|
52
|
-
"bufferutil": "4.0.8",
|
|
53
54
|
"electron-builder": "^24.9.1",
|
|
54
55
|
"electron-vite": "https://github.com/matthme/electron-vite.git#forward-cli-args-dist",
|
|
55
56
|
"eslint": "^8.56.0",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
|
|
3
|
+
const packageJsonString = fs.readFileSync('package.json');
|
|
4
|
+
const packageJson = JSON.parse(packageJsonString);
|
|
5
|
+
const electronVersion = packageJson.dependencies.electron;
|
|
6
|
+
const majorElectronVersion = electronVersion.replace('^', '').slice(0, 3);
|
|
7
|
+
console.log('electron version: ', majorElectronVersion);
|
|
8
|
+
|
|
9
|
+
const cliJs = fs.readFileSync('./dist/cli.js', 'utf-8');
|
|
10
|
+
const modifiedCliJs = cliJs.replace('###REPLACE_AT_BUILD_TIME###', majorElectronVersion);
|
|
11
|
+
fs.writeFileSync('./dist/cli.js', modifiedCliJs);
|
package/src/main/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { app, IpcMainInvokeEvent, ipcMain, protocol, Menu } from 'electron';
|
|
1
|
+
import { app, IpcMainInvokeEvent, ipcMain, protocol, Menu, BrowserWindow } from 'electron';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { nanoid } from 'nanoid';
|
|
@@ -10,6 +10,7 @@ import { ZomeCallNapi, ZomeCallSigner, ZomeCallUnsignedNapi } from '@holochain/h
|
|
|
10
10
|
import { createHappWindow } from './windows';
|
|
11
11
|
import getPort from 'get-port';
|
|
12
12
|
import {
|
|
13
|
+
AdminWebsocket,
|
|
13
14
|
AgentPubKey,
|
|
14
15
|
AppWebsocket,
|
|
15
16
|
CallZomeRequest,
|
|
@@ -23,12 +24,15 @@ import { menu } from './menu';
|
|
|
23
24
|
|
|
24
25
|
const rustUtils = require('@holochain/hc-spin-rust-utils');
|
|
25
26
|
|
|
27
|
+
const cliPackageJsonPath = path.resolve(path.join(app.getAppPath(), '../../package.json'));
|
|
28
|
+
const cliPackageJson = require(cliPackageJsonPath);
|
|
29
|
+
|
|
26
30
|
const cli = new Command();
|
|
27
31
|
|
|
28
32
|
cli
|
|
29
33
|
.name('hc-spin')
|
|
30
34
|
.description('CLI to run Holochain aps during development.')
|
|
31
|
-
.version(
|
|
35
|
+
.version(`${cliPackageJson.version} (built for holochain ${cliPackageJson.holochainVersion})`)
|
|
32
36
|
.argument(
|
|
33
37
|
'<path>',
|
|
34
38
|
'Path to .webhapp or .happ file to launch. If a .happ file is passed, either a UI path must be specified via --ui-path or a port pointing to a localhost server via --ui-port',
|
|
@@ -116,6 +120,12 @@ contextMenu({
|
|
|
116
120
|
showSaveImageAs: true,
|
|
117
121
|
showSearchWithGoogle: false,
|
|
118
122
|
showInspectElement: true,
|
|
123
|
+
append: (_defaultActions, _parameters, browserWindow) => [
|
|
124
|
+
{
|
|
125
|
+
label: 'Reload',
|
|
126
|
+
click: () => (browserWindow as BrowserWindow).reload(),
|
|
127
|
+
},
|
|
128
|
+
],
|
|
119
129
|
});
|
|
120
130
|
|
|
121
131
|
const handleSignZomeCall = async (e: IpcMainInvokeEvent, request: CallZomeRequest) => {
|
|
@@ -326,15 +336,37 @@ app.whenReady().then(async () => {
|
|
|
326
336
|
for (var i = 0; i < CLI_OPTS.numAgents; i++) {
|
|
327
337
|
const zomeCallSigner = await rustUtils.ZomeCallSigner.connect(lairUrls[i], 'pass');
|
|
328
338
|
|
|
339
|
+
const adminPort = portsInfo[i].admin_port;
|
|
340
|
+
const adminWs = await AdminWebsocket.connect({
|
|
341
|
+
url: new URL(`ws://localhost:${adminPort}`),
|
|
342
|
+
wsClientOptions: {
|
|
343
|
+
origin: 'hc-spin',
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
const appAuthTokenResponse = await adminWs.issueAppAuthenticationToken({
|
|
348
|
+
installed_app_id: CLI_OPTS.appId,
|
|
349
|
+
single_use: false,
|
|
350
|
+
expiry_seconds: 999999,
|
|
351
|
+
});
|
|
352
|
+
|
|
329
353
|
const appPort = portsInfo[i].app_ports[0];
|
|
330
|
-
const appWs = await AppWebsocket.connect(
|
|
331
|
-
|
|
354
|
+
const appWs = await AppWebsocket.connect({
|
|
355
|
+
url: new URL(`ws://localhost:${appPort}`),
|
|
356
|
+
wsClientOptions: {
|
|
357
|
+
origin: 'hc-spin',
|
|
358
|
+
},
|
|
359
|
+
token: appAuthTokenResponse.token,
|
|
360
|
+
});
|
|
361
|
+
const appInfo = await appWs.appInfo();
|
|
362
|
+
if (!appInfo) throw new Error('AppInfo is null.');
|
|
332
363
|
const happWindow = await createHappWindow(
|
|
333
364
|
CLI_OPTS.uiSource,
|
|
334
365
|
CLI_OPTS.happOrWebhappPath,
|
|
335
366
|
CLI_OPTS.appId,
|
|
336
367
|
i + 1,
|
|
337
368
|
appPort,
|
|
369
|
+
appAuthTokenResponse.token,
|
|
338
370
|
DATA_ROOT_DIR,
|
|
339
371
|
CLI_OPTS.openDevtools,
|
|
340
372
|
);
|
package/src/main/menu.ts
CHANGED
|
@@ -48,4 +48,42 @@ export const menu = Menu.buildFromTemplate([
|
|
|
48
48
|
},
|
|
49
49
|
],
|
|
50
50
|
},
|
|
51
|
+
{
|
|
52
|
+
label: 'Edit',
|
|
53
|
+
submenu: [
|
|
54
|
+
{
|
|
55
|
+
label: 'Undo',
|
|
56
|
+
role: 'undo',
|
|
57
|
+
accelerator: 'CommandOrControl+Z',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: 'Redo',
|
|
61
|
+
role: 'redo',
|
|
62
|
+
accelerator: 'CommandOrControl+Shift+Z',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: 'separator',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
label: 'Cut',
|
|
69
|
+
role: 'cut',
|
|
70
|
+
accelerator: 'CommandOrControl+X',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: 'Copy',
|
|
74
|
+
role: 'copy',
|
|
75
|
+
accelerator: 'CommandOrControl+C',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
label: 'Paste',
|
|
79
|
+
role: 'paste',
|
|
80
|
+
accelerator: 'CommandOrControl+V',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: 'Select All',
|
|
84
|
+
role: 'selectAll',
|
|
85
|
+
accelerator: 'CommandOrControl+A',
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
},
|
|
51
89
|
]);
|
package/src/main/windows.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import url from 'url';
|
|
4
|
-
import { InstalledAppId } from '@holochain/client';
|
|
4
|
+
import { AppAuthenticationToken, InstalledAppId } from '@holochain/client';
|
|
5
5
|
import { BrowserWindow, NativeImage, nativeImage, net, session, shell } from 'electron';
|
|
6
6
|
import { is } from '@electron-toolkit/utils';
|
|
7
7
|
import { HappOrWebhappPath } from './validateArgs';
|
|
@@ -22,6 +22,7 @@ export const createHappWindow = async (
|
|
|
22
22
|
appId: InstalledAppId,
|
|
23
23
|
agentNum: number,
|
|
24
24
|
appPort: number,
|
|
25
|
+
appAuthToken: AppAuthenticationToken,
|
|
25
26
|
appDataRootDir: string,
|
|
26
27
|
openDevtools: boolean,
|
|
27
28
|
): Promise<BrowserWindow> => {
|
|
@@ -47,7 +48,7 @@ export const createHappWindow = async (
|
|
|
47
48
|
electron.contextBridge.exposeInMainWorld("__HC_LAUNCHER_ENV__", {
|
|
48
49
|
APP_INTERFACE_PORT: ${appPort},
|
|
49
50
|
INSTALLED_APP_ID: "${appId}",
|
|
50
|
-
|
|
51
|
+
APP_INTERFACE_TOKEN: [${appAuthToken}],
|
|
51
52
|
});
|
|
52
53
|
`;
|
|
53
54
|
|