@macula-io/ts 0.15.0 → 0.17.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/dist/session.js CHANGED
@@ -50,26 +50,20 @@ export class Session {
50
50
  #identity;
51
51
  #activeServe = null;
52
52
  #activeSubscription = null;
53
- // Serializes every operation that reads this Session's shared
54
- // control stream: call()/callWithUcan()/the DHT methods, plus
55
- // serve()'s advertise + each poll tick + unadvertise, plus
56
- // subscribe()'s start + stop. macula-go's connection/frame_stream.go
57
- // RecvFrame mutates a shared buffer with no mutex of its own, so two
58
- // reads racing it corrupt the stream -- verified live: `Promise.all`
59
- // of 4 concurrent call()s on one Session left EVERY later read on
60
- // that same Session permanently failing "claimed frame length ...
61
- // exceeds the 16777215-byte cap" (a torn buffer), not just that one
62
- // batch. The `#activeServe`/`#activeSubscription` checks above only
63
- // ever protected call()-family operations from an ACTIVE serve()/
64
- // subscribe() -- they did nothing to stop two ordinary call()s (or a
65
- // call() racing a DHT method) from racing each other, since neither
66
- // flag is set in that case. This queue is what actually closes that
67
- // gap: every control-stream-reading native call funnels through
68
- // #enqueue, so only one is ever in flight at a time, regardless of
69
- // which method it came from. publish()/putContent()/getContent() do
70
- // NOT go through this -- see their own docs for why (a pure write,
71
- // and each own dedicated QUIC stream, respectively -- neither reads
72
- // this shared stream at all).
53
+ // Serializes every native call that uses this Session's control
54
+ // stream: call()/callWithUcan()/the DHT methods, plus serve()'s
55
+ // advertise, each poll tick and unadvertise, plus subscribe()'s start
56
+ // and stop, so only one of them is in flight at a time. It was added
57
+ // when macula-go read the control stream without a lock, so two reads
58
+ // racing it corrupted the stream -- verified live: `Promise.all` of 4
59
+ // concurrent call()s on one Session left EVERY later read on that
60
+ // Session permanently failing "claimed frame length ... exceeds the
61
+ // 16777215-byte cap". macula-go v0.10.0, which this release embeds,
62
+ // reads the control stream on one goroutine and routes each reply,
63
+ // event and inbound CALL to what is waiting for it, so concurrent calls
64
+ // no longer race; this release keeps the queue as it was.
65
+ // publish()/putContent()/getContent() do NOT go through it -- see their
66
+ // own docs (a pure write, and each own dedicated QUIC stream).
73
67
  #queue = Promise.resolve();
74
68
  #enqueue(fn) {
75
69
  const result = this.#queue.then(fn, fn);
@@ -108,31 +102,27 @@ export class Session {
108
102
  }
109
103
  return this.#handle;
110
104
  }
111
- /** call()'s own handle-plus-exclusivity guard, factored out since the
112
- * DHT methods below (findRecord/findRecords/findRecordsByType/
113
- * putRecord) all end up on this Session's same shared control stream
114
- * too -- macula-go's dht.FindRecord et al. are themselves just a
115
- * connection.Session.Call under the hood (see cabi/dht.go), so mixing
116
- * one of these with an active serve() OR subscribe() on this Session
117
- * races exactly the way call() itself would: serve()'s poll loop and
118
- * subscribe()'s background reader both read frames off this same
119
- * stream on their own schedule, same as call()'s own blocking read
120
- * does. publish() is deliberately NOT guarded by this: it only ever
121
- * WRITES a fire-and-forget frame (connection.Session.Publish), never
122
- * reads, so it does not race a concurrent reader the way call()/
123
- * serve()/subscribe()/the DHT methods do -- and the live pubsub round
124
- * trip this SDK's own test performs (subscribe(), then publish() on
125
- * the SAME Session while that subscription is active) depends on
126
- * publish() staying unguarded here. */
105
+ /** call()'s own handle-plus-one-role check, factored out since the DHT
106
+ * methods below and the direct-dial methods are CALLs too (macula-go's
107
+ * dht.FindRecord et al. are a connection.Session.Call under the hood,
108
+ * see cabi/dht.go). A Session takes one role at a time: calls, one
109
+ * serve(), or one subscribe(). macula-go v0.10.0 routes each reply,
110
+ * event and inbound CALL on its own, so a call beside a serve() or
111
+ * subscribe() no longer races; this release keeps the check as it was.
112
+ * publish() is deliberately NOT checked: it only ever WRITES a
113
+ * fire-and-forget frame (connection.Session.Publish), and the live
114
+ * pubsub round trip this SDK's own test performs (subscribe(), then
115
+ * publish() on the SAME Session while that subscription is active)
116
+ * depends on publish() staying unchecked here. */
127
117
  #requireHandleNotServing(caller) {
128
118
  const handle = this.#requireHandle();
129
119
  if (this.#activeServe !== null) {
130
120
  throw new Error(`macula-ts: Session.${caller}() while serve("${this.#activeServe.procedure}") is active on the same ` +
131
- `Session races on the shared control stream -- open a second Session for the other role.`);
121
+ `Session is not supported -- open a second Session for the other role.`);
132
122
  }
133
123
  if (this.#activeSubscription !== null) {
134
124
  throw new Error(`macula-ts: Session.${caller}() while subscribe("${this.#activeSubscription.topic}") is active on the ` +
135
- `same Session races on the shared control stream -- open a second Session for the other role.`);
125
+ `same Session is not supported -- open a second Session for the other role.`);
136
126
  }
137
127
  return handle;
138
128
  }
@@ -210,13 +200,10 @@ export class Session {
210
200
  *
211
201
  * Real network I/O -- a signed frame out and a wait for the reply,
212
202
  * up to opts.deadlineMs -- so this runs off the main thread on the
213
- * native side, like connect()/close(). Do not call this
214
- * concurrently with an active serve() on the SAME Session: both read
215
- * frames off the one shared control stream, and macula-go's own
216
- * ServeOneCall/Call docs both warn that mixing roles on one
217
- * connection races (an unrelated frame arriving first is discarded,
218
- * not queued) -- open a second Session for the other role instead,
219
- * exactly what this SDK's own live test does. */
203
+ * native side, like connect()/close(). Rejects while a serve() or
204
+ * subscribe() is active on the SAME Session (#requireHandleNotServing):
205
+ * a Session takes one role at a time, so open a second Session for the
206
+ * other role, exactly what this SDK's own live test does. */
220
207
  async call(procedure, payload, opts = {}) {
221
208
  const handle = this.#requireHandleNotServing("call");
222
209
  const timeoutMs = opts.deadlineMs ?? DEFAULT_CALL_TIMEOUT_MS;
@@ -254,9 +241,8 @@ export class Session {
254
241
  * security property that isn't actually enforced.
255
242
  *
256
243
  * Real network I/O, off the main thread on the native side, and
257
- * subject to the identical same-Session exclusivity rule as `call()`
258
- * (`#requireHandleNotServing`) -- both end up on the same shared
259
- * control stream. */
244
+ * subject to the same one-role check as `call()`
245
+ * (`#requireHandleNotServing`). */
260
246
  async callWithUcan(procedure, payload, ucanToken, opts = {}) {
261
247
  const handle = this.#requireHandleNotServing("callWithUcan");
262
248
  const timeoutMs = opts.deadlineMs ?? DEFAULT_CALL_TIMEOUT_MS;
@@ -282,11 +268,15 @@ export class Session {
282
268
  * between this and the JS handler) would map to
283
269
  * TemporaryRelayFailure, per that same file.
284
270
  *
285
- * Only one serve() registration is allowed per Session at a time --
286
- * see call()'s own doc on why mixing roles (or two server loops) on
287
- * one connection is unsafe, not just inadvisable; open a second
288
- * Session for a second procedure instead of trying to serve two
289
- * procedures off one.
271
+ * Only one serve() registration is allowed per Session at a time: each
272
+ * poll tick takes the next inbound CALL from the session's one queue
273
+ * (macula-go's ServeOneCall) and answers a CALL for a procedure it
274
+ * doesn't serve with unknown_next_peer, so a second serve() would answer
275
+ * CALLs meant for the first. Open a second Session for a second
276
+ * procedure instead of trying to serve two procedures off one. serve()
277
+ * also refuses while a subscribe() is active on the same Session, and
278
+ * call()/the DHT methods refuse while a serve() is (the one-role rule,
279
+ * #requireHandleNotServing).
290
280
  *
291
281
  * `opts.bytes` picks how bytes in each inbound CALL's payload reach
292
282
  * `handler`: "hex" (the default) or "tagged" (rpc.ts's BytesOutput).
@@ -302,13 +292,13 @@ export class Session {
302
292
  async serve(procedure, handler, opts = {}) {
303
293
  const bytesMode = bytesModeFor(opts.bytes);
304
294
  if (this.#activeServe !== null) {
305
- throw new Error(`macula-ts: Session is already serving "${this.#activeServe.procedure}" -- macula-go's ServeOneCall reads ` +
306
- `one frame at a time off the shared control stream, so a second concurrent serve() (or a serve() ` +
307
- `alongside call()) on the same Session races; open a second Session instead.`);
295
+ throw new Error(`macula-ts: Session is already serving "${this.#activeServe.procedure}" -- a second serve() on the ` +
296
+ `same Session would answer CALLs meant for the first, since each serve() takes the next inbound CALL ` +
297
+ `from the session's one queue; open a second Session instead.`);
308
298
  }
309
299
  if (this.#activeSubscription !== null) {
310
300
  throw new Error(`macula-ts: Session.serve() while subscribe("${this.#activeSubscription.topic}") is active on the same ` +
311
- `Session races on the shared control stream -- open a second Session for the other role.`);
301
+ `Session is not supported -- open a second Session for the other role.`);
312
302
  }
313
303
  const handle = this.#requireHandle();
314
304
  const identityHandle = this.#identity.handleForFfi();
@@ -386,9 +376,9 @@ export class Session {
386
376
  * signature or checks its expiry -- see DhtRecord's own doc (dht.ts).
387
377
  *
388
378
  * Real network I/O, off the main thread on the native side, exactly
389
- * like call() -- and subject to the same same-Session exclusivity
390
- * rule as call() (see #requireHandleNotServing's own doc): do not
391
- * call this while serve() is active on the same Session. */
379
+ * like call() -- and subject to the same one-role rule as call() (see
380
+ * #requireHandleNotServing's own doc): it refuses while a serve() or
381
+ * subscribe() is active on the same Session. */
392
382
  async findRecordsByType(recordType) {
393
383
  const handle = this.#requireHandleNotServing("findRecordsByType");
394
384
  const json = await this.#enqueue(() => native.dhtFindRecordsByType(handle, this.#identity.handleForFfi(), recordType));
@@ -400,7 +390,7 @@ export class Session {
400
390
  * procedure, not just the first one found. `key` must be exactly 32
401
391
  * bytes -- see dht/record.go's ProcedureKey/StationEndpointKey/
402
392
  * ContentKey (macula-go) for how those are derived from the thing
403
- * being looked up. Same I/O and exclusivity notes as
393
+ * being looked up. Same I/O and one-role notes as
404
394
  * findRecordsByType(). */
405
395
  async findRecords(key) {
406
396
  const handle = this.#requireHandleNotServing("findRecords");
@@ -412,7 +402,7 @@ export class Session {
412
402
  * dht.FindRecord). Resolves `null` when none exists -- mirrors
413
403
  * macula-go's own dht.ErrNotFound, translated to a value instead of a
414
404
  * thrown error since "not found" is an expected, routine outcome
415
- * here, not exceptional. Same I/O and exclusivity notes as
405
+ * here, not exceptional. Same I/O and one-role notes as
416
406
  * findRecordsByType(). */
417
407
  async findRecord(key) {
418
408
  const handle = this.#requireHandleNotServing("findRecord");
@@ -454,7 +444,7 @@ export class Session {
454
444
  * silently becomes CBOR text. Typed arguments rule that mistake out
455
445
  * (see DhtRecord's own doc). `ttlMs` defaults to DHT_DEFAULT_TTL_MS
456
446
  * (48h). Resolves with the signed record actually stored. Same I/O
457
- * and exclusivity notes as findRecordsByType(). */
447
+ * and one-role notes as findRecordsByType(). */
458
448
  async putProcedureAdvertisement(procedure, servingStation, opts = {}) {
459
449
  const handle = this.#requireHandleNotServing("putProcedureAdvertisement");
460
450
  requireKey32(servingStation);
@@ -471,7 +461,7 @@ export class Session {
471
461
  * own doc for wrapping macula-go's real constructor instead of a
472
462
  * generic JSON-payload builder (announcer_node/mcid are the same kind
473
463
  * of raw-byte field). `ttlMs` defaults to DHT_DEFAULT_TTL_MS (48h).
474
- * Same I/O and exclusivity notes as findRecordsByType(). */
464
+ * Same I/O and one-role notes as findRecordsByType(). */
475
465
  async putContentAnnouncement(mcid, endpoint, ttlMs = DHT_DEFAULT_TTL_MS) {
476
466
  const handle = this.#requireHandleNotServing("putContentAnnouncement");
477
467
  if (mcid.length !== 34) {
@@ -484,11 +474,12 @@ export class Session {
484
474
  * serving station and its dialable host/port (macula-go's
485
475
  * `directdial.Resolve`), via this Session used only to query the DHT
486
476
  * -- it does not need to be connected to the station that ends up
487
- * serving `procedure`. Retries past DHT propagation lag internally (up
488
- * to ~5s, macula-go's own fixed schedule, not configurable here); a
489
- * `procedure` nobody ever called `advertiseDirect()` for rejects
490
- * cleanly after that window (a plain `Error` wrapping macula-go's
491
- * `ErrProcedureNotAdvertised`), never a hang.
477
+ * serving `procedure`. Every advertisement that verifies is a
478
+ * candidate, and the DHT is asked again until one's station endpoint
479
+ * resolves or `opts.deadlineMs` passes (10 s when unset, macula-go's
480
+ * `directdial.DefaultResolveTimeout`); a `procedure` nobody ever called
481
+ * `advertiseDirect()` for rejects once that time is up (a plain `Error`
482
+ * wrapping macula-go's `ErrProcedureNotAdvertised`), never a hang.
492
483
  *
493
484
  * `opts.realm` must match whatever realm `procedure` was
494
485
  * `advertiseDirect()`d under, or the discovery URI the two sides
@@ -500,12 +491,16 @@ export class Session {
500
491
  * diagnostics).
501
492
  *
502
493
  * Real network I/O, off the main thread on the native side, subject to
503
- * the same same-Session exclusivity rule as `call()`/the DHT methods
494
+ * the same one-role rule as `call()`/the DHT methods
504
495
  * (`#requireHandleNotServing`). */
505
496
  async resolveDirect(procedure, opts = {}) {
497
+ if (opts.deadlineMs !== undefined && !(opts.deadlineMs > 0)) {
498
+ throw new RangeError(`macula-ts: resolveDirect deadlineMs must be a positive number of milliseconds, got ${opts.deadlineMs}`);
499
+ }
506
500
  const handle = this.#requireHandleNotServing("resolveDirect");
507
501
  const realm = realmBytesFromHex(opts.realm);
508
- const json = await this.#enqueue(() => native.directdialResolve(handle, this.#identity.handleForFfi(), realm, procedure));
502
+ const deadlineMs = opts.deadlineMs ?? 0;
503
+ const json = await this.#enqueue(() => native.directdialResolve(handle, this.#identity.handleForFfi(), realm, procedure, deadlineMs));
509
504
  return JSON.parse(json);
510
505
  }
511
506
  /** Direct-dial (caller side): resolves `procedure`'s provider (via
@@ -527,9 +522,9 @@ export class Session {
527
522
  *
528
523
  * Real network I/O (DHT lookups, a fresh QUIC dial, then the CALL
529
524
  * itself) -- off the main thread on the native side, subject to the
530
- * same same-Session exclusivity rule as `call()` for THIS Session's own
531
- * DHT-querying use (the separate dialed connection this opens
532
- * internally is not this Session and is never exposed as one). */
525
+ * same one-role rule as `call()` for THIS Session's own DHT-querying use
526
+ * (the separate dialed connection this opens internally is not this
527
+ * Session and is never exposed as one). */
533
528
  async callDirect(procedure, payload, opts = {}) {
534
529
  const handle = this.#requireHandleNotServing("callDirect");
535
530
  const timeoutMs = opts.deadlineMs ?? DEFAULT_CALL_TIMEOUT_MS;
@@ -553,7 +548,7 @@ export class Session {
553
548
  * method's and ucan.ts's own doc for why: macula's UCAN gate is a
554
549
  * bearer-token check, not an audience match).
555
550
  *
556
- * Same I/O and exclusivity notes as `callDirect()`. */
551
+ * Same I/O and one-role notes as `callDirect()`. */
557
552
  async callDirectWithUcan(procedure, payload, ucanToken, opts = {}) {
558
553
  const handle = this.#requireHandleNotServing("callDirectWithUcan");
559
554
  const timeoutMs = opts.deadlineMs ?? DEFAULT_CALL_TIMEOUT_MS;
@@ -592,10 +587,8 @@ export class Session {
592
587
  *
593
588
  * **Must NOT be called on a Session that is also actively
594
589
  * `serve()`-ing** -- enforced by the same `#requireHandleNotServing`
595
- * guard `call()`/the DHT methods use, for the identical reason: this
596
- * method's own `PutRecord` CALL reads a RESULT off the same shared
597
- * control stream `serve()`'s poll loop is also reading, and the two
598
- * would race (matches `directdial.AdvertiseDirect`'s own doc). A
590
+ * one-role check `call()`/the DHT methods use, since this method's own
591
+ * `PutRecord` is a CALL. A
599
592
  * provider that also serves `procedure` needs a SEPARATE Session (and
600
593
  * identity -- this fleet enforces one connection per identity, kicking
601
594
  * whichever connects second) to call this on.
@@ -620,13 +613,11 @@ export class Session {
620
613
  * observes a subscriber's own publish arriving back at it rather than
621
614
  * asserting it as a hard guarantee, for the same reason).
622
615
  *
623
- * Deliberately NOT guarded by the same-Session exclusivity rule
624
- * call()/serve()/subscribe()/the DHT methods share (see
625
- * #requireHandleNotServing's own doc) -- publish() only ever writes,
626
- * never reads off the shared control stream, so it does not race a
627
- * concurrent serve()/subscribe() the way those do, and can run safely
628
- * on the SAME Session a subscribe() of its own is active on -- exactly
629
- * what a subscriber publishing to (and receiving) its own topic needs.
616
+ * Deliberately NOT subject to the one-role rule call()/serve()/
617
+ * subscribe()/the DHT methods share (see #requireHandleNotServing's own
618
+ * doc) -- publish() only ever writes, so it runs on the SAME Session a
619
+ * subscribe() of its own is active on -- exactly what a subscriber
620
+ * publishing to (and receiving) its own topic needs.
630
621
  *
631
622
  * `opts.realm` (see CallOptions.realm's own doc for the hex-string
632
623
  * format and exact-match semantics) scopes which realm this EVENT is
@@ -644,21 +635,18 @@ export class Session {
644
635
  await native.sessionPublish(handle, this.#identity.handleForFfi(), realm, topic, payloadJson, opts.ttlMs ?? 0);
645
636
  }
646
637
  /** Pubsub: sends a signed SUBSCRIBE for `topic`, then delivers every
647
- * inbound EVENT for it to `handler` -- macula-go's own
648
- * connection.Session.RunSubscriber (connection/subscriber.go) drives
649
- * the actual read loop on the Go side, in a background goroutine, NOT
650
- * reimplemented on top of a hand-rolled poll here (see cabi/pubsub.go's
651
- * own doc for why RunSubscriber specifically, over the lower-level
652
- * RecvEvent). Delivery is Go-driven, not JS-driven: unlike serve()'s
638
+ * inbound EVENT for it to `handler` -- a background goroutine on the Go
639
+ * side reads the macula-go connection.Subscription that SUBSCRIBE
640
+ * opened (see cabi/pubsub.go's own doc for why the SUBSCRIBE goes out
641
+ * before that goroutine starts). Delivery is Go-driven, not JS-driven:
642
+ * unlike serve()'s
653
643
  * poll loop, nothing on this side calls into the native layer
654
644
  * repeatedly to ask "did anything arrive yet" -- the addon calls INTO
655
645
  * this handler asynchronously, via a Napi::ThreadSafeFunction wired to
656
646
  * that background goroutine, whenever an EVENT actually shows up.
657
647
  *
658
648
  * Only one subscribe() (and no active serve()) is allowed per Session
659
- * at a time -- same reasoning as serve()'s own one-at-a-time rule
660
- * (#requireHandleNotServing's own doc): the background reader and any
661
- * other read off this Session's shared control stream would race.
649
+ * at a time -- the one-role rule (#requireHandleNotServing's own doc).
662
650
  * Open a second Session for a second topic (or to serve/call
663
651
  * concurrently) instead.
664
652
  *
@@ -693,12 +681,11 @@ export class Session {
693
681
  async subscribe(topic, handler, opts = {}) {
694
682
  if (this.#activeServe !== null) {
695
683
  throw new Error(`macula-ts: Session.subscribe() while serve("${this.#activeServe.procedure}") is active on the same ` +
696
- `Session races on the shared control stream -- open a second Session for the other role.`);
684
+ `Session is not supported -- open a second Session for the other role.`);
697
685
  }
698
686
  if (this.#activeSubscription !== null) {
699
- throw new Error(`macula-ts: Session is already subscribed to "${this.#activeSubscription.topic}" -- macula-go's ` +
700
- `RunSubscriber reads one frame at a time off the shared control stream, so a second concurrent ` +
701
- `subscribe() on the same Session races; open a second Session instead.`);
687
+ throw new Error(`macula-ts: Session is already subscribed to "${this.#activeSubscription.topic}" -- one ` +
688
+ `subscribe() per Session is supported; open a second Session instead.`);
702
689
  }
703
690
  const handle = this.#requireHandle();
704
691
  const identityHandle = this.#identity.handleForFfi();
@@ -764,8 +751,8 @@ export class Session {
764
751
  }
765
752
  /** Content transfer: stores `data` (macula-go's content.Put, on this
766
753
  * Session's own fresh dedicated QUIC stream -- Session.
767
- * OpenDedicatedStream on the Go side, NOT the shared control stream
768
- * call()/serve()/the DHT methods/subscribe() all read from), chunking
754
+ * OpenDedicatedStream on the Go side, NOT the control stream
755
+ * call()/serve()/the DHT methods/subscribe() all use), chunking
769
756
  * automatically above manifest.DefaultChunkSize (256 KiB) and
770
757
  * returning the hex-encoded mcid it's now addressable by. `name` is
771
758
  * used ONLY on the chunked path (attached to the resulting manifest)
@@ -776,12 +763,11 @@ export class Session {
776
763
  * station may forget this content later, and there is no list/delete
777
764
  * operation. Treat this as "hand these bytes to a peer once."
778
765
  *
779
- * Because Put opens its own dedicated stream instead of reading the
780
- * shared control stream, this is, unlike call()/serve()/the DHT
781
- * methods/subscribe(), never subject to Session's same-Session
782
- * exclusivity guard (#requireHandleNotServing) -- it can run
783
- * concurrently with an active serve()/subscribe() (or another
784
- * putContent()/getContent()) on the same Session without racing.
766
+ * Because Put opens its own dedicated stream, this is, unlike call()/
767
+ * serve()/the DHT methods/subscribe(), never subject to Session's
768
+ * one-role rule (#requireHandleNotServing) -- it can run concurrently
769
+ * with an active serve()/subscribe() (or another putContent()/
770
+ * getContent()) on the same Session.
785
771
  *
786
772
  * Real network I/O (one or more signed CALLs on the new stream) --
787
773
  * runs off the main thread on the native side, like every other
@@ -805,9 +791,9 @@ export class Session {
805
791
  * (a bad session, a malformed mcid, a real transport error) rejects
806
792
  * with a plain Error instead.
807
793
  *
808
- * Same dedicated-stream, no-exclusivity-guard reasoning as
809
- * putContent() -- safe alongside an active serve()/subscribe() on the
810
- * same Session. Real network I/O, runs off the main thread. */
794
+ * Not subject to the one-role rule, for the same dedicated-stream
795
+ * reason as putContent() -- safe alongside an active serve()/subscribe()
796
+ * on the same Session. Real network I/O, runs off the main thread. */
811
797
  async getContent(mcid) {
812
798
  const handle = this.#requireHandle();
813
799
  const data = await native.contentGet(handle, this.#identity.handleForFfi(), mcid);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/dist/ucan.d.ts CHANGED
@@ -54,9 +54,11 @@ export declare class Ucan {
54
54
  /** The `iss` claim -- an opaque DID string (see didFromNodeId's own
55
55
  * doc: not parsed or resolved by this module, carried through as-is). */
56
56
  readonly issuer: string;
57
- /** The `aud` claim. NOT checked against any local identity by this
58
- * module or by Session.callWithUcan -- see this module's own doc on
59
- * why: the real gate is bearer-token, not audience-matched. */
57
+ /** The `aud` claim: for a token Ucan.mint() wrote, the NodeID, as
58
+ * lowercase hex, of the caller it is for. A gated provider accepts the
59
+ * token only from that caller; this module and Session.callWithUcan
60
+ * don't compare it with any local identity (see this module's own
61
+ * doc). */
60
62
  readonly audience: string;
61
63
  readonly capabilities: readonly UcanCapability[];
62
64
  /** The `exp` claim, unix seconds, or `null` if this token has none
@@ -87,12 +89,12 @@ export declare class Ucan {
87
89
  /** Mints a fresh UCAN token, self-issued and signed by `issuer`'s own
88
90
  * private key (macula-go's `ucan.Create`) -- the resulting token
89
91
  * verifies against `issuer`'s own public key (NodeID), matching
90
- * `ucan.Create`'s documented convention. `issuer`'s and `audience`'s
91
- * DID strings are both built automatically as
92
- * `did:macula:<hex NodeID>` (see `didFromNodeId`'s own doc for why:
93
- * this ecosystem's own established convention, not invented here) --
94
- * there is no way to mint with a custom DID string through this
95
- * method.
92
+ * `ucan.Create`'s documented convention. `iss` is written as
93
+ * `did:macula:<hex NodeID>` (`didFromNodeId`) and `aud` as `audience`'s
94
+ * lowercase hex (`audienceFromNodeId`), the form a gated provider
95
+ * compares with the calling identity: pass the NodeID of the identity
96
+ * that will present the token. There is no way to mint with custom
97
+ * claim strings through this method.
96
98
  *
97
99
  * No network I/O -- this never touches a Session or a station; a
98
100
  * token can be minted entirely offline given only an `Identity`. */
package/dist/ucan.js CHANGED
@@ -18,35 +18,31 @@
18
18
  // out of scope for this slice. See README.md's "What's explicitly not
19
19
  // yet implemented" section.
20
20
  //
21
- // CRITICAL, established finding this module's design respects: macula's
22
- // UCAN gate is a BEARER-token check. The real verify chain (Erlang's
23
- // authorize_policy + macula_ucan_nif:verify/2, identical across every
24
- // SDK port including this one's macula-go dependency) checks ONLY the
25
- // token's signature and expiry against its own issuer -- it never checks
26
- // the calling identity against the token's `aud` claim. Ucan.mint()
27
- // therefore places NO restriction relating `issuer`'s identity to
28
- // `audience` (any 32-byte NodeID is accepted, including one with no
29
- // relationship to the minting identity at all), and Session.callWithUcan
30
- // (session.ts) attaches whatever token it is given with no local
31
- // "does my identity match this token's audience" guard. Adding either
32
- // would reject configurations the real wire-level gate accepts fine, and
33
- // would misrepresent a security property the mesh does not actually
34
- // enforce.
21
+ // A provider gated with ucan.Required accepts a token only when it
22
+ // verifies against the required issuer and its `aud` claim is the calling
23
+ // identity's NodeID as lowercase hex. Ucan.mint() writes `audience` in
24
+ // that form, so mint a token for the identity that will present it; any
25
+ // 32-byte NodeID is accepted as the audience, related to the minting
26
+ // identity or not. Session.callWithUcan (session.ts) attaches whatever
27
+ // token it is given and leaves the check to the provider.
35
28
  import { native } from "./binding.js";
36
- /** Builds this ecosystem's own DID convention for a raw NodeID --
37
- * "did:macula:<lowercase hex NodeID>" -- matching macula-go's own tests
38
- * (ucan/ucan_test.go, connection/serve_ucan_test.go) and its
39
- * examples/ucan/main.go exactly, rather than inventing a different
40
- * scheme here. This is bookkeeping only: macula-go's ucan package treats
41
- * `iss`/`aud` as opaque strings it never parses or resolves (that's
42
- * macula_did_nif's job on the Erlang reference, out of scope for both
43
- * SDKs) -- the actual cryptographic verification a relying party performs
44
- * is keyed by a raw public key it already has out of band (ucan.Verify's
45
- * own `publicKey []byte` parameter, ucan/policy.go's
46
- * `Required(issuerPublicKey []byte)`), never by parsing this string. */
29
+ /** The `iss` claim this module writes for a NodeID:
30
+ * "did:macula:<lowercase hex NodeID>". macula-go's ucan package never
31
+ * parses or resolves it (that's macula_did_nif's job on the Erlang
32
+ * reference, out of scope for both SDKs) -- the cryptographic check a
33
+ * relying party performs is keyed by a raw public key it already has out
34
+ * of band (ucan.Verify's own `publicKey []byte` parameter,
35
+ * ucan/policy.go's `Required(issuerPublicKey []byte)`), never by parsing
36
+ * this string. */
47
37
  function didFromNodeId(nodeId) {
48
38
  return `did:macula:${Buffer.from(nodeId).toString("hex")}`;
49
39
  }
40
+ /** The `aud` claim this module writes for a NodeID: its lowercase hex,
41
+ * the form a gated provider compares with the calling identity
42
+ * (macula-go's ucan.Policy.Check). */
43
+ function audienceFromNodeId(nodeId) {
44
+ return Buffer.from(nodeId).toString("hex");
45
+ }
50
46
  /** A decoded (never verified -- see this module's own doc) UCAN token:
51
47
  * its raw wire text plus every claim cabi/ucan.go's macula_ucan_decode
52
48
  * exposes. Both Ucan.mint() and Ucan.decode() return this same shape --
@@ -63,9 +59,11 @@ export class Ucan {
63
59
  /** The `iss` claim -- an opaque DID string (see didFromNodeId's own
64
60
  * doc: not parsed or resolved by this module, carried through as-is). */
65
61
  issuer;
66
- /** The `aud` claim. NOT checked against any local identity by this
67
- * module or by Session.callWithUcan -- see this module's own doc on
68
- * why: the real gate is bearer-token, not audience-matched. */
62
+ /** The `aud` claim: for a token Ucan.mint() wrote, the NodeID, as
63
+ * lowercase hex, of the caller it is for. A gated provider accepts the
64
+ * token only from that caller; this module and Session.callWithUcan
65
+ * don't compare it with any local identity (see this module's own
66
+ * doc). */
69
67
  audience;
70
68
  capabilities;
71
69
  /** The `exp` claim, unix seconds, or `null` if this token has none
@@ -110,12 +108,12 @@ export class Ucan {
110
108
  /** Mints a fresh UCAN token, self-issued and signed by `issuer`'s own
111
109
  * private key (macula-go's `ucan.Create`) -- the resulting token
112
110
  * verifies against `issuer`'s own public key (NodeID), matching
113
- * `ucan.Create`'s documented convention. `issuer`'s and `audience`'s
114
- * DID strings are both built automatically as
115
- * `did:macula:<hex NodeID>` (see `didFromNodeId`'s own doc for why:
116
- * this ecosystem's own established convention, not invented here) --
117
- * there is no way to mint with a custom DID string through this
118
- * method.
111
+ * `ucan.Create`'s documented convention. `iss` is written as
112
+ * `did:macula:<hex NodeID>` (`didFromNodeId`) and `aud` as `audience`'s
113
+ * lowercase hex (`audienceFromNodeId`), the form a gated provider
114
+ * compares with the calling identity: pass the NodeID of the identity
115
+ * that will present the token. There is no way to mint with custom
116
+ * claim strings through this method.
119
117
  *
120
118
  * No network I/O -- this never touches a Session or a station; a
121
119
  * token can be minted entirely offline given only an `Identity`. */
@@ -123,7 +121,7 @@ export class Ucan {
123
121
  if (audience.length !== 32) {
124
122
  throw new Error(`macula-ts: UCAN audience NodeID must be exactly 32 bytes, got ${audience.length}`);
125
123
  }
126
- const token = native.ucanMint(issuer.handleForFfi(), didFromNodeId(issuer.nodeId), didFromNodeId(audience), JSON.stringify(capabilities ?? []), opts.expiresAt, opts.notBefore, opts.nonce ?? "", opts.facts !== undefined ? JSON.stringify(opts.facts) : undefined, opts.proofs !== undefined ? JSON.stringify(opts.proofs) : undefined);
124
+ const token = native.ucanMint(issuer.handleForFfi(), didFromNodeId(issuer.nodeId), audienceFromNodeId(audience), JSON.stringify(capabilities ?? []), opts.expiresAt, opts.notBefore, opts.nonce ?? "", opts.facts !== undefined ? JSON.stringify(opts.facts) : undefined, opts.proofs !== undefined ? JSON.stringify(opts.proofs) : undefined);
127
125
  return Ucan.decode(token);
128
126
  }
129
127
  /** Decodes `token`'s claims WITHOUT verifying its signature or