@le-space/ui 0.3.12 → 0.3.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@le-space/ui",
3
- "version": "0.3.12",
3
+ "version": "0.3.13",
4
4
  "description": "Floating Aleph sponsor relay UI components for Svelte and React.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,8 +36,8 @@
36
36
  "access": "public"
37
37
  },
38
38
  "dependencies": {
39
- "@le-space/browser": "0.3.12",
40
- "@le-space/core": "0.3.12",
39
+ "@le-space/browser": "0.3.13",
40
+ "@le-space/core": "0.3.13",
41
41
  "viem": "^2.38.5"
42
42
  },
43
43
  "peerDependencies": {
package/react/index.js CHANGED
@@ -39,7 +39,7 @@ var RECENT_INSTANCE_RUNTIME_GRACE_MS = 10 * 60 * 1e3;
39
39
  var DEPLOYMENT_PENDING_WARNING_MS = 3 * 60 * 1e3;
40
40
 
41
41
  // src/shared/package-version.ts
42
- var UI_PACKAGE_VERSION = "0.3.12";
42
+ var UI_PACKAGE_VERSION = "0.3.13";
43
43
 
44
44
  // src/shared/format.ts
45
45
  function shortHash(value, head = 8, tail = 6) {
@@ -2084,8 +2084,8 @@ async function fetchUcGoPeerMetadata(args) {
2084
2084
  () => controller.abort(),
2085
2085
  Number(args.timeoutMs ?? 18e4)
2086
2086
  );
2087
+ const requestUrl = args.metadataUrl && args.metadataUrl.trim() ? args.metadataUrl : `http://${args.hostIpv4}:${args.setupPort}/metadata`;
2087
2088
  try {
2088
- const requestUrl = args.metadataUrl && args.metadataUrl.trim() ? args.metadataUrl : `http://${args.hostIpv4}:${args.setupPort}/metadata`;
2089
2089
  const response = await args.fetch(
2090
2090
  requestUrl,
2091
2091
  {
@@ -2094,15 +2094,20 @@ async function fetchUcGoPeerMetadata(args) {
2094
2094
  );
2095
2095
  const payload = await response.json().catch(() => null);
2096
2096
  lastPayload = payload;
2097
- args.onAttempt?.(
2098
- payload,
2099
- Boolean(
2100
- response.ok && payload && typeof payload === "object" && payload.status === "ready"
2101
- ),
2102
- attempt + 1,
2103
- attempts
2097
+ const ready = Boolean(
2098
+ response.ok && payload && typeof payload === "object" && payload.status === "ready"
2104
2099
  );
2105
- if (response.ok && payload && typeof payload === "object" && payload.status === "ready") {
2100
+ args.onAttempt?.({
2101
+ payload,
2102
+ ready,
2103
+ attempt: attempt + 1,
2104
+ attempts,
2105
+ requestUrl,
2106
+ ok: response.ok,
2107
+ status: response.status,
2108
+ error: null
2109
+ });
2110
+ if (ready) {
2106
2111
  return payload;
2107
2112
  }
2108
2113
  if (response.status >= 500) {
@@ -2110,6 +2115,18 @@ async function fetchUcGoPeerMetadata(args) {
2110
2115
  `Relay metadata request failed: ${response.status} ${typeof payload === "string" ? payload : JSON.stringify(payload ?? {})}`
2111
2116
  );
2112
2117
  }
2118
+ } catch (error) {
2119
+ args.onAttempt?.({
2120
+ payload: null,
2121
+ ready: false,
2122
+ attempt: attempt + 1,
2123
+ attempts,
2124
+ requestUrl,
2125
+ ok: false,
2126
+ status: null,
2127
+ error: error instanceof Error ? error.message : String(error)
2128
+ });
2129
+ throw error;
2113
2130
  } finally {
2114
2131
  clearTimeout(timeout);
2115
2132
  }
@@ -2796,7 +2813,15 @@ async function fetchRelayMetadataForRuntime(args) {
2796
2813
  fetch: args.fetch,
2797
2814
  attempts: args.attempts,
2798
2815
  delayMs: args.delayMs,
2799
- timeoutMs: args.timeoutMs
2816
+ timeoutMs: args.timeoutMs,
2817
+ onAttempt: (result) => {
2818
+ args.onAttempt?.({
2819
+ ...result,
2820
+ metadataUrl,
2821
+ hostIpv4: args.runtime.hostIpv4 ?? null,
2822
+ setupPort
2823
+ });
2824
+ }
2800
2825
  }).catch(() => null);
2801
2826
  return extractRelayMetadata(payload);
2802
2827
  }
@@ -3475,7 +3500,7 @@ var SponsorRelayController = class {
3475
3500
  )
3476
3501
  }
3477
3502
  };
3478
- await publishVmBootstrapConfig({
3503
+ const bootstrapConfigPublication = await publishVmBootstrapConfig({
3479
3504
  sender: this.state.wallet.address,
3480
3505
  record,
3481
3506
  signer: personalSign,
@@ -3484,6 +3509,15 @@ var SponsorRelayController = class {
3484
3509
  apiHost: this.client.apiHost,
3485
3510
  sync: true
3486
3511
  });
3512
+ this.trace("deploy:bootstrap-config-published", {
3513
+ itemHash: args.itemHash,
3514
+ deploymentToken: args.deploymentToken,
3515
+ registrationId: record.bootstrap?.registrationId ?? null,
3516
+ proxyUrl: record.runtime.proxyUrl ?? null,
3517
+ mappedPorts: record.runtime.mappedPorts,
3518
+ aggregateItemHash: bootstrapConfigPublication.aggregateItemHash,
3519
+ aggregateStatus: bootstrapConfigPublication.aggregateStatus
3520
+ });
3487
3521
  }
3488
3522
  this.emitProgress({
3489
3523
  stage: "publishing-bootstrap",
@@ -3499,7 +3533,30 @@ var SponsorRelayController = class {
3499
3533
  preferSecureMetadata: profile === "uc-go-peer",
3500
3534
  attempts: 80,
3501
3535
  delayMs: 3e3,
3502
- timeoutMs: 24e4
3536
+ timeoutMs: 24e4,
3537
+ onAttempt: (result) => {
3538
+ const payload = result.payload && typeof result.payload === "object" ? result.payload : null;
3539
+ const metadata = payload?.metadata && typeof payload.metadata === "object" ? payload.metadata : null;
3540
+ this.trace("deploy:relay-metadata-attempt", {
3541
+ itemHash: args.itemHash,
3542
+ attempt: result.attempt,
3543
+ attempts: result.attempts,
3544
+ requestUrl: result.requestUrl,
3545
+ metadataUrl: result.metadataUrl,
3546
+ hostIpv4: result.hostIpv4,
3547
+ setupPort: result.setupPort,
3548
+ ok: result.ok,
3549
+ status: result.status,
3550
+ ready: result.ready,
3551
+ error: result.error ?? null,
3552
+ payloadStatus: payload && typeof payload.status === "string" ? payload.status : null,
3553
+ peerId: metadata && typeof metadata.peer_id === "string" ? metadata.peer_id : null,
3554
+ probeMultiaddrCount: Array.isArray(metadata?.probe_multiaddrs) ? metadata.probe_multiaddrs.length : 0,
3555
+ browserBootstrapMultiaddrCount: Array.isArray(
3556
+ metadata?.browser_bootstrap_multiaddrs
3557
+ ) ? metadata.browser_bootstrap_multiaddrs.length : 0
3558
+ });
3559
+ }
3503
3560
  });
3504
3561
  if (!relayMetadata) {
3505
3562
  throw new Error("Relay metadata did not include a peer ID and public multiaddrs.");
@@ -4278,6 +4335,10 @@ var SponsorRelayController = class {
4278
4335
  });
4279
4336
  if (attemptItemHash) {
4280
4337
  if (attemptDeploymentToken) {
4338
+ this.trace("deploy:bootstrap-config-cleanup-start", {
4339
+ itemHash: attemptItemHash,
4340
+ deploymentToken: attemptDeploymentToken
4341
+ });
4281
4342
  await deleteVmBootstrapConfig({
4282
4343
  sender: this.state.wallet.address,
4283
4344
  deploymentToken: attemptDeploymentToken,
@@ -4286,8 +4347,26 @@ var SponsorRelayController = class {
4286
4347
  fetch: asJsonFetch,
4287
4348
  apiHost: this.client.apiHost,
4288
4349
  sync: true
4289
- }).catch(() => void 0);
4350
+ }).then((cleanupResult) => {
4351
+ this.trace("deploy:bootstrap-config-cleanup-complete", {
4352
+ itemHash: attemptItemHash,
4353
+ deploymentToken: attemptDeploymentToken,
4354
+ aggregateItemHash: cleanupResult.aggregateItemHash,
4355
+ aggregateStatus: cleanupResult.aggregateStatus
4356
+ });
4357
+ }).catch((cleanupError) => {
4358
+ this.trace("deploy:bootstrap-config-cleanup-error", {
4359
+ itemHash: attemptItemHash,
4360
+ deploymentToken: attemptDeploymentToken,
4361
+ error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError)
4362
+ });
4363
+ });
4290
4364
  }
4365
+ this.trace("deploy:forget-failed-attempt-start", {
4366
+ itemHash: attemptItemHash,
4367
+ crnHash: candidateCrn.hash,
4368
+ crnName: candidateCrn.name
4369
+ });
4291
4370
  await forgetAlephMessages({
4292
4371
  sender: this.state.wallet.address,
4293
4372
  hashes: [attemptItemHash],
@@ -4306,6 +4385,11 @@ var SponsorRelayController = class {
4306
4385
  error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError)
4307
4386
  });
4308
4387
  });
4388
+ this.trace("deploy:forget-failed-attempt-complete", {
4389
+ itemHash: attemptItemHash,
4390
+ crnHash: candidateCrn.hash,
4391
+ crnName: candidateCrn.name
4392
+ });
4309
4393
  }
4310
4394
  if (candidateIndex < orderedCrns.length - 1) {
4311
4395
  this.emitProgress({
package/shared/index.d.ts CHANGED
@@ -304,7 +304,7 @@ declare const STALE_INSTANCE_ALLOCATION_COOLDOWN_MS: number;
304
304
  declare const RECENT_INSTANCE_RUNTIME_GRACE_MS: number;
305
305
  declare const DEPLOYMENT_PENDING_WARNING_MS: number;
306
306
 
307
- declare const UI_PACKAGE_VERSION = "0.3.12";
307
+ declare const UI_PACKAGE_VERSION = "0.3.13";
308
308
 
309
309
  interface RootfsRequiredPortForward {
310
310
  port: number;
package/shared/index.js CHANGED
@@ -38,7 +38,7 @@ var RECENT_INSTANCE_RUNTIME_GRACE_MS = 10 * 60 * 1e3;
38
38
  var DEPLOYMENT_PENDING_WARNING_MS = 3 * 60 * 1e3;
39
39
 
40
40
  // src/shared/package-version.ts
41
- var UI_PACKAGE_VERSION = "0.3.12";
41
+ var UI_PACKAGE_VERSION = "0.3.13";
42
42
 
43
43
  // src/shared/format.ts
44
44
  function shortHash(value, head = 8, tail = 6) {
@@ -2083,8 +2083,8 @@ async function fetchUcGoPeerMetadata(args) {
2083
2083
  () => controller.abort(),
2084
2084
  Number(args.timeoutMs ?? 18e4)
2085
2085
  );
2086
+ const requestUrl = args.metadataUrl && args.metadataUrl.trim() ? args.metadataUrl : `http://${args.hostIpv4}:${args.setupPort}/metadata`;
2086
2087
  try {
2087
- const requestUrl = args.metadataUrl && args.metadataUrl.trim() ? args.metadataUrl : `http://${args.hostIpv4}:${args.setupPort}/metadata`;
2088
2088
  const response = await args.fetch(
2089
2089
  requestUrl,
2090
2090
  {
@@ -2093,15 +2093,20 @@ async function fetchUcGoPeerMetadata(args) {
2093
2093
  );
2094
2094
  const payload = await response.json().catch(() => null);
2095
2095
  lastPayload = payload;
2096
- args.onAttempt?.(
2097
- payload,
2098
- Boolean(
2099
- response.ok && payload && typeof payload === "object" && payload.status === "ready"
2100
- ),
2101
- attempt + 1,
2102
- attempts
2096
+ const ready = Boolean(
2097
+ response.ok && payload && typeof payload === "object" && payload.status === "ready"
2103
2098
  );
2104
- if (response.ok && payload && typeof payload === "object" && payload.status === "ready") {
2099
+ args.onAttempt?.({
2100
+ payload,
2101
+ ready,
2102
+ attempt: attempt + 1,
2103
+ attempts,
2104
+ requestUrl,
2105
+ ok: response.ok,
2106
+ status: response.status,
2107
+ error: null
2108
+ });
2109
+ if (ready) {
2105
2110
  return payload;
2106
2111
  }
2107
2112
  if (response.status >= 500) {
@@ -2109,6 +2114,18 @@ async function fetchUcGoPeerMetadata(args) {
2109
2114
  `Relay metadata request failed: ${response.status} ${typeof payload === "string" ? payload : JSON.stringify(payload ?? {})}`
2110
2115
  );
2111
2116
  }
2117
+ } catch (error) {
2118
+ args.onAttempt?.({
2119
+ payload: null,
2120
+ ready: false,
2121
+ attempt: attempt + 1,
2122
+ attempts,
2123
+ requestUrl,
2124
+ ok: false,
2125
+ status: null,
2126
+ error: error instanceof Error ? error.message : String(error)
2127
+ });
2128
+ throw error;
2112
2129
  } finally {
2113
2130
  clearTimeout(timeout);
2114
2131
  }
@@ -2795,7 +2812,15 @@ async function fetchRelayMetadataForRuntime(args) {
2795
2812
  fetch: args.fetch,
2796
2813
  attempts: args.attempts,
2797
2814
  delayMs: args.delayMs,
2798
- timeoutMs: args.timeoutMs
2815
+ timeoutMs: args.timeoutMs,
2816
+ onAttempt: (result) => {
2817
+ args.onAttempt?.({
2818
+ ...result,
2819
+ metadataUrl,
2820
+ hostIpv4: args.runtime.hostIpv4 ?? null,
2821
+ setupPort
2822
+ });
2823
+ }
2799
2824
  }).catch(() => null);
2800
2825
  return extractRelayMetadata(payload);
2801
2826
  }
@@ -3474,7 +3499,7 @@ var SponsorRelayController = class {
3474
3499
  )
3475
3500
  }
3476
3501
  };
3477
- await publishVmBootstrapConfig({
3502
+ const bootstrapConfigPublication = await publishVmBootstrapConfig({
3478
3503
  sender: this.state.wallet.address,
3479
3504
  record,
3480
3505
  signer: personalSign,
@@ -3483,6 +3508,15 @@ var SponsorRelayController = class {
3483
3508
  apiHost: this.client.apiHost,
3484
3509
  sync: true
3485
3510
  });
3511
+ this.trace("deploy:bootstrap-config-published", {
3512
+ itemHash: args.itemHash,
3513
+ deploymentToken: args.deploymentToken,
3514
+ registrationId: record.bootstrap?.registrationId ?? null,
3515
+ proxyUrl: record.runtime.proxyUrl ?? null,
3516
+ mappedPorts: record.runtime.mappedPorts,
3517
+ aggregateItemHash: bootstrapConfigPublication.aggregateItemHash,
3518
+ aggregateStatus: bootstrapConfigPublication.aggregateStatus
3519
+ });
3486
3520
  }
3487
3521
  this.emitProgress({
3488
3522
  stage: "publishing-bootstrap",
@@ -3498,7 +3532,30 @@ var SponsorRelayController = class {
3498
3532
  preferSecureMetadata: profile === "uc-go-peer",
3499
3533
  attempts: 80,
3500
3534
  delayMs: 3e3,
3501
- timeoutMs: 24e4
3535
+ timeoutMs: 24e4,
3536
+ onAttempt: (result) => {
3537
+ const payload = result.payload && typeof result.payload === "object" ? result.payload : null;
3538
+ const metadata = payload?.metadata && typeof payload.metadata === "object" ? payload.metadata : null;
3539
+ this.trace("deploy:relay-metadata-attempt", {
3540
+ itemHash: args.itemHash,
3541
+ attempt: result.attempt,
3542
+ attempts: result.attempts,
3543
+ requestUrl: result.requestUrl,
3544
+ metadataUrl: result.metadataUrl,
3545
+ hostIpv4: result.hostIpv4,
3546
+ setupPort: result.setupPort,
3547
+ ok: result.ok,
3548
+ status: result.status,
3549
+ ready: result.ready,
3550
+ error: result.error ?? null,
3551
+ payloadStatus: payload && typeof payload.status === "string" ? payload.status : null,
3552
+ peerId: metadata && typeof metadata.peer_id === "string" ? metadata.peer_id : null,
3553
+ probeMultiaddrCount: Array.isArray(metadata?.probe_multiaddrs) ? metadata.probe_multiaddrs.length : 0,
3554
+ browserBootstrapMultiaddrCount: Array.isArray(
3555
+ metadata?.browser_bootstrap_multiaddrs
3556
+ ) ? metadata.browser_bootstrap_multiaddrs.length : 0
3557
+ });
3558
+ }
3502
3559
  });
3503
3560
  if (!relayMetadata) {
3504
3561
  throw new Error("Relay metadata did not include a peer ID and public multiaddrs.");
@@ -4277,6 +4334,10 @@ var SponsorRelayController = class {
4277
4334
  });
4278
4335
  if (attemptItemHash) {
4279
4336
  if (attemptDeploymentToken) {
4337
+ this.trace("deploy:bootstrap-config-cleanup-start", {
4338
+ itemHash: attemptItemHash,
4339
+ deploymentToken: attemptDeploymentToken
4340
+ });
4280
4341
  await deleteVmBootstrapConfig({
4281
4342
  sender: this.state.wallet.address,
4282
4343
  deploymentToken: attemptDeploymentToken,
@@ -4285,8 +4346,26 @@ var SponsorRelayController = class {
4285
4346
  fetch: asJsonFetch,
4286
4347
  apiHost: this.client.apiHost,
4287
4348
  sync: true
4288
- }).catch(() => void 0);
4349
+ }).then((cleanupResult) => {
4350
+ this.trace("deploy:bootstrap-config-cleanup-complete", {
4351
+ itemHash: attemptItemHash,
4352
+ deploymentToken: attemptDeploymentToken,
4353
+ aggregateItemHash: cleanupResult.aggregateItemHash,
4354
+ aggregateStatus: cleanupResult.aggregateStatus
4355
+ });
4356
+ }).catch((cleanupError) => {
4357
+ this.trace("deploy:bootstrap-config-cleanup-error", {
4358
+ itemHash: attemptItemHash,
4359
+ deploymentToken: attemptDeploymentToken,
4360
+ error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError)
4361
+ });
4362
+ });
4289
4363
  }
4364
+ this.trace("deploy:forget-failed-attempt-start", {
4365
+ itemHash: attemptItemHash,
4366
+ crnHash: candidateCrn.hash,
4367
+ crnName: candidateCrn.name
4368
+ });
4290
4369
  await forgetAlephMessages({
4291
4370
  sender: this.state.wallet.address,
4292
4371
  hashes: [attemptItemHash],
@@ -4305,6 +4384,11 @@ var SponsorRelayController = class {
4305
4384
  error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError)
4306
4385
  });
4307
4386
  });
4387
+ this.trace("deploy:forget-failed-attempt-complete", {
4388
+ itemHash: attemptItemHash,
4389
+ crnHash: candidateCrn.hash,
4390
+ crnName: candidateCrn.name
4391
+ });
4308
4392
  }
4309
4393
  if (candidateIndex < orderedCrns.length - 1) {
4310
4394
  this.emitProgress({