@dxos/teleport-extension-object-sync 0.1.56-main.d9d1c3e → 0.1.56-main.da2eab1

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.
@@ -180,11 +180,10 @@ var BlobSyncExtension = class extends RpcExtension {
180
180
  this._upload.schedule();
181
181
  }
182
182
  async _pickBlobChunks(amount = 1) {
183
- var _a, _b;
184
183
  if (this._ctx.disposed) {
185
184
  return;
186
185
  }
187
- if (!this.remoteWantList.blobs || ((_a = this.remoteWantList.blobs) == null ? void 0 : _a.length) === 0) {
186
+ if (!this.remoteWantList.blobs || this.remoteWantList.blobs?.length === 0) {
188
187
  return;
189
188
  }
190
189
  const shuffled = [
@@ -235,7 +234,7 @@ var BlobSyncExtension = class extends RpcExtension {
235
234
  });
236
235
  continue;
237
236
  }
238
- const requestBitfield = (_b = header.bitfield) != null ? _b : BitField.ones(meta.length / meta.chunkSize);
237
+ const requestBitfield = header.bitfield ?? BitField.ones(meta.length / meta.chunkSize);
239
238
  const presentData = BitField.and(requestBitfield, meta.bitfield);
240
239
  const chunkIndices = BitField.findIndexes(presentData).sort(() => Math.random() - 0.5);
241
240
  for (const idx of chunkIndices) {
@@ -320,11 +319,11 @@ var BlobSync = class BlobSync2 {
320
319
  counter: 1,
321
320
  want: {
322
321
  id,
323
- chunkSize: meta == null ? void 0 : meta.chunkSize,
324
- bitfield: (meta == null ? void 0 : meta.bitfield) && Uint8Array.from(BitField2.invert(meta.bitfield))
322
+ chunkSize: meta?.chunkSize,
323
+ bitfield: meta?.bitfield && Uint8Array.from(BitField2.invert(meta.bitfield))
325
324
  }
326
325
  };
327
- if ((meta == null ? void 0 : meta.state) === BlobMeta.State.FULLY_PRESENT) {
326
+ if (meta?.state === BlobMeta.State.FULLY_PRESENT) {
328
327
  request2.trigger.wake();
329
328
  } else {
330
329
  this._downloadRequests.set(id, request2);
@@ -332,7 +331,7 @@ var BlobSync = class BlobSync2 {
332
331
  }
333
332
  return request2;
334
333
  });
335
- ctx == null ? void 0 : ctx.onDispose(() => this._lock.executeSynchronized(async () => {
334
+ ctx?.onDispose(() => this._lock.executeSynchronized(async () => {
336
335
  const request2 = this._downloadRequests.get(id);
337
336
  if (!request2) {
338
337
  return;
@@ -367,7 +366,6 @@ var BlobSync = class BlobSync2 {
367
366
  this._extensions.delete(extension);
368
367
  },
369
368
  onPush: async (blobChunk) => {
370
- var _a;
371
369
  if (!this._downloadRequests.has(blobChunk.id)) {
372
370
  return;
373
371
  }
@@ -381,7 +379,7 @@ var BlobSync = class BlobSync2 {
381
379
  });
382
380
  const meta = await this._params.blobStore.setChunk(blobChunk);
383
381
  if (meta.state === BlobMeta.State.FULLY_PRESENT) {
384
- (_a = this._downloadRequests.get(blobChunk.id)) == null ? void 0 : _a.trigger.wake();
382
+ this._downloadRequests.get(blobChunk.id)?.trigger.wake();
385
383
  this._downloadRequests.delete(blobChunk.id);
386
384
  } else {
387
385
  invariant2(meta.bitfield, void 0, {
@@ -523,8 +521,8 @@ var BlobStore = class {
523
521
  length: data.length,
524
522
  chunkSize: DEFAULT_CHUNK_SIZE,
525
523
  bitfield,
526
- created: new Date(),
527
- updated: new Date()
524
+ created: /* @__PURE__ */ new Date(),
525
+ updated: /* @__PURE__ */ new Date()
528
526
  };
529
527
  await this._getDataFile(id).write(0, arrayToBuffer(data));
530
528
  await this._writeMeta(id, meta);
@@ -532,7 +530,6 @@ var BlobStore = class {
532
530
  }
533
531
  // TODO(dmaretskyi): Optimize locking.
534
532
  async setChunk(chunk) {
535
- var _a;
536
533
  let meta = await this._getMeta(chunk.id);
537
534
  if (!meta) {
538
535
  invariant3(chunk.totalLength, "totalLength is not present", {
@@ -548,8 +545,8 @@ var BlobStore = class {
548
545
  id: chunk.id,
549
546
  state: BlobMeta2.State.PARTIALLY_PRESENT,
550
547
  length: chunk.totalLength,
551
- chunkSize: (_a = chunk.chunkSize) != null ? _a : DEFAULT_CHUNK_SIZE,
552
- created: new Date()
548
+ chunkSize: chunk.chunkSize ?? DEFAULT_CHUNK_SIZE,
549
+ created: /* @__PURE__ */ new Date()
553
550
  };
554
551
  meta.bitfield = BitField3.zeros(meta.length / meta.chunkSize);
555
552
  }
@@ -579,7 +576,7 @@ var BlobStore = class {
579
576
  if (BitField3.count(meta.bitfield, 0, meta.length) * meta.chunkSize >= meta.length) {
580
577
  meta.state = BlobMeta2.State.FULLY_PRESENT;
581
578
  }
582
- meta.updated = new Date();
579
+ meta.updated = /* @__PURE__ */ new Date();
583
580
  await this._writeMeta(chunk.id, meta);
584
581
  return meta;
585
582
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/blob-sync-extension.ts", "../../../src/blob-sync.ts", "../../../src/blob-store.ts"],
4
4
  "sourcesContent": ["//\n\n//\n// Copyright 2023 DXOS.org\n//\n\nimport { DeferredTask, sleep, synchronized } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { RpcClosedError, schema } from '@dxos/protocols';\nimport { BlobChunk, BlobSyncService, WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { ExtensionContext, RpcExtension } from '@dxos/teleport';\nimport { BitField } from '@dxos/util';\n\nimport { BlobStore } from './blob-store';\n\nexport type BlobSyncExtensionParams = {\n blobStore: BlobStore;\n onOpen: () => Promise<void>;\n onClose: () => Promise<void>;\n onPush: (data: BlobChunk) => Promise<void>;\n};\n\nconst MIN_WANT_LIST_UPDATE_INTERVAL = 500;\n\nconst MAX_CONCURRENT_UPLOADS = 20;\n\n/**\n * Manages replication between a set of feeds for a single teleport session.\n */\nexport class BlobSyncExtension extends RpcExtension<ServiceBundle, ServiceBundle> {\n private readonly _ctx = new Context({ onError: (err) => log.catch(err) });\n\n private _lastWantListUpdate = 0;\n private _localWantList: WantList = { blobs: [] };\n\n private readonly _updateWantList = new DeferredTask(this._ctx, async () => {\n // Throttle want list updates.\n if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {\n await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());\n if (this._ctx.disposed) {\n return;\n }\n }\n\n log('want', { list: this._localWantList });\n await this.rpc.BlobSyncService.want(this._localWantList);\n this._lastWantListUpdate = Date.now();\n });\n\n private _currentUploads = 0;\n\n private readonly _upload = new DeferredTask(this._ctx, async () => {\n if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {\n return;\n }\n const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);\n if (!blobChunks) {\n return;\n }\n for (const blobChunk of blobChunks) {\n if (this._ctx.disposed) {\n break;\n }\n\n this._currentUploads++;\n\n this.push(blobChunk)\n .catch((err) => {\n if (err instanceof RpcClosedError) {\n return;\n }\n log.warn('push failed', { err });\n })\n .finally(() => {\n this._currentUploads--;\n this.reconcileUploads();\n });\n }\n });\n\n /**\n * Set of id's remote peer wants.\n */\n public remoteWantList: WantList = { blobs: [] };\n\n constructor(\n private readonly _params: BlobSyncExtensionParams, // to not conflict with the base class\n ) {\n super({\n exposed: {\n BlobSyncService: schema.getService('dxos.mesh.teleport.blobsync.BlobSyncService'),\n },\n requested: {\n BlobSyncService: schema.getService('dxos.mesh.teleport.blobsync.BlobSyncService'),\n },\n timeout: 20_000,\n encodingOptions: {\n preserveAny: true,\n },\n });\n }\n\n override async onOpen(context: ExtensionContext): Promise<void> {\n log('open');\n await super.onOpen(context);\n await this._params.onOpen();\n }\n\n override async onClose(err?: Error | undefined): Promise<void> {\n log('close');\n await this._ctx.dispose();\n await this._params.onClose();\n await super.onClose(err);\n }\n\n protected async getHandlers(): Promise<ServiceBundle> {\n return {\n BlobSyncService: {\n want: async (wantList) => {\n log('remote want', { remoteWantList: wantList });\n this.remoteWantList = wantList;\n this.reconcileUploads();\n },\n push: async (data) => {\n log('received', { data });\n await this._params.onPush(data);\n },\n },\n };\n }\n\n @synchronized\n async push(data: BlobChunk) {\n if (this._ctx.disposed) {\n return;\n }\n log('push', { data });\n await this.rpc.BlobSyncService.push(data);\n }\n\n updateWantList(wantList: WantList) {\n if (this._ctx.disposed) {\n return;\n }\n this._localWantList = wantList;\n this._updateWantList.schedule();\n }\n\n reconcileUploads() {\n if (this._ctx.disposed) {\n return;\n }\n this._upload.schedule();\n }\n\n private async _pickBlobChunks(amount = 1): Promise<BlobChunk[] | void> {\n if (this._ctx.disposed) {\n return;\n }\n\n if (!this.remoteWantList.blobs || this.remoteWantList.blobs?.length === 0) {\n return;\n }\n\n const shuffled = [...this.remoteWantList.blobs].sort(() => Math.random() - 0.5);\n\n const chunks: BlobChunk[] = [];\n\n for (const header of shuffled) {\n const meta = await this._params.blobStore.getMeta(header.id);\n\n if (!meta) {\n // Skip this header\n continue;\n }\n invariant(meta.bitfield);\n invariant(meta.chunkSize);\n invariant(meta.length);\n\n if (header.chunkSize && header.chunkSize !== meta.chunkSize) {\n log.warn('Invalid chunk size', { header, meta });\n continue;\n }\n\n const requestBitfield = header.bitfield ?? BitField.ones(meta.length / meta.chunkSize);\n\n const presentData = BitField.and(requestBitfield, meta.bitfield);\n const chunkIndices = BitField.findIndexes(presentData).sort(() => Math.random() - 0.5);\n\n for (const idx of chunkIndices) {\n const chunkData = await this._params.blobStore.get(header.id, {\n offset: idx * meta.chunkSize,\n length: Math.min(meta.chunkSize, meta.length - idx * meta.chunkSize),\n });\n chunks.push({\n id: header.id,\n totalLength: meta.length,\n chunkSize: meta.chunkSize,\n chunkOffset: idx * meta.chunkSize,\n payload: chunkData,\n });\n\n if (chunks.length >= amount) {\n return chunks;\n }\n }\n }\n\n return chunks;\n }\n}\n\ntype ServiceBundle = {\n BlobSyncService: BlobSyncService;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trackLeaks, Trigger, Lock } from '@dxos/async';\nimport { cancelWithContext, Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { BitField, ComplexMap } from '@dxos/util';\n\nimport { BlobStore } from './blob-store';\nimport { BlobSyncExtension } from './blob-sync-extension';\n\nexport type BlobSyncParams = {\n blobStore: BlobStore;\n};\n\ntype DownloadRequest = {\n trigger: Trigger<void>;\n counter: number;\n want: WantList.Entry;\n};\n\n// TODO(dmaretskyi): Rename to blob-sync.\n@trackLeaks('open', 'close')\nexport class BlobSync {\n private readonly _ctx = new Context();\n private readonly _lock = new Lock();\n\n private readonly _downloadRequests = new ComplexMap<Uint8Array, DownloadRequest>((key) =>\n PublicKey.from(key).toHex(),\n );\n\n private readonly _extensions = new Set<BlobSyncExtension>();\n\n constructor(private readonly _params: BlobSyncParams) {}\n\n async open() {}\n\n async close() {\n await this._ctx.dispose();\n }\n\n /**\n * Resolves when the object with the given id is fully downloaded in the blob store.\n *\n * @param id hex-encoded id of the object to download.\n */\n async download(ctx: Context, id: Uint8Array): Promise<void> {\n log('download', { id });\n const request = await this._lock.executeSynchronized(async () => {\n const existingRequest = this._downloadRequests.get(id);\n\n if (existingRequest) {\n existingRequest.counter++;\n return existingRequest;\n }\n\n const meta = await this._params.blobStore.getMeta(id);\n const request: DownloadRequest = {\n trigger: new Trigger(),\n counter: 1,\n want: {\n id,\n chunkSize: meta?.chunkSize,\n bitfield: meta?.bitfield && Uint8Array.from(BitField.invert(meta.bitfield)),\n },\n };\n\n // Check if the object is already fully downloaded.\n if (meta?.state === BlobMeta.State.FULLY_PRESENT) {\n request.trigger.wake();\n } else {\n this._downloadRequests.set(id, request);\n this._updateExtensionsWantList();\n }\n\n return request;\n });\n\n ctx?.onDispose(() =>\n this._lock.executeSynchronized(async () => {\n // Remove request if context is disposed and nobody else requests it.\n const request = this._downloadRequests.get(id);\n if (!request) {\n return;\n }\n if (--request.counter === 0) {\n this._downloadRequests.delete(id);\n }\n this._updateExtensionsWantList();\n }),\n );\n\n return ctx ? cancelWithContext(ctx, request.trigger.wait()) : request.trigger.wait();\n }\n\n createExtension() {\n const extension = new BlobSyncExtension({\n blobStore: this._params.blobStore,\n onOpen: async () => {\n log('extension opened');\n this._extensions.add(extension);\n extension.updateWantList(this._getWantList());\n },\n onClose: async () => {\n log('extension closed');\n this._extensions.delete(extension);\n },\n onPush: async (blobChunk) => {\n if (!this._downloadRequests.has(blobChunk.id)) {\n return;\n }\n log('received', { blobChunk });\n const meta = await this._params.blobStore.setChunk(blobChunk);\n if (meta.state === BlobMeta.State.FULLY_PRESENT) {\n this._downloadRequests.get(blobChunk.id)?.trigger.wake();\n this._downloadRequests.delete(blobChunk.id);\n } else {\n invariant(meta.bitfield);\n this._downloadRequests.get(blobChunk.id)!.want.bitfield = BitField.invert(meta.bitfield);\n }\n\n this._updateExtensionsWantList();\n this._reconcileUploads();\n },\n });\n return extension;\n }\n\n /**\n * Notify extensions that a blob with the given id was added to the blob store.\n */\n async notifyBlobAdded(_id: Uint8Array) {\n this._reconcileUploads();\n }\n\n private _getWantList(): WantList {\n return {\n blobs: Array.from(this._downloadRequests.values()).map((request) => request.want),\n };\n }\n\n private _reconcileUploads() {\n for (const extension of this._extensions) {\n extension.reconcileUploads();\n }\n }\n\n private _updateExtensionsWantList() {\n for (const extension of this._extensions) {\n extension.updateWantList(this._getWantList());\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport path from 'node:path';\n\nimport { synchronized } from '@dxos/async';\nimport { subtleCrypto } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { schema } from '@dxos/protocols';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { BlobChunk } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { Directory } from '@dxos/random-access-storage';\nimport { BitField, arrayToBuffer } from '@dxos/util';\n\nexport type GetOptions = {\n offset?: number;\n length?: number;\n};\n\nexport const DEFAULT_CHUNK_SIZE = 4096;\n\nconst BlobMetaCodec = schema.getCodecForType('dxos.echo.blob.BlobMeta');\n\nexport class BlobStore {\n // prettier-ignore\n constructor(\n private readonly _directory: Directory\n ) { }\n\n @synchronized\n async getMeta(id: Uint8Array): Promise<BlobMeta | undefined> {\n return this._getMeta(id);\n }\n\n /**\n * @throws If range is not available.\n */\n @synchronized\n async get(id: Uint8Array, options: GetOptions = {}): Promise<Uint8Array> {\n const metadata = await this._getMeta(id);\n\n if (!metadata) {\n throw new Error('Blob not available');\n }\n\n const { offset = 0, length = metadata.length } = options;\n\n if (offset + length > metadata.length) {\n throw new Error('Invalid range');\n }\n\n if (metadata.state === BlobMeta.State.FULLY_PRESENT) {\n const file = this._getDataFile(id);\n return file.read(offset, length);\n } else if (options.offset === undefined && options.length === undefined) {\n throw new Error('Blob not available');\n }\n\n const beginChunk = Math.floor(offset / metadata.chunkSize);\n const endChunk = Math.ceil((offset + length) / metadata.chunkSize);\n\n invariant(metadata.bitfield, 'Bitfield not present');\n invariant(metadata.bitfield.length * 8 >= endChunk, 'Invalid bitfield length');\n\n const present = BitField.count(metadata.bitfield, beginChunk, endChunk) === endChunk - beginChunk;\n\n if (!present) {\n throw new Error('Blob not available');\n }\n\n const file = this._getDataFile(id);\n return file.read(offset, length);\n }\n\n @synchronized\n async list(): Promise<BlobMeta[]> {\n /*\n Weird path formatting:\n\n \"e9b9aa7a21c2c55a9eca333cd59975633157562ca0a0f4f243d4778f192c291e_meta\"\n \"e9b9aa7a21c2c55a9eca333cd59975633157562ca0a0f4f243d4778f192c291e_data\"\n \"5001de5a47191357c075aeee6451c4cc323f3a8ada24dd1191e83403608a38d5_meta\n */\n const files = new Set((await this._directory.list()).map((f) => f.split('_')[0]));\n\n const res: BlobMeta[] = [];\n\n for (const file of files) {\n const id = PublicKey.from(file).asUint8Array();\n const meta = await this._getMeta(id);\n if (meta) {\n res.push(meta);\n }\n }\n\n return res;\n }\n\n @synchronized\n async set(data: Uint8Array): Promise<BlobMeta> {\n const id = new Uint8Array(await subtleCrypto.digest('SHA-256', data));\n const bitfield = BitField.ones(data.length / DEFAULT_CHUNK_SIZE);\n\n const meta: BlobMeta = {\n id,\n state: BlobMeta.State.FULLY_PRESENT,\n length: data.length,\n chunkSize: DEFAULT_CHUNK_SIZE,\n bitfield,\n created: new Date(),\n updated: new Date(),\n };\n\n await this._getDataFile(id).write(0, arrayToBuffer(data));\n await this._writeMeta(id, meta);\n return meta;\n }\n\n // TODO(dmaretskyi): Optimize locking.\n @synchronized\n async setChunk(chunk: BlobChunk): Promise<BlobMeta> {\n // Init metadata.\n let meta = await this._getMeta(chunk.id);\n if (!meta) {\n invariant(chunk.totalLength, 'totalLength is not present');\n meta = {\n id: chunk.id,\n state: BlobMeta.State.PARTIALLY_PRESENT,\n length: chunk.totalLength,\n chunkSize: chunk.chunkSize ?? DEFAULT_CHUNK_SIZE,\n created: new Date(),\n };\n meta.bitfield = BitField.zeros(meta.length / meta.chunkSize);\n }\n\n if (chunk.chunkSize && chunk.chunkSize !== meta.chunkSize) {\n throw new Error('Invalid chunk size');\n }\n\n invariant(meta.bitfield, 'Bitfield not present');\n invariant(chunk.chunkOffset !== undefined, 'chunkOffset is not present');\n\n // Write chunk.\n await this._getDataFile(chunk.id).write(chunk.chunkOffset, arrayToBuffer(chunk.payload));\n\n // Update bitfield.\n BitField.set(meta.bitfield, Math.floor(chunk.chunkOffset / meta.chunkSize), true);\n\n // Update metadata.\n if (BitField.count(meta.bitfield, 0, meta.length) * meta.chunkSize >= meta.length) {\n meta.state = BlobMeta.State.FULLY_PRESENT;\n }\n meta.updated = new Date();\n\n await this._writeMeta(chunk.id, meta);\n\n return meta;\n }\n\n private async _writeMeta(id: Uint8Array, meta: BlobMeta): Promise<void> {\n const encoded = arrayToBuffer(BlobMetaCodec.encode(meta));\n const data = Buffer.alloc(encoded.length + 4);\n data.writeUInt32LE(encoded.length, 0);\n encoded.copy(data, 4);\n\n // Write metadata.\n await this._getMetaFile(id).write(0, data);\n }\n\n private async _getMeta(id: Uint8Array): Promise<BlobMeta | undefined> {\n const file = this._getMetaFile(id);\n const size = (await file.stat()).size;\n if (size === 0) {\n return;\n }\n const data = await file.read(0, size);\n const protoSize = data.readUInt32LE(0);\n return BlobMetaCodec.decode(data.subarray(4, protoSize + 4));\n }\n\n private _getMetaFile(id: Uint8Array) {\n return this._directory.getOrCreateFile(path.join(arrayToBuffer(id).toString('hex'), 'meta'));\n }\n\n private _getDataFile(id: Uint8Array) {\n return this._directory.getOrCreateFile(path.join(arrayToBuffer(id).toString('hex'), 'data'));\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["DeferredTask", "sleep", "synchronized", "Context", "invariant", "log", "RpcClosedError", "schema", "RpcExtension", "BitField", "MIN_WANT_LIST_UPDATE_INTERVAL", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "constructor", "_params", "exposed", "BlobSyncService", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "_ctx", "onError", "err", "catch", "_lastWantListUpdate", "_localWantList", "blobs", "_updateWantList", "Date", "now", "disposed", "list", "rpc", "want", "_currentUploads", "_upload", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "warn", "finally", "reconcileUploads", "remoteWantList", "onOpen", "context", "onClose", "dispose", "getHandlers", "wantList", "data", "onPush", "updateWantList", "schedule", "amount", "length", "shuffled", "sort", "Math", "random", "chunks", "header", "meta", "blobStore", "getMeta", "id", "bitfield", "chunkSize", "requestBitfield", "ones", "presentData", "and", "chunkIndices", "findIndexes", "idx", "chunkData", "get", "offset", "min", "totalLength", "chunkOffset", "payload", "trackLeaks", "Trigger", "Lock", "cancelWithContext", "Context", "invariant", "PublicKey", "log", "BlobMeta", "BitField", "ComplexMap", "BlobSync", "constructor", "_params", "_ctx", "Context", "_lock", "Lock", "_downloadRequests", "ComplexMap", "key", "PublicKey", "from", "toHex", "_extensions", "Set", "open", "close", "dispose", "download", "ctx", "id", "log", "request", "executeSynchronized", "existingRequest", "get", "counter", "meta", "blobStore", "getMeta", "trigger", "Trigger", "want", "chunkSize", "bitfield", "Uint8Array", "BitField", "invert", "state", "BlobMeta", "State", "FULLY_PRESENT", "wake", "set", "_updateExtensionsWantList", "onDispose", "delete", "cancelWithContext", "wait", "createExtension", "extension", "BlobSyncExtension", "onOpen", "add", "updateWantList", "_getWantList", "onClose", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "trackLeaks", "path", "synchronized", "subtleCrypto", "invariant", "PublicKey", "schema", "BlobMeta", "BitField", "arrayToBuffer", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "getCodecForType", "BlobStore", "constructor", "_directory", "getMeta", "id", "_getMeta", "get", "options", "metadata", "Error", "offset", "length", "state", "State", "FULLY_PRESENT", "file", "_getDataFile", "read", "undefined", "beginChunk", "Math", "floor", "chunkSize", "endChunk", "ceil", "bitfield", "present", "count", "list", "files", "Set", "map", "f", "split", "res", "from", "asUint8Array", "meta", "push", "set", "data", "Uint8Array", "digest", "ones", "created", "Date", "updated", "write", "_writeMeta", "setChunk", "chunk", "totalLength", "PARTIALLY_PRESENT", "zeros", "chunkOffset", "payload", "encoded", "encode", "Buffer", "alloc", "writeUInt32LE", "copy", "_getMetaFile", "size", "stat", "protoSize", "readUInt32LE", "decode", "subarray", "getOrCreateFile", "join", "toString"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytes":24170,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytes":17801,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}]},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytes":22348,"imports":[{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytes":703,"imports":[{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts","kind":"import-statement","original":"./blob-store"}]}},"outputs":{"packages/core/mesh/teleport-extension-object-sync/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29874},"packages/core/mesh/teleport-extension-object-sync/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["BlobStore","BlobSync","BlobSyncExtension","DEFAULT_CHUNK_SIZE"],"entryPoint":"packages/core/mesh/teleport-extension-object-sync/src/index.ts","inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytesInOutput":7174},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytesInOutput":5315},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytesInOutput":6535}},"bytes":19395}}}
1
+ {"inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytes":24170,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytes":17801,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytes":22348,"imports":[{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytes":703,"imports":[{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts","kind":"import-statement","original":"./blob-store"}],"format":"esm"}},"outputs":{"packages/core/mesh/teleport-extension-object-sync/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29831},"packages/core/mesh/teleport-extension-object-sync/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["BlobStore","BlobSync","BlobSyncExtension","DEFAULT_CHUNK_SIZE"],"entryPoint":"packages/core/mesh/teleport-extension-object-sync/src/index.ts","inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytesInOutput":7109},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytesInOutput":0},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytesInOutput":5176},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytesInOutput":6568}},"bytes":19224}}}
@@ -217,11 +217,10 @@ var BlobSyncExtension = class extends import_teleport.RpcExtension {
217
217
  this._upload.schedule();
218
218
  }
219
219
  async _pickBlobChunks(amount = 1) {
220
- var _a, _b;
221
220
  if (this._ctx.disposed) {
222
221
  return;
223
222
  }
224
- if (!this.remoteWantList.blobs || ((_a = this.remoteWantList.blobs) == null ? void 0 : _a.length) === 0) {
223
+ if (!this.remoteWantList.blobs || this.remoteWantList.blobs?.length === 0) {
225
224
  return;
226
225
  }
227
226
  const shuffled = [
@@ -272,7 +271,7 @@ var BlobSyncExtension = class extends import_teleport.RpcExtension {
272
271
  });
273
272
  continue;
274
273
  }
275
- const requestBitfield = (_b = header.bitfield) != null ? _b : import_util.BitField.ones(meta.length / meta.chunkSize);
274
+ const requestBitfield = header.bitfield ?? import_util.BitField.ones(meta.length / meta.chunkSize);
276
275
  const presentData = import_util.BitField.and(requestBitfield, meta.bitfield);
277
276
  const chunkIndices = import_util.BitField.findIndexes(presentData).sort(() => Math.random() - 0.5);
278
277
  for (const idx of chunkIndices) {
@@ -357,11 +356,11 @@ var BlobSync = class BlobSync2 {
357
356
  counter: 1,
358
357
  want: {
359
358
  id,
360
- chunkSize: meta == null ? void 0 : meta.chunkSize,
361
- bitfield: (meta == null ? void 0 : meta.bitfield) && Uint8Array.from(import_util2.BitField.invert(meta.bitfield))
359
+ chunkSize: meta?.chunkSize,
360
+ bitfield: meta?.bitfield && Uint8Array.from(import_util2.BitField.invert(meta.bitfield))
362
361
  }
363
362
  };
364
- if ((meta == null ? void 0 : meta.state) === import_blob.BlobMeta.State.FULLY_PRESENT) {
363
+ if (meta?.state === import_blob.BlobMeta.State.FULLY_PRESENT) {
365
364
  request2.trigger.wake();
366
365
  } else {
367
366
  this._downloadRequests.set(id, request2);
@@ -369,7 +368,7 @@ var BlobSync = class BlobSync2 {
369
368
  }
370
369
  return request2;
371
370
  });
372
- ctx == null ? void 0 : ctx.onDispose(() => this._lock.executeSynchronized(async () => {
371
+ ctx?.onDispose(() => this._lock.executeSynchronized(async () => {
373
372
  const request2 = this._downloadRequests.get(id);
374
373
  if (!request2) {
375
374
  return;
@@ -404,7 +403,6 @@ var BlobSync = class BlobSync2 {
404
403
  this._extensions.delete(extension);
405
404
  },
406
405
  onPush: async (blobChunk) => {
407
- var _a;
408
406
  if (!this._downloadRequests.has(blobChunk.id)) {
409
407
  return;
410
408
  }
@@ -418,7 +416,7 @@ var BlobSync = class BlobSync2 {
418
416
  });
419
417
  const meta = await this._params.blobStore.setChunk(blobChunk);
420
418
  if (meta.state === import_blob.BlobMeta.State.FULLY_PRESENT) {
421
- (_a = this._downloadRequests.get(blobChunk.id)) == null ? void 0 : _a.trigger.wake();
419
+ this._downloadRequests.get(blobChunk.id)?.trigger.wake();
422
420
  this._downloadRequests.delete(blobChunk.id);
423
421
  } else {
424
422
  (0, import_invariant2.invariant)(meta.bitfield, void 0, {
@@ -560,8 +558,8 @@ var BlobStore = class {
560
558
  length: data.length,
561
559
  chunkSize: DEFAULT_CHUNK_SIZE,
562
560
  bitfield,
563
- created: new Date(),
564
- updated: new Date()
561
+ created: /* @__PURE__ */ new Date(),
562
+ updated: /* @__PURE__ */ new Date()
565
563
  };
566
564
  await this._getDataFile(id).write(0, (0, import_util3.arrayToBuffer)(data));
567
565
  await this._writeMeta(id, meta);
@@ -569,7 +567,6 @@ var BlobStore = class {
569
567
  }
570
568
  // TODO(dmaretskyi): Optimize locking.
571
569
  async setChunk(chunk) {
572
- var _a;
573
570
  let meta = await this._getMeta(chunk.id);
574
571
  if (!meta) {
575
572
  (0, import_invariant3.invariant)(chunk.totalLength, "totalLength is not present", {
@@ -585,8 +582,8 @@ var BlobStore = class {
585
582
  id: chunk.id,
586
583
  state: import_blob2.BlobMeta.State.PARTIALLY_PRESENT,
587
584
  length: chunk.totalLength,
588
- chunkSize: (_a = chunk.chunkSize) != null ? _a : DEFAULT_CHUNK_SIZE,
589
- created: new Date()
585
+ chunkSize: chunk.chunkSize ?? DEFAULT_CHUNK_SIZE,
586
+ created: /* @__PURE__ */ new Date()
590
587
  };
591
588
  meta.bitfield = import_util3.BitField.zeros(meta.length / meta.chunkSize);
592
589
  }
@@ -616,7 +613,7 @@ var BlobStore = class {
616
613
  if (import_util3.BitField.count(meta.bitfield, 0, meta.length) * meta.chunkSize >= meta.length) {
617
614
  meta.state = import_blob2.BlobMeta.State.FULLY_PRESENT;
618
615
  }
619
- meta.updated = new Date();
616
+ meta.updated = /* @__PURE__ */ new Date();
620
617
  await this._writeMeta(chunk.id, meta);
621
618
  return meta;
622
619
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts", "../../../src/blob-sync-extension.ts", "../../../src/blob-sync.ts", "../../../src/blob-store.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nexport * from './blob-sync-extension';\nexport * from './blob-sync';\nexport * from './blob-store';\n", "//\n\n//\n// Copyright 2023 DXOS.org\n//\n\nimport { DeferredTask, sleep, synchronized } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { RpcClosedError, schema } from '@dxos/protocols';\nimport { BlobChunk, BlobSyncService, WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { ExtensionContext, RpcExtension } from '@dxos/teleport';\nimport { BitField } from '@dxos/util';\n\nimport { BlobStore } from './blob-store';\n\nexport type BlobSyncExtensionParams = {\n blobStore: BlobStore;\n onOpen: () => Promise<void>;\n onClose: () => Promise<void>;\n onPush: (data: BlobChunk) => Promise<void>;\n};\n\nconst MIN_WANT_LIST_UPDATE_INTERVAL = 500;\n\nconst MAX_CONCURRENT_UPLOADS = 20;\n\n/**\n * Manages replication between a set of feeds for a single teleport session.\n */\nexport class BlobSyncExtension extends RpcExtension<ServiceBundle, ServiceBundle> {\n private readonly _ctx = new Context({ onError: (err) => log.catch(err) });\n\n private _lastWantListUpdate = 0;\n private _localWantList: WantList = { blobs: [] };\n\n private readonly _updateWantList = new DeferredTask(this._ctx, async () => {\n // Throttle want list updates.\n if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {\n await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());\n if (this._ctx.disposed) {\n return;\n }\n }\n\n log('want', { list: this._localWantList });\n await this.rpc.BlobSyncService.want(this._localWantList);\n this._lastWantListUpdate = Date.now();\n });\n\n private _currentUploads = 0;\n\n private readonly _upload = new DeferredTask(this._ctx, async () => {\n if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {\n return;\n }\n const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);\n if (!blobChunks) {\n return;\n }\n for (const blobChunk of blobChunks) {\n if (this._ctx.disposed) {\n break;\n }\n\n this._currentUploads++;\n\n this.push(blobChunk)\n .catch((err) => {\n if (err instanceof RpcClosedError) {\n return;\n }\n log.warn('push failed', { err });\n })\n .finally(() => {\n this._currentUploads--;\n this.reconcileUploads();\n });\n }\n });\n\n /**\n * Set of id's remote peer wants.\n */\n public remoteWantList: WantList = { blobs: [] };\n\n constructor(\n private readonly _params: BlobSyncExtensionParams, // to not conflict with the base class\n ) {\n super({\n exposed: {\n BlobSyncService: schema.getService('dxos.mesh.teleport.blobsync.BlobSyncService'),\n },\n requested: {\n BlobSyncService: schema.getService('dxos.mesh.teleport.blobsync.BlobSyncService'),\n },\n timeout: 20_000,\n encodingOptions: {\n preserveAny: true,\n },\n });\n }\n\n override async onOpen(context: ExtensionContext): Promise<void> {\n log('open');\n await super.onOpen(context);\n await this._params.onOpen();\n }\n\n override async onClose(err?: Error | undefined): Promise<void> {\n log('close');\n await this._ctx.dispose();\n await this._params.onClose();\n await super.onClose(err);\n }\n\n protected async getHandlers(): Promise<ServiceBundle> {\n return {\n BlobSyncService: {\n want: async (wantList) => {\n log('remote want', { remoteWantList: wantList });\n this.remoteWantList = wantList;\n this.reconcileUploads();\n },\n push: async (data) => {\n log('received', { data });\n await this._params.onPush(data);\n },\n },\n };\n }\n\n @synchronized\n async push(data: BlobChunk) {\n if (this._ctx.disposed) {\n return;\n }\n log('push', { data });\n await this.rpc.BlobSyncService.push(data);\n }\n\n updateWantList(wantList: WantList) {\n if (this._ctx.disposed) {\n return;\n }\n this._localWantList = wantList;\n this._updateWantList.schedule();\n }\n\n reconcileUploads() {\n if (this._ctx.disposed) {\n return;\n }\n this._upload.schedule();\n }\n\n private async _pickBlobChunks(amount = 1): Promise<BlobChunk[] | void> {\n if (this._ctx.disposed) {\n return;\n }\n\n if (!this.remoteWantList.blobs || this.remoteWantList.blobs?.length === 0) {\n return;\n }\n\n const shuffled = [...this.remoteWantList.blobs].sort(() => Math.random() - 0.5);\n\n const chunks: BlobChunk[] = [];\n\n for (const header of shuffled) {\n const meta = await this._params.blobStore.getMeta(header.id);\n\n if (!meta) {\n // Skip this header\n continue;\n }\n invariant(meta.bitfield);\n invariant(meta.chunkSize);\n invariant(meta.length);\n\n if (header.chunkSize && header.chunkSize !== meta.chunkSize) {\n log.warn('Invalid chunk size', { header, meta });\n continue;\n }\n\n const requestBitfield = header.bitfield ?? BitField.ones(meta.length / meta.chunkSize);\n\n const presentData = BitField.and(requestBitfield, meta.bitfield);\n const chunkIndices = BitField.findIndexes(presentData).sort(() => Math.random() - 0.5);\n\n for (const idx of chunkIndices) {\n const chunkData = await this._params.blobStore.get(header.id, {\n offset: idx * meta.chunkSize,\n length: Math.min(meta.chunkSize, meta.length - idx * meta.chunkSize),\n });\n chunks.push({\n id: header.id,\n totalLength: meta.length,\n chunkSize: meta.chunkSize,\n chunkOffset: idx * meta.chunkSize,\n payload: chunkData,\n });\n\n if (chunks.length >= amount) {\n return chunks;\n }\n }\n }\n\n return chunks;\n }\n}\n\ntype ServiceBundle = {\n BlobSyncService: BlobSyncService;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trackLeaks, Trigger, Lock } from '@dxos/async';\nimport { cancelWithContext, Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { BitField, ComplexMap } from '@dxos/util';\n\nimport { BlobStore } from './blob-store';\nimport { BlobSyncExtension } from './blob-sync-extension';\n\nexport type BlobSyncParams = {\n blobStore: BlobStore;\n};\n\ntype DownloadRequest = {\n trigger: Trigger<void>;\n counter: number;\n want: WantList.Entry;\n};\n\n// TODO(dmaretskyi): Rename to blob-sync.\n@trackLeaks('open', 'close')\nexport class BlobSync {\n private readonly _ctx = new Context();\n private readonly _lock = new Lock();\n\n private readonly _downloadRequests = new ComplexMap<Uint8Array, DownloadRequest>((key) =>\n PublicKey.from(key).toHex(),\n );\n\n private readonly _extensions = new Set<BlobSyncExtension>();\n\n constructor(private readonly _params: BlobSyncParams) {}\n\n async open() {}\n\n async close() {\n await this._ctx.dispose();\n }\n\n /**\n * Resolves when the object with the given id is fully downloaded in the blob store.\n *\n * @param id hex-encoded id of the object to download.\n */\n async download(ctx: Context, id: Uint8Array): Promise<void> {\n log('download', { id });\n const request = await this._lock.executeSynchronized(async () => {\n const existingRequest = this._downloadRequests.get(id);\n\n if (existingRequest) {\n existingRequest.counter++;\n return existingRequest;\n }\n\n const meta = await this._params.blobStore.getMeta(id);\n const request: DownloadRequest = {\n trigger: new Trigger(),\n counter: 1,\n want: {\n id,\n chunkSize: meta?.chunkSize,\n bitfield: meta?.bitfield && Uint8Array.from(BitField.invert(meta.bitfield)),\n },\n };\n\n // Check if the object is already fully downloaded.\n if (meta?.state === BlobMeta.State.FULLY_PRESENT) {\n request.trigger.wake();\n } else {\n this._downloadRequests.set(id, request);\n this._updateExtensionsWantList();\n }\n\n return request;\n });\n\n ctx?.onDispose(() =>\n this._lock.executeSynchronized(async () => {\n // Remove request if context is disposed and nobody else requests it.\n const request = this._downloadRequests.get(id);\n if (!request) {\n return;\n }\n if (--request.counter === 0) {\n this._downloadRequests.delete(id);\n }\n this._updateExtensionsWantList();\n }),\n );\n\n return ctx ? cancelWithContext(ctx, request.trigger.wait()) : request.trigger.wait();\n }\n\n createExtension() {\n const extension = new BlobSyncExtension({\n blobStore: this._params.blobStore,\n onOpen: async () => {\n log('extension opened');\n this._extensions.add(extension);\n extension.updateWantList(this._getWantList());\n },\n onClose: async () => {\n log('extension closed');\n this._extensions.delete(extension);\n },\n onPush: async (blobChunk) => {\n if (!this._downloadRequests.has(blobChunk.id)) {\n return;\n }\n log('received', { blobChunk });\n const meta = await this._params.blobStore.setChunk(blobChunk);\n if (meta.state === BlobMeta.State.FULLY_PRESENT) {\n this._downloadRequests.get(blobChunk.id)?.trigger.wake();\n this._downloadRequests.delete(blobChunk.id);\n } else {\n invariant(meta.bitfield);\n this._downloadRequests.get(blobChunk.id)!.want.bitfield = BitField.invert(meta.bitfield);\n }\n\n this._updateExtensionsWantList();\n this._reconcileUploads();\n },\n });\n return extension;\n }\n\n /**\n * Notify extensions that a blob with the given id was added to the blob store.\n */\n async notifyBlobAdded(_id: Uint8Array) {\n this._reconcileUploads();\n }\n\n private _getWantList(): WantList {\n return {\n blobs: Array.from(this._downloadRequests.values()).map((request) => request.want),\n };\n }\n\n private _reconcileUploads() {\n for (const extension of this._extensions) {\n extension.reconcileUploads();\n }\n }\n\n private _updateExtensionsWantList() {\n for (const extension of this._extensions) {\n extension.updateWantList(this._getWantList());\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport path from 'node:path';\n\nimport { synchronized } from '@dxos/async';\nimport { subtleCrypto } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { schema } from '@dxos/protocols';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { BlobChunk } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { Directory } from '@dxos/random-access-storage';\nimport { BitField, arrayToBuffer } from '@dxos/util';\n\nexport type GetOptions = {\n offset?: number;\n length?: number;\n};\n\nexport const DEFAULT_CHUNK_SIZE = 4096;\n\nconst BlobMetaCodec = schema.getCodecForType('dxos.echo.blob.BlobMeta');\n\nexport class BlobStore {\n // prettier-ignore\n constructor(\n private readonly _directory: Directory\n ) { }\n\n @synchronized\n async getMeta(id: Uint8Array): Promise<BlobMeta | undefined> {\n return this._getMeta(id);\n }\n\n /**\n * @throws If range is not available.\n */\n @synchronized\n async get(id: Uint8Array, options: GetOptions = {}): Promise<Uint8Array> {\n const metadata = await this._getMeta(id);\n\n if (!metadata) {\n throw new Error('Blob not available');\n }\n\n const { offset = 0, length = metadata.length } = options;\n\n if (offset + length > metadata.length) {\n throw new Error('Invalid range');\n }\n\n if (metadata.state === BlobMeta.State.FULLY_PRESENT) {\n const file = this._getDataFile(id);\n return file.read(offset, length);\n } else if (options.offset === undefined && options.length === undefined) {\n throw new Error('Blob not available');\n }\n\n const beginChunk = Math.floor(offset / metadata.chunkSize);\n const endChunk = Math.ceil((offset + length) / metadata.chunkSize);\n\n invariant(metadata.bitfield, 'Bitfield not present');\n invariant(metadata.bitfield.length * 8 >= endChunk, 'Invalid bitfield length');\n\n const present = BitField.count(metadata.bitfield, beginChunk, endChunk) === endChunk - beginChunk;\n\n if (!present) {\n throw new Error('Blob not available');\n }\n\n const file = this._getDataFile(id);\n return file.read(offset, length);\n }\n\n @synchronized\n async list(): Promise<BlobMeta[]> {\n /*\n Weird path formatting:\n\n \"e9b9aa7a21c2c55a9eca333cd59975633157562ca0a0f4f243d4778f192c291e_meta\"\n \"e9b9aa7a21c2c55a9eca333cd59975633157562ca0a0f4f243d4778f192c291e_data\"\n \"5001de5a47191357c075aeee6451c4cc323f3a8ada24dd1191e83403608a38d5_meta\n */\n const files = new Set((await this._directory.list()).map((f) => f.split('_')[0]));\n\n const res: BlobMeta[] = [];\n\n for (const file of files) {\n const id = PublicKey.from(file).asUint8Array();\n const meta = await this._getMeta(id);\n if (meta) {\n res.push(meta);\n }\n }\n\n return res;\n }\n\n @synchronized\n async set(data: Uint8Array): Promise<BlobMeta> {\n const id = new Uint8Array(await subtleCrypto.digest('SHA-256', data));\n const bitfield = BitField.ones(data.length / DEFAULT_CHUNK_SIZE);\n\n const meta: BlobMeta = {\n id,\n state: BlobMeta.State.FULLY_PRESENT,\n length: data.length,\n chunkSize: DEFAULT_CHUNK_SIZE,\n bitfield,\n created: new Date(),\n updated: new Date(),\n };\n\n await this._getDataFile(id).write(0, arrayToBuffer(data));\n await this._writeMeta(id, meta);\n return meta;\n }\n\n // TODO(dmaretskyi): Optimize locking.\n @synchronized\n async setChunk(chunk: BlobChunk): Promise<BlobMeta> {\n // Init metadata.\n let meta = await this._getMeta(chunk.id);\n if (!meta) {\n invariant(chunk.totalLength, 'totalLength is not present');\n meta = {\n id: chunk.id,\n state: BlobMeta.State.PARTIALLY_PRESENT,\n length: chunk.totalLength,\n chunkSize: chunk.chunkSize ?? DEFAULT_CHUNK_SIZE,\n created: new Date(),\n };\n meta.bitfield = BitField.zeros(meta.length / meta.chunkSize);\n }\n\n if (chunk.chunkSize && chunk.chunkSize !== meta.chunkSize) {\n throw new Error('Invalid chunk size');\n }\n\n invariant(meta.bitfield, 'Bitfield not present');\n invariant(chunk.chunkOffset !== undefined, 'chunkOffset is not present');\n\n // Write chunk.\n await this._getDataFile(chunk.id).write(chunk.chunkOffset, arrayToBuffer(chunk.payload));\n\n // Update bitfield.\n BitField.set(meta.bitfield, Math.floor(chunk.chunkOffset / meta.chunkSize), true);\n\n // Update metadata.\n if (BitField.count(meta.bitfield, 0, meta.length) * meta.chunkSize >= meta.length) {\n meta.state = BlobMeta.State.FULLY_PRESENT;\n }\n meta.updated = new Date();\n\n await this._writeMeta(chunk.id, meta);\n\n return meta;\n }\n\n private async _writeMeta(id: Uint8Array, meta: BlobMeta): Promise<void> {\n const encoded = arrayToBuffer(BlobMetaCodec.encode(meta));\n const data = Buffer.alloc(encoded.length + 4);\n data.writeUInt32LE(encoded.length, 0);\n encoded.copy(data, 4);\n\n // Write metadata.\n await this._getMetaFile(id).write(0, data);\n }\n\n private async _getMeta(id: Uint8Array): Promise<BlobMeta | undefined> {\n const file = this._getMetaFile(id);\n const size = (await file.stat()).size;\n if (size === 0) {\n return;\n }\n const data = await file.read(0, size);\n const protoSize = data.readUInt32LE(0);\n return BlobMetaCodec.decode(data.subarray(4, protoSize + 4));\n }\n\n private _getMetaFile(id: Uint8Array) {\n return this._directory.getOrCreateFile(path.join(arrayToBuffer(id).toString('hex'), 'meta'));\n }\n\n private _getDataFile(id: Uint8Array) {\n return this._directory.getOrCreateFile(path.join(arrayToBuffer(id).toString('hex'), 'data'));\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["MIN_WANT_LIST_UPDATE_INTERVAL", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "RpcExtension", "constructor", "_params", "exposed", "BlobSyncService", "schema", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "_ctx", "Context", "onError", "err", "log", "catch", "_lastWantListUpdate", "_localWantList", "blobs", "_updateWantList", "DeferredTask", "Date", "now", "sleep", "disposed", "list", "rpc", "want", "_currentUploads", "_upload", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "RpcClosedError", "warn", "finally", "reconcileUploads", "remoteWantList", "onOpen", "context", "onClose", "dispose", "getHandlers", "wantList", "data", "onPush", "updateWantList", "schedule", "amount", "length", "shuffled", "sort", "Math", "random", "chunks", "header", "meta", "blobStore", "getMeta", "id", "invariant", "bitfield", "chunkSize", "requestBitfield", "BitField", "ones", "presentData", "and", "chunkIndices", "findIndexes", "idx", "chunkData", "get", "offset", "min", "totalLength", "chunkOffset", "payload", "synchronized", "import_async", "import_context", "import_invariant", "import_log", "import_util", "BlobSync", "constructor", "_params", "_ctx", "Context", "_lock", "Lock", "_downloadRequests", "ComplexMap", "key", "PublicKey", "from", "toHex", "_extensions", "Set", "open", "close", "dispose", "download", "ctx", "id", "log", "request", "executeSynchronized", "existingRequest", "get", "counter", "meta", "blobStore", "getMeta", "trigger", "Trigger", "want", "chunkSize", "bitfield", "Uint8Array", "BitField", "invert", "state", "BlobMeta", "State", "FULLY_PRESENT", "wake", "set", "_updateExtensionsWantList", "onDispose", "delete", "cancelWithContext", "wait", "createExtension", "extension", "BlobSyncExtension", "onOpen", "add", "updateWantList", "_getWantList", "onClose", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "trackLeaks", "import_async", "import_invariant", "import_keys", "import_protocols", "import_blob", "import_util", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "schema", "getCodecForType", "BlobStore", "constructor", "_directory", "getMeta", "id", "_getMeta", "get", "options", "metadata", "Error", "offset", "length", "state", "BlobMeta", "State", "FULLY_PRESENT", "file", "_getDataFile", "read", "undefined", "beginChunk", "Math", "floor", "chunkSize", "endChunk", "ceil", "invariant", "bitfield", "present", "BitField", "count", "list", "files", "Set", "map", "f", "split", "res", "PublicKey", "from", "asUint8Array", "meta", "push", "set", "data", "Uint8Array", "subtleCrypto", "digest", "ones", "created", "Date", "updated", "write", "arrayToBuffer", "_writeMeta", "setChunk", "chunk", "totalLength", "PARTIALLY_PRESENT", "zeros", "chunkOffset", "payload", "encoded", "encode", "Buffer", "alloc", "writeUInt32LE", "copy", "_getMetaFile", "size", "stat", "protoSize", "readUInt32LE", "decode", "subarray", "getOrCreateFile", "path", "join", "toString", "synchronized"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytes":24170,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytes":17801,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}]},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytes":22348,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytes":703,"imports":[{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts","kind":"import-statement","original":"./blob-store"}]}},"outputs":{"packages/core/mesh/teleport-extension-object-sync/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29937},"packages/core/mesh/teleport-extension-object-sync/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/protocols","kind":"require-call","external":true},{"path":"@dxos/teleport","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"node:path","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/crypto","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"@dxos/protocols","kind":"require-call","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/core/mesh/teleport-extension-object-sync/src/index.ts","inputs":{"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytesInOutput":245},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytesInOutput":7537},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytesInOutput":5493},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytesInOutput":6933}},"bytes":22088}}}
1
+ {"inputs":{"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytes":24170,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytes":17801,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","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/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytes":22348,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytes":703,"imports":[{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts","kind":"import-statement","original":"./blob-store"}],"format":"esm"}},"outputs":{"packages/core/mesh/teleport-extension-object-sync/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29894},"packages/core/mesh/teleport-extension-object-sync/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/protocols","kind":"require-call","external":true},{"path":"@dxos/teleport","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"node:path","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/crypto","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"@dxos/protocols","kind":"require-call","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/core/mesh/teleport-extension-object-sync/src/index.ts","inputs":{"packages/core/mesh/teleport-extension-object-sync/src/index.ts":{"bytesInOutput":245},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync-extension.ts":{"bytesInOutput":7472},"packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts":{"bytesInOutput":5354},"packages/core/mesh/teleport-extension-object-sync/src/blob-store.ts":{"bytesInOutput":6966}},"bytes":21917}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/teleport-extension-object-sync",
3
- "version": "0.1.56-main.d9d1c3e",
3
+ "version": "0.1.56-main.da2eab1",
4
4
  "description": "Teleport extension to synchronize opaque data objects.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,19 +16,19 @@
16
16
  "src"
17
17
  ],
18
18
  "dependencies": {
19
- "@dxos/async": "0.1.56-main.d9d1c3e",
20
- "@dxos/context": "0.1.56-main.d9d1c3e",
21
- "@dxos/crypto": "0.1.56-main.d9d1c3e",
22
- "@dxos/debug": "0.1.56-main.d9d1c3e",
23
- "@dxos/invariant": "0.1.56-main.d9d1c3e",
24
- "@dxos/keys": "0.1.56-main.d9d1c3e",
25
- "@dxos/log": "0.1.56-main.d9d1c3e",
26
- "@dxos/node-std": "0.1.56-main.d9d1c3e",
27
- "@dxos/protocols": "0.1.56-main.d9d1c3e",
28
- "@dxos/random-access-storage": "0.1.56-main.d9d1c3e",
29
- "@dxos/rpc": "0.1.56-main.d9d1c3e",
30
- "@dxos/teleport": "0.1.56-main.d9d1c3e",
31
- "@dxos/util": "0.1.56-main.d9d1c3e"
19
+ "@dxos/async": "0.1.56-main.da2eab1",
20
+ "@dxos/context": "0.1.56-main.da2eab1",
21
+ "@dxos/crypto": "0.1.56-main.da2eab1",
22
+ "@dxos/debug": "0.1.56-main.da2eab1",
23
+ "@dxos/invariant": "0.1.56-main.da2eab1",
24
+ "@dxos/keys": "0.1.56-main.da2eab1",
25
+ "@dxos/log": "0.1.56-main.da2eab1",
26
+ "@dxos/node-std": "0.1.56-main.da2eab1",
27
+ "@dxos/protocols": "0.1.56-main.da2eab1",
28
+ "@dxos/random-access-storage": "0.1.56-main.da2eab1",
29
+ "@dxos/rpc": "0.1.56-main.da2eab1",
30
+ "@dxos/teleport": "0.1.56-main.da2eab1",
31
+ "@dxos/util": "0.1.56-main.da2eab1"
32
32
  },
33
33
  "devDependencies": {
34
34
  "typescript": "^5.0.4"