@dxos/teleport-extension-object-sync 0.8.4-main.28f8d3d → 0.8.4-main.2c6827d

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.
@@ -20,16 +20,77 @@ var MIN_WANT_LIST_UPDATE_INTERVAL = false ? 5 : 500;
20
20
  var MAX_CONCURRENT_UPLOADS = 20;
21
21
  var BlobSyncExtension = class extends RpcExtension {
22
22
  _params;
23
- _ctx;
24
- _lastWantListUpdate;
25
- _localWantList;
26
- _updateWantList;
27
- _currentUploads;
28
- _upload;
23
+ _ctx = new Context({
24
+ onError: (err) => log.catch(err, void 0, {
25
+ F: __dxlog_file,
26
+ L: 35,
27
+ S: this,
28
+ C: (f, a) => f(...a)
29
+ })
30
+ }, {
31
+ F: __dxlog_file,
32
+ L: 35
33
+ });
34
+ _lastWantListUpdate = 0;
35
+ _localWantList = {
36
+ blobs: []
37
+ };
38
+ _updateWantList = new DeferredTask(this._ctx, async () => {
39
+ if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {
40
+ await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());
41
+ if (this._ctx.disposed) {
42
+ return;
43
+ }
44
+ }
45
+ log("want", {
46
+ list: this._localWantList
47
+ }, {
48
+ F: __dxlog_file,
49
+ L: 49,
50
+ S: this,
51
+ C: (f, a) => f(...a)
52
+ });
53
+ await this.rpc.BlobSyncService.want(this._localWantList);
54
+ this._lastWantListUpdate = Date.now();
55
+ });
56
+ _currentUploads = 0;
57
+ _upload = new DeferredTask(this._ctx, async () => {
58
+ if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {
59
+ return;
60
+ }
61
+ const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);
62
+ if (!blobChunks) {
63
+ return;
64
+ }
65
+ for (const blobChunk of blobChunks) {
66
+ if (this._ctx.disposed) {
67
+ break;
68
+ }
69
+ this._currentUploads++;
70
+ this.push(blobChunk).catch((err) => {
71
+ if (err instanceof RpcClosedError) {
72
+ return;
73
+ }
74
+ log.warn("push failed", {
75
+ err
76
+ }, {
77
+ F: __dxlog_file,
78
+ L: 76,
79
+ S: this,
80
+ C: (f, a) => f(...a)
81
+ });
82
+ }).finally(() => {
83
+ this._currentUploads--;
84
+ this.reconcileUploads();
85
+ });
86
+ }
87
+ });
29
88
  /**
30
89
  * Set of id's remote peer wants.
31
90
  */
32
- remoteWantList;
91
+ remoteWantList = {
92
+ blobs: []
93
+ };
33
94
  constructor(_params) {
34
95
  super({
35
96
  exposed: {
@@ -42,68 +103,7 @@ var BlobSyncExtension = class extends RpcExtension {
42
103
  encodingOptions: {
43
104
  preserveAny: true
44
105
  }
45
- }), this._params = _params, this._ctx = new Context({
46
- onError: (err) => log.catch(err, void 0, {
47
- F: __dxlog_file,
48
- L: 35,
49
- S: this,
50
- C: (f, a) => f(...a)
51
- })
52
- }, {
53
- F: __dxlog_file,
54
- L: 35
55
- }), this._lastWantListUpdate = 0, this._localWantList = {
56
- blobs: []
57
- }, this._updateWantList = new DeferredTask(this._ctx, async () => {
58
- if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {
59
- await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());
60
- if (this._ctx.disposed) {
61
- return;
62
- }
63
- }
64
- log("want", {
65
- list: this._localWantList
66
- }, {
67
- F: __dxlog_file,
68
- L: 49,
69
- S: this,
70
- C: (f, a) => f(...a)
71
- });
72
- await this.rpc.BlobSyncService.want(this._localWantList);
73
- this._lastWantListUpdate = Date.now();
74
- }), this._currentUploads = 0, this._upload = new DeferredTask(this._ctx, async () => {
75
- if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {
76
- return;
77
- }
78
- const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);
79
- if (!blobChunks) {
80
- return;
81
- }
82
- for (const blobChunk of blobChunks) {
83
- if (this._ctx.disposed) {
84
- break;
85
- }
86
- this._currentUploads++;
87
- this.push(blobChunk).catch((err) => {
88
- if (err instanceof RpcClosedError) {
89
- return;
90
- }
91
- log.warn("push failed", {
92
- err
93
- }, {
94
- F: __dxlog_file,
95
- L: 76,
96
- S: this,
97
- C: (f, a) => f(...a)
98
- });
99
- }).finally(() => {
100
- this._currentUploads--;
101
- this.reconcileUploads();
102
- });
103
- }
104
- }), this.remoteWantList = {
105
- blobs: []
106
- };
106
+ }), this._params = _params;
107
107
  }
