@dxos/client-services 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (142) hide show
  1. package/dist/lib/browser/{chunk-HWGM5TYF.mjs → chunk-MQ6PWJ76.mjs} +1936 -2336
  2. package/dist/lib/browser/chunk-MQ6PWJ76.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-NQSC7HOE.mjs +22 -0
  4. package/dist/lib/browser/chunk-NQSC7HOE.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-QCWEHHJW.mjs +24 -0
  6. package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +522 -172
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +93 -0
  11. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
  12. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
  13. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
  14. package/dist/lib/browser/packlets/locks/browser.mjs +126 -0
  15. package/dist/lib/browser/packlets/locks/browser.mjs.map +7 -0
  16. package/dist/lib/browser/packlets/locks/node.mjs +66 -0
  17. package/dist/lib/browser/packlets/locks/node.mjs.map +7 -0
  18. package/dist/lib/browser/testing/index.mjs +59 -76
  19. package/dist/lib/browser/testing/index.mjs.map +3 -3
  20. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
  21. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
  22. package/dist/lib/node-esm/{chunk-XUIY55CH.mjs → chunk-GUAL4U7S.mjs} +1468 -1737
  23. package/dist/lib/node-esm/chunk-GUAL4U7S.mjs.map +7 -0
  24. package/dist/lib/node-esm/chunk-PKEGMOQ4.mjs +22 -0
  25. package/dist/lib/node-esm/chunk-PKEGMOQ4.mjs.map +7 -0
  26. package/dist/lib/node-esm/index.mjs +522 -172
  27. package/dist/lib/node-esm/index.mjs.map +4 -4
  28. package/dist/lib/node-esm/meta.json +1 -1
  29. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +93 -0
  30. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
  31. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
  32. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
  33. package/dist/lib/node-esm/packlets/locks/browser.mjs +126 -0
  34. package/dist/lib/node-esm/packlets/locks/browser.mjs.map +7 -0
  35. package/dist/lib/node-esm/packlets/locks/node.mjs +66 -0
  36. package/dist/lib/node-esm/packlets/locks/node.mjs.map +7 -0
  37. package/dist/lib/node-esm/testing/index.mjs +59 -76
  38. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  39. package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
  40. package/dist/types/src/packlets/devtools/devtools.d.ts +2 -2
  41. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  42. package/dist/types/src/packlets/diagnostics/index.d.ts +1 -1
  43. package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -1
  44. package/dist/types/src/packlets/identity/authenticator.d.ts +2 -2
  45. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  46. package/dist/types/src/packlets/identity/default-space-state-machine.d.ts +2 -2
  47. package/dist/types/src/packlets/identity/default-space-state-machine.d.ts.map +1 -1
  48. package/dist/types/src/packlets/identity/identity-manager.d.ts +4 -4
  49. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  50. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +2 -2
  51. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -1
  52. package/dist/types/src/packlets/identity/identity.d.ts +2 -2
  53. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  54. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +4 -4
  55. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  56. package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts.map +1 -1
  57. package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
  58. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +2 -3
  59. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -1
  60. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -4
  61. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  62. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +2 -2
  63. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  64. package/dist/types/src/packlets/locks/index.d.ts +1 -1
  65. package/dist/types/src/packlets/locks/index.d.ts.map +1 -1
  66. package/dist/types/src/packlets/logging/logging-service.d.ts +4 -0
  67. package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
  68. package/dist/types/src/packlets/services/client-rpc-server.d.ts +2 -2
  69. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
  70. package/dist/types/src/packlets/services/feed-syncer.d.ts +59 -0
  71. package/dist/types/src/packlets/services/feed-syncer.d.ts.map +1 -0
  72. package/dist/types/src/packlets/services/feed-syncer.test.d.ts +2 -0
  73. package/dist/types/src/packlets/services/feed-syncer.test.d.ts.map +1 -0
  74. package/dist/types/src/packlets/services/platform.d.ts.map +1 -1
  75. package/dist/types/src/packlets/services/service-context.d.ts +12 -7
  76. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  77. package/dist/types/src/packlets/services/service-host.d.ts +19 -5
  78. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  79. package/dist/types/src/packlets/space-export/space-archive-writer.d.ts.map +1 -1
  80. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +10 -5
  81. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  82. package/dist/types/src/packlets/spaces/data-space.d.ts +2 -2
  83. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  84. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts +2 -2
  85. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
  86. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +6 -6
  87. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  88. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  89. package/dist/types/src/packlets/testing/invitation-utils.d.ts +6 -3
  90. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  91. package/dist/types/src/packlets/testing/test-builder.d.ts +6 -5
  92. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  93. package/dist/types/src/packlets/worker/worker-runtime.d.ts +31 -4
  94. package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
  95. package/dist/types/src/packlets/worker/worker-session.d.ts +2 -2
  96. package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -1
  97. package/dist/types/src/version.d.ts +1 -1
  98. package/dist/types/src/version.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +70 -48
  101. package/src/packlets/agents/edge-agent-service.ts +11 -1
  102. package/src/packlets/devices/devices-service.ts +1 -1
  103. package/src/packlets/devtools/devtools.ts +2 -2
  104. package/src/packlets/diagnostics/index.ts +1 -1
  105. package/src/packlets/identity/authenticator.ts +2 -2
  106. package/src/packlets/identity/default-space-state-machine.ts +2 -2
  107. package/src/packlets/identity/identity-manager.ts +6 -6
  108. package/src/packlets/identity/identity-recovery-manager.ts +2 -2
  109. package/src/packlets/identity/identity.test.ts +4 -4
  110. package/src/packlets/identity/identity.ts +2 -2
  111. package/src/packlets/invitations/device-invitation-protocol.ts +5 -5
  112. package/src/packlets/invitations/invitation-guest-extenstion.ts +6 -4
  113. package/src/packlets/invitations/invitation-host-extension.ts +6 -4
  114. package/src/packlets/invitations/invitation-protocol.ts +2 -3
  115. package/src/packlets/invitations/invitations-handler.ts +7 -7
  116. package/src/packlets/invitations/space-invitation-protocol.ts +7 -13
  117. package/src/packlets/locks/index.ts +1 -1
  118. package/src/packlets/logging/logging-service.ts +5 -1
  119. package/src/packlets/services/client-rpc-server.ts +4 -4
  120. package/src/packlets/services/feed-syncer.test.ts +340 -0
  121. package/src/packlets/services/feed-syncer.ts +330 -0
  122. package/src/packlets/services/platform.ts +7 -1
  123. package/src/packlets/services/service-context.ts +53 -21
  124. package/src/packlets/services/service-host.ts +53 -16
  125. package/src/packlets/space-export/space-archive-reader.ts +1 -1
  126. package/src/packlets/space-export/space-archive-writer.ts +3 -1
  127. package/src/packlets/spaces/data-space-manager.ts +56 -21
  128. package/src/packlets/spaces/data-space.ts +10 -6
  129. package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -1
  130. package/src/packlets/spaces/edge-feed-replicator.ts +3 -3
  131. package/src/packlets/spaces/epoch-migrations.ts +2 -2
  132. package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
  133. package/src/packlets/spaces/notarization-plugin.ts +8 -8
  134. package/src/packlets/spaces/spaces-service.ts +10 -7
  135. package/src/packlets/storage/storage.ts +4 -4
  136. package/src/packlets/testing/invitation-utils.ts +7 -4
  137. package/src/packlets/testing/test-builder.ts +36 -10
  138. package/src/packlets/worker/worker-runtime.ts +149 -11
  139. package/src/packlets/worker/worker-session.ts +8 -8
  140. package/src/version.ts +1 -1
  141. package/dist/lib/browser/chunk-HWGM5TYF.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-XUIY55CH.mjs.map +0 -7
