Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PubSub and Chat namespace with new interface #814

Merged
merged 25 commits into from
Aug 28, 2023
Merged

PubSub and Chat namespace with new interface #814

merged 25 commits into from
Aug 28, 2023

Conversation

iAmmar7
Copy link
Collaborator

@iAmmar7 iAmmar7 commented Jun 21, 2023

Description

New interface for the Chat and PubSub APIs.

ref: https://github.com/signalwire/cloud-product/issues/7185

Type of change

  • Internal refactoring
  • Bug fix (bugfix - non-breaking)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Code snippets

The new interface contains a single SW client with Chat and PubSub namespaces

import { SignalWire } from '@signalwire/realtime-api'

(async () => {
  const client = await SignalWire({
    host: process.env.HOST,
    project: process.env.PROJECT,
    token: process.env.TOKEN,
  })

  // Attach pubSub listeners
  const unsubHomePubSubListener = await client.pubSub.listen({
      channels: ['home'],
      onMessageReceived: (message) => {
        console.log('Message received under the "home" channel', message)
      },
    })

  // Publish on home channel
  await client.pubsub.publish({
      content: 'Hello There',
      channel: 'home',
      meta: {
        fooId: 'randomValue',
      },
  })
  
  // Attach chat listeners
  const unsubOfficeChatListener = await client.chat.listen({
      channels: ['office'],
      onMessageReceived: (message) => {
        console.log('Message received on "office" channel', message)
      },
      onMmemberJoined: (member) => {
        console.log('Member joined on "office" channel', member)
      },
      onMmemberUpdated: (member) => {
        console.log('Member updated on "office" channel', member)
      },
      onMmemberLeft: (member) => {
        console.log('Member left on "office" channel', member)
      },
    })

  // Publish a chat message on the office channel
  const pubRes = await client.chat.publish({
      content: 'Hello There',
      channel: 'office',
  })

  // Get channel messages
  const messagesResult = await client.chat.getMessages({
      channel: 'office',
  })

  // Get channel members
  const getMembersResult = await client.chat.getMembers({ channel: 'office' })
  
  // Unsubscribe pubSub listener
  await unsubHomePubSubListener()

  // Unsubscribe chat listener
  await unsubOfficeChatListener()

  // Disconnect the client
  client.disconnect()
})();

@changeset-bot
Copy link

changeset-bot bot commented Jun 21, 2023

🦋 Changeset detected

Latest commit: e408070

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 6 packages
Name Type
@signalwire/realtime-api Major
@signalwire/core Major
@signalwire/node Patch
@signalwire/js Patch
@signalwire/web-api Patch
@signalwire/webrtc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@iAmmar7 iAmmar7 changed the title WIP: PubSub namespace with new interface WIP: PubSub and Chat namespace with new interface Jun 21, 2023
@iAmmar7 iAmmar7 changed the title WIP: PubSub and Chat namespace with new interface PubSub and Chat namespace with new interface Jun 26, 2023
@iAmmar7 iAmmar7 requested a review from edolix June 26, 2023 12:36
@edolix edolix requested review from danieleds and rsowald June 27, 2023 07:55
Comment on lines +70 to +74
// Disconnect the client
client.disconnect()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: i'd like to have .disconnect() to be async in the new interface

Copy link
Contributor

@edolix edolix left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! 💯

packages/core/src/chat/applyCommonMethods.ts Show resolved Hide resolved
packages/realtime-api/src/chat/workers/chatWorker.ts Outdated Show resolved Hide resolved
packages/realtime-api/src/chat/workers/chatWorker.ts Outdated Show resolved Hide resolved
packages/realtime-api/src/chat/Chat.ts Outdated Show resolved Hide resolved
packages/realtime-api/src/pubSub/workers/pubSubWorker.ts Outdated Show resolved Hide resolved
packages/realtime-api/src/task/Task.test.ts Outdated Show resolved Hide resolved
@edolix edolix removed the request for review from rsowald August 28, 2023 13:17
Copy link
Contributor

@edolix edolix left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank for great work @iAmmar7 ! 🥇

