@dxos/teleport-extension-replicator 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea

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.
@@ -11,19 +11,6 @@ import { RpcClosedError, TimeoutError } from "@dxos/protocols";
11
11
  import { schema } from "@dxos/protocols/proto";
12
12
  import { createProtoRpcPeer } from "@dxos/rpc";
13
13
  import { ComplexMap } from "@dxos/util";
14
- function _define_property(obj, key, value) {
15
- if (key in obj) {
16
- Object.defineProperty(obj, key, {
17
- value,
18
- enumerable: true,
19
- configurable: true,
20
- writable: true
21
- });
22
- } else {
23
- obj[key] = value;
24
- }
25
- return obj;
26
- }
27
14
  function _ts_decorate(decorators, target, key, desc) {
28
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29
16
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -32,6 +19,41 @@ function _ts_decorate(decorators, target, key, desc) {
32
19
  }
33
20
  var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/teleport-extension-replicator/src/replicator-extension.ts";
34
21
  var ReplicatorExtension = class {
22
+ _ctx = new Context({
23
+ onError: (err) => {
24
+ this._extensionContext?.close(err);
25
+ }
26
+ }, {
27
+ F: __dxlog_file,
28
+ L: 31
29
+ });
30
+ _feeds = new ComplexMap(PublicKey.hash);
31
+ _streams = new ComplexMap(PublicKey.hash);
32
+ _rpc;
33
+ _extensionContext;
34
+ _options = {
35
+ upload: false
36
+ };
37
+ _updateTask = new DeferredTask(this._ctx, async () => {
38
+ try {
39
+ if (this._extensionContext.initiator === false) {
40
+ await this._rpc.rpc.ReplicatorService.updateFeeds({
41
+ feeds: Array.from(this._feeds.values()).map((feed) => ({
42
+ feedKey: feed.key,
43
+ download: true,
44
+ upload: this._options.upload
45
+ }))
46
+ });
47
+ } else if (this._extensionContext.initiator === true) {
48
+ await this._reevaluateFeeds();
49
+ }
50
+ } catch (err) {
51
+ if (err instanceof RpcClosedError) {
52
+ return;
53
+ }
54
+ throw err;
55
+ }
56
+ });
35
57
  get extensionInfo() {
36
58
  return {
37
59
  initiator: this._extensionContext?.initiator,
@@ -380,43 +402,6 @@ var ReplicatorExtension = class {
380
402
  stream.networkStream.destroy();
381
403
  this._streams.delete(feedKey);
382
404
  }
383
- constructor() {
384
- _define_property(this, "_ctx", new Context({
385
- onError: (err) => {
386
- this._extensionContext?.close(err);
387
- }
388
- }, {
389
- F: __dxlog_file,
390
- L: 31
391
- }));
392
- _define_property(this, "_feeds", new ComplexMap(PublicKey.hash));
393
- _define_property(this, "_streams", new ComplexMap(PublicKey.hash));
394
- _define_property(this, "_rpc", void 0);
395
- _define_property(this, "_extensionContext", void 0);
396
- _define_property(this, "_options", {
397
- upload: false
398
- });
399
- _define_property(this, "_updateTask", new DeferredTask(this._ctx, async () => {
400
- try {
401
- if (this._extensionContext.initiator === false) {
402
- await this._rpc.rpc.ReplicatorService.updateFeeds({
403
- feeds: Array.from(this._feeds.values()).map((feed) => ({
404
- feedKey: feed.key,
405
- download: true,
406
- upload: this._options.upload
407
- }))
408
- });
409
- } else if (this._extensionContext.initiator === true) {
410
- await this._reevaluateFeeds();
411
- }
412
- } catch (err) {
413
- if (err instanceof RpcClosedError) {
414
- return;
415
- }
416
- throw err;
417
- }
418
- }));
419
- }
420
405
  };
421
406
  _ts_decorate([
422
407
  logInfo
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/replicator-extension.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Duplex } from 'node:stream';\n\nimport type { ProtocolStream } from 'hypercore-protocol';\n\nimport { DeferredTask, asyncTimeout, synchronized } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { failUndefined } from '@dxos/debug';\nimport { type FeedWrapper } from '@dxos/feed-store';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log, logInfo } from '@dxos/log';\nimport { RpcClosedError, TimeoutError } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type FeedInfo, type ReplicatorService } from '@dxos/protocols/proto/dxos/mesh/teleport/replicator';\nimport { type ProtoRpcPeer, createProtoRpcPeer } from '@dxos/rpc';\nimport { type ExtensionContext, type TeleportExtension } from '@dxos/teleport';\nimport { ComplexMap } from '@dxos/util';\n\nexport type ReplicationOptions = {\n upload: boolean;\n};\n\n/**\n * Manages replication between a set of feeds for a single teleport session.\n */\nexport class ReplicatorExtension implements TeleportExtension {\n private readonly _ctx = new Context({\n onError: (err) => {\n this._extensionContext?.close(err);\n },\n });\n\n private readonly _feeds = new ComplexMap<PublicKey, FeedWrapper<any>>(PublicKey.hash);\n private readonly _streams = new ComplexMap<PublicKey, ActiveStream>(PublicKey.hash);\n\n private _rpc?: ProtoRpcPeer<ServiceBundle>;\n private _extensionContext?: ExtensionContext;\n\n private _options: ReplicationOptions = {\n upload: false,\n };\n\n private readonly _updateTask = new DeferredTask(this._ctx, async () => {\n try {\n if (this._extensionContext!.initiator === false) {\n await this._rpc!.rpc.ReplicatorService.updateFeeds({\n feeds: Array.from(this._feeds.values()).map((feed) => ({\n feedKey: feed.key,\n download: true,\n upload: this._options.upload,\n })),\n });\n } else if (this._extensionContext!.initiator === true) {\n await this._reevaluateFeeds();\n }\n } catch (err) {\n if (err instanceof RpcClosedError) {\n return; // Some RPC requests might be pending while closing.\n }\n throw err;\n }\n });\n\n @logInfo\n private get extensionInfo() {\n return {\n initiator: this._extensionContext?.initiator,\n localPeerId: this._extensionContext?.localPeerId,\n remotePeerId: this._extensionContext?.remotePeerId,\n feeds: Array.from(this._feeds.keys()),\n };\n }\n\n setOptions(options: ReplicationOptions): this {\n this._options = options;\n log('setOptions', { options });\n if (this._extensionContext) {\n this._updateTask.schedule();\n }\n return this;\n }\n\n addFeed(feed: FeedWrapper<any>): void {\n this._feeds.set(feed.key, feed);\n log('addFeed', { feedKey: feed.key });\n if (this._extensionContext) {\n this._updateTask.schedule();\n }\n }\n\n async onOpen(context: ExtensionContext): Promise<void> {\n this._extensionContext = context;\n log('open');\n\n this._rpc = createProtoRpcPeer<ServiceBundle, ServiceBundle>({\n requested: {\n ReplicatorService: schema.getService('dxos.mesh.teleport.replicator.ReplicatorService'),\n },\n exposed: {\n ReplicatorService: schema.getService('dxos.mesh.teleport.replicator.ReplicatorService'),\n },\n handlers: {\n ReplicatorService: {\n updateFeeds: async ({ feeds }) => {\n log('received feed info', { feeds });\n invariant(this._extensionContext!.initiator === true, 'Invalid call');\n this._updateTask.schedule();\n },\n startReplication: async ({ info }) => {\n log('starting replication...', { info });\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n const streamTag = await this._acceptReplication(info);\n return {\n streamTag,\n };\n },\n stopReplication: async ({ info }) => {\n log('stopping replication...', { info });\n // TODO(dmaretskyi): Make sure any peer can stop replication.\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n await this._stopReplication(info.feedKey);\n },\n },\n },\n port: await context.createPort('rpc', {\n contentType: 'application/x-protobuf; messageType=\"dxos.rpc.Message\"',\n }),\n timeout: 10_000,\n });\n await this._rpc.open();\n\n this._updateTask.schedule();\n }\n\n async onClose(err?: Error | undefined): Promise<void> {\n log('close', { err });\n await this._ctx.dispose();\n await this._rpc?.close();\n for (const feedKey of this._streams.keys()) {\n await this._stopReplication(feedKey);\n }\n }\n\n async onAbort(err?: Error | undefined): Promise<void> {\n log('abort', { err });\n\n await this._ctx.dispose();\n await this._rpc?.abort();\n for (const feedKey of this._streams.keys()) {\n await this._stopReplication(feedKey);\n }\n }\n\n @synchronized\n private async _reevaluateFeeds(): Promise<void> {\n log('_reevaluateFeeds');\n for (const feedKey of this._feeds.keys()) {\n if (this._ctx.disposed) {\n return;\n }\n if (this._streams.has(feedKey) && this._options.upload !== this._streams.get(feedKey)?.info.upload) {\n try {\n await asyncTimeout(this._stopReplication(feedKey), 1000);\n } catch (err) {\n log.catch(err);\n }\n }\n\n if (this._ctx.disposed) {\n return;\n }\n if (!this._streams.has(feedKey)) {\n await this._initiateReplication({\n feedKey,\n download: true,\n upload: this._options.upload,\n });\n }\n }\n }\n\n /**\n * Try to initiate feed replication.\n */\n private async _initiateReplication(feedInfo: FeedInfo): Promise<void> {\n log('initiating replication', { feedInfo });\n invariant(this._extensionContext!.initiator === true, 'Invalid call');\n invariant(!this._streams.has(feedInfo.feedKey), `Replication already in progress for feed: ${feedInfo.feedKey}`);\n const { streamTag } = await this._rpc!.rpc.ReplicatorService.startReplication({ info: feedInfo });\n if (!streamTag) {\n return;\n }\n\n await this._replicateFeed(feedInfo, streamTag);\n }\n\n /**\n * Respond to a remote request to replicate a feed.\n * @returns A stream tag for the replication stream or `undefined` if we don't want to replicate.\n */\n @synchronized\n private async _acceptReplication(feedInfo: FeedInfo): Promise<string | undefined> {\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n if (!this._feeds.has(feedInfo.feedKey) || this._streams.has(feedInfo.feedKey)) {\n return undefined; // We don't have the feed or we are already replicating it.\n }\n\n const tag = `feed-${feedInfo.feedKey.toHex()}-${PublicKey.random().toHex().slice(0, 8)}`; // Generate a unique tag for the stream.\n await this._replicateFeed(feedInfo, tag);\n return tag;\n }\n\n private async _replicateFeed(info: FeedInfo, streamTag: string): Promise<void> {\n log('replicate', { info, streamTag });\n invariant(!this._streams.has(info.feedKey), `Replication already in progress for feed: ${info.feedKey}`);\n\n const feed = this._feeds.get(info.feedKey) ?? failUndefined();\n const networkStream = await this._extensionContext!.createStream(streamTag, {\n contentType: 'application/x-hypercore',\n });\n let replicationStreamErrors = 0;\n\n // https://github.com/holepunchto/hypercore/tree/v9.12.0#var-stream--feedreplicateisinitiator-options\n const replicationStream = feed.replicate(true, {\n live: true,\n upload: info.upload,\n download: info.download,\n noise: false,\n encrypted: false,\n maxRequests: 1024,\n });\n\n // Left for testing.\n // const debug = true;\n // if (debug) {\n // feed.on('sync', () => {\n // log.info('sync', { key: feed.key, length: feed.length });\n // });\n // feed.on('download', (index: number, data: any) => {\n // log.info('download', {\n // key: feed.key,\n // index,\n // length: feed.length,\n // data: data.length,\n // });\n // });\n // }\n\n replicationStream.on('error', (err) => {\n if (err instanceof TimeoutError) {\n log.info('replication stream timeout', { err, info });\n return;\n }\n // TODO(nf): use sentinel errors\n if (\n err?.message === 'Writable stream closed prematurely' ||\n err?.message === 'Cannot call write after a stream was destroyed'\n ) {\n log('replication stream closed', { err, info });\n return;\n }\n\n // TODO(nf): WARN on first error? log full info on some subsequent errors?\n if (replicationStreamErrors === 0) {\n log.info('replication stream error', { err, info });\n } else {\n log.info('replication stream error', { err, feedKey: info.feedKey, count: replicationStreamErrors });\n }\n replicationStreamErrors++;\n });\n\n this._streams.set(info.feedKey, {\n streamTag,\n networkStream,\n replicationStream,\n info,\n });\n\n networkStream.pipe(replicationStream as any).pipe(networkStream);\n }\n\n private async _stopReplication(feedKey: PublicKey): Promise<void> {\n const stream = this._streams.get(feedKey);\n if (!stream) {\n return;\n }\n\n stream.networkStream.destroy();\n this._streams.delete(feedKey);\n }\n}\n\ntype ServiceBundle = {\n ReplicatorService: ReplicatorService;\n};\n\ntype ActiveStream = {\n streamTag: string;\n networkStream: Duplex;\n replicationStream: ProtocolStream;\n info: FeedInfo;\n};\n"],
5
- "mappings": "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",
6
- "names": ["DeferredTask", "asyncTimeout", "synchronized", "Context", "failUndefined", "invariant", "PublicKey", "log", "logInfo", "RpcClosedError", "TimeoutError", "schema", "createProtoRpcPeer", "ComplexMap", "ReplicatorExtension", "extensionInfo", "initiator", "_extensionContext", "localPeerId", "remotePeerId", "feeds", "Array", "from", "_feeds", "keys", "setOptions", "options", "_options", "_updateTask", "schedule", "addFeed", "feed", "set", "key", "feedKey", "onOpen", "context", "_rpc", "requested", "ReplicatorService", "getService", "exposed", "handlers", "updateFeeds", "startReplication", "info", "streamTag", "_acceptReplication", "stopReplication", "_stopReplication", "port", "createPort", "contentType", "timeout", "open", "onClose", "err", "_ctx", "dispose", "close", "_streams", "onAbort", "abort", "_reevaluateFeeds", "disposed", "has", "upload", "get", "catch", "_initiateReplication", "download", "feedInfo", "rpc", "_replicateFeed", "undefined", "tag", "toHex", "random", "slice", "networkStream", "createStream", "replicationStreamErrors", "replicationStream", "replicate", "live", "noise", "encrypted", "maxRequests", "on", "message", "count", "pipe", "stream", "destroy", "delete", "onError", "hash", "values", "map"]
5
+ "mappings": "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",
6
+ "names": ["DeferredTask", "asyncTimeout", "synchronized", "Context", "failUndefined", "invariant", "PublicKey", "log", "logInfo", "RpcClosedError", "TimeoutError", "schema", "createProtoRpcPeer", "ComplexMap", "ReplicatorExtension", "_ctx", "onError", "err", "_extensionContext", "close", "_feeds", "hash", "_streams", "_rpc", "_options", "upload", "_updateTask", "initiator", "rpc", "ReplicatorService", "updateFeeds", "feeds", "Array", "from", "values", "map", "feed", "feedKey", "key", "download", "_reevaluateFeeds", "extensionInfo", "localPeerId", "remotePeerId", "keys", "setOptions", "options", "schedule", "addFeed", "set", "onOpen", "context", "requested", "getService", "exposed", "handlers", "startReplication", "info", "streamTag", "_acceptReplication", "stopReplication", "_stopReplication", "port", "createPort", "contentType", "timeout", "open", "onClose", "dispose", "onAbort", "abort", "disposed", "has", "get", "catch", "_initiateReplication", "feedInfo", "_replicateFeed", "undefined", "tag", "toHex", "random", "slice", "networkStream", "createStream", "replicationStreamErrors", "replicationStream", "replicate", "live", "noise", "encrypted", "maxRequests", "on", "message", "count", "pipe", "stream", "destroy", "delete"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/replicator-extension.ts":{"bytes":39539,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":507,"imports":[{"path":"src/replicator-extension.ts","kind":"import-statement","original":"./replicator-extension"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16654},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["ReplicatorExtension"],"entryPoint":"src/index.ts","inputs":{"src/replicator-extension.ts":{"bytesInOutput":12143},"src/index.ts":{"bytesInOutput":0}},"bytes":12277}}}
1
+ {"inputs":{"src/replicator-extension.ts":{"bytes":38835,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":507,"imports":[{"path":"src/replicator-extension.ts","kind":"import-statement","original":"./replicator-extension"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16531},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["ReplicatorExtension"],"entryPoint":"src/index.ts","inputs":{"src/replicator-extension.ts":{"bytesInOutput":11610},"src/index.ts":{"bytesInOutput":0}},"bytes":11744}}}
@@ -11,19 +11,6 @@ import { RpcClosedError, TimeoutError } from "@dxos/protocols";
11
11
  import { schema } from "@dxos/protocols/proto";
12
12
  import { createProtoRpcPeer } from "@dxos/rpc";
13
13
  import { ComplexMap } from "@dxos/util";
14
- function _define_property(obj, key, value) {
15
- if (key in obj) {
16
- Object.defineProperty(obj, key, {
17
- value,
18
- enumerable: true,
19
- configurable: true,
20
- writable: true
21
- });
22
- } else {
23
- obj[key] = value;
24
- }
25
- return obj;
26
- }
27
14
  function _ts_decorate(decorators, target, key, desc) {
28
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29
16
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -32,6 +19,41 @@ function _ts_decorate(decorators, target, key, desc) {
32
19
  }
33
20
  var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/teleport-extension-replicator/src/replicator-extension.ts";
34
21
  var ReplicatorExtension = class {
22
+ _ctx = new Context({
23
+ onError: (err) => {
24
+ this._extensionContext?.close(err);
25
+ }
26
+ }, {
27
+ F: __dxlog_file,
28
+ L: 31
29
+ });
30
+ _feeds = new ComplexMap(PublicKey.hash);
31
+ _streams = new ComplexMap(PublicKey.hash);
32
+ _rpc;
33
+ _extensionContext;
34
+ _options = {
35
+ upload: false
36
+ };
37
+ _updateTask = new DeferredTask(this._ctx, async () => {
38
+ try {
39
+ if (this._extensionContext.initiator === false) {
40
+ await this._rpc.rpc.ReplicatorService.updateFeeds({
41
+ feeds: Array.from(this._feeds.values()).map((feed) => ({
42
+ feedKey: feed.key,
43
+ download: true,
44
+ upload: this._options.upload
45
+ }))
46
+ });
47
+ } else if (this._extensionContext.initiator === true) {
48
+ await this._reevaluateFeeds();
49
+ }
50
+ } catch (err) {
51
+ if (err instanceof RpcClosedError) {
52
+ return;
53
+ }
54
+ throw err;
55
+ }
56
+ });
35
57
  get extensionInfo() {
36
58
  return {
37
59
  initiator: this._extensionContext?.initiator,
@@ -380,43 +402,6 @@ var ReplicatorExtension = class {
380
402
  stream.networkStream.destroy();
381
403
  this._streams.delete(feedKey);
382
404
  }
383
- constructor() {
384
- _define_property(this, "_ctx", new Context({
385
- onError: (err) => {
386
- this._extensionContext?.close(err);
387
- }
388
- }, {
389
- F: __dxlog_file,
390
- L: 31
391
- }));
392
- _define_property(this, "_feeds", new ComplexMap(PublicKey.hash));
393
- _define_property(this, "_streams", new ComplexMap(PublicKey.hash));
394
- _define_property(this, "_rpc", void 0);
395
- _define_property(this, "_extensionContext", void 0);
396
- _define_property(this, "_options", {
397
- upload: false
398
- });
399
- _define_property(this, "_updateTask", new DeferredTask(this._ctx, async () => {
400
- try {
401
- if (this._extensionContext.initiator === false) {
402
- await this._rpc.rpc.ReplicatorService.updateFeeds({
403
- feeds: Array.from(this._feeds.values()).map((feed) => ({
404
- feedKey: feed.key,
405
- download: true,
406
- upload: this._options.upload
407
- }))
408
- });
409
- } else if (this._extensionContext.initiator === true) {
410
- await this._reevaluateFeeds();
411
- }
412
- } catch (err) {
413
- if (err instanceof RpcClosedError) {
414
- return;
415
- }
416
- throw err;
417
- }
418
- }));
419
- }
420
405
  };
421
406
  _ts_decorate([
422
407
  logInfo
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/replicator-extension.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Duplex } from 'node:stream';\n\nimport type { ProtocolStream } from 'hypercore-protocol';\n\nimport { DeferredTask, asyncTimeout, synchronized } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { failUndefined } from '@dxos/debug';\nimport { type FeedWrapper } from '@dxos/feed-store';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log, logInfo } from '@dxos/log';\nimport { RpcClosedError, TimeoutError } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type FeedInfo, type ReplicatorService } from '@dxos/protocols/proto/dxos/mesh/teleport/replicator';\nimport { type ProtoRpcPeer, createProtoRpcPeer } from '@dxos/rpc';\nimport { type ExtensionContext, type TeleportExtension } from '@dxos/teleport';\nimport { ComplexMap } from '@dxos/util';\n\nexport type ReplicationOptions = {\n upload: boolean;\n};\n\n/**\n * Manages replication between a set of feeds for a single teleport session.\n */\nexport class ReplicatorExtension implements TeleportExtension {\n private readonly _ctx = new Context({\n onError: (err) => {\n this._extensionContext?.close(err);\n },\n });\n\n private readonly _feeds = new ComplexMap<PublicKey, FeedWrapper<any>>(PublicKey.hash);\n private readonly _streams = new ComplexMap<PublicKey, ActiveStream>(PublicKey.hash);\n\n private _rpc?: ProtoRpcPeer<ServiceBundle>;\n private _extensionContext?: ExtensionContext;\n\n private _options: ReplicationOptions = {\n upload: false,\n };\n\n private readonly _updateTask = new DeferredTask(this._ctx, async () => {\n try {\n if (this._extensionContext!.initiator === false) {\n await this._rpc!.rpc.ReplicatorService.updateFeeds({\n feeds: Array.from(this._feeds.values()).map((feed) => ({\n feedKey: feed.key,\n download: true,\n upload: this._options.upload,\n })),\n });\n } else if (this._extensionContext!.initiator === true) {\n await this._reevaluateFeeds();\n }\n } catch (err) {\n if (err instanceof RpcClosedError) {\n return; // Some RPC requests might be pending while closing.\n }\n throw err;\n }\n });\n\n @logInfo\n private get extensionInfo() {\n return {\n initiator: this._extensionContext?.initiator,\n localPeerId: this._extensionContext?.localPeerId,\n remotePeerId: this._extensionContext?.remotePeerId,\n feeds: Array.from(this._feeds.keys()),\n };\n }\n\n setOptions(options: ReplicationOptions): this {\n this._options = options;\n log('setOptions', { options });\n if (this._extensionContext) {\n this._updateTask.schedule();\n }\n return this;\n }\n\n addFeed(feed: FeedWrapper<any>): void {\n this._feeds.set(feed.key, feed);\n log('addFeed', { feedKey: feed.key });\n if (this._extensionContext) {\n this._updateTask.schedule();\n }\n }\n\n async onOpen(context: ExtensionContext): Promise<void> {\n this._extensionContext = context;\n log('open');\n\n this._rpc = createProtoRpcPeer<ServiceBundle, ServiceBundle>({\n requested: {\n ReplicatorService: schema.getService('dxos.mesh.teleport.replicator.ReplicatorService'),\n },\n exposed: {\n ReplicatorService: schema.getService('dxos.mesh.teleport.replicator.ReplicatorService'),\n },\n handlers: {\n ReplicatorService: {\n updateFeeds: async ({ feeds }) => {\n log('received feed info', { feeds });\n invariant(this._extensionContext!.initiator === true, 'Invalid call');\n this._updateTask.schedule();\n },\n startReplication: async ({ info }) => {\n log('starting replication...', { info });\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n const streamTag = await this._acceptReplication(info);\n return {\n streamTag,\n };\n },\n stopReplication: async ({ info }) => {\n log('stopping replication...', { info });\n // TODO(dmaretskyi): Make sure any peer can stop replication.\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n await this._stopReplication(info.feedKey);\n },\n },\n },\n port: await context.createPort('rpc', {\n contentType: 'application/x-protobuf; messageType=\"dxos.rpc.Message\"',\n }),\n timeout: 10_000,\n });\n await this._rpc.open();\n\n this._updateTask.schedule();\n }\n\n async onClose(err?: Error | undefined): Promise<void> {\n log('close', { err });\n await this._ctx.dispose();\n await this._rpc?.close();\n for (const feedKey of this._streams.keys()) {\n await this._stopReplication(feedKey);\n }\n }\n\n async onAbort(err?: Error | undefined): Promise<void> {\n log('abort', { err });\n\n await this._ctx.dispose();\n await this._rpc?.abort();\n for (const feedKey of this._streams.keys()) {\n await this._stopReplication(feedKey);\n }\n }\n\n @synchronized\n private async _reevaluateFeeds(): Promise<void> {\n log('_reevaluateFeeds');\n for (const feedKey of this._feeds.keys()) {\n if (this._ctx.disposed) {\n return;\n }\n if (this._streams.has(feedKey) && this._options.upload !== this._streams.get(feedKey)?.info.upload) {\n try {\n await asyncTimeout(this._stopReplication(feedKey), 1000);\n } catch (err) {\n log.catch(err);\n }\n }\n\n if (this._ctx.disposed) {\n return;\n }\n if (!this._streams.has(feedKey)) {\n await this._initiateReplication({\n feedKey,\n download: true,\n upload: this._options.upload,\n });\n }\n }\n }\n\n /**\n * Try to initiate feed replication.\n */\n private async _initiateReplication(feedInfo: FeedInfo): Promise<void> {\n log('initiating replication', { feedInfo });\n invariant(this._extensionContext!.initiator === true, 'Invalid call');\n invariant(!this._streams.has(feedInfo.feedKey), `Replication already in progress for feed: ${feedInfo.feedKey}`);\n const { streamTag } = await this._rpc!.rpc.ReplicatorService.startReplication({ info: feedInfo });\n if (!streamTag) {\n return;\n }\n\n await this._replicateFeed(feedInfo, streamTag);\n }\n\n /**\n * Respond to a remote request to replicate a feed.\n * @returns A stream tag for the replication stream or `undefined` if we don't want to replicate.\n */\n @synchronized\n private async _acceptReplication(feedInfo: FeedInfo): Promise<string | undefined> {\n invariant(this._extensionContext!.initiator === false, 'Invalid call');\n\n if (!this._feeds.has(feedInfo.feedKey) || this._streams.has(feedInfo.feedKey)) {\n return undefined; // We don't have the feed or we are already replicating it.\n }\n\n const tag = `feed-${feedInfo.feedKey.toHex()}-${PublicKey.random().toHex().slice(0, 8)}`; // Generate a unique tag for the stream.\n await this._replicateFeed(feedInfo, tag);\n return tag;\n }\n\n private async _replicateFeed(info: FeedInfo, streamTag: string): Promise<void> {\n log('replicate', { info, streamTag });\n invariant(!this._streams.has(info.feedKey), `Replication already in progress for feed: ${info.feedKey}`);\n\n const feed = this._feeds.get(info.feedKey) ?? failUndefined();\n const networkStream = await this._extensionContext!.createStream(streamTag, {\n contentType: 'application/x-hypercore',\n });\n let replicationStreamErrors = 0;\n\n // https://github.com/holepunchto/hypercore/tree/v9.12.0#var-stream--feedreplicateisinitiator-options\n const replicationStream = feed.replicate(true, {\n live: true,\n upload: info.upload,\n download: info.download,\n noise: false,\n encrypted: false,\n maxRequests: 1024,\n });\n\n // Left for testing.\n // const debug = true;\n // if (debug) {\n // feed.on('sync', () => {\n // log.info('sync', { key: feed.key, length: feed.length });\n // });\n // feed.on('download', (index: number, data: any) => {\n // log.info('download', {\n // key: feed.key,\n // index,\n // length: feed.length,\n // data: data.length,\n // });\n // });\n // }\n\n replicationStream.on('error', (err) => {\n if (err instanceof TimeoutError) {\n log.info('replication stream timeout', { err, info });\n return;\n }\n // TODO(nf): use sentinel errors\n if (\n err?.message === 'Writable stream closed prematurely' ||\n err?.message === 'Cannot call write after a stream was destroyed'\n ) {\n log('replication stream closed', { err, info });\n return;\n }\n\n // TODO(nf): WARN on first error? log full info on some subsequent errors?\n if (replicationStreamErrors === 0) {\n log.info('replication stream error', { err, info });\n } else {\n log.info('replication stream error', { err, feedKey: info.feedKey, count: replicationStreamErrors });\n }\n replicationStreamErrors++;\n });\n\n this._streams.set(info.feedKey, {\n streamTag,\n networkStream,\n replicationStream,\n info,\n });\n\n networkStream.pipe(replicationStream as any).pipe(networkStream);\n }\n\n private async _stopReplication(feedKey: PublicKey): Promise<void> {\n const stream = this._streams.get(feedKey);\n if (!stream) {\n return;\n }\n\n stream.networkStream.destroy();\n this._streams.delete(feedKey);\n }\n}\n\ntype ServiceBundle = {\n ReplicatorService: ReplicatorService;\n};\n\ntype ActiveStream = {\n streamTag: string;\n networkStream: Duplex;\n replicationStream: ProtocolStream;\n info: FeedInfo;\n};\n"],
5
- "mappings": "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",
6
- "names": ["DeferredTask", "asyncTimeout", "synchronized", "Context", "failUndefined", "invariant", "PublicKey", "log", "logInfo", "RpcClosedError", "TimeoutError", "schema", "createProtoRpcPeer", "ComplexMap", "ReplicatorExtension", "extensionInfo", "initiator", "_extensionContext", "localPeerId", "remotePeerId", "feeds", "Array", "from", "_feeds", "keys", "setOptions", "options", "_options", "_updateTask", "schedule", "addFeed", "feed", "set", "key", "feedKey", "onOpen", "context", "_rpc", "requested", "ReplicatorService", "getService", "exposed", "handlers", "updateFeeds", "startReplication", "info", "streamTag", "_acceptReplication", "stopReplication", "_stopReplication", "port", "createPort", "contentType", "timeout", "open", "onClose", "err", "_ctx", "dispose", "close", "_streams", "onAbort", "abort", "_reevaluateFeeds", "disposed", "has", "upload", "get", "catch", "_initiateReplication", "download", "feedInfo", "rpc", "_replicateFeed", "undefined", "tag", "toHex", "random", "slice", "networkStream", "createStream", "replicationStreamErrors", "replicationStream", "replicate", "live", "noise", "encrypted", "maxRequests", "on", "message", "count", "pipe", "stream", "destroy", "delete", "onError", "hash", "values", "map"]
5
+ "mappings": ";;;AAQA,SAASA,cAAcC,cAAcC,oBAAoB;AACzD,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAE9B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,KAAKC,eAAe;AAC7B,SAASC,gBAAgBC,oBAAoB;AAC7C,SAASC,cAAc;AAEvB,SAA4BC,0BAA0B;AAEtD,SAASC,kBAAkB;;;;;;;;AASpB,IAAMC,sBAAN,MAAMA;EACMC,OAAO,IAAIZ,QAAQ;IAClCa,SAAS,CAACC,QAAAA;AACR,WAAKC,mBAAmBC,MAAMF,GAAAA;IAChC;EACF,GAAA;;;;EAEiBG,SAAS,IAAIP,WAAwCP,UAAUe,IAAI;EACnEC,WAAW,IAAIT,WAAoCP,UAAUe,IAAI;EAE1EE;EACAL;EAEAM,WAA+B;IACrCC,QAAQ;EACV;EAEiBC,cAAc,IAAI1B,aAAa,KAAKe,MAAM,YAAA;AACzD,QAAI;AACF,UAAI,KAAKG,kBAAmBS,cAAc,OAAO;AAC/C,cAAM,KAAKJ,KAAMK,IAAIC,kBAAkBC,YAAY;UACjDC,OAAOC,MAAMC,KAAK,KAAKb,OAAOc,OAAM,CAAA,EAAIC,IAAI,CAACC,UAAU;YACrDC,SAASD,KAAKE;YACdC,UAAU;YACVd,QAAQ,KAAKD,SAASC;UACxB,EAAA;QACF,CAAA;MACF,WAAW,KAAKP,kBAAmBS,cAAc,MAAM;AACrD,cAAM,KAAKa,iBAAgB;MAC7B;IACF,SAASvB,KAAK;AACZ,UAAIA,eAAeR,gBAAgB;AACjC;MACF;AACA,YAAMQ;IACR;EACF,CAAA;EAEA,IACYwB,gBAAgB;AAC1B,WAAO;MACLd,WAAW,KAAKT,mBAAmBS;MACnCe,aAAa,KAAKxB,mBAAmBwB;MACrCC,cAAc,KAAKzB,mBAAmByB;MACtCZ,OAAOC,MAAMC,KAAK,KAAKb,OAAOwB,KAAI,CAAA;IACpC;EACF;EAEAC,WAAWC,SAAmC;AAC5C,SAAKtB,WAAWsB;AAChBvC,QAAI,cAAc;MAAEuC;IAAQ,GAAA;;;;;;AAC5B,QAAI,KAAK5B,mBAAmB;AAC1B,WAAKQ,YAAYqB,SAAQ;IAC3B;AACA,WAAO;EACT;EAEAC,QAAQZ,MAA8B;AACpC,SAAKhB,OAAO6B,IAAIb,KAAKE,KAAKF,IAAAA;AAC1B7B,QAAI,WAAW;MAAE8B,SAASD,KAAKE;IAAI,GAAA;;;;;;AACnC,QAAI,KAAKpB,mBAAmB;AAC1B,WAAKQ,YAAYqB,SAAQ;IAC3B;EACF;EAEA,MAAMG,OAAOC,SAA0C;AACrD,SAAKjC,oBAAoBiC;AACzB5C,QAAI,QAAA,QAAA;;;;;;AAEJ,SAAKgB,OAAOX,mBAAiD;MAC3DwC,WAAW;QACTvB,mBAAmBlB,OAAO0C,WAAW,iDAAA;MACvC;MACAC,SAAS;QACPzB,mBAAmBlB,OAAO0C,WAAW,iDAAA;MACvC;MACAE,UAAU;QACR1B,mBAAmB;UACjBC,aAAa,OAAO,EAAEC,MAAK,MAAE;AAC3BxB,gBAAI,sBAAsB;cAAEwB;YAAM,GAAA;;;;;;AAClC1B,sBAAU,KAAKa,kBAAmBS,cAAc,MAAM,gBAAA;;;;;;;;;AACtD,iBAAKD,YAAYqB,SAAQ;UAC3B;UACAS,kBAAkB,OAAO,EAAEC,KAAI,MAAE;AAC/BlD,gBAAI,2BAA2B;cAAEkD;YAAK,GAAA;;;;;;AACtCpD,sBAAU,KAAKa,kBAAmBS,cAAc,OAAO,gBAAA;;;;;;;;;AAEvD,kBAAM+B,YAAY,MAAM,KAAKC,mBAAmBF,IAAAA;AAChD,mBAAO;cACLC;YACF;UACF;UACAE,iBAAiB,OAAO,EAAEH,KAAI,MAAE;AAC9BlD,gBAAI,2BAA2B;cAAEkD;YAAK,GAAA;;;;;;AAEtCpD,sBAAU,KAAKa,kBAAmBS,cAAc,OAAO,gBAAA;;;;;;;;;AAEvD,kBAAM,KAAKkC,iBAAiBJ,KAAKpB,OAAO;UAC1C;QACF;MACF;MACAyB,MAAM,MAAMX,QAAQY,WAAW,OAAO;QACpCC,aAAa;MACf,CAAA;MACAC,SAAS;IACX,CAAA;AACA,UAAM,KAAK1C,KAAK2C,KAAI;AAEpB,SAAKxC,YAAYqB,SAAQ;EAC3B;EAEA,MAAMoB,QAAQlD,KAAwC;AACpDV,QAAI,SAAS;MAAEU;IAAI,GAAA;;;;;;AACnB,UAAM,KAAKF,KAAKqD,QAAO;AACvB,UAAM,KAAK7C,MAAMJ,MAAAA;AACjB,eAAWkB,WAAW,KAAKf,SAASsB,KAAI,GAAI;AAC1C,YAAM,KAAKiB,iBAAiBxB,OAAAA;IAC9B;EACF;EAEA,MAAMgC,QAAQpD,KAAwC;AACpDV,QAAI,SAAS;MAAEU;IAAI,GAAA;;;;;;AAEnB,UAAM,KAAKF,KAAKqD,QAAO;AACvB,UAAM,KAAK7C,MAAM+C,MAAAA;AACjB,eAAWjC,WAAW,KAAKf,SAASsB,KAAI,GAAI;AAC1C,YAAM,KAAKiB,iBAAiBxB,OAAAA;IAC9B;EACF;EAEA,MACcG,mBAAkC;AAC9CjC,QAAI,oBAAA,QAAA;;;;;;AACJ,eAAW8B,WAAW,KAAKjB,OAAOwB,KAAI,GAAI;AACxC,UAAI,KAAK7B,KAAKwD,UAAU;AACtB;MACF;AACA,UAAI,KAAKjD,SAASkD,IAAInC,OAAAA,KAAY,KAAKb,SAASC,WAAW,KAAKH,SAASmD,IAAIpC,OAAAA,GAAUoB,KAAKhC,QAAQ;AAClG,YAAI;AACF,gBAAMxB,aAAa,KAAK4D,iBAAiBxB,OAAAA,GAAU,GAAA;QACrD,SAASpB,KAAK;AACZV,cAAImE,MAAMzD,KAAAA,QAAAA;;;;;;QACZ;MACF;AAEA,UAAI,KAAKF,KAAKwD,UAAU;AACtB;MACF;AACA,UAAI,CAAC,KAAKjD,SAASkD,IAAInC,OAAAA,GAAU;AAC/B,cAAM,KAAKsC,qBAAqB;UAC9BtC;UACAE,UAAU;UACVd,QAAQ,KAAKD,SAASC;QACxB,CAAA;MACF;IACF;EACF;;;;EAKA,MAAckD,qBAAqBC,UAAmC;AACpErE,QAAI,0BAA0B;MAAEqE;IAAS,GAAA;;;;;;AACzCvE,cAAU,KAAKa,kBAAmBS,cAAc,MAAM,gBAAA;;;;;;;;;AACtDtB,cAAU,CAAC,KAAKiB,SAASkD,IAAII,SAASvC,OAAO,GAAG,6CAA6CuC,SAASvC,OAAO,IAAE;;;;;;;;;AAC/G,UAAM,EAAEqB,UAAS,IAAK,MAAM,KAAKnC,KAAMK,IAAIC,kBAAkB2B,iBAAiB;MAAEC,MAAMmB;IAAS,CAAA;AAC/F,QAAI,CAAClB,WAAW;AACd;IACF;AAEA,UAAM,KAAKmB,eAAeD,UAAUlB,SAAAA;EACtC;;;;;EAMA,MACcC,mBAAmBiB,UAAiD;AAChFvE,cAAU,KAAKa,kBAAmBS,cAAc,OAAO,gBAAA;;;;;;;;;AAEvD,QAAI,CAAC,KAAKP,OAAOoD,IAAII,SAASvC,OAAO,KAAK,KAAKf,SAASkD,IAAII,SAASvC,OAAO,GAAG;AAC7E,aAAOyC;IACT;AAEA,UAAMC,MAAM,QAAQH,SAASvC,QAAQ2C,MAAK,CAAA,IAAM1E,UAAU2E,OAAM,EAAGD,MAAK,EAAGE,MAAM,GAAG,CAAA,CAAA;AACpF,UAAM,KAAKL,eAAeD,UAAUG,GAAAA;AACpC,WAAOA;EACT;EAEA,MAAcF,eAAepB,MAAgBC,WAAkC;AAC7EnD,QAAI,aAAa;MAAEkD;MAAMC;IAAU,GAAA;;;;;;AACnCrD,cAAU,CAAC,KAAKiB,SAASkD,IAAIf,KAAKpB,OAAO,GAAG,6CAA6CoB,KAAKpB,OAAO,IAAE;;;;;;;;;AAEvG,UAAMD,OAAO,KAAKhB,OAAOqD,IAAIhB,KAAKpB,OAAO,KAAKjC,cAAAA;AAC9C,UAAM+E,gBAAgB,MAAM,KAAKjE,kBAAmBkE,aAAa1B,WAAW;MAC1EM,aAAa;IACf,CAAA;AACA,QAAIqB,0BAA0B;AAG9B,UAAMC,oBAAoBlD,KAAKmD,UAAU,MAAM;MAC7CC,MAAM;MACN/D,QAAQgC,KAAKhC;MACbc,UAAUkB,KAAKlB;MACfkD,OAAO;MACPC,WAAW;MACXC,aAAa;IACf,CAAA;AAkBAL,sBAAkBM,GAAG,SAAS,CAAC3E,QAAAA;AAC7B,UAAIA,eAAeP,cAAc;AAC/BH,YAAIkD,KAAK,8BAA8B;UAAExC;UAAKwC;QAAK,GAAA;;;;;;AACnD;MACF;AAEA,UACExC,KAAK4E,YAAY,wCACjB5E,KAAK4E,YAAY,kDACjB;AACAtF,YAAI,6BAA6B;UAAEU;UAAKwC;QAAK,GAAA;;;;;;AAC7C;MACF;AAGA,UAAI4B,4BAA4B,GAAG;AACjC9E,YAAIkD,KAAK,4BAA4B;UAAExC;UAAKwC;QAAK,GAAA;;;;;;MACnD,OAAO;AACLlD,YAAIkD,KAAK,4BAA4B;UAAExC;UAAKoB,SAASoB,KAAKpB;UAASyD,OAAOT;QAAwB,GAAA;;;;;;MACpG;AACAA;IACF,CAAA;AAEA,SAAK/D,SAAS2B,IAAIQ,KAAKpB,SAAS;MAC9BqB;MACAyB;MACAG;MACA7B;IACF,CAAA;AAEA0B,kBAAcY,KAAKT,iBAAAA,EAA0BS,KAAKZ,aAAAA;EACpD;EAEA,MAActB,iBAAiBxB,SAAmC;AAChE,UAAM2D,SAAS,KAAK1E,SAASmD,IAAIpC,OAAAA;AACjC,QAAI,CAAC2D,QAAQ;AACX;IACF;AAEAA,WAAOb,cAAcc,QAAO;AAC5B,SAAK3E,SAAS4E,OAAO7D,OAAAA;EACvB;AACF;;;;;;;;;;",
6
+ "names": ["DeferredTask", "asyncTimeout", "synchronized", "Context", "failUndefined", "invariant", "PublicKey", "log", "logInfo", "RpcClosedError", "TimeoutError", "schema", "createProtoRpcPeer", "ComplexMap", "ReplicatorExtension", "_ctx", "onError", "err", "_extensionContext", "close", "_feeds", "hash", "_streams", "_rpc", "_options", "upload", "_updateTask", "initiator", "rpc", "ReplicatorService", "updateFeeds", "feeds", "Array", "from", "values", "map", "feed", "feedKey", "key", "download", "_reevaluateFeeds", "extensionInfo", "localPeerId", "remotePeerId", "keys", "setOptions", "options", "schedule", "addFeed", "set", "onOpen", "context", "requested", "getService", "exposed", "handlers", "startReplication", "info", "streamTag", "_acceptReplication", "stopReplication", "_stopReplication", "port", "createPort", "contentType", "timeout", "open", "onClose", "dispose", "onAbort", "abort", "disposed", "has", "get", "catch", "_initiateReplication", "feedInfo", "_replicateFeed", "undefined", "tag", "toHex", "random", "slice", "networkStream", "createStream", "replicationStreamErrors", "replicationStream", "replicate", "live", "noise", "encrypted", "maxRequests", "on", "message", "count", "pipe", "stream", "destroy", "delete"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/replicator-extension.ts":{"bytes":39539,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":507,"imports":[{"path":"src/replicator-extension.ts","kind":"import-statement","original":"./replicator-extension"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16654},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["ReplicatorExtension"],"entryPoint":"src/index.ts","inputs":{"src/replicator-extension.ts":{"bytesInOutput":12143},"src/index.ts":{"bytesInOutput":0}},"bytes":12336}}}
1
+ {"inputs":{"src/replicator-extension.ts":{"bytes":38835,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":507,"imports":[{"path":"src/replicator-extension.ts","kind":"import-statement","original":"./replicator-extension"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16531},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/rpc","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["ReplicatorExtension"],"entryPoint":"src/index.ts","inputs":{"src/replicator-extension.ts":{"bytesInOutput":11610},"src/index.ts":{"bytesInOutput":0}},"bytes":11803}}}