@wezard/halo-core
TypeScript icon, indicating that this package has built-in type declarations

0.12.0 • Public • Published

Halo Core

javascript NPM version

Table of Content

  1. Installation
    1. Firebase
  2. Usage
    1. Initialization
    2. Authentication and user creation
  3. Overview
    1. User
    2. Agent
    3. Room
  4. Create an Halo Module

Installation

Firebase

Add Halo dependencies:

yarn add @wezard/halo-core @wezard/react-native-halo-firebase

Add Firebase dependencies:

yarn add @react-native-firebase/app @react-native-firebase/auth @react-native-firebase/firestore @react-native-firebase/storage

Setup Firebase following official guide.

Usage

Initialization

import { halo } from '@wezard/halo-core'

// ...

const initChat = () => {
    halo.initialize('firebase')
}

Authentication and user creation

Halo Firebase needs to authenticate the user before they perform any action.

import { halo } from '@wezard/halo-core'
import auth from '@react-native-firebase/app'

// ...
const signUp = async () => {
    try {
        await auth().createUserWithEmailAndPassword(email, password)
        const user = await halo.createUser({
            firstName: 'Matteo',
            lastName: 'Bianchi',
            nickname: 'mattyb98',
            image: 'https://avatar.com'
        })
        // save user data
    } catch (error) {
        // handle error
    }
}

const signIn = async () => {
    try {
        const userCredentials = await auth().signInWithEmailAndPassword(email, password)
        const user = await halo.getUser(userCredentials.user.uid)
        // save user data
    } catch (error) {
        // handle error
    }
}

Overview

User

method return description
getUser UserDetails get user info by user id
createUser UserDetails create chat user reference
updateUser UserDetails update chat user
updateUserDeviceToken void update device token in order to receive notifications
fetchUsers void register a callback triggered when a user is added o updated

Agent

method return description
getAgent AgentDetails get agent info by agent id
createUser AgentDetails create chat agent reference
updateAgent AgentDetails update chat agent
updateAgentDeviceToken void update device token in order to receive notifications

Room

method return description
getRooms RoomDetails[] get rooms details collection with pagination
getRoomDetails RoomDetails get room details
createRoomWithUsers RoomDetails create private or group room object
createRoomForAgents RoomDetails create an agent room based on a specific tag
joinUser RoomDetails add a user to a group room
joinAgent RoomDetails add an agent to an agent room, an agent must be added to the room in order to have write permissions
removeUser RoomDetails remove a user from a group room
sendTextMessage MessageType.Any send a message
sendFileMessage MessageType.Any send a message with an attachement, it handles file upload
sendFileMessageFromUrl MessageType.Any send a message with an attachement, it uses file url passed as argument to store file
readMessage void mark message read for one user
deleteMessage void delete message for all room users
getRoomMedia MessageType.MediaInfo[] get room media filtered by content type
fetchRooms void register a callback triggered when a room is added or updated
fetchRoomsByAgent void register a callback triggered when a room with one or more tags is added or updated
fetchMessages void register a callback triggered when messages are added to a room

Create an Halo Module

In order to create an Halo Module, init a React Native library, you can use create-react-native-library.

Then add Halo dependency:

yarn add @wezard/halo-core

Now you have to implements IUser, IAgent and IRoom interfaces:

  • user.ts
import { IUser } from '@wezard/halo-core'

export class User implements IUser {
    // implements IUser methods
}
  • agent.ts
import { IAgent } from '@wezard/halo-core'

export class Agent implements IAgent {
    // implements IAgent methods
}
  • room.ts
import { IRoom } from '@wezard/halo-core'

export class Room implements IRoom {
    // implements IRoom methods
}

And create an index.ts file that exports classes

export * from './agent'
export * from './room'
export * from './user'

Package Sidebar

Install

npm i @wezard/halo-core

Weekly Downloads

0

Version

0.12.0

License

MIT

Unpacked Size

83.3 kB

Total Files

52

Last publish

Collaborators

  • wekouri
  • rolud
  • gatteo