@edolix edolix merged commit e3f84f5 into dev Aug 28, 2023
10 of 11 checks passed
@edolix edolix deleted the aa/chat-api branch August 28, 2023 16:06
iAmmar7 added a commit that referenced this pull request Sep 14, 2023
* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
iAmmar7 added a commit that referenced this pull request Sep 18, 2023
* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
iAmmar7 added a commit that referenced this pull request Nov 14, 2023
* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
iAmmar7 added a commit that referenced this pull request Dec 5, 2023
* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
iAmmar7 added a commit that referenced this pull request Dec 5, 2023
* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
iAmmar7 added a commit that referenced this pull request Dec 5, 2023
* Task namespace with new interface (#807)

* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* stack test update for Task

* changeset include

* refactor and e2e test case

* rename task emitter

* listen function public explicitly

* index worker file

* utility function to prefix the event

* correct type of taskworker

* PubSub and Chat namespace with new interface (#814)

* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* utility function to prefix the event

* PubSub namespace with new interface

* new interface for the Chat API

* fix stack tests

* include e2e test for PubSub API

* e2e test case for Chat interface

* test disconnected client

* unit tests for Base classes

* Unit tests for the Task class

* fix TS for the Task class unit test

* unit tests for PubSub and Chat API classes

* include changeset

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/chat/workers/chatWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/pubSub/workers/pubSubWorker.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix typo

* type in changeset

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Voice API with new interface (#855)

* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* Voice API with new interface

* handle call.playback listeners with all the methods

* run workers through methods

* playback events with e2e test cases

* remove old call playback class

* fix test file names

* improve playback tests

* rename voice playback tests

* voice call record events with e2e test cases

* fix playback and record types

* implement call.prompt with playback

* test utility add

* e2e test cases for call prompt

* call collect with e2e test cases

* Call tap with e2e test cases

* Call Detect API with e2e test cases

* remove old voice detect test

* voice call connect api

* update voice pass test with new interface

* improve base and listener class for instances

* include unit test cases for call apis

* voice stack test update

* call connect implement with e2e test case

* enable ws logs for task test

* update voice playground with the new interface

* minimize race condition in playback and recording e2e test cases

* minimize race condition for collect and detect e2e

* improve call state events logic

* fix voice unit test

* enable ws logs for voice test

* fix call connect bug

* remove unused voice calling worker

* enable ws logs for voice call collect

* improve collect and detect e2e test cases

* include changeset

* Update packages/realtime-api/src/BaseNamespace.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/ListenSubscriber.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Update packages/realtime-api/src/task/Task.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* add addToListenerMap method for consistency

* Revert "Update packages/realtime-api/src/ListenSubscriber.ts"

This reverts commit 69df536.

* update payload set and extends base calls with EventEmitter

* protect event emitter methods

* improve call collect test

* improve voice record e2e test

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* Messaging namespace with new interface (#812)

* Task namespace with new interface

* taskworker include

* extend task from applyeventlisteners

* base namespace class to handle the listen method

* topic attach to event name

* type update

* remove older Task api

* refactor and e2e test case

* Voice API with new interface

* handle call.playback listeners with all the methods

* run workers through methods

* playback events with e2e test cases

* remove old call playback class

* fix test file names

* improve playback tests

* rename voice playback tests

* voice call record events with e2e test cases

* fix playback and record types

* implement call.prompt with playback

* e2e test cases for call prompt

* Call tap with e2e test cases

* Call Detect API with e2e test cases

* improve base and listener class for instances

* call connect implement with e2e test case

* improve call state events logic

* update payload set and extends base calls with EventEmitter

* protect event emitter methods

* Messaging namespace with new interface

* message worker to handle the events

* handle events through messaging api

* fix typescript types

* e2e test case for messagin api

* fix stack test

* unit test for messaging api

* include changeset

* promisify client disconnect

* fix unit test cases

* fix disconnect emitter

* fix unit test

* rebased with the dev

* fix base name space class

* connect payload fallback

* Update internal/playground-realtime-api/src/voice/index.ts

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>

* fix unit tests

* fix e2e test cases

* Decorated promise for Voice Call APIs (#880)

* Decorated promise for Voice Call APIs

* decorate recording promise

* unit tests for decorated playback and recording promises

* decorate prompt promise

* generic decorate promise function

* decorated promise for detect and tap

* decorated call collect api promise

* more unit test cases

* generic decorate promise function with unit tests

* e2e test cases update

* update voice playgrounds

* include changeset

* prevent methods to be run if the action has ended

* promisify action ended properties

* Realtime Video SDK with new interface (#886)

* Realtime Video SDK with new interface

* room session with the new interface

* remove auto subscribe consumer

* fix unit tests for video and room session

* room member instance

* unit tests for room session member

* fix stack test

* room session playback realtime-api instance

* room session recording realtime-api instance

* room session stream realtime-api instance

* explicit methods for the realtime-api

* fix build issue

* separate workers for playback, recording and stream

* video playground with the new interface

* decorated promise for room session playback api

* decorated promise for room session recording api

* decorated promise for room session stream api

* fix unit test cases

* unit tests for decorated promises

* update video play ground with decorated promise

* fix e2e test case for the video

* fix unit test

* do not unsubscribe events

* fix unit test

* include changeset

* streaming getter for room session

* rename types

* fix playwright e2e test cases

* fix call fabric relay application test

* include log level debug for task e2e test

* Fix e2e test cases with v4 SDK (#916)

* fail test if error code is null

* increase timeout limit for pubsub e2e test

* unsub chat event

* update node version in github actions

* debug enable for prompt tests

* remove logs from the SDK

* send digits once prompt starts

* end the call when caller ends the prompt

* fix action onStarted promise

* update voice speech test with v4 interface

* enable logs for chat test

* kill all node process before running tests

* run only realtime tests

* debug the ci

* child.stderr.write remove

* remove process.stderr in voiceSpeechCollect

* enable all the tests

* categorize tests by action type

* voice collect speech test with continuous true and partial results false

* voice collect speech test with continuous true and partial results true

* more simplified collect speech tests

* include changeset

* increase tap timeout and fix race conditions in voice.test.ts

* increase tap timeout

* update possible results for collect

* tap setTimeout update

* Release 2023-11-23 (#913)

* Expose Chat types from the JS SDK (#919)

* Expose Chat types from the JS SDK

* include changeset

* Release 2023-12-05 (#920)

---------

Co-authored-by: Edoardo Gallo <edoardo@signalwire.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants