Skip to content

luluhoc/expo-sdk-nestjs

Repository files navigation

expo-sdk-nestjs for notifications

Injectable Expo Server SDK for Notifications client for Nestjs.

build status codecov npm version miniziped size tree shaking MIT licensed

Instalation

$ yarn add expo-sdk-nestjs
$ npm install --save expo-sdk-nestjs

Getting Started

To use Expo-SDK client we need to register module for example in app.module.ts

import { TwilioModule } from 'nestjs-twilio';

@Module({
  imports: [
    ExpoSDKModule.forRoot({
      accessToken: 'xxxx' // accessToken optional
    }),
  ],
})
export class AppModule {}

If you are using the @nestjs/config package from nest, you can use the ConfigModule using the registerAsync() function to inject your environment variables like this in your custom module:

import { Module } from '@nestjs/common';
import { ExpoSDKModule } from 'expo-sdk-nestjs';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ExpoSDKModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => {
        return {
          accessToken: configService.get('EXPO_PUSH_SECURITY'),
        };
      },
      inject: [ConfigService],
    }),
  ],
  providers: [],
})
export class AppModule {}

Config Options for Module

Option Type
httpAgent Agent
maxConcurrentRequests number
accessToken Expo Access Token - string

Example usage in service.

import { ExpoSDKService } from 'expo-sdk-nestjs';
import { ExpoPushTicket, ExpoPushMessage } from 'expo-server-sdk';

@Injectable()
export class AppService {
  public constructor(private readonly expoService: ExpoSDKService) {}

  async sendNotifications(
    chunks: ExpoPushMessage[][]
  ): Promise<ExpoPushTicket[] | undefined> {
    try {
      const tickets: ExpoPushTicket[] = [];

      for (let i = 0; i < chunks.length; i++) {
        const chunk = chunks[i];
        const ticketChunk =
          await this.expoService.client.sendPushNotificationsAsync(chunk);
        tickets.push(...ticketChunk);
      }
      return tickets;
    } catch (error) {
      this.logger.error(error);
    }
  }
}

For full Client API see EXPO DOCS reference here expo-server-sdk-node repo here

Testing

Example of testing can be found here.

Consider buying me a coffee if you like this project

Buy Me A Coffee

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published