| … | … | @@ -35,6 +35,9 @@ |
| 35 | 35 | }, |
| 36 | 36 | "engines": { |
| 37 | 37 | "node": ">=20.0.0" |
| 38 | }, | |
| 39 | "optionalDependencies": { | |
| 40 | "bare-runtime-linux-x64": "1.28.7" | |
| 38 | 41 | } |
| 39 | 42 | }, |
| 40 | 43 | "node_modules/@esbuild/darwin-arm64": { |
| … | … | @@ -1491,6 +1494,25 @@ |
| 1491 | 1494 | "bare": "bin/bare" |
| 1492 | 1495 | } |
| 1493 | 1496 | }, |
| 1497 | "node_modules/bare-runtime-linux-x64": { | |
| 1498 | "version": "1.28.7", | |
| 1499 | "resolved": "https://registry.npmjs.org/bare-runtime-linux-x64/-/bare-runtime-linux-x64-1.28.7.tgz", | |
| 1500 | "integrity": "sha512-dxINveQPlDc0VG7FljH5JKdTg9kH66pwCPVG+uppchU912o9JP+MUd4VBhp/KXapeUAkKUaKs7vsfeF9UVERdA==", | |
| 1501 | "cpu": [ | |
| 1502 | "x64" | |
| 1503 | ], | |
| 1504 | "license": "Apache-2.0", | |
| 1505 | "optional": true, | |
| 1506 | "os": [ | |
| 1507 | "linux" | |
| 1508 | ], | |
| 1509 | "dependencies": { | |
| 1510 | "require-asset": "^1.0.2" | |
| 1511 | }, | |
| 1512 | "bin": { | |
| 1513 | "bare": "bin/bare" | |
| 1514 | } | |
| 1515 | }, | |
| 1494 | 1516 | "node_modules/bare-semver": { |
| 1495 | 1517 | "version": "1.0.3", |
| 1496 | 1518 | "license": "Apache-2.0" |
| … | … | @@ -5511,7 +5533,9 @@ |
| 5511 | 5533 | } |
| 5512 | 5534 | }, |
| 5513 | 5535 | "node_modules/protobufjs": { |
| 5514 | "version": "7.6.4", | |
| 5536 | "version": "7.6.5", | |
| 5537 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", | |
| 5538 | "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", | |
| 5515 | 5539 | "hasInstallScript": true, |
| 5516 | 5540 | "license": "BSD-3-Clause", |
| 5517 | 5541 | "dependencies": { |
| … | … | @@ -5751,10 +5775,8 @@ |
| 5751 | 5775 | }, |
| 5752 | 5776 | "node_modules/require-asset": { |
| 5753 | 5777 | "version": "1.2.2", |
| 5754 | "dev": true, | |
| 5755 | 5778 | "license": "Apache-2.0", |
| 5756 | 5779 | "optional": true, |
| 5757 | "peer": true, | |
| 5758 | 5780 | "dependencies": { |
| 5759 | 5781 | "bare-module-resolve": "^1.6.2" |
| 5760 | 5782 | }, |
| … | … | @@ -170,6 +170,7 @@ |
| 170 | 170 | "scripts/test-*.js", |
| 171 | 171 | "examples/**", |
| 172 | 172 | "**/dist/**", |
| 173 | "packages/blind-client/browser-artifacts/**", | |
| 173 | 174 | "**/transports/dht-relay-ws/vendor/**" |
| 174 | 175 | ] |
| 175 | 176 | }, |
| … | … | @@ -179,6 +180,9 @@ |
| 179 | 180 | }, |
| 180 | 181 | "overrides": { |
| 181 | 182 | "js-yaml": "^4.2.0", |
| 182 | "protobufjs": "^7.6.4" | |
| 183 | "protobufjs": "^7.6.5" | |
| 184 | }, | |
| 185 | "optionalDependencies": { | |
| 186 | "bare-runtime-linux-x64": "1.28.7" | |
| 183 | 187 | } |
| 184 | 188 | } |
| … | … | @@ -5,8 +5,8 @@ |
| 5 | 5 | "artifactPath": "browser-artifacts/blind-client-control-v1.mjs", |
| 6 | 6 | "artifactLength": 253673, |
| 7 | 7 | "artifactHash": "51bf061fb2d86cee91eb905a021e77774a37e27f0bba3ccb6d4e7688dcbc41a2", |
| 8 | "manifestHash": "bc40b1fdecea1e1105ed279e62c6f4ece2bb2f7813cee117290cb79b13298d64", | |
| 9 | "sourceClosureHash": "fe96ce663e6831155db3c5ebe0b79256e7ca75c381713c546070c4ab7d5fccd2", | |
| 8 | "manifestHash": "db6614b6b5c50eebe74ebf199905c5c62a13ddc99bfbc6cb9042ad60c69976c4", | |
| 9 | "sourceClosureHash": "6b648f3896b2cb1d3d7e5a5f2cee2554b1b5ce80d60134aa64bce2a8e71d93eb", | |
| 10 | 10 | "chromium": "Google Chrome for Testing 151.0.7922.34", |
| 11 | 11 | "checks": [ |
| 12 | 12 | "STANDALONE_ESM_IMPORT", |
| … | … | @@ -5,8 +5,8 @@ |
| 5 | 5 | "artifactPath": "browser-artifacts/blind-client-control-v1.mjs", |
| 6 | 6 | "artifactLength": 253673, |
| 7 | 7 | "artifactHash": "51bf061fb2d86cee91eb905a021e77774a37e27f0bba3ccb6d4e7688dcbc41a2", |
| 8 | "manifestHash": "bc40b1fdecea1e1105ed279e62c6f4ece2bb2f7813cee117290cb79b13298d64", | |
| 9 | "sourceClosureHash": "fe96ce663e6831155db3c5ebe0b79256e7ca75c381713c546070c4ab7d5fccd2", | |
| 8 | "manifestHash": "db6614b6b5c50eebe74ebf199905c5c62a13ddc99bfbc6cb9042ad60c69976c4", | |
| 9 | "sourceClosureHash": "6b648f3896b2cb1d3d7e5a5f2cee2554b1b5ce80d60134aa64bce2a8e71d93eb", | |
| 10 | 10 | "platform": "linux", |
| 11 | 11 | "architecture": "arm64", |
| 12 | 12 | "containerImageId": "sha256:813a7480f28fdadac1f7f5c824bcdad435b5bc1322a5968bbbdef8d058f9dff4", |
| … | … | @@ -6,7 +6,6 @@ import b4a from 'b4a' |
| 6 | 6 | import { |
| 7 | 7 | allocationCommitment, |
| 8 | 8 | blake2b256, |
| 9 | blindPreparedAdmissionStoreV1, | |
| 10 | 9 | cellPutRequestCommitment, |
| 11 | 10 | cellStorageSlot, |
| 12 | 11 | encodeCanonical, |
| … | … | @@ -328,7 +328,7 @@ test('crash mid-prune leaves a contiguous retained prefix and an unpoisoned writ |
| 328 | 328 | const root = await temporaryRoot(t) |
| 329 | 329 | const store = new BlindTransactionStore(storeOptions(root)) |
| 330 | 330 | await store.open(() => {}) |
| 331 | const frames = await appendFrames(store, 1, 16) | |
| 331 | await appendFrames(store, 1, 16) | |
| 332 | 332 | await store.close() |
| 333 | 333 | |
| 334 | 334 | let pruneFaults = 0 |
| … | … | @@ -233,7 +233,7 @@ export async function createRelayIdentityFixture (options = {}) { |
| 233 | 233 | } |
| 234 | 234 | |
| 235 | 235 | // Materialize one relay's launch environment under a contained scratch root. |
| 236 | // Unix socket paths live under a short /private/tmp root: the portable | |
| 236 | // Unix socket paths live under the short POSIX /tmp root: the portable | |
| 237 | 237 | // <=100-byte socket path bound cannot be met inside this run's deep checkout |
| 238 | 238 | // (a pre-existing environment limitation of every boundary test here, noted |
| 239 | 239 | // in the lane evidence). The tmp root is real (no symlink ancestors) and is |
| … | … | @@ -241,7 +241,7 @@ export async function createRelayIdentityFixture (options = {}) { |
| 241 | 241 | export async function createRelayEnvironmentFixture (identity, options = {}) { |
| 242 | 242 | const directory = options.directory || await createBlindBoundaryScratch(options.prefix || 'fhv-') |
| 243 | 243 | await fs.chmod(directory, 0o700) |
| 244 | const socketDirectory = await fs.mkdtemp(path.join('/private/tmp', 'fhv-')) | |
| 244 | const socketDirectory = await fs.mkdtemp(path.join(await fs.realpath('/tmp'), 'fhv-')) | |
| 245 | 245 | await fs.chmod(socketDirectory, 0o700) |
| 246 | 246 | const roots = {} |
| 247 | 247 | for (const name of ['store', 'inbox-store', 'core-store', 'private-ipc-replay', 'forward-storage']) { |
| … | … | @@ -2,6 +2,7 @@ import { |
| 2 | 2 | EXTENDED_SCHEMA_METADATA, |
| 3 | 3 | SCHEMA_METADATA_OVERRIDES |
| 4 | 4 | } from './extended-schema-metadata.js' |
| 5 | import { protocolError } from './errors.js' | |
| 5 | 6 | |
| 6 | 7 | const KiB = 1024 |
| 7 | 8 | const MiB = 1024 * KiB |
| … | … | @@ -93,7 +93,7 @@ export function normalizeFleetBaseUrl (value) { |
| 93 | 93 | if (!isAllowedFleetBaseUrl(value)) return null |
| 94 | 94 | const u = new URL(value.trim()) |
| 95 | 95 | // Drop path noise except intentional path prefix (e.g. reverse-proxy mount). |
| 96 | let base = u.origin + (u.pathname === '/' ? '' : u.pathname.replace(/\/+$/, '')) | |
| 96 | const base = u.origin + (u.pathname === '/' ? '' : u.pathname.replace(/\/+$/, '')) | |
| 97 | 97 | return base |
| 98 | 98 | } |
| 99 | 99 | |
| … | … | @@ -472,11 +472,11 @@ export async function buildFleetRoutePayload ({ |
| 472 | 472 | seededApps: stats && stats.seededApps, |
| 473 | 473 | health: typeof node.getHealthStatus === 'function' |
| 474 | 474 | ? (() => { |
| 475 | try { | |
| 476 | const h = node.getHealthStatus() | |
| 477 | return h ? { healthy: h.healthy === true } : null | |
| 478 | } catch { return null } | |
| 479 | })() | |
| 475 | try { | |
| 476 | const h = node.getHealthStatus() | |
| 477 | return h ? { healthy: h.healthy === true } : null | |
| 478 | } catch { return null } | |
| 479 | })() | |
| 480 | 480 | : null, |
| 481 | 481 | disk: stats && stats.disk, |
| 482 | 482 | storage: stats && stats.storage, |
| … | … | @@ -1435,7 +1435,10 @@ if (!wireOnly) { |
| 1435 | 1435 | 'packages', 'blind-ipc', 'hiverelay-blind-private-ipc-authority-v1.json'), 'utf8')) |
| 1436 | 1436 | const closure = { |
| 1437 | 1437 | schema: 'hiverelay.blind.release-closure.v1', |
| 1438 | profile: ABI_STATUS.profile, | |
| 1438 | profile: { | |
| 1439 | artifact: 'docs/protocol/HIVERELAY-BLIND-RC1-PROFILE-BINDING-V1.json', | |
| 1440 | ...profileBinding | |
| 1441 | }, | |
| 1439 | 1442 | wire: { |
| 1440 | 1443 | artifact: 'packages/blind-protocol/hiverelay-blind-wire-authority-v1.json', |
| 1441 | 1444 | specHash: completeHashes.specHash, |
| … | … | @@ -1457,10 +1460,6 @@ if (!wireOnly) { |
| 1457 | 1460 | privateIpcFormatHash: privateIpcAuthority.privateIpcFormatHash, |
| 1458 | 1461 | privateIpcVectorSetHash: privateIpcAuthority.privateIpcVectorSetHash |
| 1459 | 1462 | }, |
| 1460 | profile: { | |
| 1461 | artifact: 'docs/protocol/HIVERELAY-BLIND-RC1-PROFILE-BINDING-V1.json', | |
| 1462 | ...profileBinding | |
| 1463 | }, | |
| 1464 | 1463 | decisions: { |
| 1465 | 1464 | artifact: 'docs/protocol/HIVERELAY-BLIND-OWNER-DECISIONS-V1.json', |
| 1466 | 1465 | decisionsHash: b4a.toString(hashOwnerDecisions(canonicalOwnerDecisionsBytes), 'hex'), |
| … | … | @@ -42,7 +42,7 @@ function reservedEnvelope (pair) { |
| 42 | 42 | }, { randomFill: padding => padding.fill(0x5a) }) |
| 43 | 43 | } |
| 44 | 44 | |
| 45 | const root = await fs.mkdtemp(path.join('/private/tmp', 'blind-reserved-edge-')) | |
| 45 | const root = await fs.mkdtemp(path.join(await fs.realpath('/tmp'), 'blind-reserved-edge-')) | |
| 46 | 46 | const socketPath = path.join(root, 'daemon.sock') |
| 47 | 47 | let daemonConnections = 0 |
| 48 | 48 | const daemonTrap = net.createServer(socket => { |
| … | … | @@ -148,7 +148,7 @@ function writeReadinessProjection (launchTopologyHash, transportProfileHash) { |
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | test('generic blind client reaches daemon through the metadata-stripping edge', async t => { |
| 151 | const directory = await fs.mkdtemp('/private/tmp/blind-client-e2e-') | |
| 151 | const directory = await fs.mkdtemp(path.join(await fs.realpath('/tmp'), 'blind-client-e2e-')) | |
| 152 | 152 | const unarySocketPath = path.join(directory, 'unary.sock') |
| 153 | 153 | const streamSocketPath = path.join(directory, 'stream.sock') |
| 154 | 154 | const launchTopologyHash = b4a.alloc(32, 45) |
| … | … | @@ -242,7 +242,7 @@ test('generic blind client reaches daemon through the metadata-stripping edge', |
| 242 | 242 | }) |
| 243 | 243 | |
| 244 | 244 | test('public CELL.PUT reaches the daemon staged-content path instead of unary IPC', async t => { |
| 245 | const directory = await fs.mkdtemp('/private/tmp/blind-client-staged-put-e2e-') | |
| 245 | const directory = await fs.mkdtemp(path.join(await fs.realpath('/tmp'), 'blind-client-staged-put-e2e-')) | |
| 246 | 246 | const unarySocketPath = path.join(directory, 'unary.sock') |
| 247 | 247 | const streamSocketPath = path.join(directory, 'stream.sock') |
| 248 | 248 | const launchTopologyHash = b4a.alloc(32, 51) |
| … | … | @@ -161,7 +161,7 @@ function contains (haystack, needle) { |
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | test('a running generic relay accepts unrelated and later-created apps without restart or configuration', async t => { |
| 164 | const directory = await fs.mkdtemp('/private/tmp/blind-late-app-') | |
| 164 | const directory = await fs.mkdtemp(path.join(await fs.realpath('/tmp'), 'blind-late-app-')) | |
| 165 | 165 | const unarySocketPath = path.join(directory, 'unary.sock') |
| 166 | 166 | const streamSocketPath = path.join(directory, 'stream.sock') |
| 167 | 167 | const launchTopologyHash = b4a.alloc(32, 0x71) |
| … | … | @@ -1,6 +1,5 @@ |
| 1 | 1 | import test from 'brittle' |
| 2 | 2 | import b4a from 'b4a' |
| 3 | import Corestore from 'corestore' | |
| 4 | 3 | import { openCorestore } from '../../packages/core/core/persistence/storage-root-restore.js' |
| 5 | 4 | import { access, mkdir, mkdtemp, rm, writeFile } from 'fs/promises' |
| 6 | 5 | import { tmpdir } from 'os' |
| … | … | @@ -29,9 +29,9 @@ const FROZEN_SHA256 = Object.freeze({ |
| 29 | 29 | 'packages/blind-protocol/hiverelay-blind-client-composition-vector-manifest-v1.cenc': 'b26ab9a86ccd665255ee17dd742ffc39acceeb670bc01a7f7633460cb9d7cee9', |
| 30 | 30 | 'packages/blind-protocol/client-composition-authority-generated.js': 'a66d7211bdedd3b0d0e580c7d6c504584001ee1bf5747ad9b27d8ee5e2b566aa', |
| 31 | 31 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.mjs': '10425bb00fb8045e63ce2869b5e6bf88af39dc0723963203a6b021e0fd28090a', |
| 32 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.manifest.cenc': '76a7ea97db644971203c2f94c476614a95b0320980a58504b927f04b152aadf1', | |
| 33 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.chromium-evidence.json': '1382b24b21cae661392a199b0470a22768b85f62215db6fb943ed17b66859c2e', | |
| 34 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.cross-host-evidence.json': '3cfd3c12a7664899a0901eff7b613f85da6fd039b930f74ade5bc820d215dcd2' | |
| 32 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.manifest.cenc': '75469374bdbe254ef12e1a92894d3621b7b571b4592466304a9d586d3ac10bd4', | |
| 33 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.chromium-evidence.json': 'f0a5970c711e68de99a9700f69ca00f82d607101eaa8e16f265db7a284c60d3b', | |
| 34 | 'packages/blind-client/browser-artifacts/blind-client-control-v1.cross-host-evidence.json': 'b22aaaecc049fcd1242a7c7b33808a381bb64e2bceb82a380d4e6376c40022d9' | |
| 35 | 35 | }) |
| 36 | 36 | |
| 37 | 37 | test('blind v1 compatibility floor: frozen authority and mirror bytes remain exact', t => { |
| … | … | @@ -12,13 +12,12 @@ import { |
| 12 | 12 | writeFileSync |
| 13 | 13 | } from 'node:fs' |
| 14 | 14 | import { spawnSync } from 'node:child_process' |
| 15 | import { tmpdir } from 'node:os' | |
| 16 | 15 | import path from 'node:path' |
| 17 | 16 | |
| 18 | 17 | const tool = path.resolve('fleet/quarantine-public-gateway.sh') |
| 19 | 18 | |
| 20 | 19 | function fixture (t) { |
| 21 | const root = realpathSync(mkdtempSync(path.join(tmpdir(), 'hr-gateway-quarantine-'))) | |
| 20 | const root = realpathSync(mkdtempSync(path.join(realpathSync(process.cwd()), '.hr-gateway-quarantine-'))) | |
| 22 | 21 | const active = path.join(root, 'hiverelay-public-apps.conf') |
| 23 | 22 | const backup = path.join(root, 'hiverelay-public-apps.conf.pre-quarantine') |
| 24 | 23 | const nginx = path.join(root, 'nginx') |