Skip to content

Commit c60f83a

Browse files
authored
fix: contentHash encoding as string for webhook notification (#361)
Make sure we encode the `contentHash` field of content announcements as a string instead of a UTF-16 buffer.
1 parent dcb8211 commit c60f83a

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

services/content-watcher/libs/common/src/ipfs/ipfs.dsnp.ts

+26-20
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,16 @@
11
import { Injectable, Logger } from '@nestjs/common';
2-
import { Job, JobsOptions, Queue } from 'bullmq';
2+
import { Job, Queue } from 'bullmq';
33
import { InjectQueue, Processor } from '@nestjs/bullmq';
44
import { hexToString } from '@polkadot/util';
55
import parquet from '@dsnp/parquetjs';
6-
import { bases } from 'multiformats/basics';
76
import { AppConfigService } from '../config/config.service';
87
import { calculateJobId } from '..';
98
import * as QueueConstants from '../queues/queue-constants';
109
import { IIPFSJob } from '../interfaces/ipfs.job.interface';
1110
import { BaseConsumer } from '../utils/base-consumer';
1211
import { IpfsService } from '../utils/ipfs.client';
13-
import {
14-
AnnouncementResponse,
15-
AnnouncementType,
16-
BroadcastAnnouncement,
17-
ProfileAnnouncement,
18-
ReactionAnnouncement,
19-
ReplyAnnouncement,
20-
TombstoneAnnouncement,
21-
UpdateAnnouncement,
22-
} from '../types/content-announcement';
23-
import { isBroadcast, isProfile, isReaction, isReply, isTombstone, isTypedAnnouncement, isUpdate } from '../utils/type-guards';
12+
import { AnnouncementResponse } from '../types/content-announcement';
13+
import { isBroadcast, isProfile, isReaction, isReply, isTombstone, isUpdate } from '../utils/type-guards';
2414

2515
@Injectable()
2616
@Processor(QueueConstants.IPFS_QUEUE, {
@@ -76,7 +66,11 @@ export class IPFSContentProcessor extends BaseConsumer {
7666
}
7767
}
7868

79-
private async enqueueAnnouncementResponse(announcementResponse: AnnouncementResponse, name: string, queue: Queue): Promise<void> {
69+
private async enqueueAnnouncementResponse(
70+
announcementResponse: AnnouncementResponse,
71+
name: string,
72+
queue: Queue,
73+
): Promise<void> {
8074
if (!(await this.isQueueFull(queue))) {
8175
const jobId = calculateJobId(announcementResponse);
8276
await queue.add(name, announcementResponse, { jobId });
@@ -98,7 +92,9 @@ export class IPFSContentProcessor extends BaseConsumer {
9892
if (isBroadcast(mapRecord)) {
9993
announcementResponse.announcement = {
10094
fromId: mapRecord.fromId,
101-
contentHash: mapRecord.contentHash,
95+
contentHash: Buffer.isBuffer(mapRecord.contentHash)
96+
? mapRecord.contentHash.toString()
97+
: mapRecord.contentHash,
10298
url: mapRecord.url,
10399
announcementType: mapRecord.announcementType,
104100
};
@@ -108,7 +104,9 @@ export class IPFSContentProcessor extends BaseConsumer {
108104
announcementResponse.announcement = {
109105
fromId: mapRecord.fromId,
110106
targetAnnouncementType: mapRecord.targetAnnouncementType,
111-
targetContentHash: mapRecord.targetContentHash,
107+
targetContentHash: Buffer.isBuffer(mapRecord.targetContentHash)
108+
? mapRecord.targetContentHash.toString()
109+
: mapRecord.targetContentHash,
112110
announcementType: mapRecord.announcementType,
113111
};
114112
queue = this.tombstoneQueue;
@@ -129,7 +127,9 @@ export class IPFSContentProcessor extends BaseConsumer {
129127
announcementType: mapRecord.announcementType,
130128
url: mapRecord.url,
131129
inReplyTo: mapRecord.inReplyTo,
132-
contentHash: mapRecord.contentHash,
130+
contentHash: Buffer.isBuffer(mapRecord.contentHash)
131+
? mapRecord.contentHash.toString()
132+
: mapRecord.contentHash,
133133
};
134134
queue = this.replyQueue;
135135
typeName = 'Reply';
@@ -138,7 +138,9 @@ export class IPFSContentProcessor extends BaseConsumer {
138138
fromId: mapRecord.fromId,
139139
announcementType: mapRecord.announcementType,
140140
url: mapRecord.url,
141-
contentHash: mapRecord.contentHash,
141+
contentHash: Buffer.isBuffer(mapRecord.contentHash)
142+
? mapRecord.contentHash.toString()
143+
: mapRecord.contentHash,
142144
};
143145
queue = this.profileQueue;
144146
typeName = 'Profile';
@@ -147,9 +149,13 @@ export class IPFSContentProcessor extends BaseConsumer {
147149
fromId: mapRecord.fromId,
148150
announcementType: mapRecord.announcementType,
149151
url: mapRecord.url,
150-
contentHash: mapRecord.contentHash,
152+
contentHash: Buffer.isBuffer(mapRecord.contentHash)
153+
? mapRecord.contentHash.toString()
154+
: mapRecord.contentHash,
151155
targetAnnouncementType: mapRecord.targetAnnouncementType,
152-
targetContentHash: mapRecord.targetContentHash,
156+
targetContentHash: Buffer.isBuffer(mapRecord.targetContentHash)
157+
? mapRecord.targetContentHash.toString()
158+
: mapRecord.targetContentHash,
153159
};
154160
queue = this.updateQueue;
155161
typeName = 'Update';

0 commit comments

Comments
 (0)