mirror of https://github.com/Chocobozzz/PeerTube
Expose PeerTube socket to plugins (#5239)
* server(pluginHelpers): add socket * test(plugins): add socket cases * fixes after review * Update plugin-helpers.ts * Update plugin-helpers.tspull/5325/head
parent
213bb3bb58
commit
c43ed8e862
|
@ -13,13 +13,14 @@ import { ServerBlocklistModel } from '@server/models/server/server-blocklist'
|
|||
import { UserModel } from '@server/models/user/user'
|
||||
import { VideoModel } from '@server/models/video/video'
|
||||
import { VideoBlacklistModel } from '@server/models/video/video-blacklist'
|
||||
import { MPlugin } from '@server/types/models'
|
||||
import { MPlugin, MVideo, UserNotificationModelForApi } from '@server/types/models'
|
||||
import { PeerTubeHelpers } from '@server/types/plugins'
|
||||
import { VideoBlacklistCreate, VideoStorage } from '@shared/models'
|
||||
import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../blocklist'
|
||||
import { ServerConfigManager } from '../server-config-manager'
|
||||
import { blacklistVideo, unblacklistVideo } from '../video-blacklist'
|
||||
import { VideoPathManager } from '../video-path-manager'
|
||||
import { PeerTubeSocket } from '../peertube-socket'
|
||||
|
||||
function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHelpers {
|
||||
const logger = buildPluginLogger(npmName)
|
||||
|
@ -35,6 +36,8 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel
|
|||
|
||||
const plugin = buildPluginRelatedHelpers(pluginModel, npmName)
|
||||
|
||||
const socket = buildSocketHelpers()
|
||||
|
||||
const user = buildUserHelpers()
|
||||
|
||||
return {
|
||||
|
@ -45,6 +48,7 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel
|
|||
moderation,
|
||||
plugin,
|
||||
server,
|
||||
socket,
|
||||
user
|
||||
}
|
||||
}
|
||||
|
@ -218,6 +222,17 @@ function buildPluginRelatedHelpers (plugin: MPlugin, npmName: string) {
|
|||
}
|
||||
}
|
||||
|
||||
function buildSocketHelpers () {
|
||||
return {
|
||||
sendNotification: (userId: number, notification: UserNotificationModelForApi) => {
|
||||
PeerTubeSocket.Instance.sendNotification(userId, notification)
|
||||
},
|
||||
sendVideoLiveNewState: (video: MVideo) => {
|
||||
PeerTubeSocket.Instance.sendVideoLiveNewState(video)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildUserHelpers () {
|
||||
return {
|
||||
loadById: (id: number) => {
|
||||
|
|
|
@ -128,6 +128,22 @@ async function register ({
|
|||
|
||||
return res.json(result)
|
||||
})
|
||||
|
||||
router.post('/send-notification', async (req, res) => {
|
||||
peertubeHelpers.socket.sendNotification(req.body.userId, {
|
||||
type: 1,
|
||||
userId: req.body.userId
|
||||
})
|
||||
|
||||
return res.sendStatus(201)
|
||||
})
|
||||
|
||||
router.post('/send-video-live-new-state/:uuid', async (req, res) => {
|
||||
const video = await peertubeHelpers.videos.loadByIdOrUUID(req.params.uuid)
|
||||
peertubeHelpers.socket.sendVideoLiveNewState(video)
|
||||
|
||||
return res.sendStatus(201)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -83,6 +83,33 @@ describe('Test plugin helpers', function () {
|
|||
})
|
||||
})
|
||||
|
||||
describe('Socket', function () {
|
||||
|
||||
it('Should sendNotification without any exceptions', async () => {
|
||||
const user = await servers[0].users.create({ username: 'notis_redding', password: 'secret1234?' })
|
||||
await makePostBodyRequest({
|
||||
url: servers[0].url,
|
||||
path: '/plugins/test-four/router/send-notification',
|
||||
fields: {
|
||||
userId: user.id
|
||||
},
|
||||
expectedStatus: HttpStatusCode.CREATED_201
|
||||
})
|
||||
})
|
||||
|
||||
it('Should sendVideoLiveNewState without any exceptions', async () => {
|
||||
const res = await servers[0].videos.quickUpload({ name: 'video server 1' })
|
||||
|
||||
await makePostBodyRequest({
|
||||
url: servers[0].url,
|
||||
path: '/plugins/test-four/router/send-video-live-new-state/' + res.uuid,
|
||||
expectedStatus: HttpStatusCode.CREATED_201
|
||||
})
|
||||
|
||||
await servers[0].videos.remove({ id: res.uuid })
|
||||
})
|
||||
})
|
||||
|
||||
describe('Plugin', function () {
|
||||
|
||||
it('Should get the base static route', async function () {
|
||||
|
|
|
@ -16,7 +16,7 @@ import {
|
|||
ThumbnailType,
|
||||
VideoBlacklistCreate
|
||||
} from '@shared/models'
|
||||
import { MUserDefault, MVideoThumbnail } from '../models'
|
||||
import { MUserDefault, MVideo, MVideoThumbnail, UserNotificationModelForApi } from '../models'
|
||||
import {
|
||||
RegisterServerAuthExternalOptions,
|
||||
RegisterServerAuthExternalResult,
|
||||
|
@ -86,6 +86,11 @@ export type PeerTubeHelpers = {
|
|||
getServerActor: () => Promise<ActorModel>
|
||||
}
|
||||
|
||||
socket: {
|
||||
sendNotification: (userId: number, notification: UserNotificationModelForApi) => void
|
||||
sendVideoLiveNewState: (video: MVideo) => void
|
||||
}
|
||||
|
||||
plugin: {
|
||||
// PeerTube >= 3.2
|
||||
getBaseStaticRoute: () => string
|
||||
|
|
Loading…
Reference in New Issue