summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-03 20:39:27 +0900
committerAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-03 20:41:54 +0900
commitc22cb377599780666ffe2c7ccdbdcb19a49f1969 (patch)
tree1e5a8d36deceeb1611025ac93f04894178e22774 /src/remote
parentImprove readability (diff)
downloadsharkey-c22cb377599780666ffe2c7ccdbdcb19a49f1969.tar.gz
sharkey-c22cb377599780666ffe2c7ccdbdcb19a49f1969.tar.bz2
sharkey-c22cb377599780666ffe2c7ccdbdcb19a49f1969.zip
Remove resolveRemoteUserObjects method of remote/activitypub/resolver
The value of the value returned by resolveRemoteUserObjects method of remote/activitypub/resolver was inconsistent.
Diffstat (limited to 'src/remote')
-rw-r--r--src/remote/activitypub/act/index.ts20
-rw-r--r--src/remote/activitypub/create.ts16
-rw-r--r--src/remote/activitypub/resolver.ts33
3 files changed, 25 insertions, 44 deletions
diff --git a/src/remote/activitypub/act/index.ts b/src/remote/activitypub/act/index.ts
index 2af1902215..030f1cf25b 100644
--- a/src/remote/activitypub/act/index.ts
+++ b/src/remote/activitypub/act/index.ts
@@ -4,27 +4,29 @@ import undo from './undo';
import createObject from '../create';
import Resolver from '../resolver';
-export default (resolver: Resolver, actor, value, distribute?: boolean) => {
- return resolver.resolve(value).then(resolved => Promise.all(resolved.map(async promisedResult => {
- const result = await promisedResult;
- const created = await (await createObject(result.resolver, actor, [result.object], distribute))[0];
+export default async (parentResolver: Resolver, actor, value, distribute?: boolean) => {
+ const collection = await parentResolver.resolveCollection(value);
+
+ return collection.object.map(async element => {
+ const { resolver, object } = await collection.resolver.resolveOne(element);
+ const created = await (await createObject(resolver, actor, [object], distribute))[0];
if (created !== null) {
return created;
}
- switch (result.object.type) {
+ switch (object.type) {
case 'Create':
- return create(result.resolver, actor, result.object, distribute);
+ return create(resolver, actor, object, distribute);
case 'Follow':
- return follow(result.resolver, actor, result.object, distribute);
+ return follow(resolver, actor, object, distribute);
case 'Undo':
- return undo(result.resolver, actor, result.object);
+ return undo(resolver, actor, object);
default:
return null;
}
- })));
+ });
};
diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts
index f70f56b79f..8f3e146290 100644
--- a/src/remote/activitypub/create.ts
+++ b/src/remote/activitypub/create.ts
@@ -93,9 +93,19 @@ class Creator {
}
public async create(parentResolver, value): Promise<Array<Promise<IRemoteUserObject>>> {
- const results = await parentResolver.resolveRemoteUserObjects(value);
+ const collection = await parentResolver.resolveCollection(value);
+
+ return collection.object.map(async element => {
+ if (typeof element === 'string') {
+ const object = RemoteUserObject.findOne({ uri: element });
+
+ if (object !== null) {
+ return object;
+ }
+ }
+
+ const { resolver, object } = await collection.resolver.resolveOne(element);
- return results.map(promisedResult => promisedResult.then(({ resolver, object }) => {
switch (object.type) {
case 'Image':
return this.createImage(object);
@@ -105,7 +115,7 @@ class Creator {
}
return null;
- }));
+ });
}
}
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index b7e431b910..371ccdcc30 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -1,12 +1,5 @@
-import RemoteUserObject from '../../models/remote-user-object';
-import { IObject } from './type';
const request = require('request-promise-native');
-type IResult = {
- resolver: Resolver;
- object: IObject;
-};
-
export default class Resolver {
private requesting: Set<string>;
@@ -42,7 +35,7 @@ export default class Resolver {
return { resolver, object };
}
- private async resolveCollection(value) {
+ public async resolveCollection(value) {
const resolved = typeof value === 'string' ?
await this.resolveUnrequestedOne(value) :
{ resolver: this, object: value };
@@ -66,14 +59,6 @@ export default class Resolver {
return resolved;
}
- public async resolve(value): Promise<Array<Promise<IResult>>> {
- const { resolver, object } = await this.resolveCollection(value);
-
- return object
- .filter(element => !resolver.requesting.has(element))
- .map(resolver.resolveUnrequestedOne.bind(resolver));
- }
-
public resolveOne(value) {
if (this.requesting.has(value)) {
throw new Error();
@@ -81,20 +66,4 @@ export default class Resolver {
return this.resolveUnrequestedOne(value);
}
-
- public async resolveRemoteUserObjects(value) {
- const { resolver, object } = await this.resolveCollection(value);
-
- return object.filter(element => !resolver.requesting.has(element)).map(element => {
- if (typeof element === 'string') {
- const object = RemoteUserObject.findOne({ uri: element });
-
- if (object !== null) {
- return object;
- }
- }
-
- return resolver.resolveUnrequestedOne(element);
- });
- }
}