From 5bcb4b1dde98d7aad7e7f16e77fda10cb66ab6d8 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Wed, 4 Apr 2018 00:14:18 +0900 Subject: [PATCH] Always deduplicate Activity Streams objects by id --- src/remote/activitypub/create.ts | 56 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts index 46e4c9988..97c72860f 100644 --- a/src/remote/activitypub/create.ts +++ b/src/remote/activitypub/create.ts @@ -105,36 +105,36 @@ class Creator { const collection = await parentResolver.resolveCollection(value); return collection.object.map(async element => { - if (typeof element === 'string') { - try { - await Promise.all([ - DriveFile.findOne({ 'metadata.uri': element }).then(file => { - if (file === null) { - return; - } + const uri = element.id || element; - throw { - $ref: 'driveFile.files', - $id: file._id - }; - }, () => {}), - Post.findOne({ uri: element }).then(post => { - if (post === null) { - return; - } + try { + await Promise.all([ + DriveFile.findOne({ 'metadata.uri': uri }).then(file => { + if (file === null) { + return; + } - throw { - $ref: 'posts', - $id: post._id - }; - }, () => {}) - ]); - } catch (object) { - return { - resolver: collection.resolver, - object - }; - } + throw { + $ref: 'driveFile.files', + $id: file._id + }; + }, () => {}), + Post.findOne({ uri }).then(post => { + if (post === null) { + return; + } + + throw { + $ref: 'posts', + $id: post._id + }; + }, () => {}) + ]); + } catch (object) { + return { + resolver: collection.resolver, + object + }; } const { resolver, object } = await collection.resolver.resolveOne(element);