Delete nostr-to-mastoapi.ts, add notifications.ts and relationships.ts
This commit is contained in:
parent
d49c63bb1a
commit
45d42f7ea4
|
@ -11,9 +11,9 @@ import { isFollowing, lookupAccount, nostrNow, Time } from '@/utils.ts';
|
|||
import { paginated, paginationSchema, parseBody } from '@/utils/web.ts';
|
||||
import { createEvent } from '@/utils/web.ts';
|
||||
import { renderEventAccounts } from '@/views.ts';
|
||||
import { renderAccount } from '@/views/mastodon/accounts.ts';
|
||||
import { accountFromPubkey, renderAccount } from '@/views/mastodon/accounts.ts';
|
||||
import { renderRelationship } from '@/views/mastodon/relationships.ts';
|
||||
import { renderStatus } from '@/views/mastodon/statuses.ts';
|
||||
import { accountFromPubkey, toRelationship } from '@/views/nostr-to-mastoapi.ts';
|
||||
|
||||
const usernameSchema = z
|
||||
.string().min(1).max(30)
|
||||
|
@ -117,7 +117,7 @@ const relationshipsController: AppController = async (c) => {
|
|||
return c.json({ error: 'Missing `id[]` query parameters.' }, 422);
|
||||
}
|
||||
|
||||
const result = await Promise.all(ids.data.map((id) => toRelationship(pubkey, id)));
|
||||
const result = await Promise.all(ids.data.map((id) => renderRelationship(pubkey, id)));
|
||||
|
||||
return c.json(result);
|
||||
};
|
||||
|
@ -222,7 +222,7 @@ const followController: AppController = async (c) => {
|
|||
}, c);
|
||||
}
|
||||
|
||||
const relationship = await toRelationship(sourcePubkey, targetPubkey);
|
||||
const relationship = await renderRelationship(sourcePubkey, targetPubkey);
|
||||
return c.json(relationship);
|
||||
};
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import { type AppController } from '@/app.ts';
|
|||
import * as mixer from '@/mixer.ts';
|
||||
import { Time } from '@/utils.ts';
|
||||
import { paginated, paginationSchema } from '@/utils/web.ts';
|
||||
import { toNotification } from '@/views/nostr-to-mastoapi.ts';
|
||||
import { renderNotification } from '@/views/mastodon/notifications.ts';
|
||||
|
||||
const notificationsController: AppController = async (c) => {
|
||||
const pubkey = c.get('pubkey')!;
|
||||
|
@ -13,7 +13,7 @@ const notificationsController: AppController = async (c) => {
|
|||
{ timeout: Time.seconds(3) },
|
||||
);
|
||||
|
||||
const statuses = await Promise.all(events.map((event) => toNotification(event, pubkey)));
|
||||
const statuses = await Promise.all(events.map((event) => renderNotification(event, pubkey)));
|
||||
return paginated(c, events, statuses);
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
import { type Event } from '@/deps.ts';
|
||||
import { nostrDate } from '@/utils.ts';
|
||||
import { accountFromPubkey } from '@/views/mastodon/accounts.ts';
|
||||
import { renderStatus } from '@/views/mastodon/statuses.ts';
|
||||
|
||||
function renderNotification(event: Event, viewerPubkey?: string) {
|
||||
switch (event.kind) {
|
||||
case 1:
|
||||
return renderNotificationMention(event as Event<1>, viewerPubkey);
|
||||
}
|
||||
}
|
||||
|
||||
async function renderNotificationMention(event: Event<1>, viewerPubkey?: string) {
|
||||
const status = await renderStatus(event, viewerPubkey);
|
||||
if (!status) return;
|
||||
|
||||
return {
|
||||
id: event.id,
|
||||
type: 'mention',
|
||||
created_at: nostrDate(event.created_at).toISOString(),
|
||||
account: status.account,
|
||||
status: status,
|
||||
};
|
||||
}
|
||||
|
||||
export { accountFromPubkey, renderNotification };
|
|
@ -0,0 +1,26 @@
|
|||
import { getFollows } from '@/queries.ts';
|
||||
import { isFollowing } from '@/utils.ts';
|
||||
|
||||
async function renderRelationship(sourcePubkey: string, targetPubkey: string) {
|
||||
const [source, target] = await Promise.all([
|
||||
getFollows(sourcePubkey),
|
||||
getFollows(targetPubkey),
|
||||
]);
|
||||
|
||||
return {
|
||||
id: targetPubkey,
|
||||
following: source ? isFollowing(source, targetPubkey) : false,
|
||||
showing_reblogs: true,
|
||||
notifying: false,
|
||||
followed_by: target ? isFollowing(target, sourcePubkey) : false,
|
||||
blocking: false,
|
||||
blocked_by: false,
|
||||
muting: false,
|
||||
muting_notifications: false,
|
||||
requested: false,
|
||||
domain_blocking: false,
|
||||
endorsed: false,
|
||||
};
|
||||
}
|
||||
|
||||
export { renderRelationship };
|
|
@ -1,49 +0,0 @@
|
|||
import { type Event } from '@/deps.ts';
|
||||
import { getFollows } from '@/queries.ts';
|
||||
import { isFollowing, nostrDate } from '@/utils.ts';
|
||||
import { accountFromPubkey } from '@/views/mastodon/accounts.ts';
|
||||
import { renderStatus } from '@/views/mastodon/statuses.ts';
|
||||
|
||||
async function toRelationship(sourcePubkey: string, targetPubkey: string) {
|
||||
const [source, target] = await Promise.all([
|
||||
getFollows(sourcePubkey),
|
||||
getFollows(targetPubkey),
|
||||
]);
|
||||
|
||||
return {
|
||||
id: targetPubkey,
|
||||
following: source ? isFollowing(source, targetPubkey) : false,
|
||||
showing_reblogs: true,
|
||||
notifying: false,
|
||||
followed_by: target ? isFollowing(target, sourcePubkey) : false,
|
||||
blocking: false,
|
||||
blocked_by: false,
|
||||
muting: false,
|
||||
muting_notifications: false,
|
||||
requested: false,
|
||||
domain_blocking: false,
|
||||
endorsed: false,
|
||||
};
|
||||
}
|
||||
|
||||
function toNotification(event: Event, viewerPubkey?: string) {
|
||||
switch (event.kind) {
|
||||
case 1:
|
||||
return toNotificationMention(event as Event<1>, viewerPubkey);
|
||||
}
|
||||
}
|
||||
|
||||
async function toNotificationMention(event: Event<1>, viewerPubkey?: string) {
|
||||
const status = await renderStatus(event, viewerPubkey);
|
||||
if (!status) return;
|
||||
|
||||
return {
|
||||
id: event.id,
|
||||
type: 'mention',
|
||||
created_at: nostrDate(event.created_at).toISOString(),
|
||||
account: status.account,
|
||||
status: status,
|
||||
};
|
||||
}
|
||||
|
||||
export { accountFromPubkey, toNotification, toRelationship };
|
Loading…
Reference in New Issue