Skip to content

Commit cdca83f

Browse files
Include size in metadata, and add dx-size header to partner dx-hash
Signed-off-by: Peter Broadhurst <[email protected]>
1 parent 69ad14c commit cdca83f

File tree

5 files changed

+11
-2
lines changed

5 files changed

+11
-2
lines changed

src/handlers/blobs.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,13 @@ export const storeBlob = async (file: IFile, filePath: string) => {
4646
const resolvedFilePath = path.join(utils.constants.DATA_DIRECTORY, utils.constants.BLOBS_SUBDIRECTORY, filePath);
4747
await fs.mkdir(path.parse(resolvedFilePath).dir, { recursive: true });
4848
let hash = crypto.createHash(utils.constants.TRANSFER_HASH_ALGORITHM);
49+
let blobSize = 0;
4950
const writeStream = createWriteStream(resolvedFilePath);
5051
const blobHash = await new Promise<string>((resolve, reject) => {
5152
let hashCalculator = new stream.Transform({
5253
transform(chunk, _enc, cb) {
5354
hash.update(chunk);
55+
blobSize += chunk.length
5456
cb(undefined, chunk);
5557
},
5658
flush(cb) {
@@ -63,7 +65,7 @@ export const storeBlob = async (file: IFile, filePath: string) => {
6365
});
6466
file.readableStream.pipe(hashCalculator).pipe(writeStream);
6567
});
66-
return await upsertMetadata(filePath, blobHash);
68+
return await upsertMetadata(filePath, blobHash, blobSize);
6769
};
6870

6971
export const sendBlob = async (blobPath: string, recipient: string, recipientURL: string, requestID: string | undefined) => {
@@ -132,11 +134,12 @@ export const retreiveMetadata = async (filePath: string) => {
132134
}
133135
};
134136

135-
export const upsertMetadata = async (filePath: string, hash: string) => {
137+
export const upsertMetadata = async (filePath: string, hash: string, size: number) => {
136138
const resolvedFilePath = path.join(utils.constants.DATA_DIRECTORY, utils.constants.BLOBS_SUBDIRECTORY, filePath + utils.constants.METADATA_SUFFIX);
137139
await fs.mkdir(path.parse(resolvedFilePath).dir, { recursive: true });
138140
let metadata: IMetadata = {
139141
hash,
142+
size,
140143
lastUpdate: new Date().getTime()
141144
};
142145
await fs.writeFile(resolvedFilePath, JSON.stringify(metadata));

src/lib/interfaces.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export interface IBlobReceivedEvent {
7373
sender: string
7474
path: string
7575
hash: string
76+
size: number
7677
}
7778

7879
export interface IBlobDeliveredEvent {
@@ -133,5 +134,6 @@ export interface ICertData {
133134

134135
export interface IMetadata {
135136
hash: string
137+
size: number
136138
lastUpdate: number
137139
}

src/lib/utils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const constants = {
4343
REST_API_CALL_BLOB_REQUEST_TIMEOUT: 60000,
4444
MAX_EVENT_QUEUE_SIZE: 1000,
4545
HASH_HEADER_NAME: 'dx-hash',
46+
SIZE_HEADER_NAME: 'dx-size',
4647
LAST_UPDATE_HEADER_NAME: 'dx-last-update'
4748
};
4849
const log = new Logger('utils.ts');

src/routers/api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ router.head('/blobs/*', async (req: Request, res, next) => {
157157
}
158158
const metadata = await blobsHandler.retreiveMetadata(blobPath);
159159
res.setHeader(utils.constants.HASH_HEADER_NAME, metadata.hash);
160+
res.setHeader(utils.constants.SIZE_HEADER_NAME, metadata.size);
160161
res.setHeader(utils.constants.LAST_UPDATE_HEADER_NAME, metadata.lastUpdate);
161162
res.status(204).send();
162163
} catch (err) {
@@ -172,6 +173,7 @@ router.get('/blobs/*', async (req: Request, res, next) => {
172173
}
173174
const metadata = await blobsHandler.retreiveMetadata(blobPath);
174175
res.setHeader(utils.constants.HASH_HEADER_NAME, metadata.hash);
176+
res.setHeader(utils.constants.SIZE_HEADER_NAME, metadata.size);
175177
res.setHeader(utils.constants.LAST_UPDATE_HEADER_NAME, metadata.lastUpdate);
176178
const blobStream = await blobsHandler.retreiveBlob(blobPath);
177179
blobStream.on('end', () => res.end());

src/routers/p2p.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ router.put('/blobs/*', async (req: Request, res, next) => {
5858
sender,
5959
path: blobPath,
6060
hash: metadata.hash,
61+
size: metadata.size,
6162
lastUpdate: metadata.lastUpdate
6263
} as IBlobReceivedEvent);
6364
} catch (err) {

0 commit comments

Comments
 (0)