@dxos/client-services 0.1.52 → 0.1.53-main.01cbc6b

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.
Files changed (64) hide show
  1. package/dist/lib/browser/{chunk-C3SPTMW3.mjs → chunk-EYXOVYW5.mjs} +817 -694
  2. package/dist/lib/browser/chunk-EYXOVYW5.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +101 -120
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +24 -7
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/index.cjs +884 -782
  9. package/dist/lib/node/index.cjs.map +3 -3
  10. package/dist/lib/node/meta.json +1 -1
  11. package/dist/lib/node/packlets/testing/index.cjs +801 -664
  12. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  13. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  14. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  15. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  16. package/dist/types/src/packlets/services/service-host.d.ts +7 -1
  17. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  18. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  19. package/dist/types/src/packlets/spaces/data-space.d.ts +11 -2
  20. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  21. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +2 -1
  22. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  23. package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -2
  24. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  25. package/dist/types/src/packlets/testing/test-builder.d.ts +7 -1
  26. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  27. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +1 -1
  28. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  29. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +1 -1
  30. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  31. package/dist/types/src/packlets/vault/shell-runtime.d.ts +1 -21
  32. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
  33. package/package.json +33 -32
  34. package/src/packlets/devtools/devtools.ts +2 -2
  35. package/src/packlets/identity/identity-manager.test.ts +1 -1
  36. package/src/packlets/identity/identity-manager.ts +8 -8
  37. package/src/packlets/identity/identity-service.ts +2 -2
  38. package/src/packlets/identity/identity.test.ts +1 -1
  39. package/src/packlets/identity/identity.ts +22 -27
  40. package/src/packlets/invitations/device-invitation-protocol.ts +4 -4
  41. package/src/packlets/invitations/invitation-extension.ts +5 -5
  42. package/src/packlets/invitations/invitations-handler.ts +6 -6
  43. package/src/packlets/invitations/invitations-service.ts +3 -3
  44. package/src/packlets/invitations/space-invitation-protocol.ts +9 -9
  45. package/src/packlets/locks/node.ts +2 -2
  46. package/src/packlets/logging/logging-service.ts +4 -4
  47. package/src/packlets/services/service-context.test.ts +1 -1
  48. package/src/packlets/services/service-context.ts +12 -10
  49. package/src/packlets/services/service-host.test.ts +50 -2
  50. package/src/packlets/services/service-host.ts +28 -10
  51. package/src/packlets/spaces/data-space-manager.test.ts +72 -118
  52. package/src/packlets/spaces/data-space-manager.ts +18 -9
  53. package/src/packlets/spaces/data-space.ts +66 -20
  54. package/src/packlets/spaces/notarization-plugin.test.ts +1 -1
  55. package/src/packlets/spaces/notarization-plugin.ts +9 -5
  56. package/src/packlets/spaces/spaces-service.ts +46 -32
  57. package/src/packlets/testing/invitation-utils.ts +2 -2
  58. package/src/packlets/testing/test-builder.ts +36 -4
  59. package/src/packlets/vault/iframe-host-runtime.ts +2 -2
  60. package/src/packlets/vault/iframe-proxy-runtime.ts +2 -2
  61. package/src/packlets/vault/shell-runtime.ts +3 -49
  62. package/src/packlets/vault/worker-runtime.ts +1 -1
  63. package/src/packlets/vault/worker-session.ts +2 -2
  64. package/dist/lib/browser/chunk-C3SPTMW3.mjs.map +0 -7
@@ -1,4 +1,4 @@
1
- import "@dxos/node-std/globals"
1
+ import "@dxos/node-std/globals";
2
2
 
3
3
  // packages/sdk/client-services/src/packlets/devtools/feeds.ts
4
4
  import { EventSubscriptions } from "@dxos/async";
@@ -248,8 +248,10 @@ var DevtoolsServiceImpl = class {
248
248
  });
249
249
  });
250
250
  }
