@holochain/hc-spin 0.600.1-rc.0 → 0.600.3-rc.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.
- package/.envrc +1 -0
- package/CHANGELOG.md +9 -2
- package/README.md +1 -1
- package/dist/main/index.js +14 -14
- package/flake.lock +11 -11
- package/package.json +1 -1
- package/src/main/index.ts +12 -13
- package/src/main/validateArgs.ts +3 -3
package/.envrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
use flake
|
package/CHANGELOG.md
CHANGED
|
@@ -4,10 +4,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
4
4
|
|
|
5
5
|
## \[Unreleased\]
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
## 2026-02-13: v0.600.3-rc.0
|
|
8
|
+
|
|
9
9
|
### Changed
|
|
10
|
+
- Holochain is now run with the iroh transport. The argument `--signaling-url` has been replaced with `--relay-url`.
|
|
10
11
|
### Removed
|
|
12
|
+
- Removed CLI option `--transport` as holochain is run with `quic` iroh transport.
|
|
13
|
+
|
|
14
|
+
## 2026-01-22: v0.600.2-rc.0
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Added a CLI option `--transport` to choose between `quic` and `webrtc`. `quic` is used in combination with the iroh transport in Holochain, `webrtc` with tx5. The default transport in Holochain is iroh, so the default for hc-spin is `quic`. If no transport option is passed in on the command line, `quic` is used.
|
|
11
18
|
|
|
12
19
|
## 2026-01-22: v0.600.1-rc.0
|
|
13
20
|
|
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ Options:
|
|
|
50
50
|
--network-seed <string> Install the app with a specific network seed.
|
|
51
51
|
--ui-path <path> Path to the folder containing the index.html of the webhapp's UI.
|
|
52
52
|
--ui-port <number> Port pointing to a localhost dev server that serves your UI assets.
|
|
53
|
-
--
|
|
53
|
+
--relay-url <url> Url of the relay server to use. By default, hc spin spins up a local development relay server for you
|
|
54
54
|
but this argument allows you to specify a custom one.
|
|
55
55
|
--open-devtools Automatically open the devtools on startup.
|
|
56
56
|
-h, --help display help for command
|
package/dist/main/index.js
CHANGED
|
@@ -12439,7 +12439,7 @@ function validateCliArgs(cliArgs, cliOpts, appDataRootDir) {
|
|
|
12439
12439
|
networkSeed: cliOpts.networkSeed,
|
|
12440
12440
|
targetArcFactor: cliOpts.targetArcFactor,
|
|
12441
12441
|
uiSource: cliOpts.uiPath ? { type: "path", path: cliOpts.uiPath } : cliOpts.uiPort ? { type: "port", port: cliOpts.uiPort } : { type: "path", path: path.join(appDataRootDir, "apps", appId, "ui") },
|
|
12442
|
-
|
|
12442
|
+
relayUrl: cliOpts.relayUrl,
|
|
12443
12443
|
bootstrapUrl: cliOpts.bootstrapUrl,
|
|
12444
12444
|
happOrWebhappPath: isHapp ? { type: "happ", path: happOrWebhappPath } : { type: "webhapp", path: happOrWebhappPath },
|
|
12445
12445
|
openDevtools: cliOpts.openDevtools ? true : false
|
|
@@ -12563,7 +12563,7 @@ function setLinkOpenHandlers(browserWindow) {
|
|
|
12563
12563
|
}
|
|
12564
12564
|
const rustUtils = require("@holochain/hc-spin-rust-utils");
|
|
12565
12565
|
const cli = new commander.Command();
|
|
12566
|
-
cli.name("hc-spin").description("CLI to run Holochain apps during development.").version(`${"0.600.0"} (built for holochain ${"0.6.0"})`).argument(
|
|
12566
|
+
cli.name("hc-spin").description("CLI to run Holochain apps during development.").version(`${"0.600.2-rc.0"} (built for holochain ${"0.6.1-rc.0"})`).argument(
|
|
12567
12567
|
"<path>",
|
|
12568
12568
|
"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"
|
|
12569
12569
|
).option(
|
|
@@ -12585,8 +12585,8 @@ cli.name("hc-spin").description("CLI to run Holochain apps during development.")
|
|
|
12585
12585
|
"--ui-port <number>",
|
|
12586
12586
|
"Port pointing to a localhost dev server that serves your UI assets."
|
|
12587
12587
|
).option(
|
|
12588
|
-
"--
|
|
12589
|
-
"Url of the
|
|
12588
|
+
"--relay-url <url>",
|
|
12589
|
+
"Url of the relay server to use. By default, hc spin spins up a local development relay server for you but this argument allows you to specify a custom one."
|
|
12590
12590
|
).option("--open-devtools", "Automatically open the devtools on startup.");
|
|
12591
12591
|
cli.parse();
|
|
12592
12592
|
const rl = require("readline").createInterface({
|
|
@@ -12664,29 +12664,29 @@ async function startLocalServices() {
|
|
|
12664
12664
|
const localServicesHandle = childProcess__namespace.spawn("kitsune2-bootstrap-srv");
|
|
12665
12665
|
return new Promise((resolve) => {
|
|
12666
12666
|
let bootStrapUrl;
|
|
12667
|
-
let
|
|
12667
|
+
let relayUrl;
|
|
12668
12668
|
let bootstrapRunning = false;
|
|
12669
|
-
let
|
|
12669
|
+
let relayRunning = false;
|
|
12670
12670
|
localServicesHandle.stdout.pipe(split()).on("data", async (line) => {
|
|
12671
12671
|
console.log(`[hc-spin] | [kitsune2-bootstrap-srv]: ${line}`);
|
|
12672
12672
|
if (line.includes("#kitsune2_bootstrap_srv#listening#")) {
|
|
12673
12673
|
const hostAndPort = line.split("#kitsune2_bootstrap_srv#listening#")[1].split("#")[0];
|
|
12674
12674
|
bootStrapUrl = `http://${hostAndPort}`;
|
|
12675
|
-
|
|
12675
|
+
relayUrl = `http://${hostAndPort}`;
|
|
12676
12676
|
}
|
|
12677
12677
|
if (line.includes("#kitsune2_bootstrap_srv#running#")) {
|
|
12678
12678
|
bootstrapRunning = true;
|
|
12679
|
-
|
|
12679
|
+
relayRunning = true;
|
|
12680
12680
|
}
|
|
12681
|
-
if (bootstrapRunning &&
|
|
12682
|
-
resolve([bootStrapUrl,
|
|
12681
|
+
if (bootstrapRunning && relayRunning && bootStrapUrl && relayUrl)
|
|
12682
|
+
resolve([bootStrapUrl, relayUrl]);
|
|
12683
12683
|
});
|
|
12684
12684
|
localServicesHandle.stderr.pipe(split()).on("data", async (line) => {
|
|
12685
12685
|
console.log(`[hc-spin] | [hc run-local-services] ERROR: ${line}`);
|
|
12686
12686
|
});
|
|
12687
12687
|
});
|
|
12688
12688
|
}
|
|
12689
|
-
async function spawnSandboxes(nAgents, happPath, bootStrapUrl,
|
|
12689
|
+
async function spawnSandboxes(nAgents, happPath, bootStrapUrl, relayUrl, appId, networkSeed, targetArcFactor) {
|
|
12690
12690
|
const generateArgs = [
|
|
12691
12691
|
"sandbox",
|
|
12692
12692
|
"--piped",
|
|
@@ -12711,7 +12711,7 @@ async function spawnSandboxes(nAgents, happPath, bootStrapUrl, signalUrl, appId,
|
|
|
12711
12711
|
if (targetArcFactor !== void 0) {
|
|
12712
12712
|
generateArgs.push("--target-arc-factor", targetArcFactor.toString());
|
|
12713
12713
|
}
|
|
12714
|
-
generateArgs.push("--bootstrap", bootStrapUrl, "
|
|
12714
|
+
generateArgs.push("--bootstrap", bootStrapUrl, "quic", relayUrl);
|
|
12715
12715
|
let readyConductors = 0;
|
|
12716
12716
|
const portsInfo = {};
|
|
12717
12717
|
const sandboxPaths = [];
|
|
@@ -12755,12 +12755,12 @@ electron.app.whenReady().then(async () => {
|
|
|
12755
12755
|
happTargetDir
|
|
12756
12756
|
);
|
|
12757
12757
|
}
|
|
12758
|
-
const [bootstrapUrl,
|
|
12758
|
+
const [bootstrapUrl, relayUrl] = await startLocalServices();
|
|
12759
12759
|
const [sandboxHandle, sandboxPaths, portsInfo] = await spawnSandboxes(
|
|
12760
12760
|
CLI_OPTS.numAgents,
|
|
12761
12761
|
happTargetDir ? happTargetDir : CLI_OPTS.happOrWebhappPath.path,
|
|
12762
12762
|
CLI_OPTS.bootstrapUrl ? CLI_OPTS.bootstrapUrl : bootstrapUrl,
|
|
12763
|
-
CLI_OPTS.
|
|
12763
|
+
CLI_OPTS.relayUrl ? CLI_OPTS.relayUrl : relayUrl,
|
|
12764
12764
|
CLI_OPTS.appId,
|
|
12765
12765
|
CLI_OPTS.networkSeed,
|
|
12766
12766
|
CLI_OPTS.targetArcFactor
|
package/flake.lock
CHANGED
|
@@ -36,16 +36,16 @@
|
|
|
36
36
|
"hc-scaffold": {
|
|
37
37
|
"flake": false,
|
|
38
38
|
"locked": {
|
|
39
|
-
"lastModified":
|
|
40
|
-
"narHash": "sha256-
|
|
39
|
+
"lastModified": 1769104114,
|
|
40
|
+
"narHash": "sha256-Ebh8YW7J4VRAwhK9XQDf98nWAIvciddzdx7LbhZiwdI=",
|
|
41
41
|
"owner": "holochain",
|
|
42
42
|
"repo": "scaffolding",
|
|
43
|
-
"rev": "
|
|
43
|
+
"rev": "6749c80d54306e4c1ad5831ce2dbdbb9a283ee0c",
|
|
44
44
|
"type": "github"
|
|
45
45
|
},
|
|
46
46
|
"original": {
|
|
47
47
|
"owner": "holochain",
|
|
48
|
-
"ref": "v0.600.1",
|
|
48
|
+
"ref": "v0.600.1-rc.0",
|
|
49
49
|
"repo": "scaffolding",
|
|
50
50
|
"type": "github"
|
|
51
51
|
}
|
|
@@ -79,11 +79,11 @@
|
|
|
79
79
|
"rust-overlay": "rust-overlay"
|
|
80
80
|
},
|
|
81
81
|
"locked": {
|
|
82
|
-
"lastModified":
|
|
83
|
-
"narHash": "sha256-
|
|
82
|
+
"lastModified": 1769121828,
|
|
83
|
+
"narHash": "sha256-o1GUUg9FUADcTOU4gzDDtiuJo61PyrQHCn0e64HRJYU=",
|
|
84
84
|
"owner": "holochain",
|
|
85
85
|
"repo": "holonix",
|
|
86
|
-
"rev": "
|
|
86
|
+
"rev": "3e2a4b96b177aaaa233fd744ba82bfe308e85635",
|
|
87
87
|
"type": "github"
|
|
88
88
|
},
|
|
89
89
|
"original": {
|
|
@@ -96,16 +96,16 @@
|
|
|
96
96
|
"kitsune2": {
|
|
97
97
|
"flake": false,
|
|
98
98
|
"locked": {
|
|
99
|
-
"lastModified":
|
|
100
|
-
"narHash": "sha256-
|
|
99
|
+
"lastModified": 1768402558,
|
|
100
|
+
"narHash": "sha256-v7uEmcVGC6tDjrkEZHMJa9DdXnqXwwVxJx9GkZq9P/U=",
|
|
101
101
|
"owner": "holochain",
|
|
102
102
|
"repo": "kitsune2",
|
|
103
|
-
"rev": "
|
|
103
|
+
"rev": "2b809bcf0bff3d493cd5ba230677240432fff58a",
|
|
104
104
|
"type": "github"
|
|
105
105
|
},
|
|
106
106
|
"original": {
|
|
107
107
|
"owner": "holochain",
|
|
108
|
-
"ref": "
|
|
108
|
+
"ref": "2b809bcf0bff3d493cd5ba230677240432fff58a",
|
|
109
109
|
"repo": "kitsune2",
|
|
110
110
|
"type": "github"
|
|
111
111
|
}
|
package/package.json
CHANGED
package/src/main/index.ts
CHANGED
|
@@ -63,8 +63,8 @@ cli
|
|
|
63
63
|
'Port pointing to a localhost dev server that serves your UI assets.',
|
|
64
64
|
)
|
|
65
65
|
.option(
|
|
66
|
-
'--
|
|
67
|
-
'Url of the
|
|
66
|
+
'--relay-url <url>',
|
|
67
|
+
'Url of the relay server to use. By default, hc spin spins up a local development relay server for you but this argument allows you to specify a custom one.',
|
|
68
68
|
)
|
|
69
69
|
.option('--open-devtools', 'Automatically open the devtools on startup.');
|
|
70
70
|
|
|
@@ -175,22 +175,22 @@ async function startLocalServices(): Promise<[string, string]> {
|
|
|
175
175
|
const localServicesHandle = childProcess.spawn('kitsune2-bootstrap-srv');
|
|
176
176
|
return new Promise((resolve) => {
|
|
177
177
|
let bootStrapUrl;
|
|
178
|
-
let
|
|
178
|
+
let relayUrl;
|
|
179
179
|
let bootstrapRunning = false;
|
|
180
|
-
let
|
|
180
|
+
let relayRunning = false;
|
|
181
181
|
localServicesHandle.stdout.pipe(split()).on('data', async (line: string) => {
|
|
182
182
|
console.log(`[hc-spin] | [kitsune2-bootstrap-srv]: ${line}`);
|
|
183
183
|
if (line.includes('#kitsune2_bootstrap_srv#listening#')) {
|
|
184
184
|
const hostAndPort = line.split('#kitsune2_bootstrap_srv#listening#')[1].split('#')[0];
|
|
185
185
|
bootStrapUrl = `http://${hostAndPort}`;
|
|
186
|
-
|
|
186
|
+
relayUrl = `http://${hostAndPort}`;
|
|
187
187
|
}
|
|
188
188
|
if (line.includes('#kitsune2_bootstrap_srv#running#')) {
|
|
189
189
|
bootstrapRunning = true;
|
|
190
|
-
|
|
190
|
+
relayRunning = true;
|
|
191
191
|
}
|
|
192
|
-
if (bootstrapRunning &&
|
|
193
|
-
resolve([bootStrapUrl,
|
|
192
|
+
if (bootstrapRunning && relayRunning && bootStrapUrl && relayUrl)
|
|
193
|
+
resolve([bootStrapUrl, relayUrl]);
|
|
194
194
|
});
|
|
195
195
|
localServicesHandle.stderr.pipe(split()).on('data', async (line: string) => {
|
|
196
196
|
console.log(`[hc-spin] | [hc run-local-services] ERROR: ${line}`);
|
|
@@ -207,7 +207,7 @@ async function spawnSandboxes(
|
|
|
207
207
|
nAgents: number,
|
|
208
208
|
happPath: string,
|
|
209
209
|
bootStrapUrl: string,
|
|
210
|
-
|
|
210
|
+
relayUrl: string,
|
|
211
211
|
appId: string,
|
|
212
212
|
networkSeed?: string,
|
|
213
213
|
targetArcFactor?: number,
|
|
@@ -239,8 +239,7 @@ async function spawnSandboxes(
|
|
|
239
239
|
if (targetArcFactor !== undefined) {
|
|
240
240
|
generateArgs.push('--target-arc-factor', targetArcFactor.toString());
|
|
241
241
|
}
|
|
242
|
-
generateArgs.push('--bootstrap', bootStrapUrl, '
|
|
243
|
-
// console.log('GENERATE ARGS: ', generateArgs);
|
|
242
|
+
generateArgs.push('--bootstrap', bootStrapUrl, 'quic', relayUrl);
|
|
244
243
|
|
|
245
244
|
let readyConductors = 0;
|
|
246
245
|
const portsInfo: Record<number, PortsInfo> = {};
|
|
@@ -302,13 +301,13 @@ app.whenReady().then(async () => {
|
|
|
302
301
|
);
|
|
303
302
|
}
|
|
304
303
|
|
|
305
|
-
const [bootstrapUrl,
|
|
304
|
+
const [bootstrapUrl, relayUrl] = await startLocalServices();
|
|
306
305
|
|
|
307
306
|
const [sandboxHandle, sandboxPaths, portsInfo] = await spawnSandboxes(
|
|
308
307
|
CLI_OPTS.numAgents,
|
|
309
308
|
happTargetDir ? happTargetDir : CLI_OPTS.happOrWebhappPath.path,
|
|
310
309
|
CLI_OPTS.bootstrapUrl ? CLI_OPTS.bootstrapUrl : bootstrapUrl,
|
|
311
|
-
CLI_OPTS.
|
|
310
|
+
CLI_OPTS.relayUrl ? CLI_OPTS.relayUrl : relayUrl,
|
|
312
311
|
CLI_OPTS.appId,
|
|
313
312
|
CLI_OPTS.networkSeed,
|
|
314
313
|
CLI_OPTS.targetArcFactor,
|
package/src/main/validateArgs.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type CliOpts = {
|
|
|
11
11
|
targetArcFactor?: number;
|
|
12
12
|
uiPath?: string;
|
|
13
13
|
uiPort?: number;
|
|
14
|
-
|
|
14
|
+
relayUrl?: string;
|
|
15
15
|
bootstrapUrl?: string;
|
|
16
16
|
openDevtools?: boolean;
|
|
17
17
|
};
|
|
@@ -23,7 +23,7 @@ export type CliOptsValidated = {
|
|
|
23
23
|
networkSeed: string | undefined;
|
|
24
24
|
targetArcFactor: number | undefined;
|
|
25
25
|
uiSource: UISource;
|
|
26
|
-
|
|
26
|
+
relayUrl: string | undefined;
|
|
27
27
|
bootstrapUrl: string | undefined;
|
|
28
28
|
happOrWebhappPath: HappOrWebhappPath;
|
|
29
29
|
openDevtools: boolean;
|
|
@@ -98,7 +98,7 @@ export function validateCliArgs(
|
|
|
98
98
|
: cliOpts.uiPort
|
|
99
99
|
? { type: 'port', port: cliOpts.uiPort }
|
|
100
100
|
: { type: 'path', path: path.join(appDataRootDir, 'apps', appId, 'ui') },
|
|
101
|
-
|
|
101
|
+
relayUrl: cliOpts.relayUrl,
|
|
102
102
|
bootstrapUrl: cliOpts.bootstrapUrl,
|
|
103
103
|
happOrWebhappPath: isHapp
|
|
104
104
|
? { type: 'happ', path: happOrWebhappPath }
|