acp listings sync

This commit is contained in:
ntr committed 2022-11-28 10:46:19 +11:00
1 parent 631942bb41
commit dfc783c936
7 files changed
+33 -13

No files matched your search

+13 -3
View File
@@ -1,5 +1,3 @@
import { EventEmitter } from 'node:events';
import { setTimeout } from 'timers/promises';
import assert from 'assert/strict';
import type Log from 'bunyan';
@@ -9,6 +7,7 @@ import type { Want, Offer, User } from '@prisma/client';
import { Pg } from './pg';
import { Status } from './offers';
import { isAdmin } from './utils';
import { Events } from './events';
function checkMsgType(msgType: RpcMessageType): msgType is RpcMessageType {
if (RpcMessageType[msgType]) {
@@ -18,7 +17,7 @@ function checkMsgType(msgType: RpcMessageType): msgType is RpcMessageType {
}
// rpc is created per connection from the api
export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, offers) {
export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, offers, events) {
async function ping(): Promise<PongMessage> {
return [RpcMessageType.Pong, []];
}
@@ -68,6 +67,12 @@ export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, off
return [RpcMessageType.AcpOffers, await offers.acpOffers()];
}
async function acpListingsSync(): Promise<AcpListingsSyncMessage> {
assert(isAdmin(user), 'not authorised');
events.emit(Events.Sync);
return [RpcMessageType.AcpListingsSync, []];
}
async function receive(message: any): Promise<RpcMessage> {
const [msgType, params] = message;
@@ -98,6 +103,8 @@ export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, off
return acpOfferStatusSet(params);
case RpcMessageType.AcpOffers:
return acpOffers();
case RpcMessageType.AcpListingsSync:
return acpListingsSync();
default:
throw new Error(`Message type ${msgType} is known but unhandled`);
@@ -169,6 +176,7 @@ export enum RpcMessageType {
AcpOfferStatusSet = 'AcpOfferStatusSet',
AcpOffers = 'AcpOffers',
AcpListingsSync = 'AcpListingsSync',
WantRm = 'WantRm',
}
@@ -184,6 +192,7 @@ type OfferStatusSetMessage = [RpcMessageType.OfferStatusSet, Offer[]];
type AcpOfferStatusSetMessage = [RpcMessageType.AcpOfferStatusSet, Offer[]];
type AcpOffersMessage = [RpcMessageType.AcpOffers, Offer[]];
type AcpListingsSyncMessage = [RpcMessageType.AcpListingsSync, []];
export type RpcMessage =
PingMessage |
@@ -199,6 +208,7 @@ export type RpcMessage =
AcpOfferStatusSetMessage |
AcpOffersMessage |
AcpListingsSyncMessage |
ErrorMessage;