@nestjs-twurple/pubsub
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

NestJS Twurple PubSub

A NestJS wrapper for @twurple/pubsub package.

This module can be used alone or in combination with other @nestjs-twurple modules.

[!IMPORTANT] These packages require twurple version 7.0 or higher.

Table of Contents

Installation

This module can be used in combination with @nestjs-twurple/auth module. Install it if necessary.

yarn:

yarn add @nestjs-twurple/pubsub @twurple/auth @twurple/pubsub

npm:

npm i @nestjs-twurple/pubsub @twurple/auth @twurple/pubsub

Usage

For basic information, check out the general documentation at the root of the repository @nestjs-twurple.

Also take a look at the official @twurple/pubsub reference and guides: Listening to PubSub topics.

Import and Registration

The module must be registered either with register or registerAsync static methods.

To create a PubSub client, you must provide TwurplePubSubOptions. The options below are directly extended from the PubSubClientConfig interface provided by @twurple/pubsub package, so the example below may become outdated at some point.

interface TwurplePubSubOptions {
	authProvider: AuthProvider;
	logger?: Partial<LoggerOptions>;
	wsOptions?: WebSocketClientOptions;
}

Example of using registerAsync static method:

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RefreshingAuthProvider } from '@twurple/auth';
import { TwurplePubSubModule } from '@nestjs-twurple/pubsub';

@Module({
	imports: [
		ConfigModule.forRoot({ isGlobal: true }),
		TwurplePubSubModule.registerAsync({
			isGlobal: true,
			inject: [ConfigService],
			useFactory: (configService: ConfigService) => {
				return {
					authProvider: new RefreshingAuthProvider({
						// ...
					})
				};
			}
		})
	]
})
export class AppModule {}

You can also use TwurpleAuthModule from @nestjs-twurple/auth package to inject an auth provider:

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TWURPLE_AUTH_PROVIDER, TwurpleAuthModule } from '@nestjs-twurple/auth';
import { TwurplePubSubModule } from '@nestjs-twurple/pubsub';
import { AuthProvider } from '@twurple/auth';

@Module({
	imports: [
		ConfigModule.forRoot({ isGlobal: true }),
		TwurpleAuthModule.registerAsync({
			isGlobal: true,
			inject: [ConfigService],
			useFactory: (configService: ConfigService) => {
				return {
					type: 'refreshing',
					clientId: configService.get('TWITCH_CLIENT_ID'),
					clientSecret: configService.get('TWITCH_CLIENT_SECRET'),
					onRefresh: async (userId, token) => {
						// Handle token refresh
					}
				};
			}
		}),
		TwurplePubSubModule.registerAsync({
			isGlobal: true,
			inject: [TWURPLE_AUTH_PROVIDER],
			useFactory: (authProvider: AuthProvider) => {
				// Here we are able to access the auth provider instance
				// provided by TwurpleAuthModule above
				return { authProvider };
			}
		})
	]
})
export class AppModule {}

Using the PubSubClient

The module internally creates a PubSubClient instance. You can inject it anywhere you need it using @InjectPubSubClient() decorator. For example, you can create TwitchPubSubService provider where you can listen to PubSub events. Note that before listening to channel events the user(s) must be registered in the auth provider.

import { Injectable } from '@nestjs/common';
import { InjectPubSubClient } from '@nestjs-twurple/pubsub';
import { PubSubClient, type PubSubSubscriptionMessage } from '@twurple/pubsub';

@Injectable()
export class TwitchPubSubService {
	// Inject PubSubClient
	constructor(@InjectPubSubClient() private readonly _pubSubClient: PubSubClient) {
		const subscriptionHandler = this._pubSubClient.onSubscription(userId, (message: PubSubSubscriptionMessage) => {
			console.log(`${message.userDisplayName} just subscribed!`);
		});

		// Other listeners...
	}

	// Other methods...
}

Alternatively, you can use TWURPLE_CHAT_CLIENT token to inject the ChatClient instance to your custom providers or factories:

import { Inject, Injectable, OnApplicationBootstrap } from '@nestjs/common';
import { TWURPLE_PUBSUB_CLIENT } from '@nestjs-twurple/pubsub';
import { PubSubClient } from '@twurple/pubsub';

@Injectable()
export class TwitchChatService implements OnApplicationBootstrap {
	// Inject PubSubClient
	constructor(@Inject(TWURPLE_PUBSUB_CLIENT) private readonly _pubSubClient: PubSubClient) {}
}

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.2.03latest

Version History

VersionDownloads (Last 7 Days)Published
0.2.03
0.1.10
0.1.00
0.0.10

Package Sidebar

Install

npm i @nestjs-twurple/pubsub

Weekly Downloads

3

Version

0.2.0

License

MIT

Unpacked Size

19.3 kB

Total Files

17

Last publish

Collaborators

  • stimulcross