@dxos/client-services 0.6.13 → 0.6.14-main.2b6a0f3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-CRXXOI45.mjs → chunk-BBLK6AUB.mjs} +6301 -5383
- package/dist/lib/browser/chunk-BBLK6AUB.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +320 -45
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +12 -7
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-PZ3JJJ3K.cjs → chunk-SJEDBF7U.cjs} +6286 -5378
- package/dist/lib/node/chunk-SJEDBF7U.cjs.map +7 -0
- package/dist/lib/node/index.cjs +369 -94
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +18 -13
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/lib/node-esm/chunk-A6GS6OOD.mjs +8634 -0
- package/dist/lib/node-esm/chunk-A6GS6OOD.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +691 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/testing/index.mjs +424 -0
- package/dist/lib/node-esm/testing/index.mjs.map +7 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +35 -0
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +1 -0
- package/dist/types/src/packlets/agents/edge-agent-service.d.ts +10 -0
- package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -0
- package/dist/types/src/packlets/agents/index.d.ts +3 -0
- package/dist/types/src/packlets/agents/index.d.ts.map +1 -0
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/authenticator.node.test.d.ts +2 -0
- package/dist/types/src/packlets/identity/authenticator.node.test.d.ts.map +1 -0
- package/dist/types/src/packlets/identity/contacts-service.d.ts +1 -1
- package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-manager.d.ts +28 -9
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +18 -0
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -0
- package/dist/types/src/packlets/identity/identity-service.d.ts +7 -2
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts +12 -3
- package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts +30 -0
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts +2 -1
- package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts +2 -1
- package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-state.d.ts +19 -0
- package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +8 -8
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +14 -9
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +2 -0
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +7 -3
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts +5 -3
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts +3 -0
- package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/edge-feed-replicator.test.d.ts +2 -0
- package/dist/types/src/packlets/spaces/edge-feed-replicator.test.d.ts.map +1 -0
- package/dist/types/src/packlets/spaces/epoch-migrations.d.ts +1 -1
- package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +35 -6
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts +1 -2
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/testing/setup.d.ts +3 -0
- package/dist/types/src/testing/setup.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/package.json +44 -39
- package/src/index.ts +1 -0
- package/src/packlets/agents/edge-agent-manager.ts +163 -0
- package/src/packlets/agents/edge-agent-service.ts +42 -0
- package/src/packlets/agents/index.ts +6 -0
- package/src/packlets/devices/devices-service.test.ts +4 -5
- package/src/packlets/diagnostics/diagnostics-broadcast.ts +1 -0
- package/src/packlets/identity/{authenticator.test.ts → authenticator.node.test.ts} +2 -3
- package/src/packlets/identity/authenticator.ts +5 -2
- package/src/packlets/identity/contacts-service.ts +1 -1
- package/src/packlets/identity/identity-manager.test.ts +31 -16
- package/src/packlets/identity/identity-manager.ts +76 -32
- package/src/packlets/identity/identity-recovery-manager.ts +95 -0
- package/src/packlets/identity/identity-service.test.ts +5 -8
- package/src/packlets/identity/identity-service.ts +11 -5
- package/src/packlets/identity/identity.test.ts +130 -239
- package/src/packlets/identity/identity.ts +60 -17
- package/src/packlets/invitations/device-invitation-protocol.test.ts +7 -4
- package/src/packlets/invitations/device-invitation-protocol.ts +5 -1
- package/src/packlets/invitations/edge-invitation-handler.ts +185 -0
- package/src/packlets/invitations/invitation-guest-extenstion.ts +8 -4
- package/src/packlets/invitations/invitation-host-extension.ts +8 -7
- package/src/packlets/invitations/invitation-state.ts +111 -0
- package/src/packlets/invitations/invitations-handler.test.ts +16 -9
- package/src/packlets/invitations/invitations-handler.ts +23 -93
- package/src/packlets/invitations/space-invitation-protocol.test.ts +4 -3
- package/src/packlets/invitations/space-invitation-protocol.ts +4 -0
- package/src/packlets/logging/logging.test.ts +1 -2
- package/src/packlets/network/network-service.test.ts +2 -3
- package/src/packlets/services/service-context.test.ts +3 -1
- package/src/packlets/services/service-context.ts +113 -35
- package/src/packlets/services/service-host.test.ts +8 -12
- package/src/packlets/services/service-host.ts +25 -7
- package/src/packlets/services/service-registry.test.ts +1 -2
- package/src/packlets/spaces/data-space-manager.test.ts +2 -2
- package/src/packlets/spaces/data-space-manager.ts +44 -7
- package/src/packlets/spaces/data-space.ts +37 -6
- package/src/packlets/spaces/edge-feed-replicator.test.ts +252 -0
- package/src/packlets/spaces/edge-feed-replicator.ts +80 -22
- package/src/packlets/spaces/epoch-migrations.ts +2 -2
- package/src/packlets/spaces/notarization-plugin.test.ts +10 -7
- package/src/packlets/spaces/notarization-plugin.ts +196 -29
- package/src/packlets/spaces/spaces-service.test.ts +5 -9
- package/src/packlets/spaces/spaces-service.ts +6 -1
- package/src/packlets/storage/storage.ts +0 -1
- package/src/packlets/system/system-service.test.ts +1 -2
- package/src/packlets/testing/test-builder.ts +7 -4
- package/src/packlets/worker/worker-runtime.ts +2 -2
- package/src/testing/setup.ts +11 -0
- package/src/version.ts +1 -5
- package/dist/lib/browser/chunk-CRXXOI45.mjs.map +0 -7
- package/dist/lib/node/chunk-PZ3JJJ3K.cjs.map +0 -7
- package/dist/types/src/packlets/identity/authenticator.test.d.ts +0 -2
- package/dist/types/src/packlets/identity/authenticator.test.d.ts.map +0 -1
- package/dist/types/src/packlets/services/automerge-host.test.d.ts +0 -2
- package/dist/types/src/packlets/services/automerge-host.test.d.ts.map +0 -1
- package/src/packlets/services/automerge-host.test.ts +0 -60
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "@dxos/node-std/globals";
|
|
2
2
|
import {
|
|
3
|
-
ClientRpcServer,
|
|
4
3
|
ClientServicesHost,
|
|
5
4
|
DataSpace,
|
|
6
5
|
DataSpaceManager,
|
|
7
6
|
DeviceInvitationProtocol,
|
|
8
7
|
DevtoolsHostEvents,
|
|
9
8
|
DevtoolsServiceImpl,
|
|
10
|
-
|
|
9
|
+
EdgeAgentManager,
|
|
10
|
+
EdgeAgentServiceImpl,
|
|
11
11
|
EdgeFeedReplicator,
|
|
12
12
|
Identity,
|
|
13
13
|
IdentityManager,
|
|
@@ -28,11 +28,7 @@ import {
|
|
|
28
28
|
createDiagnostics,
|
|
29
29
|
createLevel,
|
|
30
30
|
createStorageObjects,
|
|
31
|
-
decodeProfileArchive,
|
|
32
|
-
encodeProfileArchive,
|
|
33
|
-
exportProfileData,
|
|
34
31
|
getNetworkPeers,
|
|
35
|
-
importProfileData,
|
|
36
32
|
isLocked,
|
|
37
33
|
subscribeToFeedBlocks,
|
|
38
34
|
subscribeToFeeds,
|
|
@@ -41,37 +37,314 @@ import {
|
|
|
41
37
|
subscribeToSignal,
|
|
42
38
|
subscribeToSpaces,
|
|
43
39
|
subscribeToSwarmInfo
|
|
44
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-BBLK6AUB.mjs";
|
|
41
|
+
|
|
42
|
+
// packages/sdk/client-services/src/packlets/diagnostics/diagnostics-collector.ts
|
|
43
|
+
import { ClientServicesProviderResource } from "@dxos/client-protocol";
|
|
44
|
+
import { ConfigResource } from "@dxos/config";
|
|
45
|
+
import { GetDiagnosticsRequest } from "@dxos/protocols/proto/dxos/client/services";
|
|
46
|
+
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
47
|
+
import { jsonKeyReplacer, nonNullable } from "@dxos/util";
|
|
48
|
+
var GET_DIAGNOSTICS_RPC_TIMEOUT = 1e4;
|
|
49
|
+
var DiagnosticsCollector = class {
|
|
50
|
+
static {
|
|
51
|
+
this.broadcastSender = createCollectDiagnosticsBroadcastSender();
|
|
52
|
+
}
|
|
53
|
+
static async collect(config = findConfigs(), services = findSystemServiceProvider(), options = {}) {
|
|
54
|
+
const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics({
|
|
55
|
+
keys: options.humanize ? GetDiagnosticsRequest.KEY_OPTION.HUMANIZE : options.truncate ? GetDiagnosticsRequest.KEY_OPTION.TRUNCATE : void 0
|
|
56
|
+
}, {
|
|
57
|
+
timeout: GET_DIAGNOSTICS_RPC_TIMEOUT
|
|
58
|
+
});
|
|
59
|
+
const clientDiagnostics = {
|
|
60
|
+
config,
|
|
61
|
+
trace: TRACE_PROCESSOR.getDiagnostics()
|
|
62
|
+
};
|
|
63
|
+
const diagnostics = serviceDiagnostics != null ? {
|
|
64
|
+
client: clientDiagnostics,
|
|
65
|
+
services: serviceDiagnostics
|
|
66
|
+
} : {
|
|
67
|
+
client: clientDiagnostics,
|
|
68
|
+
broadcast: await this.broadcastSender.broadcastDiagnosticsRequest()
|
|
69
|
+
};
|
|
70
|
+
return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
var findSystemServiceProvider = () => {
|
|
74
|
+
const serviceProviders = TRACE_PROCESSOR.findResourcesByAnnotation(ClientServicesProviderResource);
|
|
75
|
+
const providerResource = serviceProviders.find((r) => r.instance.deref()?.services?.SystemService != null);
|
|
76
|
+
return providerResource?.instance?.deref() ?? null;
|
|
77
|
+
};
|
|
78
|
+
var findConfigs = () => {
|
|
79
|
+
const configs = TRACE_PROCESSOR.findResourcesByAnnotation(ConfigResource);
|
|
80
|
+
return configs.map((r) => r.instance.deref()).filter(nonNullable);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// packages/sdk/client-services/src/packlets/services/client-rpc-server.ts
|
|
84
|
+
import { Stream } from "@dxos/codec-protobuf";
|
|
85
|
+
import { raise } from "@dxos/debug";
|
|
86
|
+
import { parseMethodName, RpcPeer } from "@dxos/rpc";
|
|
87
|
+
import { MapCounter, trace } from "@dxos/tracing";
|
|
88
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
89
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
90
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
91
|
+
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;
|
|
92
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
93
|
+
}
|
|
94
|
+
var ClientRpcServer = class {
|
|
95
|
+
constructor(params) {
|
|
96
|
+
this._handlerCache = /* @__PURE__ */ new Map();
|
|
97
|
+
this._callMetrics = new MapCounter();
|
|
98
|
+
const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;
|
|
99
|
+
this._handleCall = handleCall;
|
|
100
|
+
this._handleStream = handleStream;
|
|
101
|
+
this._serviceRegistry = serviceRegistry;
|
|
102
|
+
this._rpcPeer = new RpcPeer({
|
|
103
|
+
...rpcOptions,
|
|
104
|
+
callHandler: (method, params2) => {
|
|
105
|
+
const [serviceName, methodName] = parseMethodName(method);
|
|
106
|
+
const handler = (method2, params3) => this._getServiceHandler(serviceName).call(method2, params3);
|
|
107
|
+
this._callMetrics.inc(`${serviceName}.${methodName} request`);
|
|
108
|
+
if (this._handleCall) {
|
|
109
|
+
return this._handleCall(methodName, params2, handler);
|
|
110
|
+
} else {
|
|
111
|
+
return handler(methodName, params2);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
streamHandler: (method, params2) => {
|
|
115
|
+
const [serviceName, methodName] = parseMethodName(method);
|
|
116
|
+
const handler = (method2, params3) => this._getServiceHandler(serviceName).callStream(method2, params3);
|
|
117
|
+
this._callMetrics.inc(`${serviceName}.${methodName} request stream`);
|
|
118
|
+
if (this._handleStream) {
|
|
119
|
+
return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params2, handler)), (data) => {
|
|
120
|
+
this._callMetrics.inc(`${serviceName}.${methodName} response stream`);
|
|
121
|
+
return data;
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
return handler(methodName, params2);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
get _services() {
|
|
130
|
+
return Object.keys(this._serviceRegistry.services);
|
|
131
|
+
}
|
|
132
|
+
async open() {
|
|
133
|
+
await this._rpcPeer.open();
|
|
134
|
+
}
|
|
135
|
+
async close() {
|
|
136
|
+
await this._rpcPeer.close();
|
|
137
|
+
}
|
|
138
|
+
_getServiceHandler(serviceName) {
|
|
139
|
+
if (!this._handlerCache.has(serviceName)) {
|
|
140
|
+
const [key, descriptor] = Object.entries(this._serviceRegistry.descriptors).find(([key2, descriptor2]) => descriptor2.name === serviceName) ?? raise(new Error(`Service not available: ${serviceName}`));
|
|
141
|
+
const service = this._serviceRegistry.services[key];
|
|
142
|
+
if (!service) {
|
|
143
|
+
throw new Error(`Service not available: ${serviceName}`);
|
|
144
|
+
}
|
|
145
|
+
this._handlerCache.set(serviceName, descriptor.createServer(service));
|
|
146
|
+
}
|
|
147
|
+
return this._handlerCache.get(serviceName);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
_ts_decorate([
|
|
151
|
+
trace.metricsCounter()
|
|
152
|
+
], ClientRpcServer.prototype, "_callMetrics", void 0);
|
|
153
|
+
_ts_decorate([
|
|
154
|
+
trace.info()
|
|
155
|
+
], ClientRpcServer.prototype, "_services", null);
|
|
156
|
+
ClientRpcServer = _ts_decorate([
|
|
157
|
+
trace.resource()
|
|
158
|
+
], ClientRpcServer);
|
|
159
|
+
|
|
160
|
+
// packages/sdk/client-services/src/packlets/storage/profile-archive.ts
|
|
161
|
+
import { cbor } from "@dxos/automerge/automerge-repo";
|
|
162
|
+
import { invariant } from "@dxos/invariant";
|
|
163
|
+
import { log } from "@dxos/log";
|
|
164
|
+
import { ProfileArchiveEntryType } from "@dxos/protocols";
|
|
165
|
+
import { arrayToBuffer } from "@dxos/util";
|
|
166
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/storage/profile-archive.ts";
|
|
167
|
+
var encodeProfileArchive = (profile) => cbor.encode(profile);
|
|
168
|
+
var decodeProfileArchive = (data) => cbor.decode(data);
|
|
169
|
+
var exportProfileData = async ({ storage, level }) => {
|
|
170
|
+
const archive = {
|
|
171
|
+
storage: [],
|
|
172
|
+
meta: {
|
|
173
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
{
|
|
177
|
+
const directory = await storage.createDirectory();
|
|
178
|
+
const files = await directory.list();
|
|
179
|
+
log.info("begin exporting files", {
|
|
180
|
+
count: files.length
|
|
181
|
+
}, {
|
|
182
|
+
F: __dxlog_file,
|
|
183
|
+
L: 30,
|
|
184
|
+
S: void 0,
|
|
185
|
+
C: (f, a) => f(...a)
|
|
186
|
+
});
|
|
187
|
+
for (const filename of files) {
|
|
188
|
+
const file = await directory.getOrCreateFile(filename);
|
|
189
|
+
const { size } = await file.stat();
|
|
190
|
+
const data = await file.read(0, size);
|
|
191
|
+
archive.storage.push({
|
|
192
|
+
type: ProfileArchiveEntryType.FILE,
|
|
193
|
+
key: filename,
|
|
194
|
+
value: data
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
log.info("done exporting files", {
|
|
198
|
+
count: files.length
|
|
199
|
+
}, {
|
|
200
|
+
F: __dxlog_file,
|
|
201
|
+
L: 41,
|
|
202
|
+
S: void 0,
|
|
203
|
+
C: (f, a) => f(...a)
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
{
|
|
207
|
+
log.info("begin exporting kv pairs", void 0, {
|
|
208
|
+
F: __dxlog_file,
|
|
209
|
+
L: 45,
|
|
210
|
+
S: void 0,
|
|
211
|
+
C: (f, a) => f(...a)
|
|
212
|
+
});
|
|
213
|
+
const iter = await level.iterator({
|
|
214
|
+
keyEncoding: "binary",
|
|
215
|
+
valueEncoding: "binary"
|
|
216
|
+
});
|
|
217
|
+
let count = 0;
|
|
218
|
+
for await (const [key, value] of iter) {
|
|
219
|
+
archive.storage.push({
|
|
220
|
+
type: ProfileArchiveEntryType.KEY_VALUE,
|
|
221
|
+
key,
|
|
222
|
+
value
|
|
223
|
+
});
|
|
224
|
+
count++;
|
|
225
|
+
}
|
|
226
|
+
log.info("done exporting kv pairs", {
|
|
227
|
+
count
|
|
228
|
+
}, {
|
|
229
|
+
F: __dxlog_file,
|
|
230
|
+
L: 56,
|
|
231
|
+
S: void 0,
|
|
232
|
+
C: (f, a) => f(...a)
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return archive;
|
|
236
|
+
};
|
|
237
|
+
var importProfileData = async ({ storage, level }, archive) => {
|
|
238
|
+
let batch = level.batch();
|
|
239
|
+
let count = 0;
|
|
240
|
+
for (const entry of archive.storage) {
|
|
241
|
+
switch (entry.type) {
|
|
242
|
+
case ProfileArchiveEntryType.FILE: {
|
|
243
|
+
const directory = await storage.createDirectory();
|
|
244
|
+
invariant(typeof entry.key === "string", "Invalid key type", {
|
|
245
|
+
F: __dxlog_file,
|
|
246
|
+
L: 79,
|
|
247
|
+
S: void 0,
|
|
248
|
+
A: [
|
|
249
|
+
"typeof entry.key === 'string'",
|
|
250
|
+
"'Invalid key type'"
|
|
251
|
+
]
|
|
252
|
+
});
|
|
253
|
+
const file = await directory.getOrCreateFile(entry.key);
|
|
254
|
+
invariant(entry.value instanceof Uint8Array, "Invalid value type", {
|
|
255
|
+
F: __dxlog_file,
|
|
256
|
+
L: 81,
|
|
257
|
+
S: void 0,
|
|
258
|
+
A: [
|
|
259
|
+
"entry.value instanceof Uint8Array",
|
|
260
|
+
"'Invalid value type'"
|
|
261
|
+
]
|
|
262
|
+
});
|
|
263
|
+
await file.write(0, arrayToBuffer(entry.value));
|
|
264
|
+
await file.close();
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
case ProfileArchiveEntryType.KEY_VALUE: {
|
|
268
|
+
invariant(entry.key instanceof Uint8Array, "Invalid key type", {
|
|
269
|
+
F: __dxlog_file,
|
|
270
|
+
L: 87,
|
|
271
|
+
S: void 0,
|
|
272
|
+
A: [
|
|
273
|
+
"entry.key instanceof Uint8Array",
|
|
274
|
+
"'Invalid key type'"
|
|
275
|
+
]
|
|
276
|
+
});
|
|
277
|
+
invariant(entry.value instanceof Uint8Array, "Invalid value type", {
|
|
278
|
+
F: __dxlog_file,
|
|
279
|
+
L: 88,
|
|
280
|
+
S: void 0,
|
|
281
|
+
A: [
|
|
282
|
+
"entry.value instanceof Uint8Array",
|
|
283
|
+
"'Invalid value type'"
|
|
284
|
+
]
|
|
285
|
+
});
|
|
286
|
+
batch.put(entry.key, entry.value, {
|
|
287
|
+
keyEncoding: "binary",
|
|
288
|
+
valueEncoding: "binary"
|
|
289
|
+
});
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
default:
|
|
293
|
+
throw new Error(`Invalid entry type: ${entry.type}`);
|
|
294
|
+
}
|
|
295
|
+
if (++count % 1e3 === 0) {
|
|
296
|
+
await batch.write();
|
|
297
|
+
batch = level.batch();
|
|
298
|
+
log.info("importing", {
|
|
299
|
+
count,
|
|
300
|
+
total: archive.storage.length,
|
|
301
|
+
progress: `${(count / archive.storage.length * 100).toFixed()}%`
|
|
302
|
+
}, {
|
|
303
|
+
F: __dxlog_file,
|
|
304
|
+
L: 101,
|
|
305
|
+
S: void 0,
|
|
306
|
+
C: (f, a) => f(...a)
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
log.info("committing changes..", void 0, {
|
|
311
|
+
F: __dxlog_file,
|
|
312
|
+
L: 109,
|
|
313
|
+
S: void 0,
|
|
314
|
+
C: (f, a) => f(...a)
|
|
315
|
+
});
|
|
316
|
+
await batch.write();
|
|
317
|
+
};
|
|
45
318
|
|
|
46
319
|
// packages/sdk/client-services/src/packlets/worker/worker-runtime.ts
|
|
47
320
|
import { Trigger as Trigger2 } from "@dxos/async";
|
|
48
321
|
import { DEFAULT_WORKER_BROADCAST_CHANNEL } from "@dxos/client-protocol";
|
|
49
322
|
import { Context } from "@dxos/context";
|
|
50
|
-
import { invariant as
|
|
51
|
-
import { log as
|
|
323
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
324
|
+
import { log as log3 } from "@dxos/log";
|
|
52
325
|
import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager, setIdentityTags } from "@dxos/messaging";
|
|
53
|
-
import {
|
|
326
|
+
import { RtcTransportProxyFactory } from "@dxos/network-manager";
|
|
54
327
|
|
|
55
328
|
// packages/sdk/client-services/src/packlets/worker/worker-session.ts
|
|
56
329
|
import { asyncTimeout, Trigger } from "@dxos/async";
|
|
57
330
|
import { iframeServiceBundle, PROXY_CONNECTION_TIMEOUT, workerServiceBundle } from "@dxos/client-protocol";
|
|
58
|
-
import { invariant } from "@dxos/invariant";
|
|
59
|
-
import { log, logInfo } from "@dxos/log";
|
|
331
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
332
|
+
import { log as log2, logInfo } from "@dxos/log";
|
|
60
333
|
import { createProtoRpcPeer } from "@dxos/rpc";
|
|
61
334
|
import { Callback } from "@dxos/util";
|
|
62
|
-
function
|
|
335
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
63
336
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
64
337
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
65
338
|
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;
|
|
66
339
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
67
340
|
}
|
|
68
|
-
var
|
|
341
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
|
|
69
342
|
var WorkerSession = class {
|
|
70
343
|
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
|
|
71
344
|
this._startTrigger = new Trigger();
|
|
72
345
|
this.onClose = new Callback();
|
|
73
|
-
|
|
74
|
-
F:
|
|
346
|
+
invariant2(serviceHost, void 0, {
|
|
347
|
+
F: __dxlog_file2,
|
|
75
348
|
L: 54,
|
|
76
349
|
S: this,
|
|
77
350
|
A: [
|
|
@@ -127,8 +400,8 @@ var WorkerSession = class {
|
|
|
127
400
|
try {
|
|
128
401
|
await this.close();
|
|
129
402
|
} catch (err) {
|
|
130
|
-
|
|
131
|
-
F:
|
|
403
|
+
log2.catch(err, void 0, {
|
|
404
|
+
F: __dxlog_file2,
|
|
132
405
|
L: 108,
|
|
133
406
|
S: this,
|
|
134
407
|
C: (f, a) => f(...a)
|
|
@@ -144,8 +417,8 @@ var WorkerSession = class {
|
|
|
144
417
|
this.bridgeService = this._iframeRpc.rpc.BridgeService;
|
|
145
418
|
}
|
|
146
419
|
async open() {
|
|
147
|
-
|
|
148
|
-
F:
|
|
420
|
+
log2.info("opening...", void 0, {
|
|
421
|
+
F: __dxlog_file2,
|
|
149
422
|
L: 122,
|
|
150
423
|
S: this,
|
|
151
424
|
C: (f, a) => f(...a)
|
|
@@ -161,16 +434,16 @@ var WorkerSession = class {
|
|
|
161
434
|
if (this.lockKey) {
|
|
162
435
|
void this._afterLockReleases(this.lockKey, () => this.close());
|
|
163
436
|
}
|
|
164
|
-
|
|
165
|
-
F:
|
|
437
|
+
log2.info("opened", void 0, {
|
|
438
|
+
F: __dxlog_file2,
|
|
166
439
|
L: 133,
|
|
167
440
|
S: this,
|
|
168
441
|
C: (f, a) => f(...a)
|
|
169
442
|
});
|
|
170
443
|
}
|
|
171
444
|
async close() {
|
|
172
|
-
|
|
173
|
-
F:
|
|
445
|
+
log2.info("closing...", void 0, {
|
|
446
|
+
F: __dxlog_file2,
|
|
174
447
|
L: 137,
|
|
175
448
|
S: this,
|
|
176
449
|
C: (f, a) => f(...a)
|
|
@@ -178,8 +451,8 @@ var WorkerSession = class {
|
|
|
178
451
|
try {
|
|
179
452
|
await this.onClose.callIfSet();
|
|
180
453
|
} catch (err) {
|
|
181
|
-
|
|
182
|
-
F:
|
|
454
|
+
log2.catch(err, void 0, {
|
|
455
|
+
F: __dxlog_file2,
|
|
183
456
|
L: 141,
|
|
184
457
|
S: this,
|
|
185
458
|
C: (f, a) => f(...a)
|
|
@@ -189,8 +462,8 @@ var WorkerSession = class {
|
|
|
189
462
|
this._clientRpc.close(),
|
|
190
463
|
this._iframeRpc.close()
|
|
191
464
|
]);
|
|
192
|
-
|
|
193
|
-
F:
|
|
465
|
+
log2.info("closed", void 0, {
|
|
466
|
+
F: __dxlog_file2,
|
|
194
467
|
L: 145,
|
|
195
468
|
S: this,
|
|
196
469
|
C: (f, a) => f(...a)
|
|
@@ -200,8 +473,8 @@ var WorkerSession = class {
|
|
|
200
473
|
try {
|
|
201
474
|
this._shellClientRpc && await asyncTimeout(this._shellClientRpc.open(), 1e3);
|
|
202
475
|
} catch {
|
|
203
|
-
|
|
204
|
-
F:
|
|
476
|
+
log2.info("No shell connected.", void 0, {
|
|
477
|
+
F: __dxlog_file2,
|
|
205
478
|
L: 152,
|
|
206
479
|
S: this,
|
|
207
480
|
C: (f, a) => f(...a)
|
|
@@ -213,18 +486,18 @@ var WorkerSession = class {
|
|
|
213
486
|
}).then(callback);
|
|
214
487
|
}
|
|
215
488
|
};
|
|
216
|
-
|
|
489
|
+
_ts_decorate2([
|
|
217
490
|
logInfo
|
|
218
491
|
], WorkerSession.prototype, "origin", void 0);
|
|
219
|
-
|
|
492
|
+
_ts_decorate2([
|
|
220
493
|
logInfo
|
|
221
494
|
], WorkerSession.prototype, "lockKey", void 0);
|
|
222
495
|
|
|
223
496
|
// packages/sdk/client-services/src/packlets/worker/worker-runtime.ts
|
|
224
|
-
var
|
|
497
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
|
|
225
498
|
var WorkerRuntime = class {
|
|
226
499
|
constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop }) {
|
|
227
|
-
this._transportFactory = new
|
|
500
|
+
this._transportFactory = new RtcTransportProxyFactory();
|
|
228
501
|
this._ready = new Trigger2();
|
|
229
502
|
this._sessions = /* @__PURE__ */ new Set();
|
|
230
503
|
this._signalMetadataTags = {
|
|
@@ -246,8 +519,8 @@ var WorkerRuntime = class {
|
|
|
246
519
|
return this._clientServices;
|
|
247
520
|
}
|
|
248
521
|
async start() {
|
|
249
|
-
|
|
250
|
-
F:
|
|
522
|
+
log3("starting...", void 0, {
|
|
523
|
+
F: __dxlog_file3,
|
|
251
524
|
L: 84,
|
|
252
525
|
S: this,
|
|
253
526
|
C: (f, a) => f(...a)
|
|
@@ -271,12 +544,12 @@ var WorkerRuntime = class {
|
|
|
271
544
|
transportFactory: this._transportFactory
|
|
272
545
|
});
|
|
273
546
|
await this._clientServices.open(new Context(void 0, {
|
|
274
|
-
F:
|
|
547
|
+
F: __dxlog_file3,
|
|
275
548
|
L: 107
|
|
276
549
|
}));
|
|
277
550
|
this._ready.wake(void 0);
|
|
278
|
-
|
|
279
|
-
F:
|
|
551
|
+
log3("started", void 0, {
|
|
552
|
+
F: __dxlog_file3,
|
|
280
553
|
L: 109,
|
|
281
554
|
S: this,
|
|
282
555
|
C: (f, a) => f(...a)
|
|
@@ -290,8 +563,8 @@ var WorkerRuntime = class {
|
|
|
290
563
|
});
|
|
291
564
|
} catch (err) {
|
|
292
565
|
this._ready.wake(err);
|
|
293
|
-
|
|
294
|
-
F:
|
|
566
|
+
log3.error("starting", err, {
|
|
567
|
+
F: __dxlog_file3,
|
|
295
568
|
L: 119,
|
|
296
569
|
S: this,
|
|
297
570
|
C: (f, a) => f(...a)
|
|
@@ -325,8 +598,8 @@ var WorkerRuntime = class {
|
|
|
325
598
|
}
|
|
326
599
|
});
|
|
327
600
|
await session.open();
|
|
328
|
-
|
|
329
|
-
F:
|
|
601
|
+
invariant3(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
|
|
602
|
+
F: __dxlog_file3,
|
|
330
603
|
L: 157,
|
|
331
604
|
S: this,
|
|
332
605
|
A: [
|
|
@@ -346,8 +619,8 @@ var WorkerRuntime = class {
|
|
|
346
619
|
* Selects one of the existing session for WebRTC networking.
|
|
347
620
|
*/
|
|
348
621
|
_reconnectWebrtc() {
|
|
349
|
-
|
|
350
|
-
F:
|
|
622
|
+
log3("reconnecting webrtc...", void 0, {
|
|
623
|
+
F: __dxlog_file3,
|
|
351
624
|
L: 175,
|
|
352
625
|
S: this,
|
|
353
626
|
C: (f, a) => f(...a)
|
|
@@ -377,6 +650,8 @@ export {
|
|
|
377
650
|
DevtoolsHostEvents,
|
|
378
651
|
DevtoolsServiceImpl,
|
|
379
652
|
DiagnosticsCollector,
|
|
653
|
+
EdgeAgentManager,
|
|
654
|
+
EdgeAgentServiceImpl,
|
|
380
655
|
EdgeFeedReplicator,
|
|
381
656
|
Identity,
|
|
382
657
|
IdentityManager,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/packlets/worker/worker-runtime.ts", "../../../src/packlets/worker/worker-session.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => Promise<void>;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private _broadcastChannel?: BroadcastChannel;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n\n constructor({\n channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : signals\n ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close();\n await this._onStop?.();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n await this.stop();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "
|
|
3
|
+
"sources": ["../../../src/packlets/diagnostics/diagnostics-collector.ts", "../../../src/packlets/services/client-rpc-server.ts", "../../../src/packlets/storage/profile-archive.ts", "../../../src/packlets/worker/worker-runtime.ts", "../../../src/packlets/worker/worker-session.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClientServicesProvider, ClientServicesProviderResource } from '@dxos/client-protocol';\nimport { type Config, ConfigResource } from '@dxos/config';\nimport { GetDiagnosticsRequest } from '@dxos/protocols/proto/dxos/client/services';\nimport { TRACE_PROCESSOR } from '@dxos/tracing';\nimport { type JsonKeyOptions, jsonKeyReplacer, nonNullable } from '@dxos/util';\n\nimport { createCollectDiagnosticsBroadcastSender } from './diagnostics-broadcast';\n\nconst GET_DIAGNOSTICS_RPC_TIMEOUT = 10_000;\n\nexport interface CollectDiagnosticsBroadcastSender {\n broadcastDiagnosticsRequest(): any;\n}\n\nexport interface CollectDiagnosticsBroadcastHandler {\n start(): void;\n stop(): void;\n}\n\nexport class DiagnosticsCollector {\n private static broadcastSender = createCollectDiagnosticsBroadcastSender();\n\n public static async collect(\n config: Config | Config[] = findConfigs(),\n services: ClientServicesProvider | null = findSystemServiceProvider(),\n options: JsonKeyOptions = {},\n ): Promise<any> {\n const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics(\n {\n keys: options.humanize\n ? GetDiagnosticsRequest.KEY_OPTION.HUMANIZE\n : options.truncate\n ? GetDiagnosticsRequest.KEY_OPTION.TRUNCATE\n : undefined,\n },\n { timeout: GET_DIAGNOSTICS_RPC_TIMEOUT },\n );\n\n const clientDiagnostics = {\n config,\n trace: TRACE_PROCESSOR.getDiagnostics(),\n };\n\n const diagnostics =\n serviceDiagnostics != null\n ? { client: clientDiagnostics, services: serviceDiagnostics }\n : {\n client: clientDiagnostics,\n broadcast: await this.broadcastSender.broadcastDiagnosticsRequest(),\n };\n\n return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));\n }\n}\n\nconst findSystemServiceProvider = (): ClientServicesProvider | null => {\n const serviceProviders = TRACE_PROCESSOR.findResourcesByAnnotation(ClientServicesProviderResource);\n const providerResource = serviceProviders.find((r) => r.instance.deref()?.services?.SystemService != null);\n return providerResource?.instance?.deref() ?? null;\n};\n\nconst findConfigs = (): Config[] => {\n const configs = TRACE_PROCESSOR.findResourcesByAnnotation(ConfigResource);\n return configs.map((r) => r.instance.deref()).filter(nonNullable);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ClientServices } from '@dxos/client-protocol';\nimport { type Any, type ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { parseMethodName, RpcPeer, type RpcPeerOptions, type ServiceBundle } from '@dxos/rpc';\nimport { MapCounter, trace } from '@dxos/tracing';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { type ServiceRegistry } from './service-registry';\n\nexport type ClientRpcServerParams = {\n serviceRegistry: ServiceRegistry<ClientServices>;\n handleCall?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => MaybePromise<Any>,\n ) => Promise<Any>;\n handleStream?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => Stream<Any>,\n ) => MaybePromise<Stream<Any>>;\n} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;\n\n@trace.resource()\nexport class ClientRpcServer {\n private readonly _serviceRegistry: ServiceRegistry<ClientServices>;\n private readonly _rpcPeer: RpcPeer;\n private readonly _handlerCache = new Map<string, ServiceHandler<any>>();\n private readonly _handleCall: ClientRpcServerParams['handleCall'];\n private readonly _handleStream: ClientRpcServerParams['handleStream'];\n\n @trace.metricsCounter()\n private readonly _callMetrics = new MapCounter();\n\n @trace.info()\n private get _services() {\n return Object.keys(this._serviceRegistry.services);\n }\n\n constructor(params: ClientRpcServerParams) {\n const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;\n this._handleCall = handleCall;\n this._handleStream = handleStream;\n\n this._serviceRegistry = serviceRegistry;\n this._rpcPeer = new RpcPeer({\n ...rpcOptions,\n callHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request`);\n\n if (this._handleCall) {\n return this._handleCall(methodName, params, handler);\n } else {\n return handler(methodName, params);\n }\n },\n streamHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) =>\n this._getServiceHandler(serviceName).callStream(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request stream`);\n\n if (this._handleStream) {\n return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler)), (data) => {\n this._callMetrics.inc(`${serviceName}.${methodName} response stream`);\n return data;\n });\n } else {\n return handler(methodName, params);\n }\n },\n });\n }\n\n async open() {\n await this._rpcPeer.open();\n }\n\n async close() {\n await this._rpcPeer.close();\n }\n\n private _getServiceHandler(serviceName: string) {\n if (!this._handlerCache.has(serviceName)) {\n const [key, descriptor] =\n Object.entries(this._serviceRegistry.descriptors as ServiceBundle<Record<string, any>>).find(\n ([key, descriptor]) => descriptor.name === serviceName,\n ) ?? raise(new Error(`Service not available: ${serviceName}`));\n\n const service = this._serviceRegistry.services[key as keyof ClientServices] as any;\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@dxos/automerge/automerge-repo';\nimport { invariant } from '@dxos/invariant';\nimport type { LevelDB } from '@dxos/kv-store';\nimport { log } from '@dxos/log';\nimport { ProfileArchiveEntryType, type ProfileArchive } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const encodeProfileArchive = (profile: ProfileArchive): Uint8Array => cbor.encode(profile);\n\nexport const decodeProfileArchive = (data: Uint8Array): ProfileArchive => cbor.decode(data);\n\nexport const exportProfileData = async ({\n storage,\n level,\n}: {\n storage: Storage;\n level: LevelDB;\n}): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\n {\n const directory = await storage.createDirectory();\n const files = await directory.list();\n\n log.info('begin exporting files', { count: files.length });\n for (const filename of files) {\n const file = await directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n const data = await file.read(0, size);\n archive.storage.push({\n type: ProfileArchiveEntryType.FILE,\n key: filename,\n value: data,\n });\n }\n log.info('done exporting files', { count: files.length });\n }\n\n {\n log.info('begin exporting kv pairs');\n const iter = await level.iterator<Uint8Array, Uint8Array>({ keyEncoding: 'binary', valueEncoding: 'binary' });\n let count = 0;\n for await (const [key, value] of iter) {\n archive.storage.push({\n type: ProfileArchiveEntryType.KEY_VALUE,\n key,\n value,\n });\n count++;\n }\n log.info('done exporting kv pairs', { count });\n }\n\n return archive;\n};\n\nexport const importProfileData = async (\n {\n storage,\n level,\n }: {\n storage: Storage;\n level: LevelDB;\n },\n archive: ProfileArchive,\n): Promise<void> => {\n let batch = level.batch();\n\n let count = 0;\n for (const entry of archive.storage) {\n switch (entry.type) {\n case ProfileArchiveEntryType.FILE: {\n const directory = await storage.createDirectory();\n invariant(typeof entry.key === 'string', 'Invalid key type');\n const file = await directory.getOrCreateFile(entry.key);\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n await file.write(0, arrayToBuffer(entry.value));\n await file.close();\n break;\n }\n case ProfileArchiveEntryType.KEY_VALUE: {\n invariant(entry.key instanceof Uint8Array, 'Invalid key type');\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n batch.put(entry.key, entry.value, { keyEncoding: 'binary', valueEncoding: 'binary' });\n break;\n }\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n\n if (++count % 1000 === 0) {\n // Apparently indexedDB can't handle big batches.\n await batch.write();\n batch = level.batch();\n\n log.info('importing', {\n count,\n total: archive.storage.length,\n progress: `${((count / archive.storage.length) * 100).toFixed()}%`,\n });\n }\n }\n\n log.info('committing changes..');\n await batch.write();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { RtcTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => Promise<void>;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new RtcTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private _broadcastChannel?: BroadcastChannel;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n\n constructor({\n channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : signals\n ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close();\n await this._onStop?.();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n await this.stop();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ClientServicesProviderResource", "ConfigResource", "GetDiagnosticsRequest", "TRACE_PROCESSOR", "jsonKeyReplacer", "nonNullable", "GET_DIAGNOSTICS_RPC_TIMEOUT", "DiagnosticsCollector", "broadcastSender", "createCollectDiagnosticsBroadcastSender", "collect", "config", "findConfigs", "services", "findSystemServiceProvider", "options", "serviceDiagnostics", "SystemService", "getDiagnostics", "keys", "humanize", "GetDiagnosticsRequest", "KEY_OPTION", "HUMANIZE", "truncate", "TRUNCATE", "undefined", "timeout", "clientDiagnostics", "trace", "TRACE_PROCESSOR", "diagnostics", "client", "broadcast", "broadcastDiagnosticsRequest", "JSON", "parse", "stringify", "jsonKeyReplacer", "serviceProviders", "findResourcesByAnnotation", "ClientServicesProviderResource", "providerResource", "find", "r", "instance", "deref", "configs", "ConfigResource", "map", "filter", "nonNullable", "Stream", "raise", "parseMethodName", "RpcPeer", "MapCounter", "trace", "ClientRpcServer", "constructor", "params", "_handlerCache", "Map", "_callMetrics", "MapCounter", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "_handleCall", "_handleStream", "_serviceRegistry", "_rpcPeer", "RpcPeer", "callHandler", "method", "serviceName", "methodName", "parseMethodName", "handler", "_getServiceHandler", "call", "inc", "streamHandler", "callStream", "Stream", "map", "unwrapPromise", "data", "_services", "Object", "keys", "services", "open", "close", "has", "key", "descriptor", "entries", "descriptors", "find", "name", "raise", "Error", "service", "set", "createServer", "get", "trace", "metricsCounter", "info", "resource", "cbor", "invariant", "log", "ProfileArchiveEntryType", "arrayToBuffer", "encodeProfileArchive", "profile", "encode", "decodeProfileArchive", "data", "decode", "exportProfileData", "storage", "level", "archive", "meta", "timestamp", "Date", "toISOString", "directory", "createDirectory", "files", "list", "info", "count", "length", "filename", "file", "getOrCreateFile", "size", "stat", "read", "push", "type", "FILE", "key", "value", "iter", "iterator", "keyEncoding", "valueEncoding", "KEY_VALUE", "importProfileData", "batch", "entry", "Uint8Array", "write", "close", "put", "Error", "total", "progress", "toFixed", "Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "RtcTransportProxyFactory", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "invariant", "log", "logInfo", "createProtoRpcPeer", "Callback", "WorkerSession", "constructor", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "_startTrigger", "Trigger", "onClose", "Callback", "invariant", "_serviceHost", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "port", "_shellClientRpc", "undefined", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "observabilityGroup", "signalTelemetryEnabled", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "bridgeService", "rpc", "BridgeService", "open", "info", "Promise", "all", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "navigator", "locks", "then", "logInfo", "WorkerRuntime", "constructor", "channel", "DEFAULT_WORKER_BROADCAST_CHANNEL", "configProvider", "acquireLock", "releaseLock", "onStop", "_transportFactory", "RtcTransportProxyFactory", "_ready", "Trigger", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_configProvider", "_acquireLock", "_releaseLock", "_onStop", "_channel", "_clientServices", "ClientServicesHost", "callbacks", "onReset", "stop", "host", "start", "log", "_broadcastChannel", "BroadcastChannel", "postMessage", "action", "onmessage", "event", "data", "_config", "signals", "get", "initialize", "config", "signalManager", "signaling", "undefined", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "Context", "wake", "setIdentityTags", "identityService", "services", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "err", "error", "close", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "size", "_reconnectWebrtc", "invariant", "origin", "observabilityGroup", "group", "signalTelemetryEnabled", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
|
|
7
7
|
}
|