@@ -0,0 +1,93 @@
1
+ import "@dxos/node-std/globals";
2
+ import "../../chunk-QCWEHHJW.mjs";
3
+
4
+ // src/packlets/diagnostics/browser-diagnostics-broadcast.ts
5
+ import { Trigger } from "@dxos/async";
6
+ import { log } from "@dxos/log";
7
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/diagnostics/browser-diagnostics-broadcast.ts";
8
+ var CHANNEL_NAME = "dxos.diagnostics.broadcast";
9
+ var createCollectDiagnosticsBroadcastSender = () => {
10
+ return {
11
+ broadcastDiagnosticsRequest: async () => {
12
+ let expectedResponse = "probe-ack";
13
+ let channel;
14
+ try {
15
+ const trigger = new Trigger();
16
+ channel = new BroadcastChannel(CHANNEL_NAME);
17
+ channel.onmessage = (msg) => {
18
+ if (expectedResponse === msg.data.type) {
19
+ trigger.wake(msg.data);
20
+ }
21
+ };
22
+ channel.postMessage({
23
+ type: "probe"
24
+ });
25
+ await trigger.wait({
26
+ timeout: 200
27
+ });
28
+ expectedResponse = "receive-diagnostics";
29
+ trigger.reset();
30
+ channel.postMessage({
31
+ type: "request-diagnostics"
32
+ });
33
+ const diagnostics = await trigger.wait({
34
+ timeout: 5e3
35
+ });
36
+ return diagnostics.payload;
37
+ } catch (e) {
38
+ const errorDescription = e instanceof Error ? e.message : JSON.stringify(e);
39
+ return {
40
+ expectedResponse,
41
+ errorDescription
42
+ };
43
+ } finally {
44
+ safeClose(channel);
45
+ }
46
+ }
47
+ };
48
+ };
49
+ var createCollectDiagnosticsBroadcastHandler = (systemService) => {
50
+ let channel;
51
+ return {
52
+ start: () => {
53
+ channel = new BroadcastChannel(CHANNEL_NAME);
54
+ channel.onmessage = async (message) => {
55
+ try {
56
+ if (message.data.type === "probe") {
57
+ channel?.postMessage({
58
+ type: "probe-ack"
59
+ });
60
+ } else if (message.data.type === "request-diagnostics") {
61
+ const diagnostics = await systemService.getDiagnostics({});
62
+ channel?.postMessage({
63
+ type: "receive-diagnostics",
64
+ payload: diagnostics
65
+ });
66
+ }
67
+ } catch (error) {
68
+ log.catch(error, void 0, {
69
+ F: __dxlog_file,
70
+ L: 77,
71
+ S: void 0,
72
+ C: (f, a) => f(...a)
73
+ });
74
+ }
75
+ };
76
+ },
77
+ stop: () => {
78
+ safeClose(channel);
79
+ channel = void 0;
80
+ }
81
+ };
82
+ };
83
+ var safeClose = (channel) => {
84
+ try {
85
+ channel?.close();
86
+ } catch (e) {
87
+ }
88
+ };
89
+ export {
90
+ createCollectDiagnosticsBroadcastHandler,
91
+ createCollectDiagnosticsBroadcastSender
92
+ };
93
+ //# sourceMappingURL=browser-diagnostics-broadcast.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/packlets/diagnostics/browser-diagnostics-broadcast.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { log } from '@dxos/log';\nimport { type SystemService } from '@dxos/protocols/proto/dxos/client/services';\n\nimport {\n type CollectDiagnosticsBroadcastHandler,\n type CollectDiagnosticsBroadcastSender,\n} from './diagnostics-collector';\n\nconst CHANNEL_NAME = 'dxos.diagnostics.broadcast';\n\nenum MessageType {\n PROBE = 'probe',\n PROBE_ACK = 'probe-ack',\n REQUEST_DIAGNOSTICS = 'request-diagnostics',\n RECEIVE_DIAGNOSTICS = 'receive-diagnostics',\n}\n\ninterface Message {\n type: MessageType;\n payload?: any;\n}\n\nexport const createCollectDiagnosticsBroadcastSender = (): CollectDiagnosticsBroadcastSender => {\n return {\n broadcastDiagnosticsRequest: async () => {\n let expectedResponse = MessageType.PROBE_ACK;\n let channel: BroadcastChannel | undefined;\n try {\n const trigger = new Trigger<Message>();\n channel = new BroadcastChannel(CHANNEL_NAME);\n channel.onmessage = (msg) => {\n if (expectedResponse === msg.data.type) {\n trigger.wake(msg.data);\n }\n };\n channel.postMessage({ type: MessageType.PROBE });\n await trigger.wait({ timeout: 200 });\n expectedResponse = MessageType.RECEIVE_DIAGNOSTICS;\n trigger.reset();\n channel.postMessage({ type: MessageType.REQUEST_DIAGNOSTICS });\n const diagnostics = await trigger.wait({ timeout: 5000 });\n return diagnostics.payload;\n } catch (e) {\n const errorDescription = e instanceof Error ? e.message : JSON.stringify(e);\n return { expectedResponse, errorDescription };\n } finally {\n safeClose(channel);\n }\n },\n };\n};\n\nexport const createCollectDiagnosticsBroadcastHandler = (\n systemService: SystemService,\n): CollectDiagnosticsBroadcastHandler => {\n let channel: BroadcastChannel | undefined;\n return {\n start: () => {\n channel = new BroadcastChannel(CHANNEL_NAME);\n channel.onmessage = async (message) => {\n try {\n if (message.data.type === MessageType.PROBE) {\n channel?.postMessage({ type: MessageType.PROBE_ACK });\n } else if (message.data.type === MessageType.REQUEST_DIAGNOSTICS) {\n const diagnostics = await systemService.getDiagnostics({});\n channel?.postMessage({\n type: MessageType.RECEIVE_DIAGNOSTICS,\n payload: diagnostics,\n });\n }\n } catch (error) {\n log.catch(error);\n }\n };\n },\n stop: () => {\n safeClose(channel);\n channel = undefined;\n },\n };\n};\n\nconst safeClose = (channel?: BroadcastChannel) => {\n try {\n channel?.close();\n } catch (e) {\n // ignored\n }\n};\n"],
5
+ "mappings": ";;;;AAIA,SAASA,eAAe;AACxB,SAASC,WAAW;;AAQpB,IAAMC,eAAe;AAcd,IAAMC,0CAA0C,MAAA;AACrD,SAAO;IACLC,6BAA6B,YAAA;AAC3B,UAAIC,mBAAAA;AACJ,UAAIC;AACJ,UAAI;AACF,cAAMC,UAAU,IAAIC,QAAAA;AACpBF,kBAAU,IAAIG,iBAAiBC,YAAAA;AAC/BJ,gBAAQK,YAAY,CAACC,QAAAA;AACnB,cAAIP,qBAAqBO,IAAIC,KAAKC,MAAM;AACtCP,oBAAQQ,KAAKH,IAAIC,IAAI;UACvB;QACF;AACAP,gBAAQU,YAAY;UAAEF,MAAI;QAAoB,CAAA;AAC9C,cAAMP,QAAQU,KAAK;UAAEC,SAAS;QAAI,CAAA;AAClCb,2BAAAA;AACAE,gBAAQY,MAAK;AACbb,gBAAQU,YAAY;UAAEF,MAAI;QAAkC,CAAA;AAC5D,cAAMM,cAAc,MAAMb,QAAQU,KAAK;UAAEC,SAAS;QAAK,CAAA;AACvD,eAAOE,YAAYC;MACrB,SAASC,GAAG;AACV,cAAMC,mBAAmBD,aAAaE,QAAQF,EAAEG,UAAUC,KAAKC,UAAUL,CAAAA;AACzE,eAAO;UAAEjB;UAAkBkB;QAAiB;MAC9C,UAAA;AACEK,kBAAUtB,OAAAA;MACZ;IACF;EACF;AACF;AAEO,IAAMuB,2CAA2C,CACtDC,kBAAAA;AAEA,MAAIxB;AACJ,SAAO;IACLyB,OAAO,MAAA;AACLzB,gBAAU,IAAIG,iBAAiBC,YAAAA;AAC/BJ,cAAQK,YAAY,OAAOc,YAAAA;AACzB,YAAI;AACF,cAAIA,QAAQZ,KAAKC,SAAI,SAAwB;AAC3CR,qBAASU,YAAY;cAAEF,MAAI;YAAwB,CAAA;UACrD,WAAWW,QAAQZ,KAAKC,SAAI,uBAAsC;AAChE,kBAAMM,cAAc,MAAMU,cAAcE,eAAe,CAAC,CAAA;AACxD1B,qBAASU,YAAY;cACnBF,MAAI;cACJO,SAASD;YACX,CAAA;UACF;QACF,SAASa,OAAO;AACdC,cAAIC,MAAMF,OAAAA,QAAAA;;;;;;QACZ;MACF;IACF;IACAG,MAAM,MAAA;AACJR,gBAAUtB,OAAAA;AACVA,gBAAU+B;IACZ;EACF;AACF;AAEA,IAAMT,YAAY,CAACtB,YAAAA;AACjB,MAAI;AACFA,aAASgC,MAAAA;EACX,SAAShB,GAAG;EAEZ;AACF;",
6
+ "names": ["Trigger", "log", "CHANNEL_NAME", "createCollectDiagnosticsBroadcastSender", "broadcastDiagnosticsRequest", "expectedResponse", "channel", "trigger", "Trigger", "BroadcastChannel", "CHANNEL_NAME", "onmessage", "msg", "data", "type", "wake", "postMessage", "wait", "timeout", "reset", "diagnostics", "payload", "e", "errorDescription", "Error", "message", "JSON", "stringify", "safeClose", "createCollectDiagnosticsBroadcastHandler", "systemService", "start", "getDiagnostics", "error", "log", "catch", "stop", "undefined", "close"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import "@dxos/node-std/globals";
2
+ import {
3
+ createCollectDiagnosticsBroadcastHandler,
4
+ createCollectDiagnosticsBroadcastSender
5
+ } from "../../chunk-NQSC7HOE.mjs";
6
+ import "../../chunk-QCWEHHJW.mjs";
7
+ export {
8
+ createCollectDiagnosticsBroadcastHandler,
9
+ createCollectDiagnosticsBroadcastSender
10
+ };
11
+ //# sourceMappingURL=diagnostics-broadcast.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,126 @@
1
+ import "@dxos/node-std/globals";
2
+ import "../../chunk-QCWEHHJW.mjs";
3
+
4
+ // src/packlets/locks/browser.ts
5
+ import { Trigger, asyncTimeout } from "@dxos/async";
6
+ import { RESOURCE_LOCK_TIMEOUT } from "@dxos/client-protocol";
7
+ import { log, logInfo } from "@dxos/log";
8
+ function _ts_decorate(decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ }
14
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/locks/browser.ts";
15
+ var Lock = class {
16
+ _broadcastChannel = new BroadcastChannel("vault-resource-lock");
17
+ _lockKey;
18
+ _onAcquire;
19
+ _onRelease;
20
+ _releaseTrigger = new Trigger();
21
+ constructor({ lockKey, onAcquire, onRelease }) {
22
+ this._lockKey = lockKey;
23
+ this._onAcquire = onAcquire;
24
+ this._onRelease = onRelease;
25
+ this._broadcastChannel.onmessage = this._onMessage.bind(this);
26
+ }
27
+ get lockKey() {
28
+ return this._lockKey;
29
+ }
30
+ async acquire() {
31
+ this._broadcastChannel.postMessage({
32
+ message: "acquiring"
33
+ });
34
+ try {
35
+ log("aquiring lock...", void 0, {
36
+ F: __dxlog_file,
37
+ L: 42,
38
+ S: this,
39
+ C: (f, a) => f(...a)
40
+ });
41
+ await asyncTimeout(this._requestLock(), RESOURCE_LOCK_TIMEOUT);
42
+ log("acquired lock", void 0, {
43
+ F: __dxlog_file,
44
+ L: 44,
45
+ S: this,
46
+ C: (f, a) => f(...a)
47
+ });
48
+ } catch {
49
+ log("stealing lock...", void 0, {
50
+ F: __dxlog_file,
51
+ L: 46,
52
+ S: this,
53
+ C: (f, a) => f(...a)
54
+ });
55
+ await this._requestLock(true);
56
+ log("stolen lock", void 0, {
57
+ F: __dxlog_file,
58
+ L: 48,
59
+ S: this,
60
+ C: (f, a) => f(...a)
61
+ });
62
+ }
63
+ }
64
+ async release() {
65
+ this._releaseTrigger.wake();
66
+ }
67
+ _onMessage(event) {
68
+ if (event.data.message === "acquiring") {
69
+ this._releaseTrigger.wake();
70
+ }
71
+ }
72
+ async _requestLock(steal = false) {
73
+ log("requesting lock...", {
74
+ steal
75
+ }, {
76
+ F: __dxlog_file,
77
+ L: 63,
78
+ S: this,
79
+ C: (f, a) => f(...a)
80
+ });
81
+ const acquired = new Trigger();
82
+ void navigator.locks.request(this._lockKey, {
83
+ steal
84
+ }, async () => {
85
+ await this._onAcquire?.();
86
+ acquired.wake();
87
+ this._releaseTrigger = new Trigger();
88
+ await this._releaseTrigger.wait();
89
+ log("releasing lock...", void 0, {
90
+ F: __dxlog_file,
91
+ L: 72,
92
+ S: this,
93
+ C: (f, a) => f(...a)
94
+ });
95
+ await this._onRelease?.();
96
+ log("released lock", void 0, {
97
+ F: __dxlog_file,
98
+ L: 74,
99
+ S: this,
100
+ C: (f, a) => f(...a)
101
+ });
102
+ }).catch(async () => {
103
+ await this._onRelease?.();
104
+ });
105
+ await acquired.wait();
106
+ log("recieved lock", {
107
+ steal
108
+ }, {
109
+ F: __dxlog_file,
110
+ L: 81,
111
+ S: this,
112
+ C: (f, a) => f(...a)
113
+ });
114
+ }
115
+ };
116
+ _ts_decorate([
117
+ logInfo
118
+ ], Lock.prototype, "lockKey", null);
119
+ var isLocked = (lockPath) => {
120
+ throw new Error("Not implemented");
121
+ };
122
+ export {
123
+ Lock,
124
+ isLocked
125
+ };
126
+ //# sourceMappingURL=browser.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/packlets/locks/browser.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger, asyncTimeout } from '@dxos/async';\nimport { RESOURCE_LOCK_TIMEOUT } from '@dxos/client-protocol';\nimport { log, logInfo } from '@dxos/log';\n\nimport { type ResourceLock, type ResourceLockOptions } from './resource-lock';\n\nenum Message {\n ACQUIRING = 'acquiring',\n}\n\n// TODO(mykola): Factor out.\n// TODO(burdon): Extend to support locking for web and NodeJS (use npm lockfile). Use to lock agents.\nexport class Lock implements ResourceLock {\n private readonly _broadcastChannel = new BroadcastChannel('vault-resource-lock');\n private readonly _lockKey: string;\n private readonly _onAcquire: ResourceLockOptions['onAcquire'];\n private readonly _onRelease: ResourceLockOptions['onRelease'];\n private _releaseTrigger = new Trigger();\n\n constructor({ lockKey, onAcquire, onRelease }: ResourceLockOptions) {\n this._lockKey = lockKey;\n this._onAcquire = onAcquire;\n this._onRelease = onRelease;\n this._broadcastChannel.onmessage = this._onMessage.bind(this);\n }\n\n @logInfo\n get lockKey() {\n return this._lockKey;\n }\n\n async acquire(): Promise<void> {\n this._broadcastChannel.postMessage({\n message: Message.ACQUIRING,\n });\n\n try {\n log('aquiring lock...');\n await asyncTimeout(this._requestLock(), RESOURCE_LOCK_TIMEOUT);\n log('acquired lock');\n } catch {\n log('stealing lock...');\n await this._requestLock(true);\n log('stolen lock');\n }\n }\n\n async release(): Promise<void> {\n this._releaseTrigger.wake();\n }\n\n private _onMessage(event: MessageEvent<any>): void {\n if (event.data.message === Message.ACQUIRING) {\n this._releaseTrigger.wake();\n }\n }\n\n private async _requestLock(steal = false): Promise<void> {\n log('requesting lock...', { steal });\n const acquired = new Trigger();\n\n void navigator.locks\n .request(this._lockKey, { steal }, async () => {\n await this._onAcquire?.();\n acquired.wake();\n this._releaseTrigger = new Trigger();\n await this._releaseTrigger.wait();\n log('releasing lock...');\n await this._onRelease?.();\n log('released lock');\n })\n .catch(async () => {\n await this._onRelease?.();\n });\n\n await acquired.wait();\n log('recieved lock', { steal });\n }\n}\n\n// TODO(mykola): Implement.\nexport const isLocked = (lockPath: string) => {\n throw new Error('Not implemented');\n};\n"],
5
+ "mappings": ";;;;AAIA,SAASA,SAASC,oBAAoB;AACtC,SAASC,6BAA6B;AACtC,SAASC,KAAKC,eAAe;;;;;;;;AAUtB,IAAMC,OAAN,MAAMA;EACMC,oBAAoB,IAAIC,iBAAiB,qBAAA;EACzCC;EACAC;EACAC;EACTC,kBAAkB,IAAIC,QAAAA;EAE9B,YAAY,EAAEC,SAASC,WAAWC,UAAS,GAAyB;AAClE,SAAKP,WAAWK;AAChB,SAAKJ,aAAaK;AAClB,SAAKJ,aAAaK;AAClB,SAAKT,kBAAkBU,YAAY,KAAKC,WAAWC,KAAK,IAAI;EAC9D;EAEA,IACIL,UAAU;AACZ,WAAO,KAAKL;EACd;EAEA,MAAMW,UAAyB;AAC7B,SAAKb,kBAAkBc,YAAY;MACjCC,SAAO;IACT,CAAA;AAEA,QAAI;AACFC,UAAI,oBAAA,QAAA;;;;;;AACJ,YAAMC,aAAa,KAAKC,aAAY,GAAIC,qBAAAA;AACxCH,UAAI,iBAAA,QAAA;;;;;;IACN,QAAQ;AACNA,UAAI,oBAAA,QAAA;;;;;;AACJ,YAAM,KAAKE,aAAa,IAAA;AACxBF,UAAI,eAAA,QAAA;;;;;;IACN;EACF;EAEA,MAAMI,UAAyB;AAC7B,SAAKf,gBAAgBgB,KAAI;EAC3B;EAEQV,WAAWW,OAAgC;AACjD,QAAIA,MAAMC,KAAKR,YAAO,aAAwB;AAC5C,WAAKV,gBAAgBgB,KAAI;IAC3B;EACF;EAEA,MAAcH,aAAaM,QAAQ,OAAsB;AACvDR,QAAI,sBAAsB;MAAEQ;IAAM,GAAA;;;;;;AAClC,UAAMC,WAAW,IAAInB,QAAAA;AAErB,SAAKoB,UAAUC,MACZC,QAAQ,KAAK1B,UAAU;MAAEsB;IAAM,GAAG,YAAA;AACjC,YAAM,KAAKrB,aAAU;AACrBsB,eAASJ,KAAI;AACb,WAAKhB,kBAAkB,IAAIC,QAAAA;AAC3B,YAAM,KAAKD,gBAAgBwB,KAAI;AAC/Bb,UAAI,qBAAA,QAAA;;;;;;AACJ,YAAM,KAAKZ,aAAU;AACrBY,UAAI,iBAAA,QAAA;;;;;;IACN,CAAA,EACCc,MAAM,YAAA;AACL,YAAM,KAAK1B,aAAU;IACvB,CAAA;AAEF,UAAMqB,SAASI,KAAI;AACnBb,QAAI,iBAAiB;MAAEQ;IAAM,GAAA;;;;;;EAC/B;AACF;;;;AAGO,IAAMO,WAAW,CAACC,aAAAA;AACvB,QAAM,IAAIC,MAAM,iBAAA;AAClB;",
6
+ "names": ["Trigger", "asyncTimeout", "RESOURCE_LOCK_TIMEOUT", "log", "logInfo", "Lock", "_broadcastChannel", "BroadcastChannel", "_lockKey", "_onAcquire", "_onRelease", "_releaseTrigger", "Trigger", "lockKey", "onAcquire", "onRelease", "onmessage", "_onMessage", "bind", "acquire", "postMessage", "message", "log", "asyncTimeout", "_requestLock", "RESOURCE_LOCK_TIMEOUT", "release", "wake", "event", "data", "steal", "acquired", "navigator", "locks", "request", "wait", "catch", "isLocked", "lockPath", "Error"]
7
+ }
@@ -0,0 +1,66 @@
1
+ import "@dxos/node-std/globals";
2
+ import "../../chunk-QCWEHHJW.mjs";
3
+
4
+ // src/packlets/locks/node.ts
5
+ import { invariant } from "@dxos/invariant";
6
+ import { LockFile } from "@dxos/lock-file";
7
+ import { log, logInfo } from "@dxos/log";
8
+ function _ts_decorate(decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ }
14
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/locks/node.ts";
15
+ var Lock = class {
16
+ _lockPath;
17
+ _onAcquire;
18
+ _onRelease;
19
+ _fileHandle;
20
+ constructor({ lockKey: lockPath, onAcquire, onRelease }) {
21
+ this._lockPath = lockPath;
22
+ this._onAcquire = onAcquire;
23
+ this._onRelease = onRelease;
24
+ }
25
+ get lockKey() {
26
+ return this._lockPath;
27
+ }
28
+ async acquire() {
29
+ log("acquiring lock...", void 0, {
30
+ F: __dxlog_file,
31
+ L: 32,
32
+ S: this,
33
+ C: (f, a) => f(...a)
34
+ });
35
+ this._fileHandle = await LockFile.acquire(this._lockPath);
36
+ await this._onAcquire?.();
37
+ log("acquired lock", void 0, {
38
+ F: __dxlog_file,
39
+ L: 37,
40
+ S: this,
41
+ C: (f, a) => f(...a)
42
+ });
43
+ }
44
+ async release() {
45
+ await this._onRelease?.();
46
+ invariant(this._fileHandle, "Lock is not acquired", {
47
+ F: __dxlog_file,
48
+ L: 42,
49
+ S: this,
50
+ A: [
51
+ "this._fileHandle",
52
+ "'Lock is not acquired'"
53
+ ]
54
+ });
55
+ await LockFile.release(this._fileHandle);
56
+ }
57
+ };
58
+ _ts_decorate([
59
+ logInfo
60
+ ], Lock.prototype, "lockKey", null);
61
+ var isLocked = (lockPath) => LockFile.isLocked(lockPath);
62
+ export {
63
+ Lock,
64
+ isLocked
65
+ };
66
+ //# sourceMappingURL=node.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/packlets/locks/node.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type FileHandle } from 'node:fs/promises';\n\nimport { invariant } from '@dxos/invariant';\nimport { LockFile } from '@dxos/lock-file';\nimport { log, logInfo } from '@dxos/log';\n\nimport { type ResourceLock, type ResourceLockOptions } from './resource-lock';\n\n// TODO(mykola): Factor out.\nexport class Lock implements ResourceLock {\n private readonly _lockPath: string;\n private readonly _onAcquire: ResourceLockOptions['onAcquire'];\n private readonly _onRelease: ResourceLockOptions['onRelease'];\n private _fileHandle?: FileHandle;\n\n constructor({ lockKey: lockPath, onAcquire, onRelease }: ResourceLockOptions) {\n this._lockPath = lockPath;\n this._onAcquire = onAcquire;\n this._onRelease = onRelease;\n }\n\n @logInfo\n get lockKey() {\n return this._lockPath;\n }\n\n async acquire(): Promise<void> {\n log('acquiring lock...');\n this._fileHandle = await LockFile.acquire(this._lockPath);\n\n await this._onAcquire?.();\n\n log('acquired lock');\n }\n\n async release(): Promise<void> {\n await this._onRelease?.();\n invariant(this._fileHandle, 'Lock is not acquired');\n await LockFile.release(this._fileHandle);\n }\n}\n\nexport const isLocked = (lockPath: string) => LockFile.isLocked(lockPath);\n"],
5
+ "mappings": ";;;;AAMA,SAASA,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,KAAKC,eAAe;;;;;;;;AAKtB,IAAMC,OAAN,MAAMA;EACMC;EACAC;EACAC;EACTC;EAER,YAAY,EAAEC,SAASC,UAAUC,WAAWC,UAAS,GAAyB;AAC5E,SAAKP,YAAYK;AACjB,SAAKJ,aAAaK;AAClB,SAAKJ,aAAaK;EACpB;EAEA,IACIH,UAAU;AACZ,WAAO,KAAKJ;EACd;EAEA,MAAMQ,UAAyB;AAC7BX,QAAI,qBAAA,QAAA;;;;;;AACJ,SAAKM,cAAc,MAAMP,SAASY,QAAQ,KAAKR,SAAS;AAExD,UAAM,KAAKC,aAAU;AAErBJ,QAAI,iBAAA,QAAA;;;;;;EACN;EAEA,MAAMY,UAAyB;AAC7B,UAAM,KAAKP,aAAU;AACrBP,cAAU,KAAKQ,aAAa,wBAAA;;;;;;;;;AAC5B,UAAMP,SAASa,QAAQ,KAAKN,WAAW;EACzC;AACF;;;;AAEO,IAAMO,WAAW,CAACL,aAAqBT,SAASc,SAASL,QAAAA;",
6
+ "names": ["invariant", "LockFile", "log", "logInfo", "Lock", "_lockPath", "_onAcquire", "_onRelease", "_fileHandle", "lockKey", "lockPath", "onAcquire", "onRelease", "acquire", "release", "isLocked"]
7
+ }
@@ -6,7 +6,9 @@ import {
6
6
  InvitationsManager,
7
7
  ServiceContext,
8
8
  SpaceInvitationProtocol
9
- } from "../chunk-HWGM5TYF.mjs";
9
+ } from "../chunk-MQ6PWJ76.mjs";
10
+ import "../chunk-NQSC7HOE.mjs";
11
+ import "../chunk-QCWEHHJW.mjs";
10
12
 
