@net-mesh/sdk 0.26.0 → 0.27.0-beta.1

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/dist/index.d.ts CHANGED
@@ -53,6 +53,7 @@ export type { MeshOsDaemon, MeshOsConfig, MeshOsDaemonSdkOptions, DaemonControl,
53
53
  export { ReplicaGroup, ForkGroup, StandbyGroup, GroupError } from './groups';
54
54
  export type { GroupErrorKind, GroupStrategy, GroupHealth, GroupMemberInfo, GroupHostConfig, ForkRecord, RequestContext, ReplicaGroupConfig, ForkGroupConfig, StandbyGroupConfig, } from './groups';
55
55
  export { RedisStreamDedup } from './redis-dedup';
56
+ export { TransferControl, TransferHeader, transferStreamId, isTransferStreamId, nextTransferStreamId, } from './transport';
56
57
  export type { NetNodeConfig, Transport, Receipt, PollRequest, PollResponseData, Stats, SubscribeOpts, StoredEvent, } from './types';
57
58
  export type { ToolDescriptor, ToolEvent, ToolEventStart, ToolEventProgress, ToolEventDelta, ToolEventResult, ToolEventError, ToolOptions, ToolHandler, ToolServeHandle, StreamingToolHandler, ToolListChange, WatchToolsOptions, ToolMetadataResponse, ToolCallSpec, } from './tool';
58
59
  export { isTerminalEvent, descriptorFrom, serveTool, serveToolStreaming, callTool, callToolStreaming, listTools, watchTools, addToolCapabilitiesToAnnounce, fetchToolMetadata, ToolCallParseError, TOOL_METADATA_FETCH_SERVICE, openai, anthropic, mcp, gemini, } from './tool';
package/dist/index.js CHANGED
@@ -28,8 +28,8 @@
28
28
  */
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.standardPlacement = exports.StandardPlacementBuilder = exports.withMetadata = exports.requireAxisValue = exports.requireTag = exports.emptyCapabilities = exports.diffCapabilities = exports.whereHeader = exports.predicateFromRpcHeader = exports.predicateToRpcHeader = exports.predicateFromWire = exports.predicateToWire = exports.p = exports.startsWithReservedPrefix = exports.tagFromUserString = exports.tagFromString = exports.tagToString = exports.tagKey = exports.RPC_WHERE_HEADER = exports.RESERVED_PREFIXES = exports.TAXONOMY_AXES = exports.withSubnetLocalScope = exports.withRegionScope = exports.withTenantScope = exports.SCOPE_SUBNET_LOCAL = exports.SCOPE_REGION_PREFIX = exports.SCOPE_TENANT_PREFIX = exports.delegateToken = exports.channelHash = exports.TokenError = exports.IdentityError = exports.Token = exports.Identity = exports.RedexError = exports.NetDbError = exports.CortexError = exports.MemoriesAdapter = exports.TasksAdapter = exports.NetDb = exports.RedexFile = exports.Redex = exports.ChannelAuthError = exports.ChannelError = exports.NotConnectedError = exports.BackpressureError = exports.MeshNode = exports.TypedChannel = exports.TypedEventStream = exports.EventStream = exports.NetNode = void 0;
31
- exports.anthropic = exports.openai = exports.TOOL_METADATA_FETCH_SERVICE = exports.ToolCallParseError = exports.fetchToolMetadata = exports.addToolCapabilitiesToAnnounce = exports.watchTools = exports.listTools = exports.callToolStreaming = exports.callTool = exports.serveToolStreaming = exports.serveTool = exports.descriptorFrom = exports.isTerminalEvent = exports.RedisStreamDedup = exports.GroupError = exports.StandbyGroup = exports.ForkGroup = exports.ReplicaGroup = exports.MeshOsSdkError = exports.MeshOsDaemonHandle = exports.MeshOsDaemonSdk = exports.parseMeshDbErrorKind = exports.QueryBuilder = exports.MeshQueryStream = exports.MeshQueryRunner = exports.MeshQuery = exports.InMemoryChainReader = exports.DisposableMeshQueryRunner = exports.MigrationError = exports.MigrationHandle = exports.DaemonError = exports.DaemonHandle = exports.DaemonRuntime = exports.GLOBAL_SUBNET = exports.subnetId = exports.validateCapabilities = exports.isReportValid = exports.isReportClean = exports.METADATA_SOFT_CAP_BYTES = exports.METADATA_RESERVED_PREFIXES = exports.METADATA_RESERVED_KEYS = exports.AXIS_SCHEMA = exports.renderDebugReport = exports.redactMetadataKeys = exports.predicateDebugReportFromWire = exports.predicateDebugReport = exports.evaluatePredicateWithTrace = exports.evaluatePredicate = exports.placementFilterFromFn = void 0;
32
- exports.gemini = exports.mcp = void 0;
31
+ exports.addToolCapabilitiesToAnnounce = exports.watchTools = exports.listTools = exports.callToolStreaming = exports.callTool = exports.serveToolStreaming = exports.serveTool = exports.descriptorFrom = exports.isTerminalEvent = exports.nextTransferStreamId = exports.isTransferStreamId = exports.transferStreamId = exports.TransferHeader = exports.TransferControl = exports.RedisStreamDedup = exports.GroupError = exports.StandbyGroup = exports.ForkGroup = exports.ReplicaGroup = exports.MeshOsSdkError = exports.MeshOsDaemonHandle = exports.MeshOsDaemonSdk = exports.parseMeshDbErrorKind = exports.QueryBuilder = exports.MeshQueryStream = exports.MeshQueryRunner = exports.MeshQuery = exports.InMemoryChainReader = exports.DisposableMeshQueryRunner = exports.MigrationError = exports.MigrationHandle = exports.DaemonError = exports.DaemonHandle = exports.DaemonRuntime = exports.GLOBAL_SUBNET = exports.subnetId = exports.validateCapabilities = exports.isReportValid = exports.isReportClean = exports.METADATA_SOFT_CAP_BYTES = exports.METADATA_RESERVED_PREFIXES = exports.METADATA_RESERVED_KEYS = exports.AXIS_SCHEMA = exports.renderDebugReport = exports.redactMetadataKeys = exports.predicateDebugReportFromWire = exports.predicateDebugReport = exports.evaluatePredicateWithTrace = exports.evaluatePredicate = exports.placementFilterFromFn = void 0;
32
+ exports.gemini = exports.mcp = exports.anthropic = exports.openai = exports.TOOL_METADATA_FETCH_SERVICE = exports.ToolCallParseError = exports.fetchToolMetadata = void 0;
33
33
  // Main handle.
34
34
  var node_1 = require("./node");
35
35
  Object.defineProperty(exports, "NetNode", { enumerable: true, get: function () { return node_1.NetNode; } });
@@ -146,6 +146,15 @@ Object.defineProperty(exports, "GroupError", { enumerable: true, get: function (
146
146
  // module directly.
147
147
  var redis_dedup_1 = require("./redis-dedup");
148
148
  Object.defineProperty(exports, "RedisStreamDedup", { enumerable: true, get: function () { return redis_dedup_1.RedisStreamDedup; } });
149
+ // Transport surface (blob + directory transfer over the fairscheduler
150
+ // stream transport). Wire types + stream-id helpers; node-driven ops
151
+ // follow with the Node behavioural tests (T-H).
152
+ var transport_1 = require("./transport");
153
+ Object.defineProperty(exports, "TransferControl", { enumerable: true, get: function () { return transport_1.TransferControl; } });
154
+ Object.defineProperty(exports, "TransferHeader", { enumerable: true, get: function () { return transport_1.TransferHeader; } });
155
+ Object.defineProperty(exports, "transferStreamId", { enumerable: true, get: function () { return transport_1.transferStreamId; } });
156
+ Object.defineProperty(exports, "isTransferStreamId", { enumerable: true, get: function () { return transport_1.isTransferStreamId; } });
157
+ Object.defineProperty(exports, "nextTransferStreamId", { enumerable: true, get: function () { return transport_1.nextTransferStreamId; } });
149
158
  var tool_1 = require("./tool");
150
159
  Object.defineProperty(exports, "isTerminalEvent", { enumerable: true, get: function () { return tool_1.isTerminalEvent; } });
151
160
  Object.defineProperty(exports, "descriptorFrom", { enumerable: true, get: function () { return tool_1.descriptorFrom; } });
package/dist/mesh.d.ts CHANGED
@@ -249,11 +249,14 @@ export declare class MeshNode {
249
249
  *
250
250
  * Pass `opts.token` to present a
251
251
  * {@link Token PermissionToken} issued by the publisher — required
252
- * when the channel was registered with `requireToken: true` or
253
- * when your caps alone don't satisfy `subscribeCaps`. The
254
- * publisher verifies the signature, checks `subject ===
255
- * thisNode.entityId`, installs it in its local cache, then runs
256
- * the ACL check.
252
+ * when the channel was registered with `tokenRoots` (token
253
+ * enforcement) or when your caps alone don't satisfy
254
+ * `subscribeCaps`. The publisher verifies the presented token chain
255
+ * it must root at one of the channel's `tokenRoots`, bind at its
256
+ * leaf to this node's entity id, and authorize `subscribe` — before
257
+ * admitting the subscribe. The credential must be presented on every
258
+ * subscribe; a previously-accepted one is not reused for a later
259
+ * bare subscribe.
257
260
  *
258
261
  * Throws a {@link ChannelAuthError} or {@link ChannelError} on
259
262
  * rejection; network-level failures propagate as plain `Error`.
@@ -374,8 +377,18 @@ export interface ChannelConfig {
374
377
  /**
375
378
  * When true, subscribers must present a valid
376
379
  * `PermissionToken` whose subject matches their entity id.
380
+ * On its own (no `tokenRoots`) this fails every authorization
381
+ * closed — pass `tokenRoots` to anchor a root of trust.
377
382
  */
378
383
  requireToken?: boolean;
384
+ /**
385
+ * Root(s) of trust for token authorization: 32-byte entity ids
386
+ * whose signature may root a presented token chain. Setting this
387
+ * turns on token enforcement and anchors the channel — a chain is
388
+ * only honored if its root link was issued by one of these
389
+ * entities (e.g. the publisher that issues subscribe tokens).
390
+ */
391
+ tokenRoots?: Buffer[];
379
392
  /** Priority (0 = lowest). */
380
393
  priority?: number;
381
394
  /** Rate cap in packets per second. */
package/dist/mesh.js CHANGED
@@ -294,6 +294,7 @@ class MeshNode {
294
294
  visibility: config.visibility,
295
295
  reliable: config.reliable,
296
296
  requireToken: config.requireToken,
297
+ tokenRoots: config.tokenRoots,
297
298
  priority: config.priority,
298
299
  maxRatePps: config.maxRatePps,
299
300
  publishCaps: config.publishCaps
@@ -315,11 +316,14 @@ class MeshNode {
315
316
  *
316
317
  * Pass `opts.token` to present a
317
318
  * {@link Token PermissionToken} issued by the publisher — required
318
- * when the channel was registered with `requireToken: true` or
319
- * when your caps alone don't satisfy `subscribeCaps`. The
320
- * publisher verifies the signature, checks `subject ===
321
- * thisNode.entityId`, installs it in its local cache, then runs
322
- * the ACL check.
319
+ * when the channel was registered with `tokenRoots` (token
320
+ * enforcement) or when your caps alone don't satisfy
321
+ * `subscribeCaps`. The publisher verifies the presented token chain
322
+ * it must root at one of the channel's `tokenRoots`, bind at its
323
+ * leaf to this node's entity id, and authorize `subscribe` — before
324
+ * admitting the subscribe. The credential must be presented on every
325
+ * subscribe; a previously-accepted one is not reused for a later
326
+ * bare subscribe.
323
327
  *
324
328
  * Throws a {@link ChannelAuthError} or {@link ChannelError} on
325
329
  * rejection; network-level failures propagate as plain `Error`.
@@ -0,0 +1 @@
1
+ export { TransferControl, TransferHeader, transferStreamId, isTransferStreamId, nextTransferStreamId, } from '@net-mesh/core';
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ // Transport surface — on-demand cross-peer blob + directory transfer
3
+ // over the fairscheduler stream transport (Transport SDK plan, T-E).
4
+ //
5
+ // Moves content-addressed bytes (and whole directory trees) between
6
+ // peers over the substrate's reliable, fair-scheduled streams —
7
+ // distinct from RedEX replication (a push primitive) and nRPC
8
+ // (request/reply). Mirrors the Rust `net_sdk::transport` surface, the
9
+ // C ABI in `include/net_transport.h`, and the Python `net_sdk.transport`
10
+ // module.
11
+ //
12
+ // This module re-exports the cross-language wire contract + the
13
+ // stream-id helpers from the napi binding (`@net-mesh/core`):
14
+ //
15
+ // - `TransferControl` / `TransferHeader` — the postcard wire types
16
+ // with `encode()` / `decode()`, byte-identical across every
17
+ // language tier (locked by the cross-language golden vectors).
18
+ // - `transferStreamId` / `isTransferStreamId` / `nextTransferStreamId`.
19
+ //
20
+ // The node-driven ops (`serveBlobTransfer`, `fetchBlob`,
21
+ // `fetchBlobDiscovered`, `storeDir`, `fetchDir`) are methods on the
22
+ // napi `NetMesh` class (see `bindings/node/src/transport.rs`); the SDK
23
+ // `MeshNode` wrapper in `mesh.ts` delegates to them. A `napi build` must
24
+ // regenerate `@net-mesh/core`'s typings before tsc sees the new symbols.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.nextTransferStreamId = exports.isTransferStreamId = exports.transferStreamId = exports.TransferHeader = exports.TransferControl = void 0;
27
+ var core_1 = require("@net-mesh/core");
28
+ Object.defineProperty(exports, "TransferControl", { enumerable: true, get: function () { return core_1.TransferControl; } });
29
+ Object.defineProperty(exports, "TransferHeader", { enumerable: true, get: function () { return core_1.TransferHeader; } });
30
+ Object.defineProperty(exports, "transferStreamId", { enumerable: true, get: function () { return core_1.transferStreamId; } });
31
+ Object.defineProperty(exports, "isTransferStreamId", { enumerable: true, get: function () { return core_1.isTransferStreamId; } });
32
+ Object.defineProperty(exports, "nextTransferStreamId", { enumerable: true, get: function () { return core_1.nextTransferStreamId; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@net-mesh/sdk",
3
- "version": "0.26.0",
3
+ "version": "0.27.0-beta.1",
4
4
  "description": "Ergonomic TypeScript SDK for the Net mesh network",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  "test:watch": "vitest"
40
40
  },
41
41
  "peerDependencies": {
42
- "@net-mesh/core": ">=0.26.0"
42
+ "@net-mesh/core": ">=0.27.0-0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@net-mesh/core": "file:../bindings/node",