@macula-io/ts 0.21.0 → 0.22.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/README.md CHANGED
@@ -63,11 +63,9 @@ macula-go, macula-rust, macula-dotnet, and macula-php have all already
63
63
  proven this protocol works and are actively maintained. Rather than
64
64
  reimplement QUIC, TLS 1.3 with a hybrid post-quantum key exchange, deterministic CBOR and signed frames a fifth time in a
65
65
  language with no mature QUIC story of its own, macula-ts reuses macula-go's
66
- already-proven implementation through FFI — the same tradeoff
67
- [macula-php](https://github.com/macula-io/macula-php) already made
68
- successfully (see its `cabi/` directory, which this package's own `cabi/`
69
- is structurally modeled on, including its handle-based memory-ownership
70
- convention).
66
+ already-proven implementation through macula-go's shared C ABI
67
+ ([`cabi/macula.h`](https://github.com/macula-io/macula-go/blob/master/cabi/macula.h),
68
+ contract in `cabi/CONTRACT.md`), the one C ABI every non-Go SDK binds.
71
69
 
72
70
  ## Sibling SDKs
73
71
 
@@ -141,15 +139,23 @@ compatibility layer.
141
139
  ## Architecture
142
140
 
143
141
  ```
144
- src/ (TypeScript API) ── addon/binding.cc (N-API) ── cabi/ (Go, C archive) ── macula-go pool
142
+ src/ (TypeScript API) ── addon/binding.cc (N-API) ── macula-go cabi (C ABI 1, c-archive) ── macula-go pool
145
143
  ```
146
144
 
147
- `cabi/` exports C functions over macula-go's `pool` (and `stationlink`
148
- streams). Every Go value crosses as a `runtime/cgo.Handle`; payloads cross as
149
- JSON with no booleans and bytes as `{"$bytes": "<base64>"}` going in. Every call
150
- that does network I/O runs on a worker thread (`Napi::AsyncWorker`) and returns
151
- a Promise; events, served calls and served streams reach JavaScript through a
152
- `ThreadSafeFunction`.
145
+ The addon links macula-go's shared C ABI, built as a c-archive from the
146
+ macula-go release in `native/MACULA_GO` (`scripts/build-native.sh`, which
147
+ takes macula-go through `go mod download` and the Go checksum database and
148
+ checks the release's commit). There is no Go code in this repository. Every Go
149
+ value crosses as a handle; payloads cross as JSON with no booleans and bytes
150
+ as `{"$bytes": "<base64>"}` both ways (this package turns them into `"0x"`
151
+ hex by default, or leaves them tagged with `bytes: "tagged"`); an error
152
+ crosses as JSON with a fixed kind, which becomes `ProviderError`,
153
+ `RelayError`, `NotSharedError`, `ContentUnavailableError` or a `MaculaError`
154
+ carrying the kind. Every call that does network I/O runs on a worker thread
155
+ (`Napi::AsyncWorker`) and returns a Promise. The ABI never calls back into
156
+ Node: each subscription and served procedure has a thread of its own that
157
+ takes from its inbox, with a cancel token of its own, and hands each event,
158
+ call and session to JavaScript through a `ThreadSafeFunction`.
153
159
 
154
160
  ## What's implemented
155
161
 
@@ -174,12 +180,13 @@ a Promise; events, served calls and served streams reach JavaScript through a
174
180
  ## Testing
175
181
 
176
182
  ```bash
177
- npm test # builds build/teststation, then the offline suite
183
+ npm test # builds native/build (libmacula.a and the teststation), then the offline suite
178
184
  npm run test:live # one live station, see below
179
185
  ```
180
186
 
181
- `npm test` runs `src/pool.test.ts` against `cabi/cmd/teststation`, a helper
182
- that runs two in-process macula 12 stations (macula-go's `teststation`) sharing
187
+ `npm test` runs `src/pool.test.ts` against macula-go's own
188
+ `teststation/cmd/teststation` at the pinned release, a helper that runs two
189
+ in-process macula 12 stations sharing
183
190
  a DHT, with a test realm that admits the test's provider nodes. It exercises
184
191
  keys, calls by direct dial and their errors, providers, server and client
185
192
  streams (and that no stream is left unreleased), pubsub and the DHT, through
@@ -197,8 +204,8 @@ and signs its own, and this SDK verifies it.
197
204
  (the station's node_id), `MACULA_TS_LIVE_REALM` and `MACULA_TS_LIVE_REALM_KEY`;
198
205
  an unset one fails the run naming it. It reads the DHT, calls `mcl-echo/echo`
199
206
  by direct dial and hears its own publication.
200
- `.github/workflows/live.yml` runs it when dispatched by hand, on the committed
201
- linux-x64 prebuild.
207
+ `.github/workflows/live.yml` runs it when dispatched by hand, on an addon it
208
+ builds from the commit's source.
202
209
 
203
210
  ## Packaging: genuinely zero install-time scripts
204
211
 
@@ -217,28 +224,29 @@ macula-ts's own exported functions (not a generic bridge), packaged with
217
224
  [`node-gyp-build`](https://github.com/prebuild/node-gyp-build) — the same
218
225
  pattern used by `sharp`, `bcrypt`, and other native modules that need zero
219
226
  consumer-side compilation. The compiled `.node` binary for each supported
220
- platform is baked into `prebuilds/` and published as part of the npm
221
- package itself (**not** gitignored — there is nothing to build or fetch
222
- at a consumer's `npm install` time). `package.json` has no `install`,
223
- `postinstall`, or `preinstall` script at all.
227
+ platform is in the npm package's `prebuilds/` (there is nothing to build or
228
+ fetch at a consumer's `npm install`). `package.json` has no `install`,
229
+ `postinstall`, `preinstall` or `prepublishOnly` script at all.
224
230
 
225
231
  Five platforms are covered: `linux-x64`, `linux-arm64`, `darwin-arm64`,
226
- `darwin-x64`, and `win32-x64`. `.github/workflows/prebuilds.yml` builds
227
- each on a real GitHub-hosted runner for that platform (`CGO_ENABLED=1`
228
- needs a matching native C toolchain per target, so cross-compiling
229
- `cabi/`'s Go archive from Linux isn't the right approach here — the same
230
- reason `sharp`/`bcrypt`/etc. use real per-OS runners) and commits the
231
- results back to `main`. `.github/workflows/ci.yml`'s "Confirm the
232
- committed prebuild is not stale" step re-verifies, on every push, that
233
- `linux-x64`'s committed binary still matches a fresh rebuild of current
234
- source, byte for byte. Getting that check — and the Windows build — to
235
- actually hold surfaced three real build-toolchain bugs; see
236
- [CHANGELOG.md](CHANGELOG.md) for the specifics.
232
+ `darwin-x64`, and `win32-x64`. On Linux and macOS the prebuild is one `.node`
233
+ with macula-go's cabi linked in statically; on Windows it is the `.node` and
234
+ macula-go's DLL beside it (`macula-<release>.dll`, named after macula-go's
235
+ release so two versions of this package never share one), because node-gyp links with MSVC, which
236
+ does not start the Go runtime of a MinGW-built static archive. `.github/workflows/prebuild-matrix.yml` builds
237
+ each from source on a real GitHub-hosted runner for that platform (cgo needs
238
+ the platform's own C toolchain, so no cross-compiling), loads it and generates
239
+ a key with it before uploading it. The release workflow attests each prebuild
240
+ (build provenance) and packs all five into the package it publishes; CI runs
241
+ the same matrix on every push, then installs the packed package into an empty
242
+ project and checks the install compiled nothing. Prebuilds are never committed
243
+ (macula-ts#2).
237
244
 
238
245
  ## Development
239
246
 
240
247
  ```bash
241
- npm run build:go # builds cabi/build/libmacula.a -- must run BEFORE
248
+ npm run build:go # builds native/build (libmacula.a, macula.h, teststation)
249
+ # from macula-go at native/MACULA_GO -- must run BEFORE
242
250
  # npm install, since binding.gyp's mere presence in
243
251
  # this repo (not in the published package) makes npm
244
252
  # implicitly run `node-gyp rebuild` as part of
@@ -246,12 +254,13 @@ npm run build:go # builds cabi/build/libmacula.a -- must run BEFORE
246
254
  npm install # builds the native addon (via the implicit node-gyp
247
255
  # rebuild above) and installs JS deps
248
256
  npm run typecheck
249
- npm test # builds build/teststation (Go) first
250
- npm run build:prebuilds # regenerate prebuilds/ after touching addon/ or cabi/ -- commit the result
257
+ npm test # builds native/build first
258
+ npm run build:prebuilds # this platform's prebuild, into prebuilds/ (never committed)
251
259
  npm run build # local dev build: addon + tsc
252
260
  ```
253
261
 
254
- Requires Go >=1.27 (for `cabi/`), a C++ toolchain (for `addon/`), and Node
262
+ Requires Go >=1.27 and a C compiler (to build macula-go's cabi), a C++
263
+ toolchain (for `addon/`), and Node
255
264
  >=24.18.1 (see `engines` in `package.json` — matches the same floor
256
265
  macula-mcp landed on for `node:sqlite`; earlier Node lines don't ship it).
257
266
  None of this is required to *consume* the published package — only to
package/dist/binding.d.ts CHANGED
@@ -1,15 +1,17 @@
1
1
  /** An opaque Go value's handle (runtime/cgo.Handle), as the addon returns it. */
2
2
  export type Handle = bigint;
3
3
  /** What a listener (a subscription, a served procedure, a served stream
4
- * procedure) is handed, on the event loop: an event or closed notice with its
5
- * JSON, or a request with the pending call's or stream's handle. */
4
+ * procedure) is handed, on the event loop: an event, a request with the
5
+ * pending call's or stream's handle, or, last, the closing notice, whose json
6
+ * is empty when the listener ended as asked and the error's JSON otherwise. */
6
7
  export interface Delivery {
7
8
  readonly kind: "event" | "closed" | "request";
8
9
  readonly json: string;
9
10
  readonly handle: Handle;
10
11
  }
11
12
  export type Listener = (delivery: Delivery) => void;
12
- export declare const native: {
13
+ interface Native {
14
+ abiVersion: number;
13
15
  keyGenerate(profile: string): Promise<Handle>;
14
16
  keyLoad(path: string, profile: string): Promise<Handle>;
15
17
  keySave(key: Handle, path: string): Promise<void>;
@@ -25,20 +27,21 @@ export declare const native: {
25
27
  poolClose(pool: Handle): Promise<void>;
26
28
  poolNodeId(pool: Handle): Uint8Array;
27
29
  poolStatus(pool: Handle): string;
28
- poolCall(pool: Handle, realm: Uint8Array, procedure: string, payloadJson: string, provider: Uint8Array | null, timeoutMs: number, bytesMode: number): Promise<string>;
30
+ poolCall(pool: Handle, realm: Uint8Array, procedure: string, payloadJson: string, provider: Uint8Array | null, timeoutMs: number): Promise<string>;
29
31
  poolProviders(pool: Handle, realm: Uint8Array, procedure: string, timeoutMs: number): Promise<string>;
30
32
  poolPublish(pool: Handle, realm: Uint8Array, topic: string, payloadJson: string, ttlMs: number): Promise<void>;
31
- poolSubscribe(pool: Handle, realm: Uint8Array, topic: string, bytesMode: number, listener: Listener): Promise<Handle>;
33
+ poolSubscribe(pool: Handle, realm: Uint8Array, topic: string, listener: Listener): Promise<Handle>;
32
34
  subscriptionStop(subscription: Handle): Promise<void>;
33
- poolFindRecord(pool: Handle, key: Uint8Array, timeoutMs: number, bytesMode: number): Promise<string>;
34
- poolFindRecords(pool: Handle, key: Uint8Array, timeoutMs: number, bytesMode: number): Promise<string>;
35
- poolFindRecordsByType(pool: Handle, type: number, timeoutMs: number, bytesMode: number): Promise<string>;
35
+ subscriptionDropped(subscription: Handle): number;
36
+ poolFindRecord(pool: Handle, key: Uint8Array, timeoutMs: number): Promise<string>;
37
+ poolFindRecords(pool: Handle, key: Uint8Array, timeoutMs: number): Promise<string>;
38
+ poolFindRecordsByType(pool: Handle, type: number, timeoutMs: number): Promise<string>;
36
39
  poolPutRecord(pool: Handle, wire: Uint8Array, timeoutMs: number): Promise<void>;
37
40
  poolShareContent(pool: Handle, realm: Uint8Array, data: Uint8Array, name: string, timeoutMs: number): Promise<Uint8Array>;
38
41
  poolUnshareContent(pool: Handle, realm: Uint8Array, mcid: Uint8Array, timeoutMs: number): Promise<void>;
39
- poolGetContent(pool: Handle, realm: Uint8Array, mcid: Uint8Array, maxBytes: number, maxChunks: number, parallel: number, chunkTimeoutMs: number, timeoutMs: number): Promise<Uint8Array>;
40
- poolServe(pool: Handle, realm: Uint8Array, procedure: string, bytesMode: number, listener: Listener): Promise<Handle>;
41
- poolServeStream(pool: Handle, realm: Uint8Array, procedure: string, mode: number, bytesMode: number, listener: Listener): Promise<Handle>;
42
+ poolGetContent(pool: Handle, realm: Uint8Array, mcid: Uint8Array, optionsJson: string, timeoutMs: number): Promise<Uint8Array>;
43
+ poolServe(pool: Handle, realm: Uint8Array, procedure: string, listener: Listener): Promise<Handle>;
44
+ poolServeStream(pool: Handle, realm: Uint8Array, procedure: string, mode: number, listener: Listener): Promise<Handle>;
42
45
  pendingReply(pending: Handle, resultJson: string): void;
43
46
  pendingError(pending: Handle, message: string): void;
44
47
  servedStop(served: Handle): Promise<void>;
@@ -49,7 +52,9 @@ export declare const native: {
49
52
  streamClose(stream: Handle): Promise<void>;
50
53
  streamReply(stream: Handle, payloadJson: string): Promise<void>;
51
54
  streamAbort(stream: Handle, code: string, message: string): Promise<void>;
52
- streamRecv(stream: Handle, timeoutMs: number, bytesMode: number): Promise<string>;
53
- streamRequest(stream: Handle, bytesMode: number): string;
55
+ streamRecv(stream: Handle, timeoutMs: number): Promise<string>;
56
+ streamRequest(stream: Handle): string;
54
57
  streamFree(stream: Handle): Promise<void>;
55
- };
58
+ }
59
+ export declare const native: Native;
60
+ export {};
package/dist/binding.js CHANGED
@@ -1,16 +1,66 @@
1
1
  // Loads the compiled N-API addon (addon/binding.cc) and types its functions.
2
- // cabi/'s Go code is linked into the addon statically, so it is one
2
+ // macula-go's shared C ABI (cabi/, built as a c-archive from the release in
3
+ // native/MACULA_GO) is linked into the addon statically, so it is one
3
4
  // self-contained .node file. node-gyp-build picks, at require time, a local
4
5
  // build (build/Release/*.node) or the published prebuild for this platform
5
6
  // (prebuilds/<platform>-<arch>/*.node), so a consumer installing from npm
6
7
  // never runs a compiler.
7
8
  //
9
+ // Every function is wrapped once here: an error the ABI reports (JSON with a
10
+ // fixed kind) reaches the rest of the package as the class its kind names
11
+ // (wire.ts nativeError).
12
+ //
8
13
  // Internal to the package: the public API is key.ts, pool.ts and stream.ts.
9
14
  import { createRequire } from "node:module";
10
15
  import { fileURLToPath } from "node:url";
11
16
  import { dirname, join } from "node:path";
17
+ import { readdirSync } from "node:fs";
18
+ import { nativeError } from "./wire.js";
12
19
  const require = createRequire(import.meta.url);
13
20
  const repoRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
14
- // eslint-disable-next-line @typescript-eslint/no-var-requires
15
- export const native = require("node-gyp-build")(repoRoot);
21
+ /** The addon for this platform, or an error that says what failed to load. */
22
+ function load() {
23
+ try {
24
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
25
+ return require("node-gyp-build")(repoRoot);
26
+ }
27
+ catch (e) {
28
+ const why = e instanceof Error ? e.message : String(e);
29
+ throw new Error(`macula-ts: the native addon did not load on ${process.platform}-${process.arch}: ${why}.${windowsHint()}`);
30
+ }
31
+ }
32
+ // On Windows the addon needs macula-go's DLL (macula-<release>.dll) beside
33
+ // its .node: say whether it is there, so a missing DLL is told apart from a
34
+ // failure of anything else.
35
+ function windowsHint() {
36
+ if (process.platform !== "win32")
37
+ return "";
38
+ let dir;
39
+ try {
40
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
41
+ dir = dirname(require("node-gyp-build").path(repoRoot));
42
+ }
43
+ catch {
44
+ return " No prebuild for this platform was found.";
45
+ }
46
+ const dlls = readdirSync(dir).filter((f) => /^macula-v[0-9.]+\.dll$/.test(f));
47
+ return dlls.length === 0
48
+ ? ` macula-go's DLL (macula-<release>.dll) is not there, beside the .node in ${dir}.`
49
+ : ` ${dlls.join(", ")} is there, beside the .node, so the failure is elsewhere.`;
50
+ }
51
+ const addon = load();
52
+ /** fn with the ABI's errors as their classes: a rejection or a throw. */
53
+ function typed(fn) {
54
+ return ((...args) => {
55
+ let out;
56
+ try {
57
+ out = fn(...args);
58
+ }
59
+ catch (e) {
60
+ throw nativeError(e);
61
+ }
62
+ return out instanceof Promise ? out.catch((e) => { throw nativeError(e); }) : out;
63
+ });
64
+ }
65
+ export const native = Object.fromEntries(Object.entries(addon).map(([name, value]) => [name, typeof value === "function" ? typed(value) : value]));
16
66
  //# sourceMappingURL=binding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,oEAAoE;AACpE,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,yBAAyB;AACzB,EAAE;AACF,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAgBrE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAmDvD,CAAC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"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"}
package/dist/content.d.ts CHANGED
@@ -27,7 +27,5 @@ export declare class ContentUnavailableError extends Error {
27
27
  readonly detail: string;
28
28
  constructor(detail: string);
29
29
  }
30
- /** The native layer's content errors, as the classes they name. */
31
- export declare function contentError(e: unknown): Error;
32
30
  /** How long a whole fetch waits when not told: 5 minutes. */
33
31
  export declare const DEFAULT_CONTENT_TIMEOUT_MS = 300000;
package/dist/content.js CHANGED
@@ -31,16 +31,6 @@ export class ContentUnavailableError extends Error {
31
31
  this.name = "ContentUnavailableError";
32
32
  }
33
33
  }
34
- /** The native layer's content errors, as the classes they name. */
35
- export function contentError(e) {
36
- const message = e instanceof Error ? e.message : String(e);
37
- if (message === "not_shared")
38
- return new NotSharedError();
39
- const unavailable = /^unavailable:([\s\S]*)$/.exec(message);
40
- if (unavailable)
41
- return new ContentUnavailableError(unavailable[1] ?? "");
42
- return e instanceof Error ? e : new Error(message);
43
- }
44
34
  /** How long a whole fetch waits when not told: 5 minutes. */
45
35
  export const DEFAULT_CONTENT_TIMEOUT_MS = 300_000;
46
36
  //# sourceMappingURL=content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,4DAA4D;AAO5D,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CAAC,IAAU;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAClH,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC;AACd,CAAC;AAgBD,8CAA8C;AAC9C,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC;QACE,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;qEACqE;AACrE,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC3B,MAAM;IAA3B,YAAqB,MAAc;QACjC,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;sBADvC,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,IAAI,cAAc,EAAE,CAAC;IAC1D,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,WAAW;QAAE,OAAO,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,4DAA4D;AAO5D,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CAAC,IAAU;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAClH,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC;AACd,CAAC;AAgBD,8CAA8C;AAC9C,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC;QACE,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;qEACqE;AACrE,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC3B,MAAM;IAA3B,YAAqB,MAAc;QACjC,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;sBADvC,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,4 @@ export { NodeKey, JOIN_SESSION_PROCEDURE, MEMBERSHIP_UCAN_PROCEDURE, type Profil
2
2
  export { Pool, Subscription, Served, RecordType, type Seed, type PoolOptions, type LinkStatus, type Provider, type Event, type Request, type DhtRecord, } from "./pool.js";
3
3
  export { NotSharedError, ContentUnavailableError, DEFAULT_CONTENT_TIMEOUT_MS, type ContentOptions, type Mcid, } from "./content.js";
4
4
  export { Stream, StreamMode, type StreamEvent, type StreamRequest } from "./stream.js";
5
- export { ProviderError, RelayError, StreamError, DEFAULT_CALL_TIMEOUT_MS, type JsonValue, type BytesOutput, type Id, } from "./wire.js";
5
+ export { ProviderError, RelayError, StreamError, MaculaError, DEFAULT_CALL_TIMEOUT_MS, type JsonValue, type BytesOutput, type Id, } from "./wire.js";
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@ export { NodeKey, JOIN_SESSION_PROCEDURE, MEMBERSHIP_UCAN_PROCEDURE, } from "./k
3
3
  export { Pool, Subscription, Served, RecordType, } from "./pool.js";
4
4
  export { NotSharedError, ContentUnavailableError, DEFAULT_CONTENT_TIMEOUT_MS, } from "./content.js";
5
5
  export { Stream, StreamMode } from "./stream.js";
6
- export { ProviderError, RelayError, StreamError, DEFAULT_CALL_TIMEOUT_MS, } from "./wire.js";
6
+ export { ProviderError, RelayError, StreamError, MaculaError, DEFAULT_CALL_TIMEOUT_MS, } from "./wire.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EACL,OAAO,EACP,sBAAsB,EACtB,yBAAyB,GAI1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,UAAU,GAQX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,0BAA0B,GAG3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AACvF,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,uBAAuB,GAIxB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EACL,OAAO,EACP,sBAAsB,EACtB,yBAAyB,GAI1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,UAAU,GAQX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,0BAA0B,GAG3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AACvF,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,uBAAuB,GAIxB,MAAM,WAAW,CAAC"}
package/dist/pool.d.ts CHANGED
@@ -78,8 +78,14 @@ export declare enum RecordType {
78
78
  export declare class Subscription {
79
79
  private readonly handle;
80
80
  readonly closed: Promise<string | null>;
81
+ private finalDropped;
81
82
  /** @internal */
82
83
  constructor(handle: Handle, closed: Promise<string | null>);
84
+ /** Events dropped before onEvent heard them: when onEvent was behind and
85
+ * the inbox (256) was full, which drops the newest, and any the pool itself
86
+ * could not hand on. After stop(), the count at stop; read it before the
87
+ * pool closes if the subscription was not stopped, since closing frees it. */
88
+ dropped(): number;
83
89
  /** Ends the subscription on every link. */
84
90
  stop(): Promise<void>;
85
91
  }
package/dist/pool.js CHANGED
@@ -7,8 +7,8 @@
7
7
  // pinned.
8
8
  import { native } from "./binding.js";
9
9
  import { Stream } from "./stream.js";
10
- import { DEFAULT_CONTENT_TIMEOUT_MS, contentError, mcid50 } from "./content.js";
11
- import { DEFAULT_CALL_TIMEOUT_MS, bytesModeFor, callError, hex, id32, } from "./wire.js";
10
+ import { DEFAULT_CONTENT_TIMEOUT_MS, mcid50 } from "./content.js";
11
+ import { DEFAULT_CALL_TIMEOUT_MS, MaculaError, bytesOut, hex, id32, } from "./wire.js";
12
12
  /** macula 12's record types. */
13
13
  export var RecordType;
14
14
  (function (RecordType) {
@@ -24,13 +24,24 @@ export var RecordType;
24
24
  export class Subscription {
25
25
  handle;
26
26
  closed;
27
+ finalDropped = null;
27
28
  /** @internal */
28
29
  constructor(handle, closed) {
29
30
  this.handle = handle;
30
31
  this.closed = closed;
31
32
  }
33
+ /** Events dropped before onEvent heard them: when onEvent was behind and
34
+ * the inbox (256) was full, which drops the newest, and any the pool itself
35
+ * could not hand on. After stop(), the count at stop; read it before the
36
+ * pool closes if the subscription was not stopped, since closing frees it. */
37
+ dropped() {
38
+ return this.finalDropped ?? native.subscriptionDropped(this.handle);
39
+ }
32
40
  /** Ends the subscription on every link. */
33
41
  async stop() {
42
+ if (this.finalDropped !== null)
43
+ return;
44
+ this.finalDropped = native.subscriptionDropped(this.handle);
34
45
  await native.subscriptionStop(this.handle);
35
46
  }
36
47
  }
@@ -84,19 +95,17 @@ export class Pool {
84
95
  }
85
96
  /** Every link the pool holds. */
86
97
  status() {
87
- return JSON.parse(native.poolStatus(this.live())) ?? [];
98
+ // The ABI carries flags as 0 or 1.
99
+ const links = JSON.parse(native.poolStatus(this.live())) ?? [];
100
+ return links.map((l) => ({ station: l.station, host: l.host, port: l.port, direct: l.direct === 1, up: l.up === 1 }));
88
101
  }
89
102
  /** Calls procedure in realm at a provider (any trusted one unless
90
103
  * `provider` names one) by direct dial. A provider's ERROR is thrown as a
91
104
  * ProviderError, a station's relay error as a RelayError. */
92
105
  async call(realm, procedure, payload = {}, options = {}) {
93
- try {
94
- const result = await native.poolCall(this.live(), id32(realm, "realm"), procedure, JSON.stringify(payload), options.provider === undefined ? null : id32(options.provider, "provider"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS, bytesModeFor(options.bytes));
95
- return JSON.parse(result);
96
- }
97
- catch (e) {
98
- throw callError(e);
99
- }
106
+ bytesOut(null, options.bytes);
107
+ const result = await native.poolCall(this.live(), id32(realm, "realm"), procedure, JSON.stringify(payload), options.provider === undefined ? null : id32(options.provider, "provider"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS);
108
+ return bytesOut(JSON.parse(result), options.bytes);
100
109
  }
101
110
  /** The procedure's trusted providers, freshest first. */
102
111
  async providers(realm, procedure, options = {}) {
@@ -113,14 +122,15 @@ export class Pool {
113
122
  async subscribe(realm, topic, onEvent, options = {}) {
114
123
  let settle = () => { };
115
124
  const closed = new Promise((resolve) => (settle = resolve));
116
- const handle = await native.poolSubscribe(this.live(), id32(realm, "realm"), topic, bytesModeFor(options.bytes), (d) => {
125
+ bytesOut(null, options.bytes);
126
+ const handle = await native.poolSubscribe(this.live(), id32(realm, "realm"), topic, (d) => {
117
127
  if (d.kind === "closed") {
118
128
  settle(d.json === "" ? null : d.json);
119
129
  return;
120
130
  }
121
131
  const e = JSON.parse(d.json);
122
132
  onEvent({ publisher: e.publisher, realm: e.realm, topic: e.topic, seq: e.seq, publishedAt: e.published_at,
123
- payload: e.payload, deliveredVia: e.delivered_via });
133
+ payload: bytesOut(e.payload, options.bytes), deliveredVia: e.delivered_via });
124
134
  });
125
135
  return new Subscription(handle, closed);
126
136
  }
@@ -130,10 +140,11 @@ export class Pool {
130
140
  * DHT; a procedure in this node's own namespace (ownProcedure) needs
131
141
  * neither, and another node's namespace is refused. */
132
142
  async serve(realm, procedure, handler, options = {}) {
133
- const handle = await native.poolServe(this.live(), id32(realm, "realm"), procedure, bytesModeFor(options.bytes), (d) => {
143
+ bytesOut(null, options.bytes);
144
+ const handle = await native.poolServe(this.live(), id32(realm, "realm"), procedure, (d) => {
134
145
  if (d.kind !== "request")
135
146
  return;
136
- void answer(d, handler);
147
+ void answer(d, handler, options.bytes);
137
148
  });
138
149
  return new Served(handle);
139
150
  }
@@ -141,7 +152,8 @@ export class Pool {
141
152
  * session. The stream is closed when the handler returns without ending
142
153
  * it, aborted with code error when it throws, and released either way. */
143
154
  async serveStream(realm, procedure, mode, handler, options = {}) {
144
- const handle = await native.poolServeStream(this.live(), id32(realm, "realm"), procedure, mode, bytesModeFor(options.bytes), (d) => {
155
+ bytesOut(null, options.bytes);
156
+ const handle = await native.poolServeStream(this.live(), id32(realm, "realm"), procedure, mode, (d) => {
145
157
  if (d.kind !== "request")
146
158
  return;
147
159
  void runStream(new Stream(d.handle, options.bytes), handler);
@@ -151,33 +163,32 @@ export class Pool {
151
163
  /** Opens a stream of mode on procedure in realm at a provider, by direct
152
164
  * dial. A refusal arrives on its first recv(). */
153
165
  async openStream(realm, procedure, mode, payload = {}, options = {}) {
154
- try {
155
- const handle = await native.poolOpenStream(this.live(), id32(realm, "realm"), procedure, mode, JSON.stringify(payload), options.provider === undefined ? null : id32(options.provider, "provider"), options.deadlineMs ?? 0, options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS);
156
- return new Stream(handle, options.bytes);
157
- }
158
- catch (e) {
159
- throw callError(e);
160
- }
166
+ bytesOut(null, options.bytes);
167
+ const handle = await native.poolOpenStream(this.live(), id32(realm, "realm"), procedure, mode, JSON.stringify(payload), options.provider === undefined ? null : id32(options.provider, "provider"), options.deadlineMs ?? 0, options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS);
168
+ return new Stream(handle, options.bytes);
161
169
  }
162
170
  /** The verified record under key, or null when there is none. */
163
171
  async findRecord(key, options = {}) {
172
+ bytesOut(null, options.bytes);
164
173
  try {
165
- return toRecord(JSON.parse(await native.poolFindRecord(this.live(), id32(key, "key"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS, bytesModeFor(options.bytes))));
174
+ return toRecord(JSON.parse(await native.poolFindRecord(this.live(), id32(key, "key"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS)), options.bytes);
166
175
  }
167
176
  catch (e) {
168
- if (e instanceof Error && e.message === "not_found")
177
+ if (e instanceof MaculaError && e.kind === "not_found")
169
178
  return null;
170
179
  throw e;
171
180
  }
172
181
  }
173
182
  /** Every verified record under key, and how many did not verify. */
174
183
  async findRecords(key, options = {}) {
175
- return toRecords(JSON.parse(await native.poolFindRecords(this.live(), id32(key, "key"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS, bytesModeFor(options.bytes))));
184
+ bytesOut(null, options.bytes);
185
+ return toRecords(JSON.parse(await native.poolFindRecords(this.live(), id32(key, "key"), options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS)), options.bytes);
176
186
  }
177
187
  /** Every verified record of type the station holds, and how many did not
178
188
  * verify. */
179
189
  async findRecordsByType(type, options = {}) {
180
- return toRecords(JSON.parse(await native.poolFindRecordsByType(this.live(), type, options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS, bytesModeFor(options.bytes))));
190
+ bytesOut(null, options.bytes);
191
+ return toRecords(JSON.parse(await native.poolFindRecordsByType(this.live(), type, options.timeoutMs ?? DEFAULT_CALL_TIMEOUT_MS)), options.bytes);
181
192
  }
182
193
  /** Shares data in realm: this node keeps it, serves it on its own
183
194
  * `~<node_id>/content_v1` and announces it, renewing the announcement until
@@ -197,12 +208,16 @@ export class Pool {
197
208
  * ContentUnavailableError. */
198
209
  async getContent(realm, mcid, options = {}) {
199
210
  const asked = mcid50(mcid);
200
- try {
201
- return await native.poolGetContent(this.live(), id32(realm, "realm"), asked, options.maxBytes ?? 0, options.maxChunks ?? 0, options.parallel ?? 0, options.chunkTimeoutMs ?? 0, options.timeoutMs ?? DEFAULT_CONTENT_TIMEOUT_MS);
202
- }
203
- catch (e) {
204
- throw contentError(e);
205
- }
211
+ const bounds = {};
212
+ if (options.maxBytes)
213
+ bounds.max_bytes = options.maxBytes;
214
+ if (options.maxChunks)
215
+ bounds.max_chunks = options.maxChunks;
216
+ if (options.parallel)
217
+ bounds.parallel = options.parallel;
218
+ if (options.chunkTimeoutMs)
219
+ bounds.chunk_timeout_ms = options.chunkTimeoutMs;
220
+ return await native.poolGetContent(this.live(), id32(realm, "realm"), asked, Object.keys(bounds).length === 0 ? "" : JSON.stringify(bounds), options.timeoutMs ?? DEFAULT_CONTENT_TIMEOUT_MS);
206
221
  }
207
222
  /** Puts a signed record's wire bytes in the DHT. */
208
223
  async putRecord(wire, options = {}) {
@@ -222,10 +237,10 @@ export class Pool {
222
237
  }
223
238
  }
224
239
  /** Answers one served call with the handler's result or its error, once. */
225
- async function answer(d, handler) {
240
+ async function answer(d, handler, bytes) {
226
241
  const r = JSON.parse(d.json);
227
- const request = { caller: r.caller, realm: r.realm, procedure: r.procedure, payload: r.payload,
228
- deadlineMs: r.deadline_ms };
242
+ const request = { caller: r.caller, realm: r.realm, procedure: r.procedure,
243
+ payload: bytesOut(r.payload, bytes), deadlineMs: r.deadline_ms };
229
244
  try {
230
245
  native.pendingReply(d.handle, JSON.stringify(await handler(request)));
231
246
  }
@@ -251,11 +266,13 @@ async function runStream(stream, handler) {
251
266
  await stream.free();
252
267
  }
253
268
  }
254
- function toRecord(r) {
255
- return { type: r.type, keyId: r.key_id, createdAt: r.created_at, expiresAt: r.expires_at, payload: r.payload,
256
- wire: r.wire };
269
+ // A record's payload follows the caller's bytes option; its wire bytes are
270
+ // always tagged.
271
+ function toRecord(r, bytes) {
272
+ return { type: r.type, keyId: r.key_id, createdAt: r.created_at, expiresAt: r.expires_at,
273
+ payload: bytesOut(r.payload, bytes), wire: r.wire };
257
274
  }
258
- function toRecords(out) {
259
- return { records: (out.records ?? []).map(toRecord), dropped: out.dropped ?? 0 };
275
+ function toRecords(out, bytes) {
276
+ return { records: (out.records ?? []).map((r) => toRecord(r, bytes)), dropped: out.dropped ?? 0 };
260
277
  }
261
278
  //# sourceMappingURL=pool.js.map
package/dist/pool.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
package/dist/stream.d.ts CHANGED
@@ -51,7 +51,7 @@ export declare class Stream {
51
51
  abort(code: string, message?: string): Promise<void>;
52
52
  /** The peer's next frame, or null once the stream has ended normally. A
53
53
  * stream error is thrown as a StreamError; `timeoutMs` (0 for none) bounds
54
- * the wait with an Error("timeout"). */
54
+ * the wait with a MaculaError of kind "timeout". */
55
55
  recv(options?: {
56
56
  timeoutMs?: number;
57
57
  }): Promise<StreamEvent | null>;
package/dist/stream.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // stream of its own, released on every path; frames are signed by each side
4
4
  // and verified before they are handed on.
5
5
  import { native } from "./binding.js";
6
- import { StreamError, bytesModeFor } from "./wire.js";
6
+ import { StreamError, bytesOut } from "./wire.js";
7
7
  /** The three stream modes: the provider sends (server), the caller sends and
8
8
  * the provider replies (client), or both send (bidi). */
9
9
  export var StreamMode;
@@ -23,8 +23,9 @@ export class Stream {
23
23
  }
24
24
  /** The stream's open. */
25
25
  request() {
26
- const r = JSON.parse(native.streamRequest(this.live(), bytesModeFor(this.bytes)));
27
- return { caller: r.caller, realm: r.realm, procedure: r.procedure, payload: r.payload, deadlineMs: r.deadline_ms };
26
+ const r = JSON.parse(native.streamRequest(this.live()));
27
+ return { caller: r.caller, realm: r.realm, procedure: r.procedure, payload: bytesOut(r.payload, this.bytes),
28
+ deadlineMs: r.deadline_ms };
28
29
  }
29
30
  /** Sends a raw chunk. */
30
31
  async send(chunk) {
@@ -52,20 +53,20 @@ export class Stream {
52
53
  }
53
54
  /** The peer's next frame, or null once the stream has ended normally. A
54
55
  * stream error is thrown as a StreamError; `timeoutMs` (0 for none) bounds
55
- * the wait with an Error("timeout"). */
56
+ * the wait with a MaculaError of kind "timeout". */
56
57
  async recv(options = {}) {
57
- const e = JSON.parse(await native.streamRecv(this.live(), options.timeoutMs ?? 0, bytesModeFor(this.bytes)));
58
+ const e = JSON.parse(await native.streamRecv(this.live(), options.timeoutMs ?? 0));
58
59
  switch (e.kind) {
59
60
  case "eof":
60
61
  return null;
61
62
  case "error":
62
63
  throw new StreamError(e.code, e.message ?? "", e.relay === 1);
63
64
  case "data":
64
- return { kind: "data", encoding: e.encoding, body: e.body };
65
+ return { kind: "data", encoding: e.encoding, body: bytesOut(e.body, this.bytes) };
65
66
  case "end":
66
67
  return { kind: "end", role: e.role };
67
68
  default:
68
- return { kind: "reply", payload: e.payload };
69
+ return { kind: "reply", payload: bytesOut(e.payload, this.bytes) };
69
70
  }
70
71
  }
71
72
  /** Every frame until the stream ends. */
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
package/dist/wire.d.ts CHANGED
@@ -13,8 +13,10 @@ export type JsonValue = string | number | null | JsonValue[] | {
13
13
  /** How bytes in a result, a request, an event or a record reach JavaScript:
14
14
  * "hex" (the default) or "tagged" ({"$bytes": "<base64>"}). */
15
15
  export type BytesOutput = "hex" | "tagged";
16
- /** BytesOutput as the integer the native layer takes. */
17
- export declare function bytesModeFor(bytes: BytesOutput | undefined): number;
16
+ /** A value from the native layer, whose bytes are always the tagged
17
+ * {"$bytes": ...} object, with its bytes as `bytes` asks: "0x" hex (the
18
+ * default) or left tagged. */
19
+ export declare function bytesOut(value: unknown, bytes: BytesOutput | undefined): JsonValue;
18
20
  /** A 32-byte id (a node_id, a realm id, a record key): 64 hex characters or
19
21
  * 32 bytes. */
20
22
  export type Id = string | Uint8Array;
@@ -45,9 +47,15 @@ export declare class StreamError extends Error {
45
47
  readonly relay: boolean;
46
48
  constructor(code: string, detail: string, relay: boolean);
47
49
  }
48
- /** The error the native layer rejects a call with, as the class it names:
49
- * "provider_error:<code>:<detail>" and "relay_error:<code>" (cabi's
50
- * callError), any other text as a plain Error. */
51
- export declare function callError(e: unknown): Error;
50
+ /** An error the native layer reported: its kind, from macula-go's C ABI
51
+ * (cabi/CONTRACT.md "Errors"), and its message. Provider, relay and content
52
+ * errors have classes of their own; every other kind is this. */
53
+ export declare class MaculaError extends Error {
54
+ readonly kind: string;
55
+ constructor(kind: string, message: string);
56
+ }
57
+ /** The native layer's error, whose message is the ABI's error JSON, as the
58
+ * class its kind names. */
59
+ export declare function nativeError(e: unknown): Error;
52
60
  /** How long a call waits, in milliseconds, when not told: macula's 5 s. */
53
61
  export declare const DEFAULT_CALL_TIMEOUT_MS = 5000;
package/dist/wire.js CHANGED
@@ -1,12 +1,28 @@
1
1
  // The shapes every part of the API shares: payload values, ids, and the
2
2
  // errors a call or a stream ends with.
3
- /** BytesOutput as the integer the native layer takes. */
4
- export function bytesModeFor(bytes) {
5
- if (bytes === undefined || bytes === "hex")
6
- return 0;
3
+ import { ContentUnavailableError, NotSharedError } from "./content.js";
4
+ /** A value from the native layer, whose bytes are always the tagged
5
+ * {"$bytes": ...} object, with its bytes as `bytes` asks: "0x" hex (the
6
+ * default) or left tagged. */
7
+ export function bytesOut(value, bytes) {
8
+ if (bytes !== undefined && bytes !== "hex" && bytes !== "tagged") {
9
+ throw new Error(`macula-ts: bytes must be "hex" or "tagged", got ${JSON.stringify(bytes)}`);
10
+ }
7
11
  if (bytes === "tagged")
8
- return 1;
9
- throw new Error(`macula-ts: bytes must be "hex" or "tagged", got ${JSON.stringify(bytes)}`);
12
+ return value;
13
+ return hexBytes(value);
14
+ }
15
+ function hexBytes(value) {
16
+ if (Array.isArray(value))
17
+ return value.map(hexBytes);
18
+ if (value !== null && typeof value === "object") {
19
+ const entries = Object.entries(value);
20
+ if (entries.length === 1 && entries[0][0] === "$bytes" && typeof entries[0][1] === "string") {
21
+ return "0x" + Buffer.from(entries[0][1], "base64").toString("hex");
22
+ }
23
+ return Object.fromEntries(entries.map(([k, v]) => [k, hexBytes(v)]));
24
+ }
25
+ return value;
10
26
  }
11
27
  /** An Id as the 32 bytes the native layer takes. */
12
28
  export function id32(id, what = "id") {
@@ -61,18 +77,44 @@ export class StreamError extends Error {
61
77
  this.name = "StreamError";
62
78
  }
63
79
  }
64
- /** The error the native layer rejects a call with, as the class it names:
65
- * "provider_error:<code>:<detail>" and "relay_error:<code>" (cabi's
66
- * callError), any other text as a plain Error. */
67
- export function callError(e) {
68
- const message = e instanceof Error ? e.message : String(e);
69
- const provider = /^provider_error:([^:]*):([\s\S]*)$/.exec(message);
70
- if (provider)
71
- return new ProviderError(provider[1] ?? "", provider[2] ?? "");
72
- const relay = /^relay_error:(.*)$/.exec(message);
73
- if (relay)
74
- return new RelayError(relay[1] ?? "");
75
- return e instanceof Error ? e : new Error(message);
80
+ /** An error the native layer reported: its kind, from macula-go's C ABI
81
+ * (cabi/CONTRACT.md "Errors"), and its message. Provider, relay and content
82
+ * errors have classes of their own; every other kind is this. */
83
+ export class MaculaError extends Error {
84
+ kind;
85
+ constructor(kind, message) {
86
+ super(`macula-ts: ${message}`);
87
+ this.kind = kind;
88
+ this.name = "MaculaError";
89
+ }
90
+ }
91
+ /** The native layer's error, whose message is the ABI's error JSON, as the
92
+ * class its kind names. */
93
+ export function nativeError(e) {
94
+ const text = e instanceof Error ? e.message : String(e);
95
+ let error;
96
+ try {
97
+ error = JSON.parse(text);
98
+ }
99
+ catch {
100
+ return e instanceof Error ? e : new Error(text);
101
+ }
102
+ if (typeof error !== "object" || error === null || typeof error.kind !== "string") {
103
+ return e instanceof Error ? e : new Error(text);
104
+ }
105
+ const message = typeof error.message === "string" ? error.message : error.kind;
106
+ switch (error.kind) {
107
+ case "provider_error":
108
+ return new ProviderError(String(error.code ?? ""), typeof error.detail === "string" ? error.detail : "");
109
+ case "relay_error":
110
+ return new RelayError(String(error.code ?? ""));
111
+ case "not_shared":
112
+ return new NotSharedError();
113
+ case "unavailable":
114
+ return new ContentUnavailableError(Array.isArray(error.failures) ? error.failures.map(String).join("; ") : message);
115
+ default:
116
+ return new MaculaError(error.kind, message);
117
+ }
76
118
  }
77
119
  /** How long a call waits, in milliseconds, when not told: macula's 5 s. */
78
120
  export const DEFAULT_CALL_TIMEOUT_MS = 5_000;
package/dist/wire.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@macula-io/ts",
3
- "version": "0.21.0",
4
- "description": "TypeScript SDK for the Macula mesh (FFI over macula-go)",
3
+ "version": "0.22.0",
4
+ "description": "TypeScript SDK for the Macula mesh, over macula-go's shared C ABI",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
7
7
  "macula",
@@ -41,15 +41,14 @@
41
41
  "prebuilds"
42
42
  ],
43
43
  "scripts": {
44
- "build:go": "go env -w CGO_ENABLED=1 && cd cabi && go mod tidy && go build -trimpath -buildvcs=false -buildmode=c-archive -o build/libmacula.a .",
44
+ "build:go": "bash scripts/build-native.sh",
45
45
  "build:addon:dev": "npm run build:go && node-gyp rebuild",
46
46
  "build:prebuilds": "npm run build:go && prebuildify --napi --strip && npm pkg delete scripts.install",
47
47
  "build:ts": "rm -rf dist && tsc",
48
48
  "build": "npm run build:addon:dev && npm run build:ts",
49
- "test": "npm run build:teststation && vitest run",
49
+ "test": "npm run build:go && vitest run",
50
50
  "test:live": "MACULA_TS_LIVE=1 vitest run src/fleet.live.test.ts",
51
- "typecheck": "tsc --noEmit",
52
- "build:teststation": "cd cabi && go build -trimpath -buildvcs=false -o ../build/teststation ./cmd/teststation"
51
+ "typecheck": "tsc --noEmit"
53
52
  },
54
53
  "dependencies": {
55
54
  "node-addon-api": "^8.9.2",