Using twilio-chat with NativeScript and Angular

2019-08-24 10:34发布

问题:

I have the folowing chat service:

import { Injectable, EventEmitter } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

import * as Twilio from 'twilio-chat';
import Client from 'twilio-chat';
import { Channel } from 'twilio-chat/lib/channel';

@Injectable({
  providedIn: 'root'
})
export class ChatService {
  chatClient: Client;
  currentChannel: Channel;
  chatConnectedEmitter: EventEmitter<any> = new EventEmitter<any>();
  chatDisconnectedEmitter: EventEmitter<any> = new EventEmitter<any>();

  private apiUrl = 'https://my-api.com/api';

  constructor(private http: HttpClient) {}

  getToken(): Observable<{ token: string }> {
    return this.http.get<{ token: string }>(`${this.apiUrl}/chat/token/`);
  }

  connect(token: string) {
    Twilio.Client.create(token)
      .then((client: Client) => {
        this.chatClient = client;
        this.chatConnectedEmitter.emit(true);
      })
      .catch((err: any) => {
        this.chatDisconnectedEmitter.emit(true);
        if (err.message.indexOf('token is expired')) {
          // do something when token expires
        }
      });
  }

  getPublicChannels() {
    return this.chatClient.getPublicChannelDescriptors();
  }

  getChannel(sid: string): Promise<Channel> {
    return this.chatClient.getChannelBySid(sid);
  }

  createChannel(friendlyName: string, isPrivate: boolean = false) {
    return this.chatClient.createChannel({
      friendlyName,
      isPrivate,
      uniqueName: 'channel_1' // << generate unique channel name here
    });
  }
}

The code from the connect() method generates the following error:

ERROR in ../node_modules/xmlhttprequest/lib/XMLHttpRequest.js
Module not found: Error: Can't resolve 'child_process' in 'D:\www\chat\node_modules\xmlhttprequest\lib'
 @ ../node_modules/xmlhttprequest/lib/XMLHttpRequest.js 15:12-36
 @ ../node_modules/twilio-transport/lib/transport.js
 @ ../node_modules/twilio-mcs-client/lib/client.js
 @ ../node_modules/twilio-mcs-client/lib/index.js
 @ ../node_modules/twilio-chat/lib/client.js
 @ ../node_modules/twilio-chat/lib/index.js
 @ ./app/shared/chat.service.ts
 @ ./app/chat/_state/chat.state.ts
 @ ./app/chat/chat.module.ts
 @ ./app/app.module.ts
 @ ./main.ts

I used to have more errors (about bufferutil, net, utf-8-validate) but those went away after running npm install bufferutil net utf-8-validate child_process, only the one mentioning child_process remained, although I've installed child_process as well (not even sure what those packages do and why aren't they dependencies of twilio-chat, if they really are required).

The code is "inspired" from here: https://recursive.codes/blog/post/37 - it's the only example I could find that made any sense. I can't find a NativeScript example anywhere.