11
13
  // src/packlets/testing/credential-utils.ts
12
14
  import { createCredential } from "@dxos/credentials";
@@ -33,7 +35,7 @@ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/tes
33
35
  var sanitizeInvitation = (invitation) => {
34
36
  return InvitationEncoder.decode(InvitationEncoder.encode(invitation));
35
37
  };
36
- var performInvitation = ({ host, guest, options, hooks, guestDeviceProfile, codeInputDelay }) => {
38
+ var performInvitation = ({ host, guest, guestDeviceProfile, options, hooks, codeInputDelay }) => {
37
39
  let guestError = false;
38
40
  let guestConnected = false;
39
41
  let wereConnected = false;
@@ -65,7 +67,7 @@ var performInvitation = ({ host, guest, options, hooks, guestDeviceProfile, code
65
67
  }
66
68
  invariant(hostInvitation.swarmKey.equals(guestInvitation.swarmKey), void 0, {
67
69
  F: __dxlog_file,
68
- L: 95,
70
+ L: 98,
69
71
  S: void 0,
70
72
  A: [
71
73
  "hostInvitation.swarmKey!.equals(guestInvitation.swarmKey!)",
@@ -197,10 +199,10 @@ var performInvitation = ({ host, guest, options, hooks, guestDeviceProfile, code
197
199
  ];
198
200
  };
199
201
  var createInvitation = async (host, options) => {
200
- options ?? (options = {
202
+ options ??= {
201
203
  authMethod: Invitation.AuthMethod.NONE,
202
204
  ...options ?? {}
203
- });
205
+ };
204
206
  if (host instanceof ServiceContext) {
205
207
  return host.invitationsManager.createInvitation({
206
208
  kind: Invitation.Kind.SPACE,
@@ -221,6 +223,9 @@ var acceptInvitation = (guest, invitation, guestDeviceProfile) => {
221
223
  };
222
224
 
223
225
  // src/packlets/testing/test-builder.ts
226
+ import * as Reactivity from "@effect/experimental/Reactivity";
227
+ import * as Layer from "effect/Layer";
228
+ import * as ManagedRuntime from "effect/ManagedRuntime";
224
229
  import { Context } from "@dxos/context";
225
230
  import { CredentialGenerator, createCredentialSignerWithChain } from "@dxos/credentials";
226
231
  import { failUndefined } from "@dxos/debug";
@@ -232,26 +237,16 @@ import { MemorySignalManager, MemorySignalManagerContext } from "@dxos/messaging
232
237
  import { MemoryTransportFactory, SwarmNetworkManager } from "@dxos/network-manager";
233
238
  import { Invitation as Invitation2 } from "@dxos/protocols/proto/dxos/client/services";
234
239
  import { StorageType, createStorage } from "@dxos/random-access-storage";
240
+ import { layerMemory as sqliteLayerMemory } from "@dxos/sql-sqlite/platform";
241
+ import * as SqlTransaction from "@dxos/sql-sqlite/SqlTransaction";
235
242
  import { BlobStore } from "@dxos/teleport-extension-object-sync";
236
- function _define_property(obj, key, value) {
237
- if (key in obj) {
238
- Object.defineProperty(obj, key, {
239
- value,
240
- enumerable: true,
241
- configurable: true,
242
- writable: true
243
- });
244
- } else {
245
- obj[key] = value;
246
- }
247
- return obj;
248
- }
249
243
  var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/testing/test-builder.ts";
250
244
  var createServiceHost = (config, signalManagerContext) => {
251
245
  return new ClientServicesHost({
252
246
  config,
253
247
  signalManager: new MemorySignalManager(signalManagerContext),
254
- transportFactory: MemoryTransportFactory
248
+ transportFactory: MemoryTransportFactory,
249
+ runtime: ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie)).runtimeEffect
255
250
  });
256
251
  };
257
252
  var createServiceContext = async ({ signalManagerFactory = async () => {
@@ -259,7 +254,7 @@ var createServiceContext = async ({ signalManagerFactory = async () => {
259
254
  return new MemorySignalManager(signalContext);
260
255
  }, storage = createStorage({
261
256
  type: StorageType.RAM
262
- }), runtimeParams } = {}) => {
257
+ }), runtimeProps } = {}) => {
263
258
  const signalManager = await signalManagerFactory();
264
259
  const networkManager = new SwarmNetworkManager({
265
260
  signalManager,
@@ -267,13 +262,14 @@ var createServiceContext = async ({ signalManagerFactory = async () => {
267
262
  });
268
263
  const level = createTestLevel();
269
264
  await level.open();
270
- return new ServiceContext(storage, level, networkManager, signalManager, void 0, void 0, {
271
- invitationConnectionDefaultParams: {
265
+ const runtime = ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie)).runtimeEffect;
266
+ return new ServiceContext(storage, level, networkManager, signalManager, void 0, void 0, runtime, {
267
+ invitationConnectionDefaultProps: {
272
268
  teleport: {
273
269
  controlHeartbeatInterval: 200
274
270
  }
275
271
  },
276
- ...runtimeParams
272
+ ...runtimeProps
277
273
  });
278
274
  };
279
275
  var createPeers = async (numPeers, signalManagerFactory) => {
@@ -287,7 +283,7 @@ var createPeers = async (numPeers, signalManagerFactory) => {
287
283
  });
288
284
  await peer.open(new Context(void 0, {
289
285
  F: __dxlog_file2,
290
- L: 70
286
+ L: 87
291
287
  }));
292
288
  return peer;
293
289
  }));
@@ -297,6 +293,11 @@ var createIdentity = async (peer) => {
297
293
  return peer;
298
294
  };
299
295
  var TestBuilder = class {
296
+ signalContext = new MemorySignalManagerContext();
297
+ _ctx = new Context(void 0, {
298
+ F: __dxlog_file2,
299
+ L: 100
300
+ });
300
301
  createPeer(peerOptions) {
301
302
  const peer = new TestPeer(this.signalContext, peerOptions);
302
303
  this._ctx.onDispose(async () => peer.destroy());
@@ -305,35 +306,34 @@ var TestBuilder = class {
305
306
  async destroy() {
306
307
  await this._ctx.dispose();
307
308
  }
308
- constructor() {
309
- _define_property(this, "signalContext", new MemorySignalManagerContext());
310
- _define_property(this, "_ctx", new Context(void 0, {
311
- F: __dxlog_file2,
312
- L: 83
313
- }));
314
- }
315
309
  };
316
310
  var TestPeer = class {
311
+ _signalContext;
312
+ _opts;
313
+ _props = {};
314
+ _runtime = ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie));
315
+ constructor(_signalContext, _opts = {
316
+ dataStore: StorageType.RAM
317
+ }) {
318
+ this._signalContext = _signalContext;
319
+ this._opts = _opts;
320
+ }
317
321
  get props() {
318
322
  return this._props;
319
323
  }
320
324
  get storage() {
321
- var _this__props;
322
- return (_this__props = this._props).storage ?? (_this__props.storage = createStorage({
325
+ return this._props.storage ??= createStorage({
323
326
  type: this._opts.dataStore
324
- }));
327
+ });
325
328
  }
326
329
  get keyring() {
327
- var _this__props;
328
- return (_this__props = this._props).keyring ?? (_this__props.keyring = new Keyring(this.storage.createDirectory("keyring")));
330
+ return this._props.keyring ??= new Keyring(this.storage.createDirectory("keyring"));
329
331
  }
330
332
  get level() {
331
- var _this__props;
332
- return (_this__props = this._props).level ?? (_this__props.level = createTestLevel());
333
+ return this._props.level ??= createTestLevel();
333
334
  }
334
335
  get feedStore() {
335
- var _this__props;
336
- return (_this__props = this._props).feedStore ?? (_this__props.feedStore = new FeedStore({
336
+ return this._props.feedStore ??= new FeedStore({
337
337
  factory: new FeedFactory({
338
338
  root: this.storage.createDirectory("feeds"),
339
339
  signer: this.keyring,
@@ -341,48 +341,42 @@ var TestPeer = class {
341
341
  valueEncoding
342
342
  }
343
343
  })
344
- }));
344
+ });
345
345
  }
346
346
  get metadataStore() {
347
- var _this__props;
348
- return (_this__props = this._props).metadataStore ?? (_this__props.metadataStore = new MetadataStore(this.storage.createDirectory("metadata")));
347
+ return this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory("metadata"));
349
348
  }
350
349
  get blobStore() {
351
- var _this__props;
352
- return (_this__props = this._props).blobStore ?? (_this__props.blobStore = new BlobStore(this.storage.createDirectory("blobs")));
350
+ return this._props.blobStore ??= new BlobStore(this.storage.createDirectory("blobs"));
353
351
  }
354
352
  get networkManager() {
355
- var _this__props;
356
- return (_this__props = this._props).networkManager ?? (_this__props.networkManager = new SwarmNetworkManager({
353
+ return this._props.networkManager ??= new SwarmNetworkManager({
357
354
  signalManager: new MemorySignalManager(this._signalContext),
358
355
  transportFactory: MemoryTransportFactory
359
- }));
356
+ });
360
357
  }
361
358
  get spaceManager() {
362
- var _this__props;
363
- return (_this__props = this._props).spaceManager ?? (_this__props.spaceManager = new SpaceManager({
359
+ return this._props.spaceManager ??= new SpaceManager({
364
360
  feedStore: this.feedStore,
365
361
  networkManager: this.networkManager,
366
362
  metadataStore: this.metadataStore,
367
363
  blobStore: this.blobStore
368
- }));
364
+ });
369
365
  }
370
366
  get identity() {
371
367
  return this._props.signingContext ?? failUndefined();
372
368
  }
373
369
  get echoHost() {
374
- var _this__props;
375
- return (_this__props = this._props).echoHost ?? (_this__props.echoHost = new EchoHost({
376
- kv: this.level
377
- }));
370
+ return this._props.echoHost ??= new EchoHost({
371
+ kv: this.level,
372
+ runtime: this._runtime.runtimeEffect
373
+ });
378
374
  }
379
375
  get meshEchoReplicator() {
380
- var _this__props;
381
- return (_this__props = this._props).meshEchoReplicator ?? (_this__props.meshEchoReplicator = new MeshEchoReplicator());
376
+ return this._props.meshEchoReplicator ??= new MeshEchoReplicator();
382
377
  }
383
378
  get dataSpaceManager() {
384
- var _this__props;
385
- return (_this__props = this._props).dataSpaceManager ?? (_this__props.dataSpaceManager = new DataSpaceManager({
379
+ return this._props.dataSpaceManager ??= new DataSpaceManager({
386
380
  spaceManager: this.spaceManager,
387
381
  metadataStore: this.metadataStore,
388
382
  keyring: this.keyring,
@@ -393,22 +387,20 @@ var TestPeer = class {
393
387
  edgeConnection: void 0,
394
388
  meshReplicator: this.meshEchoReplicator,
395
389
  echoEdgeReplicator: void 0,
396
- runtimeParams: this._opts.dataSpaceParams
397
- }));
390
+ runtimeProps: this._opts.dataSpaceProps
391
+ });
398
392
  }
399
393
  get invitationsManager() {
400
- var _this__props;
401
- return (_this__props = this._props).invitationsManager ?? (_this__props.invitationsManager = new InvitationsManager(new InvitationsHandler(this.networkManager), (invitation) => {
394
+ return this._props.invitationsManager ??= new InvitationsManager(new InvitationsHandler(this.networkManager), (invitation) => {
402
395
  if (invitation.kind === Invitation2.Kind.SPACE) {
403
396
  return new SpaceInvitationProtocol(this.dataSpaceManager, this.identity, this.keyring, invitation.spaceKey);
404
397
  } else {
405
398
  throw new Error("not implemented");
406
399
  }
407
- }, this.metadataStore));
400
+ }, this.metadataStore);
408
401
  }
409
402
  async createIdentity() {
410
- var _this__props;
411
- (_this__props = this._props).signingContext ?? (_this__props.signingContext = await createSigningContext(this.keyring));
403
+ this._props.signingContext ??= await createSigningContext(this.keyring);
412
404
  this.networkManager.setPeerInfo({
413
405
  identityKey: this._props.signingContext.identityKey.toHex(),
414
406
  peerKey: this._props.signingContext.deviceKey.toHex()
@@ -417,16 +409,7 @@ var TestPeer = class {
417
409
  async destroy() {
418
410
  await this.level.close();
419
411
  await this.storage.reset();
420
- }
421
- constructor(_signalContext, _opts = {
422
- dataStore: StorageType.RAM
423
- }) {
424
- _define_property(this, "_signalContext", void 0);
425
- _define_property(this, "_opts", void 0);
426
- _define_property(this, "_props", void 0);
427
- this._signalContext = _signalContext;
428
- this._opts = _opts;
429
- this._props = {};
412
+ await this._runtime.dispose();
430
413
  }
431
414
  };
432
415
  var createSigningContext = async (keyring) => {