中间
应用软件的freqhole世界的统一取道:a MiddenNode 课
浏览器与 freqhole 同行讨论 iroh p2p - api 请求, 已核实 blob 流出,
由 offs 支撑的持久块存储、块化导入会话、收音机和原始双向
用于应用协议的流 。 生锈货箱,用原木-宾德根/瓦斯-包装;npm包件
@freqhole/midden。 。 。 .
结构
graph LR
subgraph browser
APP[your app / worker]
MN[MiddenNode wasm]
OPFS[(opfs blob store)]
end
subgraph peers
P1[always-on peer<br/>grimoire / tumulus / any]
P2[another browser]
end
APP --> MN
MN --- OPFS
MN <-- "iroh p2p (relay discovery + direct)" --> P1 & P2
默认注册的 ALPN 集为 app 中性 基础 (freqhole/1自动同步,
朋友,管理员,事件, iroh -blobs。 应用特定ALPN通过 extra_alpns - 说吧
这里没有硬码.
结构
src/
lib.rs MiddenNode + options, bi-streams, blob transfer, import sessions
opfs_store/ persistent browser blob store (storage-generic core, native tests)
radio.rs radio streaming
pkg/ committed wasm-pack output - consumers file:-dep straight at it
Makefile build targets
pkg/ 检查为 git : 每次重建 src/ 改变或消费者看不到
变化.
开始中
import { MiddenNode, MiddenNodeOptions } from "@freqhole/midden";
const options = new MiddenNodeOptions();
options.set_secret_key(mySecretKeyBytes); // omit to generate fresh
options.set_opfs_store_dir("myapp-blobs"); // persistent blob store
options.set_extra_alpns(["myapp/1"]); // app protocol ALPNs
const node = await MiddenNode.create_with_options(options);
console.log("node id:", node.node_id());
// request/response to a peer (json over iroh; same dispatch shape as http)
const resp = await node.api_request(peerAddr, "GET", "/api/hello", null);
// verified blob download with progress
const bytes = await node.download_verified_with_ensure_progress(
peerAddr,
blake3Hash,
totalSize,
(fraction) => {},
downloadId,
);
// raw bidirectional stream for your own protocol
const stream = await node.open_bi(peerAddr, "myapp/1");
await stream.write_raw_and_finish(encodedRequest);
const reply = await stream.read_to_end(64 * 1024);
peer_addr 接受光64-hex节点id(中继发现)或全端点json
(单位:千美元){"id":"...","addrs":[...]} 带有中继/ip提示).
其他表面 : import_blob编号 :release_blob (同行的相位字节), ImportSession
(用增量的 blake3 进行整流导入), Blake3Hasher, (中文(简体) ), CancelToken + 键
download_cancel (暂停/恢复), protect_blob编号 :unprotect_blob (克针),
has_complete_blob自我测试 无线电.
开发者快速启动
cargo install wasm-pack
brew install llvm # macos: wasm toolchain needs it
make build # dev build -> pkg/
make build-release # optimized
cargo test # native tests (opfs_store core runs without a browser)
今天的消费者:坟墓/泉水+鼠洞,skein/loam,播放列表-全部通过 file: 代码 :
pkg/ (例如:. file:../../midden/pkg毒气的消费者将这捆绑在工人需要的
解析 Id- plugin 模式 (参见 @ freqhole/ reliquary's README) .
协议
与Greanoire联邦运输公司相同的电线协议:ALPN freqhole/1、 消息
ApiRequest编号 :ApiResponse, (中文(简体) ), EnsureBlobRequest编号 :EnsureBlobResponse,blob 流出为 a
长度前缀头+生字节. 见 grimoire/src/federation/transport/protocol.rs。 。 。 .
在纽约市与..