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 { UserModel } from '@server/models/user/user'
|
||||||
import { VideoModel } from '@server/models/video/video'
|
import { VideoModel } from '@server/models/video/video'
|
||||||
import { VideoBlacklistModel } from '@server/models/video/video-blacklist'
|
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 { PeerTubeHelpers } from '@server/types/plugins'
|
||||||
import { VideoBlacklistCreate, VideoStorage } from '@shared/models'
|
import { VideoBlacklistCreate, VideoStorage } from '@shared/models'
|
||||||
import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../blocklist'
|
import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../blocklist'
|
||||||
import { ServerConfigManager } from '../server-config-manager'
|
import { ServerConfigManager } from '../server-config-manager'
|
||||||
import { blacklistVideo, unblacklistVideo } from '../video-blacklist'
|
import { blacklistVideo, unblacklistVideo } from '../video-blacklist'
|
||||||
import { VideoPathManager } from '../video-path-manager'
|
import { VideoPathManager } from '../video-path-manager'
|
||||||
|
import { PeerTubeSocket } from '../peertube-socket'
|
||||||
|
|
||||||
function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHelpers {
|
function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHelpers {
|
||||||
const logger = buildPluginLogger(npmName)
|
const logger = buildPluginLogger(npmName)
|
||||||
|
@ -35,6 +36,8 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel
|
||||||
|
|
||||||
const plugin = buildPluginRelatedHelpers(pluginModel, npmName)
|
const plugin = buildPluginRelatedHelpers(pluginModel, npmName)
|
||||||
|
|
||||||
|
const socket = buildSocketHelpers()
|
||||||
|
|
||||||
const user = buildUserHelpers()
|
const user = buildUserHelpers()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -45,6 +48,7 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel
|
||||||
moderation,
|
moderation,
|
||||||
plugin,
|
plugin,
|
||||||
server,
|
server,
|
||||||
|
socket,
|
||||||
user
|
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 () {
|
function buildUserHelpers () {
|
||||||
return {
|
return {
|
||||||
loadById: (id: number) => {
|
loadById: (id: number) => {
|
||||||
|
|
|
@ -128,6 +128,22 @@ async function register ({
|
||||||
|
|
||||||
return res.json(result)
|
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 () {
|
describe('Plugin', function () {
|
||||||
|
|
||||||
it('Should get the base static route', async function () {
|
it('Should get the base static route', async function () {
|
||||||
|
|
|
@ -16,7 +16,7 @@ import {
|
||||||
ThumbnailType,
|
ThumbnailType,
|
||||||
VideoBlacklistCreate
|
VideoBlacklistCreate
|
||||||
} from '@shared/models'
|
} from '@shared/models'
|
||||||
import { MUserDefault, MVideoThumbnail } from '../models'
|
import { MUserDefault, MVideo, MVideoThumbnail, UserNotificationModelForApi } from '../models'
|
||||||
import {
|
import {
|
||||||
RegisterServerAuthExternalOptions,
|
RegisterServerAuthExternalOptions,
|
||||||
RegisterServerAuthExternalResult,
|
RegisterServerAuthExternalResult,
|
||||||
|
@ -86,6 +86,11 @@ export type PeerTubeHelpers = {
|
||||||
getServerActor: () => Promise<ActorModel>
|
getServerActor: () => Promise<ActorModel>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
socket: {
|
||||||
|
sendNotification: (userId: number, notification: UserNotificationModelForApi) => void
|
||||||
|
sendVideoLiveNewState: (video: MVideo) => void
|
||||||
|
}
|
||||||
|
|
||||||
plugin: {
|
plugin: {
|
||||||
// PeerTube >= 3.2
|
// PeerTube >= 3.2
|
||||||
getBaseStaticRoute: () => string
|
getBaseStaticRoute: () => string
|
||||||
|
|
Loading…
Reference in New Issue