108
108
  async onOpen(context) {
109
109
  log("open", void 0, {
@@ -292,19 +292,15 @@ function _ts_decorate2(decorators, target, key, desc) {
292
292
  var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts";
293
293
  var BlobSync = class {
294
294
  _params;
295
- _ctx;
296
- _mutex;
297
- _downloadRequests;
298
- _extensions;
295
+ _ctx = new Context2(void 0, {
296
+ F: __dxlog_file2,
297
+ L: 30
298
+ });
299
+ _mutex = new Mutex();
300
+ _downloadRequests = new ComplexMap((key) => PublicKey.from(key).toHex());
301
+ _extensions = /* @__PURE__ */ new Set();
299
302
  constructor(_params) {
300
303
  this._params = _params;
301
- this._ctx = new Context2(void 0, {
302
- F: __dxlog_file2,
303
- L: 30
304
- });
305
- this._mutex = new Mutex();
306
- this._downloadRequests = new ComplexMap((key) => PublicKey.from(key).toHex());
307
- this._extensions = /* @__PURE__ */ new Set();
308
304
  }
309
305
  async open() {
310
306
  }
@@ -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 } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type BlobChunk, type BlobSyncService, type WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { type ExtensionContext, RpcExtension } from '@dxos/teleport';\nimport { BitField } from '@dxos/util';\n\nimport { type BlobStore } from './blob-store';\n\nexport type BlobSyncExtensionParams = {\n blobStore: BlobStore;\n onOpen: () => Promise<void>;\n onClose: () => Promise<void>;\n onAbort: () => Promise<void>;\n onPush: (data: BlobChunk) => Promise<void>;\n};\n\nconst MIN_WANT_LIST_UPDATE_INTERVAL = process.env.NODE_ENV === 'test' ? 5 : 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 override async onAbort(err?: Error | undefined): Promise<void> {\n log('abort');\n await this._ctx.dispose();\n await this._params.onAbort();\n await super.onAbort(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): Promise<void> {\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): void {\n if (this._ctx.disposed) {\n return;\n }\n this._localWantList = wantList;\n this._updateWantList.schedule();\n }\n\n reconcileUploads(): void {\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 { Mutex, Trigger, trackLeaks } from '@dxos/async';\nimport { Context, cancelWithContext } 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 { type WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { BitField, ComplexMap } from '@dxos/util';\n\nimport { type 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 _mutex = new Mutex();\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(): Promise<void> {}\n\n async close(): Promise<void> {\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._mutex.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._mutex.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(): BlobSyncExtension {\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 onAbort: async () => {\n log('extension aborted');\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): Promise<void> {\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(): void {\n for (const extension of this._extensions) {\n extension.reconcileUploads();\n }\n }\n\n private _updateExtensionsWantList(): void {\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/proto';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { type BlobChunk } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { type 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 constructor(private readonly _directory: Directory) {}\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 as Uint8Array<ArrayBuffer>));\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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",
6
- "names": ["DeferredTask", "sleep", "synchronized", "Context", "invariant", "log", "RpcClosedError", "schema", "RpcExtension", "BitField", "MIN_WANT_LIST_UPDATE_INTERVAL", "process", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "_ctx", "_lastWantListUpdate", "_localWantList", "_updateWantList", "_currentUploads", "_upload", "remoteWantList", "_params", "exposed", "BlobSyncService", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "onError", "err", "catch", "blobs", "Date", "now", "disposed", "list", "rpc", "want", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "warn", "finally", "reconcileUploads", "onOpen", "context", "onClose", "dispose", "onAbort", "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", "Mutex", "Trigger", "trackLeaks", "Context", "cancelWithContext", "invariant", "PublicKey", "log", "BlobMeta", "BitField", "ComplexMap", "BlobSync", "_ctx", "_mutex", "_downloadRequests", "_extensions", "_params", "Context", "Mutex", "ComplexMap", "key", "PublicKey", "from", "toHex", "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", "onAbort", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "path", "synchronized", "subtleCrypto", "invariant", "PublicKey", "schema", "BlobMeta", "BitField", "arrayToBuffer", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "getCodecForType", "BlobStore", "_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"]
5
+ "mappings": "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",
6
+ "names": ["DeferredTask", "sleep", "synchronized", "Context", "invariant", "log", "RpcClosedError", "schema", "RpcExtension", "BitField", "MIN_WANT_LIST_UPDATE_INTERVAL", "process", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "_ctx", "onError", "err", "catch", "_lastWantListUpdate", "_localWantList", "blobs", "_updateWantList", "Date", "now", "disposed", "list", "rpc", "BlobSyncService", "want", "_currentUploads", "_upload", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "warn", "finally", "reconcileUploads", "remoteWantList", "_params", "exposed", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "onOpen", "context", "onClose", "dispose", "onAbort", "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", "Mutex", "Trigger", "trackLeaks", "Context", "cancelWithContext", "invariant", "PublicKey", "log", "BlobMeta", "BitField", "ComplexMap", "BlobSync", "_ctx", "Context", "_mutex", "Mutex", "_downloadRequests", "ComplexMap", "key", "PublicKey", "from", "toHex", "_extensions", "Set", "_params", "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", "onAbort", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "path", "synchronized", "subtleCrypto", "invariant", "PublicKey", "schema", "BlobMeta", "BitField", "arrayToBuffer", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "getCodecForType", "BlobStore", "_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":{"src/blob-sync-extension.ts":{"bytes":25313,"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/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/blob-sync.ts":{"bytes":18512,"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":"src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}],"format":"esm"},"src/blob-store.ts":{"bytes":22210,"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/proto","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"},"src/index.ts":{"bytes":690,"imports":[{"path":"src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"src/blob-store.ts","kind":"import-statement","original":"./blob-store"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":30504},"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/protocols/proto","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/proto","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":"src/index.ts","inputs":{"src/blob-sync-extension.ts":{"bytesInOutput":7547},"src/index.ts":{"bytesInOutput":0},"src/blob-sync.ts":{"bytesInOutput":5486},"src/blob-store.ts":{"bytesInOutput":6532}},"bytes":19786}}}
1
+ {"inputs":{"src/blob-sync-extension.ts":{"bytes":24804,"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/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/blob-sync.ts":{"bytes":18358,"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":"src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"}],"format":"esm"},"src/blob-store.ts":{"bytes":22210,"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/proto","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"},"src/index.ts":{"bytes":690,"imports":[{"path":"src/blob-sync-extension.ts","kind":"import-statement","original":"./blob-sync-extension"},{"path":"src/blob-sync.ts","kind":"import-statement","original":"./blob-sync"},{"path":"src/blob-store.ts","kind":"import-statement","original":"./blob-store"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":30374},"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/protocols/proto","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/proto","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":"src/index.ts","inputs":{"src/blob-sync-extension.ts":{"bytesInOutput":7288},"src/index.ts":{"bytesInOutput":0},"src/blob-sync.ts":{"bytesInOutput":5398},"src/blob-store.ts":{"bytesInOutput":6532}},"bytes":19439}}}
@@ -20,16 +20,77 @@ var MIN_WANT_LIST_UPDATE_INTERVAL = process.env.NODE_ENV === "test" ? 5 : 500;
20
20
  var MAX_CONCURRENT_UPLOADS = 20;
21
21
  var BlobSyncExtension = class extends RpcExtension {
22
22
  _params;
23
- _ctx;
24
- _lastWantListUpdate;
25
- _localWantList;
26
- _updateWantList;
27
- _currentUploads;
28
- _upload;
23
+ _ctx = new Context({
24
+ onError: (err) => log.catch(err, void 0, {
25
+ F: __dxlog_file,
26
+ L: 35,
27
+ S: this,
28
+ C: (f, a) => f(...a)
29
+ })
30
+ }, {
31
+ F: __dxlog_file,
32
+ L: 35
33
+ });
34
+ _lastWantListUpdate = 0;
35
+ _localWantList = {
36
+ blobs: []
37
+ };
38
+ _updateWantList = new DeferredTask(this._ctx, async () => {
39
+ if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {
40
+ await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());
41
+ if (this._ctx.disposed) {
42
+ return;
43
+ }
44
+ }
45
+ log("want", {
46
+ list: this._localWantList
47
+ }, {
48
+ F: __dxlog_file,
49
+ L: 49,
50
+ S: this,
51
+ C: (f, a) => f(...a)
52
+ });
53
+ await this.rpc.BlobSyncService.want(this._localWantList);
54
+ this._lastWantListUpdate = Date.now();
55
+ });
56
+ _currentUploads = 0;
57
+ _upload = new DeferredTask(this._ctx, async () => {
58
+ if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {
59
+ return;
60
+ }
61
+ const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);
62
+ if (!blobChunks) {
63
+ return;
64
+ }
65
+ for (const blobChunk of blobChunks) {
66
+ if (this._ctx.disposed) {
67
+ break;
68
+ }
69
+ this._currentUploads++;
70
+ this.push(blobChunk).catch((err) => {
71
+ if (err instanceof RpcClosedError) {
72
+ return;
73
+ }
74
+ log.warn("push failed", {
75
+ err
76
+ }, {
77
+ F: __dxlog_file,
78
+ L: 76,
79
+ S: this,
80
+ C: (f, a) => f(...a)
81
+ });
82
+ }).finally(() => {
83
+ this._currentUploads--;
84
+ this.reconcileUploads();
85
+ });
86
+ }
87
+ });
29
88
  /**
30
89
  * Set of id's remote peer wants.
31
90
  */
32
- remoteWantList;
91
+ remoteWantList = {
92
+ blobs: []
93
+ };
33
94
  constructor(_params) {
34
95
  super({
35
96
  exposed: {
@@ -42,68 +103,7 @@ var BlobSyncExtension = class extends RpcExtension {
42
103
  encodingOptions: {
43
104
  preserveAny: true
44
105
  }
45
- }), this._params = _params, this._ctx = new Context({
46
- onError: (err) => log.catch(err, void 0, {
47
- F: __dxlog_file,
48
- L: 35,
49
- S: this,
50
- C: (f, a) => f(...a)
51
- })
52
- }, {
53
- F: __dxlog_file,
54
- L: 35
55
- }), this._lastWantListUpdate = 0, this._localWantList = {
56
- blobs: []
57
- }, this._updateWantList = new DeferredTask(this._ctx, async () => {
58
- if (this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL > Date.now()) {
59
- await sleep(this._lastWantListUpdate + MIN_WANT_LIST_UPDATE_INTERVAL - Date.now());
60
- if (this._ctx.disposed) {
61
- return;
62
- }
63
- }
64
- log("want", {
65
- list: this._localWantList
66
- }, {
67
- F: __dxlog_file,
68
- L: 49,
69
- S: this,
70
- C: (f, a) => f(...a)
71
- });
72
- await this.rpc.BlobSyncService.want(this._localWantList);
73
- this._lastWantListUpdate = Date.now();
74
- }), this._currentUploads = 0, this._upload = new DeferredTask(this._ctx, async () => {
75
- if (this._currentUploads >= MAX_CONCURRENT_UPLOADS) {
76
- return;
77
- }
78
- const blobChunks = await this._pickBlobChunks(MAX_CONCURRENT_UPLOADS - this._currentUploads);
79
- if (!blobChunks) {
80
- return;
81
- }
82
- for (const blobChunk of blobChunks) {
83
- if (this._ctx.disposed) {
84
- break;
85
- }
86
- this._currentUploads++;
87
- this.push(blobChunk).catch((err) => {
88
- if (err instanceof RpcClosedError) {
89
- return;
90
- }
91
- log.warn("push failed", {
92
- err
93
- }, {
94
- F: __dxlog_file,
95
- L: 76,
96
- S: this,
97
- C: (f, a) => f(...a)
98
- });
99
- }).finally(() => {
100
- this._currentUploads--;
101
- this.reconcileUploads();
102
- });
103
- }
104
- }), this.remoteWantList = {
105
- blobs: []
106
- };
106
+ }), this._params = _params;
107
107
  }
108
108
  async onOpen(context) {
109
109
  log("open", void 0, {
@@ -292,19 +292,15 @@ function _ts_decorate2(decorators, target, key, desc) {
292
292
  var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/teleport-extension-object-sync/src/blob-sync.ts";
293
293
  var BlobSync = class {
294
294
  _params;
295
- _ctx;
296
- _mutex;
297
- _downloadRequests;
298
- _extensions;
295
+ _ctx = new Context2(void 0, {
296
+ F: __dxlog_file2,
297
+ L: 30
298
+ });
299
+ _mutex = new Mutex();
300
+ _downloadRequests = new ComplexMap((key) => PublicKey.from(key).toHex());
301
+ _extensions = /* @__PURE__ */ new Set();
299
302
  constructor(_params) {
300
303
  this._params = _params;
301
- this._ctx = new Context2(void 0, {
302
- F: __dxlog_file2,
303
- L: 30
304
- });
305
- this._mutex = new Mutex();
306
- this._downloadRequests = new ComplexMap((key) => PublicKey.from(key).toHex());
307
- this._extensions = /* @__PURE__ */ new Set();
308
304
  }
309
305
  async open() {
310
306
  }
@@ -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 } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type BlobChunk, type BlobSyncService, type WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { type ExtensionContext, RpcExtension } from '@dxos/teleport';\nimport { BitField } from '@dxos/util';\n\nimport { type BlobStore } from './blob-store';\n\nexport type BlobSyncExtensionParams = {\n blobStore: BlobStore;\n onOpen: () => Promise<void>;\n onClose: () => Promise<void>;\n onAbort: () => Promise<void>;\n onPush: (data: BlobChunk) => Promise<void>;\n};\n\nconst MIN_WANT_LIST_UPDATE_INTERVAL = process.env.NODE_ENV === 'test' ? 5 : 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 override async onAbort(err?: Error | undefined): Promise<void> {\n log('abort');\n await this._ctx.dispose();\n await this._params.onAbort();\n await super.onAbort(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): Promise<void> {\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): void {\n if (this._ctx.disposed) {\n return;\n }\n this._localWantList = wantList;\n this._updateWantList.schedule();\n }\n\n reconcileUploads(): void {\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 { Mutex, Trigger, trackLeaks } from '@dxos/async';\nimport { Context, cancelWithContext } 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 { type WantList } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { BitField, ComplexMap } from '@dxos/util';\n\nimport { type 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 _mutex = new Mutex();\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(): Promise<void> {}\n\n async close(): Promise<void> {\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._mutex.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._mutex.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(): BlobSyncExtension {\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 onAbort: async () => {\n log('extension aborted');\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): Promise<void> {\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(): void {\n for (const extension of this._extensions) {\n extension.reconcileUploads();\n }\n }\n\n private _updateExtensionsWantList(): void {\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/proto';\nimport { BlobMeta } from '@dxos/protocols/proto/dxos/echo/blob';\nimport { type BlobChunk } from '@dxos/protocols/proto/dxos/mesh/teleport/blobsync';\nimport { type 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 constructor(private readonly _directory: Directory) {}\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 as Uint8Array<ArrayBuffer>));\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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",
6
- "names": ["DeferredTask", "sleep", "synchronized", "Context", "invariant", "log", "RpcClosedError", "schema", "RpcExtension", "BitField", "MIN_WANT_LIST_UPDATE_INTERVAL", "process", "env", "NODE_ENV", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "_ctx", "_lastWantListUpdate", "_localWantList", "_updateWantList", "_currentUploads", "_upload", "remoteWantList", "_params", "exposed", "BlobSyncService", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "onError", "err", "catch", "blobs", "Date", "now", "disposed", "list", "rpc", "want", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "warn", "finally", "reconcileUploads", "onOpen", "context", "onClose", "dispose", "onAbort", "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", "Mutex", "Trigger", "trackLeaks", "Context", "cancelWithContext", "invariant", "PublicKey", "log", "BlobMeta", "BitField", "ComplexMap", "BlobSync", "_ctx", "_mutex", "_downloadRequests", "_extensions", "_params", "Context", "Mutex", "ComplexMap", "key", "PublicKey", "from", "toHex", "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", "onAbort", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "path", "synchronized", "subtleCrypto", "invariant", "PublicKey", "schema", "BlobMeta", "BitField", "arrayToBuffer", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "getCodecForType", "BlobStore", "_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"]
5
+ "mappings": "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",
6
+ "names": ["DeferredTask", "sleep", "synchronized", "Context", "invariant", "log", "RpcClosedError", "schema", "RpcExtension", "BitField", "MIN_WANT_LIST_UPDATE_INTERVAL", "process", "env", "NODE_ENV", "MAX_CONCURRENT_UPLOADS", "BlobSyncExtension", "_ctx", "onError", "err", "catch", "_lastWantListUpdate", "_localWantList", "blobs", "_updateWantList", "Date", "now", "disposed", "list", "rpc", "BlobSyncService", "want", "_currentUploads", "_upload", "blobChunks", "_pickBlobChunks", "blobChunk", "push", "warn", "finally", "reconcileUploads", "remoteWantList", "_params", "exposed", "getService", "requested", "timeout", "encodingOptions", "preserveAny", "onOpen", "context", "onClose", "dispose", "onAbort", "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", "Mutex", "Trigger", "trackLeaks", "Context", "cancelWithContext", "invariant", "PublicKey", "log", "BlobMeta", "BitField", "ComplexMap", "BlobSync", "_ctx", "Context", "_mutex", "Mutex", "_downloadRequests", "ComplexMap", "key", "PublicKey", "from", "toHex", "_extensions", "Set", "_params", "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", "onAbort", "onPush", "blobChunk", "has", "setChunk", "invariant", "_reconcileUploads", "notifyBlobAdded", "_id", "blobs", "Array", "values", "map", "reconcileUploads", "path", "synchronized", "subtleCrypto", "invariant", "PublicKey", "schema", "BlobMeta", "BitField", "arrayToBuffer", "DEFAULT_CHUNK_SIZE", "BlobMetaCodec", "getCodecForType", "BlobStore", "_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
  }