39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
// For more information about this file see https://dove.feathersjs.com/guides/cli/channels.html
|
|
import type { RealTimeConnection, Params } from '@feathersjs/feathers'
|
|
import type { AuthenticationResult } from '@feathersjs/authentication'
|
|
import '@feathersjs/transport-commons'
|
|
import type { Application, HookContext } from './declarations'
|
|
import { logger } from './logger'
|
|
|
|
export const channels = (app: Application) => {
|
|
logger.warn(
|
|
'Publishing all events to all authenticated users. See `channels.ts` and https://dove.feathersjs.com/api/channels.html for more information.'
|
|
)
|
|
|
|
app.on('connection', (connection: RealTimeConnection) => {
|
|
// On a new real-time connection, add it to the anonymous channel
|
|
app.channel('anonymous').join(connection)
|
|
})
|
|
|
|
app.on('login', (authResult: AuthenticationResult, { connection }: Params) => {
|
|
// connection can be undefined if there is no
|
|
// real-time connection, e.g. when logging in via REST
|
|
if (connection) {
|
|
// The connection is no longer anonymous, remove it
|
|
app.channel('anonymous').leave(connection)
|
|
|
|
// Add it to the authenticated user channel
|
|
app.channel('authenticated').join(connection)
|
|
}
|
|
})
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
app.publish((data: any, context: HookContext) => {
|
|
// Here you can add event publishers to channels set up in `channels.js`
|
|
// To publish only for a specific event use `app.publish(eventname, () => {})`
|
|
|
|
// e.g. to publish all service events to all authenticated users use
|
|
return app.channel('authenticated')
|
|
})
|
|
}
|