251
- getConfig(request) {
252
- throw new Error();
251
+ async getConfig(request) {
252
+ return {
253
+ config: JSON.stringify(this.params.config.values)
254
+ };
253
255
  }
254
256
  async getStorageInfo() {
255
257
  var _a, _b, _c, _d, _e;
@@ -350,6 +352,7 @@ import { Context as Context2 } from "@dxos/context";
350
352
  import { verifyCredential } from "@dxos/credentials";
351
353
  import { log } from "@dxos/log";
352
354
  import { schema } from "@dxos/protocols";
355
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/authenticator.ts";
353
356
  var createAuthProvider = (signer) => async (nonce) => {
354
357
  const credential = await signer.createCredential({
355
358
  assertion: {
@@ -375,20 +378,20 @@ var TrustedKeySetAuthVerifier = class {
375
378
  log("authenticating...", {
376
379
  credential
377
380
  }, {
378
- file: "authenticator.ts",
379
- line: 57,
380
- scope: this,
381
- callSite: (f, a) => f(...a)
381
+ F: __dxlog_file,
382
+ L: 57,
383
+ S: this,
384
+ C: (f, a) => f(...a)
382
385
  });
383
386
  const result = await verifyCredential(credential);
384
387
  if (result.kind === "fail") {
385
388
  log("Invalid credential", {
386
389
  result
387
390
  }, {
388
- file: "authenticator.ts",
389
- line: 61,
390
- scope: this,
391
- callSite: (f, a) => f(...a)
391
+ F: __dxlog_file,
392
+ L: 61,
393
+ S: this,
394
+ C: (f, a) => f(...a)
392
395
  });
393
396
  return false;
394
397
  }
@@ -397,10 +400,10 @@ var TrustedKeySetAuthVerifier = class {
397
400
  nonce,
398
401
  credential
399
402
  }, {
400
- file: "authenticator.ts",
401
- line: 66,
402
- scope: this,
403
- callSite: (f, a) => f(...a)
403
+ F: __dxlog_file,
404
+ L: 66,
405
+ S: this,
406
+ C: (f, a) => f(...a)
404
407
  });
405
408
  return false;
406
409
  }
@@ -408,10 +411,10 @@ var TrustedKeySetAuthVerifier = class {
408
411
  log("key is not currently in trusted set, waiting...", {
409
412
  key: credential.issuer
410
413
  }, {
411
- file: "authenticator.ts",
412
- line: 71,
413
- scope: this,
414
- callSite: (f, a) => f(...a)
414
+ F: __dxlog_file,
415
+ L: 71,
416
+ S: this,
417
+ C: (f, a) => f(...a)
415
418
  });
416
419
  return true;
417
420
  }
@@ -424,20 +427,20 @@ var TrustedKeySetAuthVerifier = class {
424
427
  log("auth success", {
425
428
  key: credential.issuer
426
429
  }, {
427
- file: "authenticator.ts",
428
- line: 82,
429
- scope: this,
430
- callSite: (f, a) => f(...a)
430
+ F: __dxlog_file,
431
+ L: 82,
432
+ S: this,
433
+ C: (f, a) => f(...a)
431
434
  });
432
435
  trigger.wake(true);
433
436
  } else {
434
437
  log("key is not currently in trusted set, waiting...", {
435
438
  key: credential.issuer
436
439
  }, {
437
- file: "authenticator.ts",
438
- line: 85,
439
- scope: this,
440
- callSite: (f, a) => f(...a)
440
+ F: __dxlog_file,
441
+ L: 85,
442
+ S: this,
443
+ C: (f, a) => f(...a)
441
444
  });
442
445
  }
443
446
  });
@@ -459,7 +462,7 @@ var TrustedKeySetAuthVerifier = class {
459
462
  };
460
463
 
461
464
  // packages/sdk/client-services/src/packlets/identity/identity.ts
462
- import assert from "@dxos/node-std/assert";
465
+ import invariant from "tiny-invariant";
463
466
  import { Event } from "@dxos/async";
464
467
  import { AUTH_TIMEOUT, LOAD_CONTROL_FEEDS_TIMEOUT } from "@dxos/client-protocol";
465
468
  import { DeviceStateMachine, createCredentialSignerWithKey, createCredentialSignerWithChain, ProfileStateMachine } from "@dxos/credentials";
@@ -467,6 +470,7 @@ import { failUndefined } from "@dxos/debug";
467
470
  import { writeMessages } from "@dxos/feed-store";
468
471
  import { log as log2 } from "@dxos/log";
469
472
  import { AdmittedFeed } from "@dxos/protocols/proto/dxos/halo/credentials";
473
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity.ts";
470
474
  var Identity = class {
471
475
  constructor({ space, signer, identityKey, deviceKey }) {
472
476
  this.stateUpdate = new Event();
@@ -474,15 +478,15 @@ var Identity = class {
474
478
  this._signer = signer;
475
479
  this.identityKey = identityKey;
476
480
  this.deviceKey = deviceKey;
477
- this._deviceStateMachine = this.space.spaceState.registerProcessor(new DeviceStateMachine({
481
+ this._deviceStateMachine = new DeviceStateMachine({
478
482
  identityKey: this.identityKey,
479
483
  deviceKey: this.deviceKey,
480
484
  onUpdate: () => this.stateUpdate.emit()
481
- }));
482
- this._profileStateMachine = this.space.spaceState.registerProcessor(new ProfileStateMachine({
485
+ });
486
+ this._profileStateMachine = new ProfileStateMachine({
483
487
  identityKey: this.identityKey,
484
488
  onUpdate: () => this.stateUpdate.emit()
485
- }));
489
+ });
486
490
  this.authVerifier = new TrustedKeySetAuthVerifier({
487
491
  trustedKeysProvider: () => this.authorizedDeviceKeys,
488
492
  update: this.stateUpdate,
@@ -491,27 +495,27 @@ var Identity = class {
491
495
  }
492
496
  // TODO(burdon): Expose state object?
493
497
  get authorizedDeviceKeys() {
494
- return this._deviceStateMachine.processor.authorizedDeviceKeys;
498
+ return this._deviceStateMachine.authorizedDeviceKeys;
495
499
  }
496
500
  async open() {
497
- await this._deviceStateMachine.open();
498
- await this._profileStateMachine.open();
501
+ await this.space.spaceState.addCredentialProcessor(this._deviceStateMachine);
502
+ await this.space.spaceState.addCredentialProcessor(this._profileStateMachine);
499
503
  await this.space.open();
500
504
  }
501
505
  async close() {
502
506
  await this.authVerifier.close();
503
- await this._deviceStateMachine.close();
504
- await this._profileStateMachine.close();
507
+ await this.space.spaceState.removeCredentialProcessor(this._profileStateMachine);
508
+ await this.space.spaceState.removeCredentialProcessor(this._deviceStateMachine);
505
509
  await this.space.close();
506
510
  }
507
511
  async ready() {
508
- await this._deviceStateMachine.processor.deviceChainReady.wait();
512
+ await this._deviceStateMachine.deviceChainReady.wait();
509
513
  await this.controlPipeline.state.waitUntilReachedTargetTimeframe({
510
514
  timeout: LOAD_CONTROL_FEEDS_TIMEOUT
511
515
  });
512
516
  }
513
517
  get profileDocument() {
514
- return this._profileStateMachine.processor.profile;
518
+ return this._profileStateMachine.profile;
515
519
  }
516
520
  /**
517
521
  * @test-only
@@ -526,7 +530,7 @@ var Identity = class {
526
530
  return this.space.genesisFeedKey;
527
531
  }
528
532
  get deviceCredentialChain() {
529
- return this._deviceStateMachine.processor.deviceCredentialChain;
533
+ return this._deviceStateMachine.deviceCredentialChain;
530
534
  }
531
535
  getAdmissionCredentials() {
532
536
  var _a, _b;
@@ -541,8 +545,8 @@ var Identity = class {
541
545
  * Requires identity to be ready.
542
546
  */
543
547
  getIdentityCredentialSigner() {
544
- assert(this._deviceStateMachine.processor.deviceCredentialChain, "Device credential chain is not ready.");
545
- return createCredentialSignerWithChain(this._signer, this._deviceStateMachine.processor.deviceCredentialChain, this.deviceKey);
548
+ invariant(this._deviceStateMachine.deviceCredentialChain, "Device credential chain is not ready.");
549
+ return createCredentialSignerWithChain(this._signer, this._deviceStateMachine.deviceCredentialChain, this.deviceKey);
546
550
  }
547
551
  /**
548
552
  * Issues credentials as device.
@@ -558,10 +562,10 @@ var Identity = class {
558
562
  controlFeedKey,
559
563
  dataFeedKey
560
564
  }, {
561
- file: "identity.ts",
562
- line: 156,
563
- scope: this,
564
- callSite: (f, a) => f(...a)
565
+ F: __dxlog_file2,
566
+ L: 151,
567
+ S: this,
568
+ C: (f, a) => f(...a)
565
569
  });
566
570
  const signer = this.getIdentityCredentialSigner();
567
571
  await writeMessages(this.controlPipeline.writer, [
@@ -602,7 +606,7 @@ var Identity = class {
602
606
  };
603
607
 
604
608
  // packages/sdk/client-services/src/packlets/identity/identity-manager.ts
605
- import assert2 from "@dxos/node-std/assert";
609
+ import invariant2 from "tiny-invariant";
606
610
  import { Event as Event2 } from "@dxos/async";
607
611
  import { createCredentialSignerWithKey as createCredentialSignerWithKey2, CredentialGenerator } from "@dxos/credentials";
608
612
  import { PublicKey as PublicKey3 } from "@dxos/keys";
@@ -610,6 +614,7 @@ import { log as log3 } from "@dxos/log";
610
614
  import { trace } from "@dxos/protocols";
611
615
  import { AdmittedFeed as AdmittedFeed2 } from "@dxos/protocols/proto/dxos/halo/credentials";
612
616
  import { deferFunction } from "@dxos/util";
617
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-manager.ts";
613
618
  var IdentityManager = class {
614
619
  // TODO(burdon): IdentityManagerParams.
615
620
  // TODO(dmaretskyi): Perhaps this should take/generate the peerKey outside of an initialized identity.
@@ -629,20 +634,20 @@ var IdentityManager = class {
629
634
  log3.trace("dxos.halo.identity-manager.open", trace.begin({
630
635
  id: traceId
631
636
  }), {
632
- file: "identity-manager.ts",
633
- line: 70,
634
- scope: this,
635
- callSite: (f, a) => f(...a)
637
+ F: __dxlog_file3,
638
+ L: 70,
639
+ S: this,
640
+ C: (f, a) => f(...a)
636
641
  });
637
642
  await this._metadataStore.load();
638
643
  const identityRecord = this._metadataStore.getIdentityRecord();
639
644
  log3("identity record", {
640
645
  identityRecord
641
646
  }, {
642
- file: "identity-manager.ts",
643
- line: 74,
644
- scope: this,
645
- callSite: (f, a) => f(...a)
647
+ F: __dxlog_file3,
648
+ L: 74,
649
+ S: this,
650
+ C: (f, a) => f(...a)
646
651
  });
647
652
  if (identityRecord) {
648
653
  this._identity = await this._constructIdentity(identityRecord);
@@ -652,20 +657,20 @@ var IdentityManager = class {
652
657
  identityKey: identityRecord.identityKey,
653
658
  displayName: (_a = this._identity.profileDocument) == null ? void 0 : _a.displayName
654
659
  }, {
655
- file: "identity-manager.ts",
656
- line: 79,
657
- scope: this,
658
- callSite: (f, a) => f(...a)
660
+ F: __dxlog_file3,
661
+ L: 79,
662
+ S: this,
663
+ C: (f, a) => f(...a)
659
664
  });
660
665
  this.stateUpdate.emit();
661
666
  }
662
667
  log3.trace("dxos.halo.identity-manager.open", trace.end({
663
668
  id: traceId
664
669
  }), {
665
- file: "identity-manager.ts",
666
- line: 85,
667
- scope: this,
668
- callSite: (f, a) => f(...a)
670
+ F: __dxlog_file3,
671
+ L: 85,
672
+ S: this,
673
+ C: (f, a) => f(...a)
669
674
  });
670
675
  }
671
676
  async close() {
@@ -674,12 +679,12 @@ var IdentityManager = class {
674
679
  }
675
680
  async createIdentity({ displayName } = {}) {
676
681
  var _a;
677
- assert2(!this._identity, "Identity already exists.");
678
- log3("creating identity...", {}, {
679
- file: "identity-manager.ts",
680
- line: 94,
681
- scope: this,
682
- callSite: (f, a) => f(...a)
682
+ invariant2(!this._identity, "Identity already exists.");
683
+ log3("creating identity...", void 0, {
684
+ F: __dxlog_file3,
685
+ L: 94,
686
+ S: this,
687
+ C: (f, a) => f(...a)
683
688
  });
684
689
  const controlFeedKey = await this._keyring.createKey();
685
690
  const identityRecord = {
@@ -696,8 +701,8 @@ var IdentityManager = class {
696
701
  await identity.open();
697
702
  {
698
703
  const generator = new CredentialGenerator(this._keyring, identityRecord.identityKey, identityRecord.deviceKey);
699
- assert2(identityRecord.haloSpace.genesisFeedKey, "Genesis feed key is required.");
700
- assert2(identityRecord.haloSpace.dataFeedKey, "Data feed key is required.");
704
+ invariant2(identityRecord.haloSpace.genesisFeedKey, "Genesis feed key is required.");
705
+ invariant2(identityRecord.haloSpace.dataFeedKey, "Data feed key is required.");
701
706
  const credentials = [
702
707
  // Space genesis.
703
708
  ...await generator.createSpaceGenesis(identityRecord.haloSpace.key, identityRecord.haloSpace.genesisFeedKey),
@@ -725,20 +730,20 @@ var IdentityManager = class {
725
730
  identityKey: identityRecord.identityKey,
726
731
  displayName: (_a = this._identity.profileDocument) == null ? void 0 : _a.displayName
727
732
  }, {
728
- file: "identity-manager.ts",
729
- line: 149,
730
- scope: this,
731
- callSite: (f, a) => f(...a)
733
+ F: __dxlog_file3,
734
+ L: 149,
735
+ S: this,
736
+ C: (f, a) => f(...a)
732
737
  });
733
738
  this.stateUpdate.emit();
734
739
  log3("created identity", {
735
740
  identityKey: identity.identityKey,
736
741
  deviceKey: identity.deviceKey
737
742
  }, {
738
- file: "identity-manager.ts",
739
- line: 155,
740
- scope: this,
741
- callSite: (f, a) => f(...a)
743
+ F: __dxlog_file3,
744
+ L: 155,
745
+ S: this,
746
+ C: (f, a) => f(...a)
742
747
  });
743
748
  return identity;
744
749
  }
@@ -750,12 +755,12 @@ var IdentityManager = class {
750
755
  log3("accepting identity", {
751
756
  params
752
757
  }, {
753
- file: "identity-manager.ts",
754
- line: 163,
755
- scope: this,
756
- callSite: (f, a) => f(...a)
758
+ F: __dxlog_file3,
759
+ L: 163,
760
+ S: this,
761
+ C: (f, a) => f(...a)
757
762
  });
758
- assert2(!this._identity, "Identity already exists.");
763
+ invariant2(!this._identity, "Identity already exists.");
759
764
  const identityRecord = {
760
765
  identityKey: params.identityKey,
761
766
  deviceKey: params.deviceKey,
@@ -776,38 +781,38 @@ var IdentityManager = class {
776
781
  identityKey: identityRecord.identityKey,
777
782
  displayName: (_a = this._identity.profileDocument) == null ? void 0 : _a.displayName
778
783
  }, {
779
- file: "identity-manager.ts",
780
- line: 183,
781
- scope: this,
782
- callSite: (f, a) => f(...a)
784
+ F: __dxlog_file3,
785
+ L: 183,
786
+ S: this,
787
+ C: (f, a) => f(...a)
783
788
  });
784
789
  this.stateUpdate.emit();
785
790
  log3("accepted identity", {
786
791
  identityKey: identity.identityKey,
787
792
  deviceKey: identity.deviceKey
788
793
  }, {
789
- file: "identity-manager.ts",
790
- line: 189,
791
- scope: this,
792
- callSite: (f, a) => f(...a)
794
+ F: __dxlog_file3,
795
+ L: 189,
796
+ S: this,
797
+ C: (f, a) => f(...a)
793
798
  });
794
799
  return identity;
795
800
  }
796
801
  async _constructIdentity(identityRecord) {
797
- assert2(!this._identity);
802
+ invariant2(!this._identity);
798
803
  log3("constructing identity", {
799
804
  identityRecord
800
805
  }, {
801
- file: "identity-manager.ts",
802
- line: 195,
803
- scope: this,
804
- callSite: (f, a) => f(...a)
806
+ F: __dxlog_file3,
807
+ L: 195,
808
+ S: this,
809
+ C: (f, a) => f(...a)
805
810
  });
806
- assert2(identityRecord.haloSpace.controlFeedKey);
811
+ invariant2(identityRecord.haloSpace.controlFeedKey);
807
812
  const controlFeed = await this._feedStore.openFeed(identityRecord.haloSpace.controlFeedKey, {
808
813
  writable: true
809
814
  });
810
- assert2(identityRecord.haloSpace.dataFeedKey);
815
+ invariant2(identityRecord.haloSpace.dataFeedKey);
811
816
  const dataFeed = await this._feedStore.openFeed(identityRecord.haloSpace.dataFeedKey, {
812
817
  writable: true,
813
818
  sparse: true
@@ -832,10 +837,10 @@ var IdentityManager = class {
832
837
  log3("done", {
833
838
  identityKey: identityRecord.identityKey
834
839
  }, {
835
- file: "identity-manager.ts",
836
- line: 226,
837
- scope: this,
838
- callSite: (f, a) => f(...a)
840
+ F: __dxlog_file3,
841
+ L: 226,
842
+ S: this,
843
+ C: (f, a) => f(...a)
839
844
  });
840
845
  if (identityRecord.haloSpace.controlTimeframe) {
841
846
  identity.controlPipeline.state.setTargetTimeframe(identityRecord.haloSpace.controlTimeframe);
@@ -852,11 +857,11 @@ var IdentityManager = class {
852
857
  onNetworkConnection: () => {
853
858
  },
854
859
  onAuthFailure: () => {
855
- log3.warn("auth failure", {}, {
856
- file: "identity-manager.ts",
857
- line: 245,
858
- scope: this,
859
- callSite: (f, a) => f(...a)
860
+ log3.warn("auth failure", void 0, {
861
+ F: __dxlog_file3,
862
+ L: 245,
863
+ S: this,
864
+ C: (f, a) => f(...a)
860
865
  });
861
866
  },
862
867
  memberKey: identityKey
@@ -865,7 +870,7 @@ var IdentityManager = class {
865
870
  };
866
871
 
867
872
  // packages/sdk/client-services/src/packlets/identity/identity-service.ts
868
- import assert3 from "@dxos/node-std/assert";
873
+ import invariant3 from "tiny-invariant";
869
874
  import { Stream as Stream7 } from "@dxos/codec-protobuf";
870
875
  import { signPresentation } from "@dxos/credentials";
871
876
  import { todo } from "@dxos/debug";
@@ -901,7 +906,7 @@ var IdentityServiceImpl = class {
901
906
  };
902
907
  }
903
908
  async signPresentation({ presentation, nonce }) {
904
- assert3(this._serviceContext.identityManager.identity, "Identity not initialized.");
909
+ invariant3(this._serviceContext.identityManager.identity, "Identity not initialized.");
905
910
  return await signPresentation({
906
911
  presentation,
907
912
  signer: this._serviceContext.keyring,
@@ -913,7 +918,7 @@ var IdentityServiceImpl = class {
913
918
  };
914
919
 
915
920
  // packages/sdk/client-services/src/packlets/invitations/device-invitation-protocol.ts
916
- import assert4 from "@dxos/node-std/assert";
921
+ import invariant4 from "tiny-invariant";
917
922
  import { Invitation } from "@dxos/protocols/proto/dxos/client/services";
918
923
  var DeviceInvitationProtocol = class {
919
924
  constructor(_keyring, _getIdentity, _acceptIdentity) {
@@ -930,7 +935,7 @@ var DeviceInvitationProtocol = class {
930
935
  };
931
936
  }
932
937
  async admit(request) {
933
- assert4(request.device);
938
+ invariant4(request.device);
934
939
  const identity = this._getIdentity();
935
940
  await identity.admitDevice(request.device);
936
941
  return {
@@ -958,9 +963,9 @@ var DeviceInvitationProtocol = class {
958
963
  };
959
964
  }
960
965
  async accept(response, request) {
961
- assert4(response.device);
966
+ invariant4(response.device);
962
967
  const { identityKey, haloSpaceKey, genesisFeedKey, controlTimeframe } = response.device;
963
- assert4(request.device);
968
+ invariant4(request.device);
964
969
  const { deviceKey, controlFeedKey, dataFeedKey } = request.device;
965
970
  await this._acceptIdentity({
966
971
  identityKey,
@@ -978,7 +983,7 @@ var DeviceInvitationProtocol = class {
978
983
  };
979
984
 
980
985
  // packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts
981
- import assert6 from "@dxos/node-std/assert";
986
+ import invariant6 from "tiny-invariant";
982
987
  import { PushStream, scheduleTask as scheduleTask2, TimeoutError, Trigger as Trigger3 } from "@dxos/async";
983
988
  import { AuthenticatingInvitationObservable, AUTHENTICATION_CODE_LENGTH, CancellableInvitationObservable, INVITATION_TIMEOUT } from "@dxos/client-protocol";
984
989
  import { Context as Context4 } from "@dxos/context";
@@ -992,7 +997,7 @@ import { Invitation as Invitation3 } from "@dxos/protocols/proto/dxos/client/ser
992
997
  import { AuthenticationResponse as AuthenticationResponse2 } from "@dxos/protocols/proto/dxos/halo/invitations";
993
998
 
994
999
  // packages/sdk/client-services/src/packlets/invitations/invitation-extension.ts
995
- import assert5 from "@dxos/node-std/assert";
1000
+ import invariant5 from "tiny-invariant";
996
1001
  import { Trigger as Trigger2 } from "@dxos/async";
997
1002
  import { cancelWithContext, Context as Context3 } from "@dxos/context";
998
1003
  import { InvalidInvitationExtensionRoleError } from "@dxos/errors";
@@ -1002,6 +1007,7 @@ import { schema as schema2, trace as trace2 } from "@dxos/protocols";
1002
1007
  import { Invitation as Invitation2 } from "@dxos/protocols/proto/dxos/client/services";
1003
1008
  import { AuthenticationResponse, Options } from "@dxos/protocols/proto/dxos/halo/invitations";
1004
1009
  import { RpcExtension } from "@dxos/teleport";
1010
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-extension.ts";
1005
1011
  var OPTIONS_TIMEOUT = 1e4;
1006
1012
  var MAX_OTP_ATTEMPTS = 3;
1007
1013
  var InvitationHostExtension = class extends RpcExtension {
@@ -1029,7 +1035,7 @@ var InvitationHostExtension = class extends RpcExtension {
1029
1035
  // Perhaps in the future we will have more complex logic here.
1030
1036
  InvitationHostService: {
1031
1037
  options: async (options) => {
1032
- assert5(!this._remoteOptions, "Remote options already set.");
1038
+ invariant5(!this._remoteOptions, "Remote options already set.");
1033
1039
  this._remoteOptions = options;
1034
1040
  this._remoteOptionsTrigger.wake();
1035
1041
  },
@@ -1039,20 +1045,20 @@ var InvitationHostExtension = class extends RpcExtension {
1039
1045
  log4.trace("dxos.sdk.invitation-handler.host.introduce", trace2.begin({
1040
1046
  id: traceId
1041
1047
  }), {
1042
- file: "invitation-extension.ts",
1043
- line: 98,
1044
- scope: this,
1045
- callSite: (f, a) => f(...a)
1048
+ F: __dxlog_file4,
1049
+ L: 98,
1050
+ S: this,
1051
+ C: (f, a) => f(...a)
1046
1052
  });
1047
1053
  const invitation = await this._callbacks.resolveInvitation(request);
1048
1054
  if (!invitation) {
1049
1055
  log4.warn("invitation not found", {
1050
1056
  invitationId
1051
1057
  }, {
1052
- file: "invitation-extension.ts",
1053
- line: 102,
1054
- scope: this,
1055
- callSite: (f, a) => f(...a)
1058
+ F: __dxlog_file4,
1059
+ L: 102,
1060
+ S: this,
1061
+ C: (f, a) => f(...a)
1056
1062
  });
1057
1063
  this._callbacks.onError(new Error("Invitation not found."));
1058
1064
  return {
@@ -1063,10 +1069,10 @@ var InvitationHostExtension = class extends RpcExtension {
1063
1069
  log4("guest introduced itself", {
1064
1070
  guestProfile: profile
1065
1071
  }, {
1066
- file: "invitation-extension.ts",
1067
- line: 111,
1068
- scope: this,
1069
- callSite: (f, a) => f(...a)
1072
+ F: __dxlog_file4,
1073
+ L: 111,
1074
+ S: this,
1075
+ C: (f, a) => f(...a)
1070
1076
  });
1071
1077
  this.guestProfile = profile;
1072
1078
  this._callbacks.onStateUpdate({
@@ -1076,10 +1082,10 @@ var InvitationHostExtension = class extends RpcExtension {
1076
1082
  log4.trace("dxos.sdk.invitation-handler.host.introduce", trace2.end({
1077
1083
  id: traceId
1078
1084
  }), {
1079
- file: "invitation-extension.ts",
1080
- line: 118,
1081
- scope: this,
1082
- callSite: (f, a) => f(...a)
1085
+ F: __dxlog_file4,
1086
+ L: 118,
1087
+ S: this,
1088
+ C: (f, a) => f(...a)
1083
1089
  });
1084
1090
  return {
1085
1091
  spaceKey: this.invitation.authMethod === Invitation2.AuthMethod.NONE ? this.invitation.spaceKey : void 0,
@@ -1091,28 +1097,28 @@ var InvitationHostExtension = class extends RpcExtension {
1091
1097
  log4.trace("dxos.sdk.invitation-handler.host.authenticate", trace2.begin({
1092
1098
  id: traceId
1093
1099
  }), {
1094
- file: "invitation-extension.ts",
1095
- line: 127,
1096
- scope: this,
1097
- callSite: (f, a) => f(...a)
1100
+ F: __dxlog_file4,
1101
+ L: 127,
1102
+ S: this,
1103
+ C: (f, a) => f(...a)
1098
1104
  });
1099
1105
  log4("received authentication request", {
1100
1106
  authCode: code
1101
1107
  }, {
1102
- file: "invitation-extension.ts",
1103
- line: 128,
1104
- scope: this,
1105
- callSite: (f, a) => f(...a)
1108
+ F: __dxlog_file4,
1109
+ L: 128,
1110
+ S: this,
1111
+ C: (f, a) => f(...a)
1106
1112
  });
1107
1113
  let status = AuthenticationResponse.Status.OK;
1108
- assert5(this.invitation, "Invitation is not set.");
1114
+ invariant5(this.invitation, "Invitation is not set.");
1109
1115
  switch (this.invitation.authMethod) {
1110
1116
  case Invitation2.AuthMethod.NONE: {
1111
- log4("authentication not required", {}, {
1112
- file: "invitation-extension.ts",
1113
- line: 134,
1114
- scope: this,
1115
- callSite: (f, a) => f(...a)
1117
+ log4("authentication not required", void 0, {
1118
+ F: __dxlog_file4,
1119
+ L: 134,
1120
+ S: this,
1121
+ C: (f, a) => f(...a)
1116
1122
  });
1117
1123
  return {
1118
1124
  status: AuthenticationResponse.Status.OK
@@ -1134,10 +1140,10 @@ var InvitationHostExtension = class extends RpcExtension {
1134
1140
  log4.error("invalid authentication method", {
1135
1141
  authMethod: this.invitation.authMethod
1136
1142
  }, {
1137
- file: "invitation-extension.ts",
1138
- line: 152,
1139
- scope: this,
1140
- callSite: (f, a) => f(...a)
1143
+ F: __dxlog_file4,
1144
+ L: 152,
1145
+ S: this,
1146
+ C: (f, a) => f(...a)
1141
1147
  });
1142
1148
  status = AuthenticationResponse.Status.INTERNAL_ERROR;
1143
1149
  break;
@@ -1149,10 +1155,10 @@ var InvitationHostExtension = class extends RpcExtension {
1149
1155
  status
1150
1156
  }
1151
1157
  }), {
1152
- file: "invitation-extension.ts",
1153
- line: 158,
1154
- scope: this,
1155
- callSite: (f, a) => f(...a)
1158
+ F: __dxlog_file4,
1159
+ L: 158,
1160
+ S: this,
1161
+ C: (f, a) => f(...a)
1156
1162
  });
1157
1163
  return {
1158
1164
  status
@@ -1163,13 +1169,13 @@ var InvitationHostExtension = class extends RpcExtension {
1163
1169
  log4.trace("dxos.sdk.invitation-handler.host.admit", trace2.begin({
1164
1170
  id: traceId
1165
1171
  }), {
1166
- file: "invitation-extension.ts",
1167
- line: 164,
1168
- scope: this,
1169
- callSite: (f, a) => f(...a)
1172
+ F: __dxlog_file4,
1173
+ L: 164,
1174
+ S: this,
1175
+ C: (f, a) => f(...a)
1170
1176
  });
1171
1177
  try {
1172
- assert5(this.invitation, "Invitation is not set.");
1178
+ invariant5(this.invitation, "Invitation is not set.");
1173
1179
  if (isAuthenticationRequired(this.invitation) && !this.authenticationPassed) {
1174
1180
  throw new Error("Not authenticated");
1175
1181
  }
@@ -1177,10 +1183,10 @@ var InvitationHostExtension = class extends RpcExtension {
1177
1183
  log4.trace("dxos.sdk.invitation-handler.host.admit", trace2.end({
1178
1184
  id: traceId
1179
1185
  }), {
1180
- file: "invitation-extension.ts",
1181
- line: 175,
1182
- scope: this,
1183
- callSite: (f, a) => f(...a)
1186
+ F: __dxlog_file4,
1187
+ L: 175,
1188
+ S: this,
1189
+ C: (f, a) => f(...a)
1184
1190
  });
1185
1191
  return response;
1186
1192
  } catch (err) {
@@ -1234,7 +1240,7 @@ var InvitationGuestExtension = class extends RpcExtension {
1234
1240
  return {
1235
1241
  InvitationHostService: {
1236
1242
  options: async (options) => {
1237
- assert5(!this._remoteOptions, "Remote options already set.");
1243
+ invariant5(!this._remoteOptions, "Remote options already set.");
1238
1244
  this._remoteOptions = options;
1239
1245
  this._remoteOptionsTrigger.wake();
1240
1246
  },
@@ -1254,11 +1260,11 @@ var InvitationGuestExtension = class extends RpcExtension {
1254
1260
  var _a;
1255
1261
  await super.onOpen(context);
1256
1262
  try {
1257
- log4("begin options", {}, {
1258
- file: "invitation-extension.ts",
1259
- line: 263,
1260
- scope: this,
1261
- callSite: (f, a) => f(...a)
1263
+ log4("begin options", void 0, {
1264
+ F: __dxlog_file4,
1265
+ L: 263,
1266
+ S: this,
1267
+ C: (f, a) => f(...a)
1262
1268
  });
1263
1269
  await cancelWithContext(this._ctx, this.rpc.InvitationHostService.options({
1264
1270
  role: Options.Role.GUEST
@@ -1266,11 +1272,11 @@ var InvitationGuestExtension = class extends RpcExtension {
1266
1272
  await cancelWithContext(this._ctx, this._remoteOptionsTrigger.wait({
1267
1273
  timeout: OPTIONS_TIMEOUT
1268
1274
  }));
1269
- log4("end options", {}, {
1270
- file: "invitation-extension.ts",
1271
- line: 266,
1272
- scope: this,
1273
- callSite: (f, a) => f(...a)
1275
+ log4("end options", void 0, {
1276
+ F: __dxlog_file4,
1277
+ L: 266,
1278
+ S: this,
1279
+ C: (f, a) => f(...a)
1274
1280
  });
1275
1281
  if (((_a = this._remoteOptions) == null ? void 0 : _a.role) !== Options.Role.HOST) {
1276
1282
  throw new InvalidInvitationExtensionRoleError(void 0, {
@@ -1281,20 +1287,20 @@ var InvitationGuestExtension = class extends RpcExtension {
1281
1287
  this._callbacks.onOpen(this._ctx);
1282
1288
  } catch (err) {
1283
1289
  log4("openError", err, {
1284
- file: "invitation-extension.ts",
1285
- line: 276,
1286
- scope: this,
1287
- callSite: (f, a) => f(...a)
1290
+ F: __dxlog_file4,
1291
+ L: 276,
1292
+ S: this,
1293
+ C: (f, a) => f(...a)
1288
1294
  });
1289
1295
  this._callbacks.onError(err);
1290
1296
  }
1291
1297
  }
1292
1298
  async onClose() {
1293
- log4("onClose", {}, {
1294
- file: "invitation-extension.ts",
1295
- line: 282,
1296
- scope: this,
1297
- callSite: (f, a) => f(...a)
1299
+ log4("onClose", void 0, {
1300
+ F: __dxlog_file4,
1301
+ L: 282,
1302
+ S: this,
1303
+ C: (f, a) => f(...a)
1298
1304
  });
1299
1305
  await this._ctx.dispose();
1300
1306
  }
@@ -1302,6 +1308,7 @@ var InvitationGuestExtension = class extends RpcExtension {
1302
1308
  var isAuthenticationRequired = (invitation) => invitation.authMethod !== Invitation2.AuthMethod.NONE;
1303
1309
 
1304
1310
  // packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts
1311
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts";
1305
1312
  var InvitationsHandler = class {
1306
1313
  /**
1307
1314
  * @internal
@@ -1313,7 +1320,7 @@ var InvitationsHandler = class {
1313
1320
  var _a;
1314
1321
  const { invitationId = PublicKey5.random().toHex(), type = Invitation3.Type.INTERACTIVE, authMethod = Invitation3.AuthMethod.SHARED_SECRET, state = Invitation3.State.INIT, timeout = INVITATION_TIMEOUT, swarmKey = PublicKey5.random() } = options != null ? options : {};
1315
1322
  const authCode = (_a = options == null ? void 0 : options.authCode) != null ? _a : authMethod === Invitation3.AuthMethod.SHARED_SECRET ? generatePasscode(AUTHENTICATION_CODE_LENGTH) : void 0;
1316
- assert6(protocol);
1323
+ invariant6(protocol);
1317
1324
  const invitation = {
1318
1325
  invitationId,
1319
1326
  type,
@@ -1335,10 +1342,10 @@ var InvitationsHandler = class {
1335
1342
  log5("complete", {
1336
1343
  ...protocol.toJSON()
1337
1344
  }, {
1338
- file: "invitations-handler.ts",
1339
- line: 99,
1340
- scope: this,
1341
- callSite: (f, a) => f(...a)
1345
+ F: __dxlog_file5,
1346
+ L: 99,
1347
+ S: this,
1348
+ C: (f, a) => f(...a)
1342
1349
  });
1343
1350
  stream.complete();
1344
1351
  });
@@ -1360,7 +1367,7 @@ var InvitationsHandler = class {
1360
1367
  var _a2, _b, _c;
1361
1368
  try {
1362
1369
  const deviceKey = (_c = (_a2 = admissionRequest.device) == null ? void 0 : _a2.deviceKey) != null ? _c : (_b = admissionRequest.space) == null ? void 0 : _b.deviceKey;
1363
- assert6(deviceKey);
1370
+ invariant6(deviceKey);
1364
1371
  const admissionResponse = await protocol.admit(admissionRequest, extension.guestProfile);
1365
1372
  extension.completedTrigger.wake(deviceKey);
1366
1373
  return admissionResponse;
@@ -1376,18 +1383,18 @@ var InvitationsHandler = class {
1376
1383
  log5.trace("dxos.sdk.invitations-handler.host.onOpen", trace3.begin({
1377
1384
  id: traceId
1378
1385
  }), {
1379
- file: "invitations-handler.ts",
1380
- line: 138,
1381
- scope: this,
1382
- callSite: (f, a) => f(...a)
1386
+ F: __dxlog_file5,
1387
+ L: 138,
1388
+ S: this,
1389
+ C: (f, a) => f(...a)
1383
1390
  });
1384
1391
  log5("connected", {
1385
1392
  ...protocol.toJSON()
1386
1393
  }, {
1387
- file: "invitations-handler.ts",
1388
- line: 139,
1389
- scope: this,
1390
- callSite: (f, a) => f(...a)
1394
+ F: __dxlog_file5,
1395
+ L: 139,
1396
+ S: this,
1397
+ C: (f, a) => f(...a)
1391
1398
  });
1392
1399
  stream.next({
1393
1400
  ...invitation,
@@ -1400,10 +1407,10 @@ var InvitationsHandler = class {
1400
1407
  guest: deviceKey,
1401
1408
  ...protocol.toJSON()
1402
1409
  }, {
1403
- file: "invitations-handler.ts",
1404
- line: 142,
1405
- scope: this,
1406
- callSite: (f, a) => f(...a)
1410
+ F: __dxlog_file5,
1411
+ L: 142,
1412
+ S: this,
1413
+ C: (f, a) => f(...a)
1407
1414
  });
1408
1415
  stream.next({
1409
1416
  ...invitation,
@@ -1412,20 +1419,20 @@ var InvitationsHandler = class {
1412
1419
  log5.trace("dxos.sdk.invitations-handler.host.onOpen", trace3.end({
1413
1420
  id: traceId
1414
1421
  }), {
1415
- file: "invitations-handler.ts",
1416
- line: 144,
1417
- scope: this,
1418
- callSite: (f, a) => f(...a)
1422
+ F: __dxlog_file5,
1423
+ L: 144,
1424
+ S: this,
1425
+ C: (f, a) => f(...a)
1419
1426
  });
1420
1427
  } catch (err) {
1421
1428
  if (err instanceof TimeoutError) {
1422
1429
  log5("timeout", {
1423
1430
  ...protocol.toJSON()
1424
1431
  }, {
1425
- file: "invitations-handler.ts",
1426
- line: 147,
1427
- scope: this,
1428
- callSite: (f, a) => f(...a)
1432
+ F: __dxlog_file5,
1433
+ L: 147,
1434
+ S: this,
1435
+ C: (f, a) => f(...a)
1429
1436
  });
1430
1437
  stream.next({
1431
1438
  ...invitation,
@@ -1433,10 +1440,10 @@ var InvitationsHandler = class {
1433
1440
  });
1434
1441
  } else {
1435
1442
  log5.error("failed", err, {
1436
- file: "invitations-handler.ts",
1437
- line: 150,
1438
- scope: this,
1439
- callSite: (f, a) => f(...a)
1443
+ F: __dxlog_file5,
1444
+ L: 150,
1445
+ S: this,
1446
+ C: (f, a) => f(...a)
1440
1447
  });
1441
1448
  stream.error(err);
1442
1449
  }
@@ -1444,10 +1451,10 @@ var InvitationsHandler = class {
1444
1451
  id: traceId,
1445
1452
  error: err
1446
1453
  }), {
1447
- file: "invitations-handler.ts",
1448
- line: 153,
1449
- scope: this,
1450
- callSite: (f, a) => f(...a)
1454
+ F: __dxlog_file5,
1455
+ L: 153,
1456
+ S: this,
1457
+ C: (f, a) => f(...a)
1451
1458
  });
1452
1459
  } finally {
1453
1460
  if (type !== Invitation3.Type.MULTIUSE) {
@@ -1465,10 +1472,10 @@ var InvitationsHandler = class {
1465
1472
  log5("timeout", {
1466
1473
  ...protocol.toJSON()
1467
1474
  }, {
1468
- file: "invitations-handler.ts",
1469
- line: 168,
1470
- scope: this,
1471
- callSite: (f, a) => f(...a)
1475
+ F: __dxlog_file5,
1476
+ L: 168,
1477
+ S: this,
1478
+ C: (f, a) => f(...a)
1472
1479
  });
1473
1480
  stream.next({
1474
1481
  ...invitation,
@@ -1476,10 +1483,10 @@ var InvitationsHandler = class {
1476
1483
  });
1477
1484
  } else {
1478
1485
  log5.error("failed", err, {
1479
- file: "invitations-handler.ts",
1480
- line: 171,
1481
- scope: this,
1482
- callSite: (f, a) => f(...a)
1486
+ F: __dxlog_file5,
1487
+ L: 171,
1488
+ S: this,
1489
+ C: (f, a) => f(...a)
1483
1490
  });
1484
1491
  stream.error(err);
1485
1492
  }
@@ -1519,13 +1526,13 @@ var InvitationsHandler = class {
1519
1526
  }
1520
1527
  acceptInvitation(protocol, invitation) {
1521
1528
  const { timeout = INVITATION_TIMEOUT } = invitation;
1522
- assert6(protocol);
1529
+ invariant6(protocol);
1523
1530
  const authenticated = new Trigger3();
1524
1531
  let admitted = false;
1525
1532
  let currentState;
1526
1533
  const stream = new PushStream();
1527
1534
  const setState = (newData) => {
1528
- assert6(newData.state !== void 0);
1535
+ invariant6(newData.state !== void 0);
1529
1536
  currentState = newData.state;
1530
1537
  stream.next({
1531
1538
  ...invitation,
@@ -1538,20 +1545,20 @@ var InvitationsHandler = class {
1538
1545
  log5("timeout", {
1539
1546
  ...protocol.toJSON()
1540
1547
  }, {
1541
- file: "invitations-handler.ts",
1542
- line: 230,
1543
- scope: this,
1544
- callSite: (f, a) => f(...a)
1548
+ F: __dxlog_file5,
1549
+ L: 230,
1550
+ S: this,
1551
+ C: (f, a) => f(...a)
1545
1552
  });
1546
1553
  setState({
1547
1554
  state: Invitation3.State.TIMEOUT
1548
1555
  });
1549
1556
  } else {
1550
1557
  log5.warn("auth failed", err, {
1551
- file: "invitations-handler.ts",
1552
- line: 233,
1553
- scope: this,
1554
- callSite: (f, a) => f(...a)
1558
+ F: __dxlog_file5,
1559
+ L: 233,
1560
+ S: this,
1561
+ C: (f, a) => f(...a)
1555
1562
  });
1556
1563
  stream.error(err);
1557
1564
  }
@@ -1562,10 +1569,10 @@ var InvitationsHandler = class {
1562
1569
  log5("complete", {
1563
1570
  ...protocol.toJSON()
1564
1571
  }, {
1565
- file: "invitations-handler.ts",
1566
- line: 241,
1567
- scope: this,
1568
- callSite: (f, a) => f(...a)
1572
+ F: __dxlog_file5,
1573
+ L: 241,
1574
+ S: this,
1575
+ C: (f, a) => f(...a)
1569
1576
  });
1570
1577
  stream.complete();
1571
1578
  });
@@ -1577,10 +1584,10 @@ var InvitationsHandler = class {
1577
1584
  log5("extension disposed", {
1578
1585
  currentState
1579
1586
  }, {
1580
- file: "invitations-handler.ts",
1581
- line: 251,
1582
- scope: this,
1583
- callSite: (f, a) => f(...a)
1587
+ F: __dxlog_file5,
1588
+ L: 251,
1589
+ S: this,
1590
+ C: (f, a) => f(...a)
1584
1591
  });
1585
1592
  if (!admitted) {
1586
1593
  stream.error(new Error("Remote peer disconnected."));
@@ -1592,10 +1599,10 @@ var InvitationsHandler = class {
1592
1599
  log5.trace("dxos.sdk.invitations-handler.guest.onOpen", trace3.begin({
1593
1600
  id: traceId
1594
1601
  }), {
1595
- file: "invitations-handler.ts",
1596
- line: 260,
1597
- scope: this,
1598
- callSite: (f, a) => f(...a)
1602
+ F: __dxlog_file5,
1603
+ L: 260,
1604
+ S: this,
1605
+ C: (f, a) => f(...a)
1599
1606
  });
1600
1607
  if (++connectionCount > 1) {
1601
1608
  throw new Error(`multiple connections detected: ${connectionCount}`);
@@ -1604,10 +1611,10 @@ var InvitationsHandler = class {
1604
1611
  log5("connected", {
1605
1612
  ...protocol.toJSON()
1606
1613
  }, {
1607
- file: "invitations-handler.ts",
1608
- line: 268,
1609
- scope: this,
1610
- callSite: (f, a) => f(...a)
1614
+ F: __dxlog_file5,
1615
+ L: 268,
1616
+ S: this,
1617
+ C: (f, a) => f(...a)
1611
1618
  });
1612
1619
  setState({
1613
1620
  state: Invitation3.State.CONNECTED
@@ -1615,20 +1622,20 @@ var InvitationsHandler = class {
1615
1622
  log5("introduce", {
1616
1623
  ...protocol.toJSON()
1617
1624
  }, {
1618
- file: "invitations-handler.ts",
1619
- line: 272,
1620
- scope: this,
1621
- callSite: (f, a) => f(...a)
1625
+ F: __dxlog_file5,
1626
+ L: 272,
1627
+ S: this,
1628
+ C: (f, a) => f(...a)
1622
1629
  });
1623
1630
  const introductionResponse = await extension.rpc.InvitationHostService.introduce(protocol.createIntroduction());
1624
1631
  log5("introduce response", {
1625
1632
  ...protocol.toJSON(),
1626
1633
  response: introductionResponse
1627
1634
  }, {
1628
- file: "invitations-handler.ts",
1629
- line: 276,
1630
- scope: this,
1631
- callSite: (f, a) => f(...a)
1635
+ F: __dxlog_file5,
1636
+ L: 276,
1637
+ S: this,
1638
+ C: (f, a) => f(...a)
1632
1639
  });
1633
1640
  invitation.authMethod = introductionResponse.authMethod;
1634
1641
  if (introductionResponse.spaceKey) {
@@ -1636,11 +1643,11 @@ var InvitationsHandler = class {
1636
1643
  }
1637
1644
  if (isAuthenticationRequired(invitation)) {
1638
1645
  for (let attempt = 1; attempt <= MAX_OTP_ATTEMPTS; attempt++) {
1639
- log5("guest waiting for authentication code...", {}, {
1640
- file: "invitations-handler.ts",
1641
- line: 285,
1642
- scope: this,
1643
- callSite: (f, a) => f(...a)
1646
+ log5("guest waiting for authentication code...", void 0, {
1647
+ F: __dxlog_file5,
1648
+ L: 285,
1649
+ S: this,
1650
+ C: (f, a) => f(...a)
1644
1651
  });
1645
1652
  setState({
1646
1653
  state: Invitation3.State.READY_FOR_AUTHENTICATION
@@ -1648,11 +1655,11 @@ var InvitationsHandler = class {
1648
1655
  const authCode = await authenticated.wait({
1649
1656
  timeout
1650
1657
  });
1651
- log5("sending authentication request", {}, {
1652
- file: "invitations-handler.ts",
1653
- line: 289,
1654
- scope: this,
1655
- callSite: (f, a) => f(...a)
1658
+ log5("sending authentication request", void 0, {
1659
+ F: __dxlog_file5,
1660
+ L: 289,
1661
+ S: this,
1662
+ C: (f, a) => f(...a)
1656
1663
  });
1657
1664
  setState({
1658
1665
  state: Invitation3.State.AUTHENTICATING
@@ -1670,10 +1677,10 @@ var InvitationsHandler = class {
1670
1677
  log5("retrying invalid code", {
1671
1678
  attempt
1672
1679
  }, {
1673
- file: "invitations-handler.ts",
1674
- line: 300,
1675
- scope: this,
1676
- callSite: (f, a) => f(...a)
1680
+ F: __dxlog_file5,
1681
+ L: 300,
1682
+ S: this,
1683
+ C: (f, a) => f(...a)
1677
1684
  });
1678
1685
  authenticated.reset();
1679
1686
  }
@@ -1687,10 +1694,10 @@ var InvitationsHandler = class {
1687
1694
  log5("request admission", {
1688
1695
  ...protocol.toJSON()
1689
1696
  }, {
1690
- file: "invitations-handler.ts",
1691
- line: 311,
1692
- scope: this,
1693
- callSite: (f, a) => f(...a)
1697
+ F: __dxlog_file5,
1698
+ L: 311,
1699
+ S: this,
1700
+ C: (f, a) => f(...a)
1694
1701
  });
1695
1702
  const admissionRequest = await protocol.createAdmissionRequest();
1696
1703
  const admissionResponse = await extension.rpc.InvitationHostService.admit(admissionRequest);
@@ -1699,10 +1706,10 @@ var InvitationsHandler = class {
1699
1706
  log5("admitted by host", {
1700
1707
  ...protocol.toJSON()
1701
1708
  }, {
1702
- file: "invitations-handler.ts",
1703
- line: 322,
1704
- scope: this,
1705
- callSite: (f, a) => f(...a)
1709
+ F: __dxlog_file5,
1710
+ L: 322,
1711
+ S: this,
1712
+ C: (f, a) => f(...a)
1706
1713
  });
1707
1714
  setState({
1708
1715
  ...result,
@@ -1711,30 +1718,30 @@ var InvitationsHandler = class {
1711
1718
  log5.trace("dxos.sdk.invitations-handler.guest.onOpen", trace3.end({
1712
1719
  id: traceId
1713
1720
  }), {
1714
- file: "invitations-handler.ts",
1715
- line: 324,
1716
- scope: this,
1717
- callSite: (f, a) => f(...a)
1721
+ F: __dxlog_file5,
1722
+ L: 324,
1723
+ S: this,
1724
+ C: (f, a) => f(...a)
1718
1725
  });
1719
1726
  } catch (err) {
1720
1727
  if (err instanceof TimeoutError) {
1721
1728
  log5("timeout", {
1722
1729
  ...protocol.toJSON()
1723
1730
  }, {
1724
- file: "invitations-handler.ts",
1725
- line: 327,
1726
- scope: this,
1727
- callSite: (f, a) => f(...a)
1731
+ F: __dxlog_file5,
1732
+ L: 327,
1733
+ S: this,
1734
+ C: (f, a) => f(...a)
1728
1735
  });
1729
1736
  setState({
1730
1737
  state: Invitation3.State.TIMEOUT
1731
1738
  });
1732
1739
  } else {
1733
1740
  log5("auth failed", err, {
1734
- file: "invitations-handler.ts",
1735
- line: 330,
1736
- scope: this,
1737
- callSite: (f, a) => f(...a)
1741
+ F: __dxlog_file5,
1742
+ L: 330,
1743
+ S: this,
1744
+ C: (f, a) => f(...a)
1738
1745
  });
1739
1746
  stream.error(err);
1740
1747
  }
@@ -1742,10 +1749,10 @@ var InvitationsHandler = class {
1742
1749
  id: traceId,
1743
1750
  error: err
1744
1751
  }), {
1745
- file: "invitations-handler.ts",
1746
- line: 333,
1747
- scope: this,
1748
- callSite: (f, a) => f(...a)
1752
+ F: __dxlog_file5,
1753
+ L: 333,
1754
+ S: this,
1755
+ C: (f, a) => f(...a)
1749
1756
  });
1750
1757
  } finally {
1751
1758
  await ctx.dispose();
@@ -1760,20 +1767,20 @@ var InvitationsHandler = class {
1760
1767
  log5("timeout", {
1761
1768
  ...protocol.toJSON()
1762
1769
  }, {
1763
- file: "invitations-handler.ts",
1764
- line: 344,
1765
- scope: this,
1766
- callSite: (f, a) => f(...a)
1770
+ F: __dxlog_file5,
1771
+ L: 344,
1772
+ S: this,
1773
+ C: (f, a) => f(...a)
1767
1774
  });
1768
1775
  setState({
1769
1776
  state: Invitation3.State.TIMEOUT
1770
1777
  });
1771
1778
  } else {
1772
1779
  log5("auth failed", err, {
1773
- file: "invitations-handler.ts",
1774
- line: 347,
1775
- scope: this,
1776
- callSite: (f, a) => f(...a)
1780
+ F: __dxlog_file5,
1781
+ L: 347,
1782
+ S: this,
1783
+ C: (f, a) => f(...a)
1777
1784
  });
1778
1785
  stream.error(err);
1779
1786
  }
@@ -1782,7 +1789,7 @@ var InvitationsHandler = class {
1782
1789
  return extension;
1783
1790
  };
1784
1791
  scheduleTask2(ctx, async () => {
1785
- assert6(invitation.swarmKey);
1792
+ invariant6(invitation.swarmKey);
1786
1793
  const topic = invitation.swarmKey;
1787
1794
  const swarmConnection = await this._networkManager.joinSwarm({
1788
1795
  topic,
@@ -1815,11 +1822,12 @@ var InvitationsHandler = class {
1815
1822
  };
1816
1823
 
1817
1824
  // packages/sdk/client-services/src/packlets/invitations/invitations-service.ts
1818
- import assert7 from "@dxos/node-std/assert";
1825
+ import invariant7 from "tiny-invariant";
1819
1826
  import { Event as Event3 } from "@dxos/async";
1820
1827
  import { Stream as Stream8 } from "@dxos/codec-protobuf";
1821
1828
  import { log as log6 } from "@dxos/log";
1822
1829
  import { QueryInvitationsResponse } from "@dxos/protocols/proto/dxos/client/services";
1830
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-service.ts";
1823
1831
  var InvitationsServiceImpl = class {
1824
1832
  constructor(_invitationsHandler, _getHandler) {
1825
1833
  this._invitationsHandler = _invitationsHandler;
@@ -1880,35 +1888,35 @@ var InvitationsServiceImpl = class {
1880
1888
  });
1881
1889
  }
1882
1890
  async authenticate({ invitationId, authCode }) {
1883
- log6("authenticating...", {}, {
1884
- file: "invitations-service.ts",
1885
- line: 103,
1886
- scope: this,
1887
- callSite: (f, a) => f(...a)
1891
+ log6("authenticating...", void 0, {
1892
+ F: __dxlog_file6,
1893
+ L: 103,
1894
+ S: this,
1895
+ C: (f, a) => f(...a)
1888
1896
  });
1889
- assert7(invitationId);
1897
+ invariant7(invitationId);
1890
1898
  const observable = this._acceptInvitations.get(invitationId);
1891
1899
  if (!observable) {
1892
1900
  log6.warn("invalid invitation", {
1893
1901
  invitationId
1894
1902
  }, {
1895
- file: "invitations-service.ts",
1896
- line: 107,
1897
- scope: this,
1898
- callSite: (f, a) => f(...a)
1903
+ F: __dxlog_file6,
1904
+ L: 107,
1905
+ S: this,
1906
+ C: (f, a) => f(...a)
1899
1907
  });
1900
1908
  } else {
1901
1909
  await observable.authenticate(authCode);
1902
1910
  }
1903
1911
  }
1904
1912
  async cancelInvitation({ invitationId }) {
1905
- log6("deleting...", {}, {
1906
- file: "invitations-service.ts",
1907
- line: 114,
1908
- scope: this,
1909
- callSite: (f, a) => f(...a)
1913
+ log6("deleting...", void 0, {
1914
+ F: __dxlog_file6,
1915
+ L: 114,
1916
+ S: this,
1917
+ C: (f, a) => f(...a)
1910
1918
  });
1911
- assert7(invitationId);
1919
+ invariant7(invitationId);
1912
1920
  const created = this._createInvitations.get(invitationId);
1913
1921
  const accepted = this._acceptInvitations.get(invitationId);
1914
1922
  if (created) {
@@ -1923,10 +1931,10 @@ var InvitationsServiceImpl = class {
1923
1931
  log6.warn("invalid invitation", {
1924
1932
  invitationId
1925
1933
  }, {
1926
- file: "invitations-service.ts",
1927
- line: 127,
1928
- scope: this,
1929
- callSite: (f, a) => f(...a)
1934
+ F: __dxlog_file6,
1935
+ L: 127,
1936
+ S: this,
1937
+ C: (f, a) => f(...a)
1930
1938
  });
1931
1939
  }
1932
1940
  }
@@ -1983,11 +1991,12 @@ var InvitationsServiceImpl = class {
1983
1991
  };
1984
1992
 
1985
1993
  // packages/sdk/client-services/src/packlets/invitations/space-invitation-protocol.ts
1986
- import assert8 from "@dxos/node-std/assert";
1994
+ import invariant8 from "tiny-invariant";
1987
1995
  import { createAdmissionCredentials, getCredentialAssertion } from "@dxos/credentials";
1988
1996
  import { writeMessages as writeMessages2 } from "@dxos/feed-store";
1989
1997
  import { log as log7 } from "@dxos/log";
1990
1998
  import { Invitation as Invitation4 } from "@dxos/protocols/proto/dxos/client/services";
1999
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/space-invitation-protocol.ts";
1991
2000
  var SpaceInvitationProtocol = class {
1992
2001
  constructor(_spaceManager, _signingContext, _keyring, _spaceKey) {
1993
2002
  this._spaceManager = _spaceManager;
@@ -2009,24 +2018,24 @@ var SpaceInvitationProtocol = class {
2009
2018
  }
2010
2019
  async admit(request, guestProfile) {
2011
2020
  var _a;
2012
- assert8(this._spaceKey);
2021
+ invariant8(this._spaceKey);
2013
2022
  const space = await this._spaceManager.spaces.get(this._spaceKey);
2014
- assert8(space);
2015
- assert8(request.space);
2023
+ invariant8(space);
2024
+ invariant8(request.space);
2016
2025
  const { identityKey, deviceKey } = request.space;
2017
2026
  log7("writing guest credentials", {
2018
2027
  host: this._signingContext.deviceKey,
2019
2028
  guest: deviceKey
2020
2029
  }, {
2021
- file: "space-invitation-protocol.ts",
2022
- line: 50,
2023
- scope: this,
2024
- callSite: (f, a) => f(...a)
2030
+ F: __dxlog_file7,
2031
+ L: 50,
2032
+ S: this,
2033
+ C: (f, a) => f(...a)
2025
2034
  });
2026
2035
  const credentials = await createAdmissionCredentials(this._signingContext.credentialSigner, identityKey, space.key, space.inner.genesisFeedKey, guestProfile);
2027
- assert8(credentials[0].credential);
2036
+ invariant8(credentials[0].credential);
2028
2037
  const spaceMemberCredential = credentials[0].credential.credential;
2029
- assert8(getCredentialAssertion(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember");
2038
+ invariant8(getCredentialAssertion(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember");
2030
2039
  await writeMessages2(space.inner.controlPipeline.writer, credentials);
2031
2040
  return {
2032
2041
  space: {
@@ -2054,11 +2063,11 @@ var SpaceInvitationProtocol = class {
2054
2063
  };
2055
2064
  }
2056
2065
  async accept(response) {
2057
- assert8(response.space);
2066
+ invariant8(response.space);
2058
2067
  const { credential, controlTimeframe, dataTimeframe } = response.space;
2059
2068
  const assertion = getCredentialAssertion(credential);
2060
- assert8(assertion["@type"] === "dxos.halo.credentials.SpaceMember", "Invalid credential");
2061
- assert8(credential.subject.id.equals(this._signingContext.identityKey));
2069
+ invariant8(assertion["@type"] === "dxos.halo.credentials.SpaceMember", "Invalid credential");
2070
+ invariant8(credential.subject.id.equals(this._signingContext.identityKey));
2062
2071
  await this._spaceManager.acceptSpace({
2063
2072
  spaceKey: assertion.spaceKey,
2064
2073
  genesisFeedKey: assertion.genesisFeedKey,
@@ -2073,7 +2082,7 @@ var SpaceInvitationProtocol = class {
2073
2082
  };
2074
2083
 
2075
2084
  // packages/sdk/client-services/src/packlets/spaces/data-space.ts
2076
- import { Event as Event5, scheduleTask as scheduleTask4, trackLeaks } from "@dxos/async";
2085
+ import { Event as Event5, scheduleTask as scheduleTask4, synchronized, trackLeaks } from "@dxos/async";
2077
2086
  import { AUTH_TIMEOUT as AUTH_TIMEOUT2 } from "@dxos/client-protocol";
2078
2087
  import { cancelWithContext as cancelWithContext2, Context as Context6 } from "@dxos/context";
2079
2088
  import { timed } from "@dxos/debug";
@@ -2087,7 +2096,7 @@ import { Timeframe } from "@dxos/timeframe";
2087
2096
  import { ComplexSet as ComplexSet2 } from "@dxos/util";
2088
2097
 
2089
2098
  // packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts
2090
- import assert9 from "@dxos/node-std/assert";
2099
+ import invariant9 from "tiny-invariant";
2091
2100
  import { DeferredTask, Event as Event4, scheduleTask as scheduleTask3, sleep, TimeoutError as TimeoutError2, Trigger as Trigger4 } from "@dxos/async";
2092
2101
  import { Context as Context5, rejectOnDispose } from "@dxos/context";
2093
2102
  import { PublicKey as PublicKey6 } from "@dxos/keys";
@@ -2095,6 +2104,7 @@ import { log as log8 } from "@dxos/log";
2095
2104
  import { schema as schema3 } from "@dxos/protocols";
2096
2105
  import { RpcExtension as RpcExtension2 } from "@dxos/teleport";
2097
2106
  import { ComplexMap as ComplexMap2, ComplexSet, entry } from "@dxos/util";
2107
+ var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts";
2098
2108
  var DEFAULT_RETRY_TIMEOUT = 1e3;
2099
2109
  var DEFAULT_SUCCESS_DELAY = 1e3;
2100
2110
  var DEFAULT_NOTARIZE_TIMEOUT = 1e4;
@@ -2107,6 +2117,9 @@ var NotarizationPlugin = class {
2107
2117
  this._processedCredentials = new ComplexSet(PublicKey6.hash);
2108
2118
  this._processCredentialsTriggers = new ComplexMap2(PublicKey6.hash);
2109
2119
  }
2120
+ get hasWriter() {
2121
+ return !!this._writer;
2122
+ }
2110
2123
  async open() {
2111
2124
  }
2112
2125
  async close() {
@@ -2119,22 +2132,22 @@ var NotarizationPlugin = class {
2119
2132
  log8("notarize", {
2120
2133
  credentials
2121
2134
  }, {
2122
- file: "notarization-plugin.ts",
2123
- line: 87,
2124
- scope: this,
2125
- callSite: (f, a) => f(...a)
2135
+ F: __dxlog_file8,
2136
+ L: 91,
2137
+ S: this,
2138
+ C: (f, a) => f(...a)
2126
2139
  });
2127
- assert9(credentials.every((credential) => credential.id), "Credentials must have an id");
2140
+ invariant9(credentials.every((credential) => credential.id), "Credentials must have an id");
2128
2141
  const errors = new Trigger4();
2129
2142
  const ctx = this._ctx.derive({
2130
2143
  onError: (err) => {
2131
2144
  log8.warn("Notarization error", {
2132
2145
  err
2133
2146
  }, {
2134
- file: "notarization-plugin.ts",
2135
- line: 96,
2136
- scope: this,
2137
- callSite: (f, a) => f(...a)
2147
+ F: __dxlog_file8,
2148
+ L: 100,
2149
+ S: this,
2150
+ C: (f, a) => f(...a)
2138
2151
  });
2139
2152
  void ctx.dispose();
2140
2153
  errors.throw(err);
@@ -2147,10 +2160,10 @@ var NotarizationPlugin = class {
2147
2160
  timeout,
2148
2161
  peers: Array.from(this._extensions).map((extension) => extension.remotePeerId)
2149
2162
  }, {
2150
- file: "notarization-plugin.ts",
2151
- line: 108,
2152
- scope: this,
2153
- callSite: (f, a) => f(...a)
2163
+ F: __dxlog_file8,
2164
+ L: 112,
2165
+ S: this,
2166
+ C: (f, a) => f(...a)
2154
2167
  });
2155
2168
  void ctx.dispose();
2156
2169
  errors.throw(new TimeoutError2(timeout, "Notarization timed out"));
@@ -2170,10 +2183,10 @@ var NotarizationPlugin = class {
2170
2183
  log8.warn("Exhausted all peers to notarize with", {
2171
2184
  retryIn: retryTimeout
2172
2185
  }, {
2173
- file: "notarization-plugin.ts",
2174
- line: 133,
2175
- scope: this,
2176
- callSite: (f, a) => f(...a)
2186
+ F: __dxlog_file8,
2187
+ L: 137,
2188
+ S: this,
2189
+ C: (f, a) => f(...a)
2177
2190
  });
2178
2191
  peersTried.clear();
2179
2192
  scheduleTask3(ctx, () => notarizeTask.schedule(), retryTimeout);
@@ -2184,28 +2197,28 @@ var NotarizationPlugin = class {
2184
2197
  peer: peer.localPeerId,
2185
2198
  credentialId: credentials.map((credential) => credential.id)
2186
2199
  }, {
2187
- file: "notarization-plugin.ts",
2188
- line: 140,
2189
- scope: this,
2190
- callSite: (f, a) => f(...a)
2200
+ F: __dxlog_file8,
2201
+ L: 144,
2202
+ S: this,
2203
+ C: (f, a) => f(...a)
2191
2204
  });
2192
2205
  await peer.rpc.NotarizationService.notarize({
2193
2206
  credentials: credentials.filter((credential) => !this._processedCredentials.has(credential.id))
2194
2207
  });
2195
- log8("success", {}, {
2196
- file: "notarization-plugin.ts",
2197
- line: 144,
2198
- scope: this,
2199
- callSite: (f, a) => f(...a)
2208
+ log8("success", void 0, {
2209
+ F: __dxlog_file8,
2210
+ L: 148,
2211
+ S: this,
2212
+ C: (f, a) => f(...a)
2200
2213
  });
2201
2214
  await sleep(successDelay);
2202
2215
  } catch (err) {
2203
2216
  if (!ctx.disposed && !err.message.includes(WRITER_NOT_SET_ERROR_CODE)) {
2204
2217
  log8.warn("error notarizing (recoverable)", err, {
2205
- file: "notarization-plugin.ts",
2206
- line: 148,
2207
- scope: this,
2208
- callSite: (f, a) => f(...a)
2218
+ F: __dxlog_file8,
2219
+ L: 152,
2220
+ S: this,
2221
+ C: (f, a) => f(...a)
2209
2222
  });
2210
2223
  }
2211
2224
  notarizeTask.schedule();
@@ -2219,11 +2232,11 @@ var NotarizationPlugin = class {
2219
2232
  allNotarized,
2220
2233
  errors.wait()
2221
2234
  ]);
2222
- log8("done", {}, {
2223
- file: "notarization-plugin.ts",
2224
- line: 159,
2225
- scope: this,
2226
- callSite: (f, a) => f(...a)
2235
+ log8("done", void 0, {
2236
+ F: __dxlog_file8,
2237
+ L: 163,
2238
+ S: this,
2239
+ C: (f, a) => f(...a)
2227
2240
  });
2228
2241
  } finally {
2229
2242
  await ctx.dispose();
@@ -2232,7 +2245,7 @@ var NotarizationPlugin = class {
2232
2245
  /**
2233
2246
  * Called with credentials arriving from the control pipeline.
2234
2247
  */
2235
- async process(credential) {
2248
+ async processCredential(credential) {
2236
2249
  var _a;
2237
2250
  if (!credential.id) {
2238
2251
  return;
@@ -2242,7 +2255,7 @@ var NotarizationPlugin = class {
2242
2255
  this._processCredentialsTriggers.delete(credential.id);
2243
2256
  }
2244
2257
  setWriter(writer) {
2245
- assert9(!this._writer, "Writer already set.");
2258
+ invariant9(!this._writer, "Writer already set.");
2246
2259
  this._writer = writer;
2247
2260
  }
2248
2261
  async _waitUntilProcessed(id) {
@@ -2260,7 +2273,7 @@ var NotarizationPlugin = class {
2260
2273
  throw new Error(WRITER_NOT_SET_ERROR_CODE);
2261
2274
  }
2262
2275
  for (const credential of (_a = request.credentials) != null ? _a : []) {
2263
- assert9(credential.id, "Credential must have an id");
2276
+ invariant9(credential.id, "Credential must have an id");
2264
2277
  if (this._processedCredentials.has(credential.id)) {
2265
2278
  continue;
2266
2279
  }
@@ -2273,10 +2286,10 @@ var NotarizationPlugin = class {
2273
2286
  log8("extension opened", {
2274
2287
  peer: extension.localPeerId
2275
2288
  }, {
2276
- file: "notarization-plugin.ts",
2277
- line: 208,
2278
- scope: this,
2279
- callSite: (f, a) => f(...a)
2289
+ F: __dxlog_file8,
2290
+ L: 212,
2291
+ S: this,
2292
+ C: (f, a) => f(...a)
2280
2293
  });
2281
2294
  this._extensions.add(extension);
2282
2295
  this._extensionOpened.emit();
@@ -2285,10 +2298,10 @@ var NotarizationPlugin = class {
2285
2298
  log8("extension closed", {
2286
2299
  peer: extension.localPeerId
2287
2300
  }, {
2288
- file: "notarization-plugin.ts",
2289
- line: 213,
2290
- scope: this,
2291
- callSite: (f, a) => f(...a)
2301
+ F: __dxlog_file8,
2302
+ L: 217,
2303
+ S: this,
2304
+ C: (f, a) => f(...a)
2292
2305
  });
2293
2306
  this._extensions.delete(extension);
2294
2307
  },
@@ -2329,7 +2342,7 @@ var NotarizationTeleportExtension = class extends RpcExtension2 {
2329
2342
  };
2330
2343
 
2331
2344
  // packages/sdk/client-services/src/packlets/spaces/data-space.ts
2332
- var __decorate = function(decorators, target, key, desc) {
2345
+ function _ts_decorate(decorators, target, key, desc) {
2333
2346
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2334
2347
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
2335
2348
  r = Reflect.decorate(decorators, target, key, desc);
@@ -2338,10 +2351,12 @@ var __decorate = function(decorators, target, key, desc) {
2338
2351
  if (d = decorators[i])
2339
2352
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2340
2353
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2341
- };
2354
+ }
2355
+ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space.ts";
2342
2356
  var DataSpace = class DataSpace2 {
2343
2357
  constructor(params) {
2344
2358
  this._ctx = new Context6();
2359
+ this._notarizationPlugin = new NotarizationPlugin();
2345
2360
  this._state = SpaceState.CLOSED;
2346
2361
  /**
2347
2362
  * Error for _state === SpaceState.ERROR.
@@ -2364,8 +2379,8 @@ var DataSpace = class DataSpace2 {
2364
2379
  update: this._inner.stateUpdate,
2365
2380
  authTimeout: AUTH_TIMEOUT2
2366
2381
  });
2367
- this._notarizationPluginConsumer = this._inner.spaceState.registerProcessor(new NotarizationPlugin());
2368
2382
  this._cache = params.cache;
2383
+ this._state = params.initialState;
2369
2384
  }
2370
2385
  get key() {
2371
2386
  return this._inner.key;
@@ -2387,25 +2402,36 @@ var DataSpace = class DataSpace2 {
2387
2402
  return this._presence;
2388
2403
  }
2389
2404
  get notarizationPlugin() {
2390
- return this._notarizationPluginConsumer.processor;
2405
+ return this._notarizationPlugin;
2391
2406
  }
2392
2407
  get cache() {
2393
2408
  return this._cache;
2394
2409
  }
2395
2410
  async open() {
2396
- await this.notarizationPlugin.open();
2397
- await this._notarizationPluginConsumer.open();
2411
+ await this._open();
2412
+ }
2413
+ async _open() {
2414
+ await this._notarizationPlugin.open();
2415
+ await this._inner.spaceState.addCredentialProcessor(this._notarizationPlugin);
2398
2416
  await this._inner.open();
2399
- this._state = SpaceState.INACTIVE;
2417
+ this._state = SpaceState.CONTROL_ONLY;
2418
+ this.stateUpdate.emit();
2419
+ this.metrics = {};
2400
2420
  this.metrics.open = new Date();
2401
2421
  }
2402
2422
  async close() {
2423
+ await this._close();
2424
+ }
2425
+ async _close() {
2426
+ var _a, _b;
2427
+ await ((_b = (_a = this._callbacks).beforeClose) == null ? void 0 : _b.call(_a));
2403
2428
  this._state = SpaceState.CLOSED;
2404
2429
  await this._ctx.dispose();
2430
+ this._ctx = new Context6();
2405
2431
  await this.authVerifier.close();
2406
2432
  await this._inner.close();
2407
- await this._notarizationPluginConsumer.close();
2408
- await this.notarizationPlugin.close();
2433
+ await this._inner.spaceState.removeCredentialProcessor(this._notarizationPlugin);
2434
+ await this._notarizationPlugin.close();
2409
2435
  await this._presence.destroy();
2410
2436
  }
2411
2437
  async postMessage(channel, message) {
@@ -2425,18 +2451,18 @@ var DataSpace = class DataSpace2 {
2425
2451
  } catch (err) {
2426
2452
  if (err instanceof CancelledError) {
2427
2453
  log9("Data pipeline initialization cancelled", err, {
2428
- file: "data-space.ts",
2429
- line: 173,
2430
- scope: this,
2431
- callSite: (f, a) => f(...a)
2454
+ F: __dxlog_file9,
2455
+ L: 193,
2456
+ S: this,
2457
+ C: (f, a) => f(...a)
2432
2458
  });
2433
2459
  return;
2434
2460
  }
2435
2461
  log9.error("Error initializing data pipeline", err, {
2436
- file: "data-space.ts",
2437
- line: 177,
2438
- scope: this,
2439
- callSite: (f, a) => f(...a)
2462
+ F: __dxlog_file9,
2463
+ L: 197,
2464
+ S: this,
2465
+ C: (f, a) => f(...a)
2440
2466
  });
2441
2467
  this._state = SpaceState.ERROR;
2442
2468
  this.error = err;
@@ -2448,7 +2474,7 @@ var DataSpace = class DataSpace2 {
2448
2474
  }
2449
2475
  async initializeDataPipeline() {
2450
2476
  var _a, _b, _c, _d;
2451
- if (this._state !== SpaceState.INACTIVE) {
2477
+ if (this._state !== SpaceState.CONTROL_ONLY) {
2452
2478
  throw new SystemError("Invalid operation");
2453
2479
  }
2454
2480
  this._state = SpaceState.INITIALIZING;
@@ -2458,37 +2484,39 @@ var DataSpace = class DataSpace2 {
2458
2484
  });
2459
2485
  this.metrics.controlPipelineReady = new Date();
2460
2486
  await this._createWritableFeeds();
2461
- log9("Writable feeds created", {}, {
2462
- file: "data-space.ts",
2463
- line: 201,
2464
- scope: this,
2465
- callSite: (f, a) => f(...a)
2487
+ log9("Writable feeds created", void 0, {
2488
+ F: __dxlog_file9,
2489
+ L: 221,
2490
+ S: this,
2491
+ C: (f, a) => f(...a)
2466
2492
  });
2467
2493
  this.stateUpdate.emit();
2468
- this.notarizationPlugin.setWriter(createMappedFeedWriter((credential) => ({
2469
- credential: {
2470
- credential
2471
- }
2472
- }), this._inner.controlPipeline.writer));
2494
+ if (!this.notarizationPlugin.hasWriter) {
2495
+ this.notarizationPlugin.setWriter(createMappedFeedWriter((credential) => ({
2496
+ credential: {
2497
+ credential
2498
+ }
2499
+ }), this._inner.controlPipeline.writer));
2500
+ }
2473
2501
  await this._inner.initializeDataPipeline();
2474
2502
  this.metrics.dataPipelineOpen = new Date();
2475
2503
  await cancelWithContext2(this._ctx, this._inner.dataPipeline.ensureEpochInitialized());
2476
- log9("waiting for data pipeline to reach target timeframe", {}, {
2477
- file: "data-space.ts",
2478
- line: 220,
2479
- scope: this,
2480
- callSite: (f, a) => f(...a)
2504
+ log9("waiting for data pipeline to reach target timeframe", void 0, {
2505
+ F: __dxlog_file9,
2506
+ L: 242,
2507
+ S: this,
2508
+ C: (f, a) => f(...a)
2481
2509
  });
2482
2510
  await this._inner.dataPipeline.pipelineState.waitUntilReachedTargetTimeframe({
2483
2511
  ctx: this._ctx,
2484
2512
  breakOnStall: false
2485
2513
  });
2486
2514
  this.metrics.dataPipelineReady = new Date();
2487
- log9("data pipeline ready", {}, {
2488
- file: "data-space.ts",
2489
- line: 229,
2490
- scope: this,
2491
- callSite: (f, a) => f(...a)
2515
+ log9("data pipeline ready", void 0, {
2516
+ F: __dxlog_file9,
2517
+ L: 251,
2518
+ S: this,
2519
+ C: (f, a) => f(...a)
2492
2520
  });
2493
2521
  await ((_b = (_a = this._callbacks).beforeReady) == null ? void 0 : _b.call(_a));
2494
2522
  this._state = SpaceState.READY;
@@ -2566,17 +2594,46 @@ var DataSpace = class DataSpace2 {
2566
2594
  }
2567
2595
  }
2568
2596
  }
2597
+ async activate() {
2598
+ if (this._state !== SpaceState.INACTIVE) {
2599
+ throw new SystemError("Invalid operation");
2600
+ }
2601
+ await this._metadataStore.setSpaceState(this.key, SpaceState.ACTIVE);
2602
+ await this._open();
2603
+ this.initializeDataPipelineAsync();
2604
+ }
2605
+ async deactivate() {
2606
+ if (this._state === SpaceState.INACTIVE) {
2607
+ throw new SystemError("Invalid operation");
2608
+ }
2609
+ await this._metadataStore.setSpaceState(this.key, SpaceState.INACTIVE);
2610
+ await this._close();
2611
+ this._state = SpaceState.INACTIVE;
2612
+ this.stateUpdate.emit();
2613
+ }
2569
2614
  };
2570
- __decorate([
2615
+ _ts_decorate([
2616
+ synchronized
2617
+ ], DataSpace.prototype, "open", null);
2618
+ _ts_decorate([
2619
+ synchronized
2620
+ ], DataSpace.prototype, "close", null);
2621
+ _ts_decorate([
2571
2622
  timed(1e4)
2572
2623
  ], DataSpace.prototype, "_createWritableFeeds", null);
2573
- DataSpace = __decorate([
2624
+ _ts_decorate([
2625
+ synchronized
2626
+ ], DataSpace.prototype, "activate", null);
2627
+ _ts_decorate([
2628
+ synchronized
2629
+ ], DataSpace.prototype, "deactivate", null);
2630
+ DataSpace = _ts_decorate([
2574
2631
  trackLeaks("open", "close")
2575
2632
  ], DataSpace);
2576
2633
 
2577
2634
  // packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts
2578
- import assert10 from "@dxos/node-std/assert";
2579
- import { Event as Event6, synchronized, trackLeaks as trackLeaks2 } from "@dxos/async";
2635
+ import invariant10 from "tiny-invariant";
2636
+ import { Event as Event6, synchronized as synchronized2, trackLeaks as trackLeaks2 } from "@dxos/async";
2580
2637
  import { cancelWithContext as cancelWithContext3, Context as Context7 } from "@dxos/context";
2581
2638
  import { getCredentialAssertion as getCredentialAssertion2 } from "@dxos/credentials";
2582
2639
  import { PublicKey as PublicKey8 } from "@dxos/keys";
@@ -2657,7 +2714,7 @@ var spaceGenesis = async (keyring, signingContext, space) => {
2657
2714
  };
2658
2715
 
2659
2716
  // packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts
2660
- var __decorate2 = function(decorators, target, key, desc) {
2717
+ function _ts_decorate2(decorators, target, key, desc) {
2661
2718
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2662
2719
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
2663
2720
  r = Reflect.decorate(decorators, target, key, desc);
@@ -2666,7 +2723,8 @@ var __decorate2 = function(decorators, target, key, desc) {
2666
2723
  if (d = decorators[i])
2667
2724
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2668
2725
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2669
- };
2726
+ }
2727
+ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts";
2670
2728
  var DataSpaceManager = class DataSpaceManager2 {
2671
2729
  constructor(_spaceManager, _metadataStore, _dataServiceSubscriptions, _keyring, _signingContext, _feedStore) {
2672
2730
  this._spaceManager = _spaceManager;
@@ -2686,50 +2744,52 @@ var DataSpaceManager = class DataSpaceManager2 {
2686
2744
  return this._spaces;
2687
2745
  }
2688
2746
  async open() {
2689
- log10("open", {}, {
2690
- file: "data-space-manager.ts",
2691
- line: 80,
2692
- scope: this,
2693
- callSite: (f, a) => f(...a)
2747
+ log10("open", void 0, {
2748
+ F: __dxlog_file10,
2749
+ L: 80,
2750
+ S: this,
2751
+ C: (f, a) => f(...a)
2694
2752
  });
2695
2753
  log10.trace("dxos.echo.data-space-manager.open", trace4.begin({
2696
2754
  id: this._instanceId
2697
2755
  }), {
2698
- file: "data-space-manager.ts",
2699
- line: 81,
2700
- scope: this,
2701
- callSite: (f, a) => f(...a)
2756
+ F: __dxlog_file10,
2757
+ L: 81,
2758
+ S: this,
2759
+ C: (f, a) => f(...a)
2702
2760
  });
2703
2761
  await this._metadataStore.load();
2704
2762
  log10("metadata loaded", {
2705
2763
  spaces: this._metadataStore.spaces.length
2706
2764
  }, {
2707
- file: "data-space-manager.ts",
2708
- line: 83,
2709
- scope: this,
2710
- callSite: (f, a) => f(...a)
2765
+ F: __dxlog_file10,
2766
+ L: 83,
2767
+ S: this,
2768
+ C: (f, a) => f(...a)
2711
2769
  });
2712
2770
  for (const spaceMetadata of this._metadataStore.spaces) {
2713
2771
  try {
2714
2772
  log10("load space", {
2715
2773
  spaceMetadata
2716
2774
  }, {
2717
- file: "data-space-manager.ts",
2718
- line: 87,
2719
- scope: this,
2720
- callSite: (f, a) => f(...a)
2775
+ F: __dxlog_file10,
2776
+ L: 87,
2777
+ S: this,
2778
+ C: (f, a) => f(...a)
2721
2779
  });
2722
2780
  const space = await this._constructSpace(spaceMetadata);
2723
- space.initializeDataPipelineAsync();
2781
+ if (spaceMetadata.state !== SpaceState2.INACTIVE) {
2782
+ space.initializeDataPipelineAsync();
2783
+ }
2724
2784
  } catch (err) {
2725
2785
  log10.error("Error loading space", {
2726
2786
  spaceMetadata,
2727
2787
  err
2728
2788
  }, {
2729
- file: "data-space-manager.ts",
2730
- line: 91,
2731
- scope: this,
2732
- callSite: (f, a) => f(...a)
2789
+ F: __dxlog_file10,
2790
+ L: 93,
2791
+ S: this,
2792
+ C: (f, a) => f(...a)
2733
2793
  });
2734
2794
  }
2735
2795
  }
@@ -2738,18 +2798,18 @@ var DataSpaceManager = class DataSpaceManager2 {
2738
2798
  log10.trace("dxos.echo.data-space-manager.open", trace4.end({
2739
2799
  id: this._instanceId
2740
2800
  }), {
2741
- file: "data-space-manager.ts",
2742
- line: 97,
2743
- scope: this,
2744
- callSite: (f, a) => f(...a)
2801
+ F: __dxlog_file10,
2802
+ L: 99,
2803
+ S: this,
2804
+ C: (f, a) => f(...a)
2745
2805
  });
2746
2806
  }
2747
2807
  async close() {
2748
- log10("close", {}, {
2749
- file: "data-space-manager.ts",
2750
- line: 102,
2751
- scope: this,
2752
- callSite: (f, a) => f(...a)
2808
+ log10("close", void 0, {
2809
+ F: __dxlog_file10,
2810
+ L: 104,
2811
+ S: this,
2812
+ C: (f, a) => f(...a)
2753
2813
  });
2754
2814
  this._isOpen = false;
2755
2815
  await this._ctx.dispose();
@@ -2761,7 +2821,7 @@ var DataSpaceManager = class DataSpaceManager2 {
2761
2821
  * Creates a new space writing the genesis credentials to the control feed.
2762
2822
  */
2763
2823
  async createSpace() {
2764
- assert10(this._isOpen, "Not open.");
2824
+ invariant10(this._isOpen, "Not open.");
2765
2825
  const spaceKey = await this._keyring.createKey();
2766
2826
  const controlFeedKey = await this._keyring.createKey();
2767
2827
  const dataFeedKey = await this._keyring.createKey();
@@ -2769,21 +2829,22 @@ var DataSpaceManager = class DataSpaceManager2 {
2769
2829
  key: spaceKey,
2770
2830
  genesisFeedKey: controlFeedKey,
2771
2831
  controlFeedKey,
2772
- dataFeedKey
2832
+ dataFeedKey,
2833
+ state: SpaceState2.ACTIVE
2773
2834
  };
2774
2835
  log10("creating space...", {
2775
2836
  spaceKey
2776
2837
  }, {
2777
- file: "data-space-manager.ts",
2778
- line: 126,
2779
- scope: this,
2780
- callSite: (f, a) => f(...a)
2838
+ F: __dxlog_file10,
2839
+ L: 129,
2840
+ S: this,
2841
+ C: (f, a) => f(...a)
2781
2842
  });
2782
2843
  const space = await this._constructSpace(metadata);
2783
2844
  const credentials = await spaceGenesis(this._keyring, this._signingContext, space.inner);
2784
2845
  await this._metadataStore.addSpace(metadata);
2785
2846
  const memberCredential = credentials[1];
2786
- assert10(getCredentialAssertion2(memberCredential)["@type"] === "dxos.halo.credentials.SpaceMember");
2847
+ invariant10(getCredentialAssertion2(memberCredential)["@type"] === "dxos.halo.credentials.SpaceMember");
2787
2848
  await this._signingContext.recordCredential(memberCredential);
2788
2849
  await space.initializeDataPipeline();
2789
2850
  this.updated.emit();
@@ -2794,13 +2855,13 @@ var DataSpaceManager = class DataSpaceManager2 {
2794
2855
  log10("accept space", {
2795
2856
  opts
2796
2857
  }, {
2797
- file: "data-space-manager.ts",
2798
- line: 145,
2799
- scope: this,
2800
- callSite: (f, a) => f(...a)
2858
+ F: __dxlog_file10,
2859
+ L: 148,
2860
+ S: this,
2861
+ C: (f, a) => f(...a)
2801
2862
  });
2802
- assert10(this._isOpen, "Not open.");
2803
- assert10(!this._spaces.has(opts.spaceKey), "Space already exists.");
2863
+ invariant10(this._isOpen, "Not open.");
2864
+ invariant10(!this._spaces.has(opts.spaceKey), "Space already exists.");
2804
2865
  const metadata = {
2805
2866
  key: opts.spaceKey,
2806
2867
  genesisFeedKey: opts.genesisFeedKey,
@@ -2828,10 +2889,10 @@ var DataSpaceManager = class DataSpaceManager2 {
2828
2889
  log10("construct space", {
2829
2890
  metadata
2830
2891
  }, {
2831
- file: "data-space-manager.ts",
2832
- line: 181,
2833
- scope: this,
2834
- callSite: (f, a) => f(...a)
2892
+ F: __dxlog_file10,
2893
+ L: 183,
2894
+ S: this,
2895
+ C: (f, a) => f(...a)
2835
2896
  });
2836
2897
  const gossip = new Gossip({
2837
2898
  localPeerId: this._signingContext.deviceKey
@@ -2863,11 +2924,11 @@ var DataSpaceManager = class DataSpaceManager2 {
2863
2924
  session.addExtension("dxos.mesh.teleport.notarization", dataSpace.notarizationPlugin.createExtension());
2864
2925
  },
2865
2926
  onAuthFailure: () => {
2866
- log10.warn("auth failure", {}, {
2867
- file: "data-space-manager.ts",
2868
- line: 212,
2869
- scope: this,
2870
- callSite: (f, a) => f(...a)
2927
+ log10.warn("auth failure", void 0, {
2928
+ F: __dxlog_file10,
2929
+ L: 214,
2930
+ S: this,
2931
+ C: (f, a) => f(...a)
2871
2932
  });
2872
2933
  },
2873
2934
  memberKey: this._signingContext.identityKey
@@ -2876,6 +2937,7 @@ var DataSpaceManager = class DataSpaceManager2 {
2876
2937
  dataFeed && space.setDataFeed(dataFeed);
2877
2938
  const dataSpace = new DataSpace({
2878
2939
  inner: space,
2940
+ initialState: metadata.state === SpaceState2.INACTIVE ? SpaceState2.INACTIVE : SpaceState2.CLOSED,
2879
2941
  metadataStore: this._metadataStore,
2880
2942
  gossip,
2881
2943
  presence,
@@ -2887,31 +2949,44 @@ var DataSpaceManager = class DataSpaceManager2 {
2887
2949
  log10("before space ready", {
2888
2950
  space: space.key
2889
2951
  }, {
2890
- file: "data-space-manager.ts",
2891
- line: 229,
2892
- scope: this,
2893
- callSite: (f, a) => f(...a)
2952
+ F: __dxlog_file10,
2953
+ L: 232,
2954
+ S: this,
2955
+ C: (f, a) => f(...a)
2894
2956
  });
2895
- this._dataServiceSubscriptions.registerSpace(space.key, dataSpace.dataPipeline.databaseHost.createDataServiceHost());
2957
+ await this._dataServiceSubscriptions.registerSpace(space.key, dataSpace.dataPipeline.databaseHost.createDataServiceHost());
2896
2958
  },
2897
2959
  afterReady: async () => {
2898
2960
  log10("after space ready", {
2899
2961
  space: space.key,
2900
2962
  open: this._isOpen
2901
2963
  }, {
2902
- file: "data-space-manager.ts",
2903
- line: 236,
2904
- scope: this,
2905
- callSite: (f, a) => f(...a)
2964
+ F: __dxlog_file10,
2965
+ L: 239,
2966
+ S: this,
2967
+ C: (f, a) => f(...a)
2906
2968
  });
2907
2969
  if (this._isOpen) {
2908
2970
  this.updated.emit();
2909
2971
  }
2972
+ },
2973
+ beforeClose: async () => {
2974
+ log10("before space close", {
2975
+ space: space.key
2976
+ }, {
2977
+ F: __dxlog_file10,
2978
+ L: 245,
2979
+ S: this,
2980
+ C: (f, a) => f(...a)
2981
+ });
2982
+ await this._dataServiceSubscriptions.unregisterSpace(space.key);
2910
2983
  }
2911
2984
  },
2912
2985
  cache: metadata.cache
2913
2986
  });
2914
- await dataSpace.open();
2987
+ if (metadata.state !== SpaceState2.INACTIVE) {
2988
+ await dataSpace.open();
2989
+ }
2915
2990
  if (metadata.controlTimeframe) {
2916
2991
  dataSpace.inner.controlPipeline.state.setTargetTimeframe(metadata.controlTimeframe);
2917
2992
  }
@@ -2922,32 +2997,33 @@ var DataSpaceManager = class DataSpaceManager2 {
2922
2997
  return dataSpace;
2923
2998
  }
2924
2999
  };
2925
- __decorate2([
2926
- synchronized
3000
+ _ts_decorate2([
3001
+ synchronized2
2927
3002
  ], DataSpaceManager.prototype, "open", null);
2928
- __decorate2([
2929
- synchronized
3003
+ _ts_decorate2([
3004
+ synchronized2
2930
3005
  ], DataSpaceManager.prototype, "close", null);
2931
- __decorate2([
2932
- synchronized
3006
+ _ts_decorate2([
3007
+ synchronized2
2933
3008
  ], DataSpaceManager.prototype, "createSpace", null);
2934
- __decorate2([
2935
- synchronized
3009
+ _ts_decorate2([
3010
+ synchronized2
2936
3011
  ], DataSpaceManager.prototype, "acceptSpace", null);
2937
- DataSpaceManager = __decorate2([
3012
+ DataSpaceManager = _ts_decorate2([
2938
3013
  trackLeaks2("open", "close")
2939
3014
  ], DataSpaceManager);
2940
3015
 
2941
3016
  // packages/sdk/client-services/src/packlets/spaces/spaces-service.ts
2942
- import { EventSubscriptions as EventSubscriptions2, scheduleTask as scheduleTask5 } from "@dxos/async";
3017
+ import { EventSubscriptions as EventSubscriptions2, UpdateScheduler, scheduleTask as scheduleTask5 } from "@dxos/async";
2943
3018
  import { Stream as Stream9 } from "@dxos/codec-protobuf";
2944
- import { raise, todo as todo2 } from "@dxos/debug";
3019
+ import { raise } from "@dxos/debug";
2945
3020
  import { SpaceNotFoundError } from "@dxos/echo-pipeline";
3021
+ import { ApiError } from "@dxos/errors";
2946
3022
  import { log as log11 } from "@dxos/log";
2947
3023
  import { encodeError } from "@dxos/protocols";
2948
- import { SpaceMember as SpaceMember2 } from "@dxos/protocols/proto/dxos/client/services";
3024
+ import { SpaceMember as SpaceMember2, SpaceState as SpaceState3 } from "@dxos/protocols/proto/dxos/client/services";
2949
3025
  import { humanize } from "@dxos/util";
2950
- var TIMEFRAME_UPDATE_DEBOUNCE_TIME = 500;
3026
+ var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/spaces-service.ts";
2951
3027
  var SpacesServiceImpl = class {
2952
3028
  constructor(_identityManager, _spaceManager, _dataServiceSubscriptions, _getDataSpaceManager) {
2953
3029
  this._identityManager = _identityManager;
@@ -2961,28 +3037,44 @@ var SpacesServiceImpl = class {
2961
3037
  }
2962
3038
  const dataSpaceManager = await this._getDataSpaceManager();
2963
3039
  const space = await dataSpaceManager.createSpace();
2964
- return this._transformSpace(space);
3040
+ return this._serializeSpace(space);
2965
3041
  }
2966
- async updateSpace(request) {
2967
- todo2();
3042
+ async updateSpace({ spaceKey, state }) {
3043
+ var _a;
3044
+ const dataSpaceManager = await this._getDataSpaceManager();
3045
+ const space = (_a = dataSpaceManager.spaces.get(spaceKey)) != null ? _a : raise(new SpaceNotFoundError(spaceKey));
3046
+ if (state) {
3047
+ switch (state) {
3048
+ case SpaceState3.ACTIVE:
3049
+ await space.activate();
3050
+ break;
3051
+ case SpaceState3.INACTIVE:
3052
+ await space.deactivate();
3053
+ break;
3054
+ default:
3055
+ throw new ApiError("Invalid space state");
3056
+ }
3057
+ }
2968
3058
  }
2969
3059
  querySpaces() {
2970
3060
  return new Stream9(({ next, ctx }) => {
2971
- const onUpdate = async () => {
3061
+ const scheduler = new UpdateScheduler(ctx, async () => {
2972
3062
  const dataSpaceManager = await this._getDataSpaceManager();
2973
- const spaces = Array.from(dataSpaceManager.spaces.values()).map((space) => this._transformSpace(space));
3063
+ const spaces = Array.from(dataSpaceManager.spaces.values()).map((space) => this._serializeSpace(space));
2974
3064
  log11("update", {
2975
3065
  spaces
2976
3066
  }, {
2977
- file: "spaces-service.ts",
2978
- line: 60,
2979
- scope: this,
2980
- callSite: (f, a) => f(...a)
3067
+ F: __dxlog_file11,
3068
+ L: 78,
3069
+ S: this,
3070
+ C: (f, a) => f(...a)
2981
3071
  });
2982
3072
  next({
2983
3073
  spaces
2984
3074
  });
2985
- };
3075
+ }, {
3076
+ maxFrequency: 2
3077
+ });
2986
3078
  scheduleTask5(ctx, async () => {
2987
3079
  const dataSpaceManager = await this._getDataSpaceManager();
2988
3080
  const subscriptions = new EventSubscriptions2();
@@ -2990,21 +3082,21 @@ var SpacesServiceImpl = class {
2990
3082
  const subscribeSpaces = () => {
2991
3083
  subscriptions.clear();
2992
3084
  for (const space of dataSpaceManager.spaces.values()) {
2993
- subscriptions.add(space.stateUpdate.on(ctx, onUpdate));
2994
- subscriptions.add(space.presence.updated.on(ctx, onUpdate));
2995
- subscriptions.add(space.dataPipeline.onNewEpoch.on(ctx, onUpdate));
2996
- space.inner.controlPipeline.state.timeframeUpdate.debounce(TIMEFRAME_UPDATE_DEBOUNCE_TIME).on(ctx, onUpdate);
3085
+ subscriptions.add(space.stateUpdate.on(ctx, () => scheduler.trigger()));
3086
+ subscriptions.add(space.presence.updated.on(ctx, () => scheduler.trigger()));
3087
+ subscriptions.add(space.dataPipeline.onNewEpoch.on(ctx, () => scheduler.trigger()));
3088
+ space.inner.controlPipeline.state.timeframeUpdate.on(ctx, () => scheduler.trigger());
2997
3089
  if (space.dataPipeline.pipelineState) {
2998
- subscriptions.add(space.dataPipeline.pipelineState.timeframeUpdate.debounce(TIMEFRAME_UPDATE_DEBOUNCE_TIME).on(ctx, onUpdate));
3090
+ subscriptions.add(space.dataPipeline.pipelineState.timeframeUpdate.on(ctx, () => scheduler.trigger()));
2999
3091
  }
3000
3092
  }
3001
3093
  };
3002
3094
  dataSpaceManager.updated.on(ctx, () => {
3003
3095
  subscribeSpaces();
3004
- void onUpdate();
3096
+ scheduler.trigger();
3005
3097
  });
3006
3098
  subscribeSpaces();
3007
- void onUpdate();
3099
+ scheduler.trigger();
3008
3100
  });
3009
3101
  if (!this._identityManager.identity) {
3010
3102
  next({
@@ -3036,13 +3128,13 @@ var SpacesServiceImpl = class {
3036
3128
  return new Stream9(({ ctx, next }) => {
3037
3129
  var _a;
3038
3130
  const space = (_a = this._spaceManager.spaces.get(spaceKey)) != null ? _a : raise(new SpaceNotFoundError(spaceKey));
3039
- const processor = space.spaceState.registerProcessor({
3040
- process: async (credential) => {
3131
+ const processor = {
3132
+ processCredential: async (credential) => {
3041
3133
  next(credential);
3042
3134
  }
3043
- });
3044
- ctx.onDispose(() => processor.close());
3045
- scheduleTask5(ctx, () => processor.open());
3135
+ };
3136
+ ctx.onDispose(() => space.spaceState.removeCredentialProcessor(processor));
3137
+ scheduleTask5(ctx, () => space.spaceState.addCredentialProcessor(processor));
3046
3138
  });
3047
3139
  }
3048
3140
  async writeCredentials({ spaceKey, credentials }) {
@@ -3062,7 +3154,7 @@ var SpacesServiceImpl = class {
3062
3154
  const space = (_a = dataSpaceManager.spaces.get(spaceKey)) != null ? _a : raise(new SpaceNotFoundError(spaceKey));
3063
3155
  await space.createEpoch();
3064
3156
  }
3065
- _transformSpace(space) {
3157
+ _serializeSpace(space) {
3066
3158
  var _a, _b, _c, _d, _e, _f, _g;
3067
3159
  return {
3068
3160
  spaceKey: space.key,
@@ -3102,7 +3194,7 @@ var SpacesServiceImpl = class {
3102
3194
  var getChannelId = (channel) => `user-channel/${channel}`;
3103
3195
 
3104
3196
  // packages/sdk/client-services/src/packlets/services/service-context.ts
3105
- import assert11 from "@dxos/node-std/assert";
3197
+ import invariant11 from "tiny-invariant";
3106
3198
  import { Trigger as Trigger5 } from "@dxos/async";
3107
3199
  import { getCredentialAssertion as getCredentialAssertion3 } from "@dxos/credentials";
3108
3200
  import { failUndefined as failUndefined3 } from "@dxos/debug";
@@ -3114,6 +3206,7 @@ import { log as log12 } from "@dxos/log";
3114
3206
  import { STORAGE_VERSION, trace as trace5 } from "@dxos/protocols";
3115
3207
  import { Invitation as Invitation5 } from "@dxos/protocols/proto/dxos/client/services";
3116
3208
  import { BlobStore } from "@dxos/teleport-extension-object-sync";
3209
+ var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-context.ts";
3117
3210
  var ServiceContext = class {
3118
3211
  // prettier-ignore
3119
3212
  constructor(storage, networkManager, signalManager, modelFactory) {
@@ -3157,17 +3250,17 @@ var ServiceContext = class {
3157
3250
  log12.trace("dxos.sdk.service-context.open", trace5.begin({
3158
3251
  id: this._instanceId
3159
3252
  }), {
3160
- file: "service-context.ts",
3161
- line: 126,
3162
- scope: this,
3163
- callSite: (f, a) => f(...a)
3253
+ F: __dxlog_file12,
3254
+ L: 126,
3255
+ S: this,
3256
+ C: (f, a) => f(...a)
3164
3257
  });
3165
3258
  await this._checkStorageVersion();
3166
- log12("opening...", {}, {
3167
- file: "service-context.ts",
3168
- line: 130,
3169
- scope: this,
3170
- callSite: (f, a) => f(...a)
3259
+ log12("opening...", void 0, {
3260
+ F: __dxlog_file12,
3261
+ L: 130,
3262
+ S: this,
3263
+ C: (f, a) => f(...a)
3171
3264
  });
3172
3265
  await this.signalManager.open();
3173
3266
  await this.networkManager.open();
@@ -3176,42 +3269,44 @@ var ServiceContext = class {
3176
3269
  if (this.identityManager.identity) {
3177
3270
  await this._initialize();
3178
3271
  }
3179
- log12("opened", {}, {
3180
- file: "service-context.ts",
3181
- line: 138,
3182
- scope: this,
3183
- callSite: (f, a) => f(...a)
3272
+ log12("opened", void 0, {
3273
+ F: __dxlog_file12,
3274
+ L: 138,
3275
+ S: this,
3276
+ C: (f, a) => f(...a)
3184
3277
  });
3185
3278
  log12.trace("dxos.sdk.service-context.open", trace5.end({
3186
3279
  id: this._instanceId
3187
3280
  }), {
3188
- file: "service-context.ts",
3189
- line: 139,
3190
- scope: this,
3191
- callSite: (f, a) => f(...a)
3281
+ F: __dxlog_file12,
3282
+ L: 139,
3283
+ S: this,
3284
+ C: (f, a) => f(...a)
3192
3285
  });
3193
3286
  }
3194
3287
  async close() {
3195
- var _a, _b;
3196
- log12("closing...", {}, {
3197
- file: "service-context.ts",
3198
- line: 143,
3199
- scope: this,
3200
- callSite: (f, a) => f(...a)
3201
- });
3202
- await ((_a = this._deviceSpaceSync) == null ? void 0 : _a.close());
3203
- await ((_b = this.dataSpaceManager) == null ? void 0 : _b.close());
3288
+ var _a;
3289
+ log12("closing...", void 0, {
3290
+ F: __dxlog_file12,
3291
+ L: 143,
3292
+ S: this,
3293
+ C: (f, a) => f(...a)
3294
+ });
3295
+ if (this._deviceSpaceSync && this.identityManager.identity) {
3296
+ await this.identityManager.identity.space.spaceState.removeCredentialProcessor(this._deviceSpaceSync);
3297
+ }
3298
+ await ((_a = this.dataSpaceManager) == null ? void 0 : _a.close());
3204
3299
  await this.identityManager.close();
3205
3300
  await this.spaceManager.close();
3206
3301
  await this.feedStore.close();
3207
3302
  await this.networkManager.close();
3208
3303
  await this.signalManager.close();
3209
3304
  this.dataServiceSubscriptions.clear();
3210
- log12("closed", {}, {
3211
- file: "service-context.ts",
3212
- line: 152,
3213
- scope: this,
3214
- callSite: (f, a) => f(...a)
3305
+ log12("closed", void 0, {
3306
+ F: __dxlog_file12,
3307
+ L: 154,
3308
+ S: this,
3309
+ C: (f, a) => f(...a)
3215
3310
  });
3216
3311
  }
3217
3312
  async createIdentity(params = {}) {
@@ -3221,7 +3316,7 @@ var ServiceContext = class {
3221
3316
  }
3222
3317
  getInvitationHandler(invitation) {
3223
3318
  const factory = this._handlerFactories.get(invitation.kind);
3224
- assert11(factory, `Unknown invitation kind: ${invitation.kind}`);
3319
+ invariant11(factory, `Unknown invitation kind: ${invitation.kind}`);
3225
3320
  return factory(invitation);
3226
3321
  }
3227
3322
  async _acceptIdentity(params) {
@@ -3238,11 +3333,11 @@ var ServiceContext = class {
3238
3333
  // Called when identity is created.
3239
3334
  async _initialize() {
3240
3335
  var _a;
3241
- log12("initializing spaces...", {}, {
3242
- file: "service-context.ts",
3243
- line: 185,
3244
- scope: this,
3245
- callSite: (f, a) => f(...a)
3336
+ log12("initializing spaces...", void 0, {
3337
+ F: __dxlog_file12,
3338
+ L: 187,
3339
+ S: this,
3340
+ C: (f, a) => f(...a)
3246
3341
  });
3247
3342
  const identity = (_a = this.identityManager.identity) != null ? _a : failUndefined3();
3248
3343
  const signingContext = {
@@ -3261,12 +3356,12 @@ var ServiceContext = class {
3261
3356
  this.dataSpaceManager = new DataSpaceManager(this.spaceManager, this.metadataStore, this.dataServiceSubscriptions, this.keyring, signingContext, this.feedStore);
3262
3357
  await this.dataSpaceManager.open();
3263
3358
  this._handlerFactories.set(Invitation5.Kind.SPACE, (invitation) => {
3264
- assert11(this.dataSpaceManager, "dataSpaceManager not initialized yet");
3359
+ invariant11(this.dataSpaceManager, "dataSpaceManager not initialized yet");
3265
3360
  return new SpaceInvitationProtocol(this.dataSpaceManager, signingContext, this.keyring, invitation.spaceKey);
3266
3361
  });
3267
3362
  this.initialized.wake();
3268
- this._deviceSpaceSync = identity.space.spaceState.registerProcessor({
3269
- process: async (credential) => {
3363
+ this._deviceSpaceSync = {
3364
+ processCredential: async (credential) => {
3270
3365
  const assertion = getCredentialAssertion3(credential);
3271
3366
  if (assertion["@type"] !== "dxos.halo.credentials.SpaceMember") {
3272
3367
  return;
@@ -3278,10 +3373,10 @@ var ServiceContext = class {
3278
3373
  log12("dataSpaceManager not initialized yet, ignoring space admission", {
3279
3374
  details: assertion
3280
3375
  }, {
3281
- file: "service-context.ts",
3282
- line: 224,
3283
- scope: this,
3284
- callSite: (f, a) => f(...a)
3376
+ F: __dxlog_file12,
3377
+ L: 226,
3378
+ S: this,
3379
+ C: (f, a) => f(...a)
3285
3380
  });
3286
3381
  return;
3287
3382
  }
@@ -3289,10 +3384,10 @@ var ServiceContext = class {
3289
3384
  log12("space already exists, ignoring space admission", {
3290
3385
  details: assertion
3291
3386
  }, {
3292
- file: "service-context.ts",
3293
- line: 228,
3294
- scope: this,
3295
- callSite: (f, a) => f(...a)
3387
+ F: __dxlog_file12,
3388
+ L: 230,
3389
+ S: this,
3390
+ C: (f, a) => f(...a)
3296
3391
  });
3297
3392
  return;
3298
3393
  }
@@ -3300,26 +3395,26 @@ var ServiceContext = class {
3300
3395
  log12("accepting space recorded in halo", {
3301
3396
  details: assertion
3302
3397
  }, {
3303
- file: "service-context.ts",
3304
- line: 233,
3305
- scope: this,
3306
- callSite: (f, a) => f(...a)
3398
+ F: __dxlog_file12,
3399
+ L: 235,
3400
+ S: this,
3401
+ C: (f, a) => f(...a)
3307
3402
  });
3308
3403
  await this.dataSpaceManager.acceptSpace({
3309
3404
  spaceKey: assertion.spaceKey,
3310
3405
  genesisFeedKey: assertion.genesisFeedKey
3311
3406
  });
3312
3407
  } catch (err) {
3313
- log12.catch(err, {}, {
3314
- file: "service-context.ts",
3315
- line: 239,
3316
- scope: this,
3317
- callSite: (f, a) => f(...a)
3408
+ log12.catch(err, void 0, {
3409
+ F: __dxlog_file12,
3410
+ L: 241,
3411
+ S: this,
3412
+ C: (f, a) => f(...a)
3318
3413
  });
3319
3414
  }
3320
3415
  }
3321
- });
3322
- await this._deviceSpaceSync.open();
3416
+ };
3417
+ await identity.space.spaceState.addCredentialProcessor(this._deviceSpaceSync);
3323
3418
  }
3324
3419
  };
3325
3420
 
@@ -3327,7 +3422,7 @@ var ServiceContext = class {
3327
3422
  import { asyncTimeout, Trigger as Trigger6 } from "@dxos/async";
3328
3423
  import { RESOURCE_LOCK_TIMEOUT } from "@dxos/client-protocol";
3329
3424
  import { log as log13, logInfo } from "@dxos/log";
3330
- var __decorate3 = function(decorators, target, key, desc) {
3425
+ function _ts_decorate3(decorators, target, key, desc) {
3331
3426
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3332
3427
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
3333
3428
  r = Reflect.decorate(decorators, target, key, desc);
@@ -3336,7 +3431,8 @@ var __decorate3 = function(decorators, target, key, desc) {
3336
3431
  if (d = decorators[i])
3337
3432
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
3338
3433
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3339
- };
3434
+ }
3435
+ var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/locks/browser.ts";
3340
3436
  var Message;
3341
3437
  (function(Message2) {
3342
3438
  Message2["ACQUIRING"] = "acquiring";
@@ -3358,32 +3454,32 @@ var Lock = class {
3358
3454
  message: Message.ACQUIRING
3359
3455
  });
3360
3456
  try {
3361
- log13("aquiring lock...", {}, {
3362
- file: "browser.ts",
3363
- line: 42,
3364
- scope: this,
3365
- callSite: (f, a) => f(...a)
3457
+ log13("aquiring lock...", void 0, {
3458
+ F: __dxlog_file13,
3459
+ L: 42,
3460
+ S: this,
3461
+ C: (f, a) => f(...a)
3366
3462
  });
3367
3463
  await asyncTimeout(this._requestLock(), RESOURCE_LOCK_TIMEOUT);
3368
- log13("acquired lock", {}, {
3369
- file: "browser.ts",
3370
- line: 44,
3371
- scope: this,
3372
- callSite: (f, a) => f(...a)
3464
+ log13("acquired lock", void 0, {
3465
+ F: __dxlog_file13,
3466
+ L: 44,
3467
+ S: this,
3468
+ C: (f, a) => f(...a)
3373
3469
  });
3374
3470
  } catch (e) {
3375
- log13("stealing lock...", {}, {
3376
- file: "browser.ts",
3377
- line: 46,
3378
- scope: this,
3379
- callSite: (f, a) => f(...a)
3471
+ log13("stealing lock...", void 0, {
3472
+ F: __dxlog_file13,
3473
+ L: 46,
3474
+ S: this,
3475
+ C: (f, a) => f(...a)
3380
3476
  });
3381
3477
  await this._requestLock(true);
3382
- log13("stolen lock", {}, {
3383
- file: "browser.ts",
3384
- line: 48,
3385
- scope: this,
3386
- callSite: (f, a) => f(...a)
3478
+ log13("stolen lock", void 0, {
3479
+ F: __dxlog_file13,
3480
+ L: 48,
3481
+ S: this,
3482
+ C: (f, a) => f(...a)
3387
3483
  });
3388
3484
  }
3389
3485
  }
@@ -3399,10 +3495,10 @@ var Lock = class {
3399
3495
  log13("requesting lock...", {
3400
3496
  steal
3401
3497
  }, {
3402
- file: "browser.ts",
3403
- line: 63,
3404
- scope: this,
3405
- callSite: (f, a) => f(...a)
3498
+ F: __dxlog_file13,
3499
+ L: 63,
3500
+ S: this,
3501
+ C: (f, a) => f(...a)
3406
3502
  });
3407
3503
  const acquired = new Trigger6();
3408
3504
  void navigator.locks.request(this._lockKey, {
@@ -3413,18 +3509,18 @@ var Lock = class {
3413
3509
  acquired.wake();
3414
3510
  this._releaseTrigger = new Trigger6();
3415
3511
  await this._releaseTrigger.wait();
3416
- log13("releasing lock...", {}, {
3417
- file: "browser.ts",
3418
- line: 72,
3419
- scope: this,
3420
- callSite: (f, a) => f(...a)
3512
+ log13("releasing lock...", void 0, {
3513
+ F: __dxlog_file13,
3514
+ L: 72,
3515
+ S: this,
3516
+ C: (f, a) => f(...a)
3421
3517
  });
3422
3518
  await ((_b = this._onRelease) == null ? void 0 : _b.call(this));
3423
- log13("released lock", {}, {
3424
- file: "browser.ts",
3425
- line: 74,
3426
- scope: this,
3427
- callSite: (f, a) => f(...a)
3519
+ log13("released lock", void 0, {
3520
+ F: __dxlog_file13,
3521
+ L: 74,
3522
+ S: this,
3523
+ C: (f, a) => f(...a)
3428
3524
  });
3429
3525
  }).catch(async () => {
3430
3526
  var _a;
@@ -3434,14 +3530,14 @@ var Lock = class {
3434
3530
  log13("recieved lock", {
3435
3531
  steal
3436
3532
  }, {
3437
- file: "browser.ts",
3438
- line: 81,
3439
- scope: this,
3440
- callSite: (f, a) => f(...a)
3533
+ F: __dxlog_file13,
3534
+ L: 81,
3535
+ S: this,
3536
+ C: (f, a) => f(...a)
3441
3537
  });
3442
3538
  }
3443
3539
  };
3444
- __decorate3([
3540
+ _ts_decorate3([
3445
3541
  logInfo
3446
3542
  ], Lock.prototype, "lockKey", null);
3447
3543
  var isLocked = (lockPath) => {
@@ -3522,16 +3618,19 @@ var ServiceRegistry = class {
3522
3618
  };
3523
3619
 
3524
3620
  // packages/sdk/client-services/src/packlets/services/service-host.ts
3525
- import assert12 from "@dxos/node-std/assert";
3526
- import { Event as Event8 } from "@dxos/async";
3527
- import { clientServiceBundle, createDefaultModelFactory } from "@dxos/client-protocol";
3621
+ import invariant12 from "tiny-invariant";
3622
+ import { Event as Event8, synchronized as synchronized3 } from "@dxos/async";
3623
+ import { clientServiceBundle } from "@dxos/client-protocol";
3624
+ import { DocumentModel } from "@dxos/document-model";
3528
3625
  import { DataServiceImpl } from "@dxos/echo-pipeline";
3529
3626
  import { PublicKey as PublicKey10 } from "@dxos/keys";
3530
3627
  import { log as log15 } from "@dxos/log";
3531
3628
  import { WebsocketSignalManager } from "@dxos/messaging";
3629
+ import { ModelFactory } from "@dxos/model-factory";
3532
3630
  import { createWebRTCTransportFactory, NetworkManager } from "@dxos/network-manager";
3533
3631
  import { trace as trace6 } from "@dxos/protocols";
3534
3632
  import { SystemStatus } from "@dxos/protocols/proto/dxos/client/services";
3633
+ import { TextModel } from "@dxos/text-model";
3535
3634
 
3536
3635
  // packages/sdk/client-services/src/packlets/devices/devices-service.ts
3537
3636
  import { EventSubscriptions as EventSubscriptions3 } from "@dxos/async";
@@ -3607,7 +3706,7 @@ var LoggingServiceImpl = class {
3607
3706
  if (LOG_PROCESSING > 0) {
3608
3707
  return;
3609
3708
  }
3610
- if (((_a = entry2.meta) == null ? void 0 : _a.file.includes("logging-service")) || entry2.context && Object.values(entry2.context).some((value) => typeof value === "string" && value.includes("LoggingService"))) {
3709
+ if (((_a = entry2.meta) == null ? void 0 : _a.F.includes("logging-service")) || entry2.context && Object.values(entry2.context).some((value) => typeof value === "string" && value.includes("LoggingService"))) {
3611
3710
  return;
3612
3711
  }
3613
3712
  if (!shouldLog(entry2, request)) {
@@ -3619,8 +3718,8 @@ var LoggingServiceImpl = class {
3619
3718
  timestamp: new Date(),
3620
3719
  meta: {
3621
3720
  // TODO(dmaretskyi): Fix proto.
3622
- file: (_c = (_b = entry2.meta) == null ? void 0 : _b.file) != null ? _c : "",
3623
- line: (_e = (_d = entry2.meta) == null ? void 0 : _d.line) != null ? _e : 0
3721
+ file: (_c = (_b = entry2.meta) == null ? void 0 : _b.F) != null ? _c : "",
3722
+ line: (_e = (_d = entry2.meta) == null ? void 0 : _d.L) != null ? _e : 0
3624
3723
  }
3625
3724
  };
3626
3725
  try {
@@ -3650,7 +3749,7 @@ var shouldLog = (entry2, request) => {
3650
3749
  } else {
3651
3750
  return request.filters.some((filter) => {
3652
3751
  var _a2, _b;
3653
- return matchFilter(filter, entry2.level, (_b = (_a2 = entry2.meta) == null ? void 0 : _a2.file) != null ? _b : "", options);
3752
+ return matchFilter(filter, entry2.level, (_b = (_a2 = entry2.meta) == null ? void 0 : _a2.F) != null ? _b : "", options);
3654
3753
  });
3655
3754
  }
3656
3755
  };
@@ -3727,6 +3826,20 @@ var SystemServiceImpl = class {
3727
3826
  };
3728
3827
 
3729
3828
  // packages/sdk/client-services/src/packlets/services/service-host.ts
3829
+ function _ts_decorate4(decorators, target, key, desc) {
3830
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3831
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
3832
+ r = Reflect.decorate(decorators, target, key, desc);
3833
+ else
3834
+ for (var i = decorators.length - 1; i >= 0; i--)
3835
+ if (d = decorators[i])
3836
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
3837
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
3838
+ }
3839
+ var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-host.ts";
3840
+ var createDefaultModelFactory = () => {
3841
+ return new ModelFactory().registerModel(DocumentModel).registerModel(TextModel);
3842
+ };
3730
3843
  var ClientServicesHost = class {
3731
3844
  constructor({
3732
3845
  config,
@@ -3737,13 +3850,15 @@ var ClientServicesHost = class {
3737
3850
  connectionLog,
3738
3851
  storage,
3739
3852
  // TODO(wittjosiah): Turn this on by default.
3740
- lockKey
3853
+ lockKey,
3854
+ callbacks
3741
3855
  } = {}) {
3742
3856
  this._statusUpdate = new Event8();
3743
3857
  this._opening = false;
3744
3858
  this._open = false;
3745
3859
  this._storage = storage;
3746
3860
  this._modelFactory = modelFactory;
3861
+ this._callbacks = callbacks;
3747
3862
  if (config) {
3748
3863
  this.initialize({
3749
3864
  config,
@@ -3802,9 +3917,9 @@ var ClientServicesHost = class {
3802
3917
  */
3803
3918
  initialize({ config, ...options }) {
3804
3919
  var _a, _b, _c;
3805
- assert12(!this._open, "service host is open");
3920
+ invariant12(!this._open, "service host is open");
3806
3921
  if (config) {
3807
- assert12(!this._config, "config already set");
3922
+ invariant12(!this._config, "config already set");
3808
3923
  this._config = config;
3809
3924
  if (!this._storage) {
3810
3925
  this._storage = createStorageObjects(config.get("runtime.client.storage", {})).storage;
@@ -3814,7 +3929,7 @@ var ClientServicesHost = class {
3814
3929
  iceServers: (_a = this._config) == null ? void 0 : _a.get("runtime.services.ice")
3815
3930
  }), signalManager = new WebsocketSignalManager((_c = (_b = this._config) == null ? void 0 : _b.get("runtime.services.signaling")) != null ? _c : []) } = options;
3816
3931
  this._signalManager = signalManager;
3817
- assert12(!this._networkManager, "network manager already set");
3932
+ invariant12(!this._networkManager, "network manager already set");
3818
3933
  this._networkManager = new NetworkManager({
3819
3934
  log: connectionLog,
3820
3935
  transportFactory,
@@ -3830,23 +3945,23 @@ var ClientServicesHost = class {
3830
3945
  log15.trace("dxos.sdk.client-services-host.open", trace6.begin({
3831
3946
  id: traceId
3832
3947
  }), {
3833
- file: "service-host.ts",
3834
- line: 187,
3835
- scope: this,
3836
- callSite: (f, a) => f(...a)
3837
- });
3838
- assert12(this._config, "config not set");
3839
- assert12(this._storage, "storage not set");
3840
- assert12(this._signalManager, "signal manager not set");
3841
- assert12(this._networkManager, "network manager not set");
3948
+ F: __dxlog_file14,
3949
+ L: 203,
3950
+ S: this,
3951
+ C: (f, a) => f(...a)
3952
+ });
3953
+ invariant12(this._config, "config not set");
3954
+ invariant12(this._storage, "storage not set");
3955
+ invariant12(this._signalManager, "signal manager not set");
3956
+ invariant12(this._networkManager, "network manager not set");
3842
3957
  this._opening = true;
3843
3958
  log15("opening...", {
3844
3959
  lockKey: (_a = this._resourceLock) == null ? void 0 : _a.lockKey
3845
3960
  }, {
3846
- file: "service-host.ts",
3847
- line: 195,
3848
- scope: this,
3849
- callSite: (f, a) => f(...a)
3961
+ F: __dxlog_file14,
3962
+ L: 211,
3963
+ S: this,
3964
+ C: (f, a) => f(...a)
3850
3965
  });
3851
3966
  await ((_b = this._resourceLock) == null ? void 0 : _b.acquire());
3852
3967
  await this._loggingService.open();
@@ -3878,18 +3993,18 @@ var ClientServicesHost = class {
3878
3993
  log15("opened", {
3879
3994
  deviceKey
3880
3995
  }, {
3881
- file: "service-host.ts",
3882
- line: 250,
3883
- scope: this,
3884
- callSite: (f, a) => f(...a)
3996
+ F: __dxlog_file14,
3997
+ L: 266,
3998
+ S: this,
3999
+ C: (f, a) => f(...a)
3885
4000
  });
3886
4001
  log15.trace("dxos.sdk.client-services-host.open", trace6.end({
3887
4002
  id: traceId
3888
4003
  }), {
3889
- file: "service-host.ts",
3890
- line: 251,
3891
- scope: this,
3892
- callSite: (f, a) => f(...a)
4004
+ F: __dxlog_file14,
4005
+ L: 267,
4006
+ S: this,
4007
+ C: (f, a) => f(...a)
3893
4008
  });
3894
4009
  }
3895
4010
  async close() {
@@ -3901,10 +4016,10 @@ var ClientServicesHost = class {
3901
4016
  log15("closing...", {
3902
4017
  deviceKey
3903
4018
  }, {
3904
- file: "service-host.ts",
3905
- line: 260,
3906
- scope: this,
3907
- callSite: (f, a) => f(...a)
4019
+ F: __dxlog_file14,
4020
+ L: 277,
4021
+ S: this,
4022
+ C: (f, a) => f(...a)
3908
4023
  });
3909
4024
  this._serviceRegistry.setServices({
3910
4025
  SystemService: this._systemService
@@ -3916,47 +4031,54 @@ var ClientServicesHost = class {
3916
4031
  log15("closed", {
3917
4032
  deviceKey
3918
4033
  }, {
3919
- file: "service-host.ts",
3920
- line: 266,
3921
- scope: this,
3922
- callSite: (f, a) => f(...a)
4034
+ F: __dxlog_file14,
4035
+ L: 283,
4036
+ S: this,
4037
+ C: (f, a) => f(...a)
3923
4038
  });
3924
4039
  }
3925
4040
  async reset() {
3926
- var _a;
4041
+ var _a, _b, _c;
3927
4042
  const traceId = PublicKey10.random().toHex();
3928
4043
  log15.trace("dxos.sdk.client-services-host.reset", trace6.begin({
3929
4044
  id: traceId
3930
4045
  }), {
3931
- file: "service-host.ts",
3932
- line: 271,
3933
- scope: this,
3934
- callSite: (f, a) => f(...a)
4046
+ F: __dxlog_file14,
4047
+ L: 288,
4048
+ S: this,
4049
+ C: (f, a) => f(...a)
3935
4050
  });
3936
- log15("resetting...", {}, {
3937
- file: "service-host.ts",
3938
- line: 273,
3939
- scope: this,
3940
- callSite: (f, a) => f(...a)
4051
+ log15("resetting...", void 0, {
4052
+ F: __dxlog_file14,
4053
+ L: 290,
4054
+ S: this,
4055
+ C: (f, a) => f(...a)
3941
4056
  });
3942
4057
  await ((_a = this._serviceContext) == null ? void 0 : _a.close());
3943
4058
  await this._storage.reset();
3944
- log15("reset", {}, {
3945
- file: "service-host.ts",
3946
- line: 276,
3947
- scope: this,
3948
- callSite: (f, a) => f(...a)
4059
+ log15("reset", void 0, {
4060
+ F: __dxlog_file14,
4061
+ L: 293,
4062
+ S: this,
4063
+ C: (f, a) => f(...a)
3949
4064
  });
3950
4065
  log15.trace("dxos.sdk.client-services-host.reset", trace6.end({
3951
4066
  id: traceId
3952
4067
  }), {
3953
- file: "service-host.ts",
3954
- line: 277,
3955
- scope: this,
3956
- callSite: (f, a) => f(...a)
4068
+ F: __dxlog_file14,
4069
+ L: 294,
4070
+ S: this,
4071
+ C: (f, a) => f(...a)
3957
4072
  });
4073
+ await ((_c = (_b = this._callbacks) == null ? void 0 : _b.onReset) == null ? void 0 : _c.call(_b));
3958
4074
  }
3959
4075
  };
4076
+ _ts_decorate4([
4077
+ synchronized3
4078
+ ], ClientServicesHost.prototype, "open", null);
4079
+ _ts_decorate4([
4080
+ synchronized3
4081
+ ], ClientServicesHost.prototype, "close", null);
3960
4082
 
3961
4083
  export {
3962
4084
  subscribeToFeeds,
@@ -3986,6 +4108,7 @@ export {
3986
4108
  isLocked,
3987
4109
  createStorageObjects,
3988
4110
  ServiceRegistry,
4111
+ createDefaultModelFactory,
3989
4112
  ClientServicesHost
3990
4113
  };
3991
- //# sourceMappingURL=chunk-C3SPTMW3.mjs.map
4114
+ //# sourceMappingURL=chunk-EYXOVYW5.mjs.map