npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

rcs-sdk

v0.1.7

Published

封装客户端与平台间的相互调用功能。

Downloads

6

Readme

封装客户端应用与 5G 消息平台间的相互调用功能。

使用 SDK

完整代码示例请查看单元测试文件test/sdk.test.js

初始化

rcs-sdk默认不安装JsSIPWebSocket,需要由使用 sdk 的应用自己进行安装。浏览器环境中不需要安装WebSocket

import * as JsSIP from 'jssip'
import * as WebSocket from 'ws'
import { RcsIMSDK } from 'rcs-sdk'

const rcssdk = await RcsIMSDK.formDM({JsSIP, WebSocket}

//或者

RcsIMSDK.formDM({JsSIP, WebSocket}.then((rcssdk) => { }).catch(e => { })

登录和注册

await rcssdk.login(userid, password)

//或者

rcssdk.login(username, password).then(async (sdkrst) => {
  /**
   * 获取账户基本信息
   */
  let { account } = sdkrst.data
  let { userid, nickname, nameAddr } = account
})

/*账号信息*/
expect(rcssdk.account.userid).toBe(userid)
expect(rcssdk.account.nickname).toBe('alice')
expect(rcssdk.account.nameAddr.toString()).toBe('<sip:[email protected]>')

发送消息

发送消息要先新建消息再发送。

发送文本消息

/*新建文本消息对象*/
let sdkrst = await rcssdk.createTextMessage(ConverstionId, recipient, Text)
let rcsmsg = sdkrst.data
expect(rcsmsg.content).toBe(Text)
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')

sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

发送文件消息

/**
 * 1 - 新建文件消息对象
 */
let sdkrst = await rcssdk.createFileMessage(ConverstionId, recipient, rawFile)
let rcsmsg = sdkrst.data
let { file, thumbnail } = rcsmsg.content
/*文件消息对象中记录了文件的基本信息*/
expect(file.name).toBe(rawFile.name)
expect(file.size).toBe(rawFile.size)
expect(file.type).toBe(rawFile.type)
//缩略图信息空的,不可用
expect(rcsmsg.thumbnailValid).toBeFalsy()
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')
/**
 * 2 - 上传文本消息对象
 */
/* 文件消息创建后,需要执行上传文件,获得文件存储信息 */
sdkrst = await rcssdk.uploadFile(rcsmsg, rawFile)
rcsmsg = sdkrst.data
expect(file.name).toBe(rawFile.name)
expect(file.size).toBe(rawFile.size)
expect(file.type).toBe(rawFile.type)
expect(file.data).toMatchObject({
  url: 'http://files.rcs-sdk.com/file-1.png',
  until: '2017-04-25T12:17:07Z',
})
// 文件上传服务不保证对所有类型的文件都提供缩略图,所以需要检查消息中是否包含了有效的缩略图信息
let thumbnailValid = rcsmsg.content.thumbnailValid
expect(thumbnailValid).toBeTruthy()
expect(thumbnail.size).toBe(100)
expect(thumbnail.type).toBe('image/png')
expect(thumbnail.data).toMatchObject({
  url: 'http://files.rcs-sdk.com/thumbnail-1.png',
  until: '2017-04-25T12:17:07Z',
})
/**
 * 3 - 发送文件消息对象
 */
sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

发送建议回复

/*新建文本消息对象*/
let sdkrst = await rcssdk.createSugRspMessage(ConverstionId, recipient, Sug)
let rcsmsg = sdkrst.data
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')

sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

接收消息

通过在 sdk 上注册监听事件CbEvents.ONRECVNEWMESSAGE接收新消息。

rcssdk.on(CbEvents.ONRECVNEWMESSAGE, (sdkrst) => {
  let rcsmsg = sdkrst.data
  expect(rcsmsg.initialContentType.fulltype).toBe(Message_Content_Type.text)
  expect(rcsmsg.content).toBe('hello')
  expect(rcsmsg.from.toString()).toBe(from)
  expect(rcsmsg.to.toString()).toBe(to)
  expect(rcsmsg.conversationId).toBe(conversationId)
  expect(rcsmsg.contributionId).toBe(contributionId)
  expect(rcsmsg.messageId).toBe(messageId)
  expect(rcsmsg.dateTime.value).toBe(dateTimeStr)
  resolve()
})

获得会话列表

const sdkrst = await rcssdk.getAllConversationList()

//会话对象的数组
const convarr = sdkrst.data
expect(convarr).toHaveLength(1)

//会话对象
let conv = convarr[0]
expect(conv.id).toBe('1')
expect(conv.viewer.toString()).toBe('<sip:[email protected]>')
expect(conv.peer.toString()).toBe('<tel:+8617928222350>')
expect(conv.content).toBe('hello world')

获得会话消息列表

const ConversationID = '指定的会话ID'
const sdkrst = await rcssdk.getHistoryMessageList(ConversationID)

/* 会话里有5条消息 */
const msgarr = sdkrst.data
expect(msgarr).toHaveLength(5)
/* 依次是:文本,文本加建议,卡片,卡片加建议,文件 */
/* 消息是RcsMsg的实例 */
let [text, textAndSugs, card, cardAndSugs, file] = msgarr
/**
 * 1 - 文本消息
 */
expect(text.initialContentType.fulltype).toBe(Message_Content_Type.text)
/*消息内容*/
expect(text.content).toBe('hello world')
/*消息ID*/
expect(text.messageId).toBe('1')
/*发送人*/
expect(text.from.toString()).toBe('<sip:[email protected]>')
/*接收人*/
expect(text.to.toString()).toBe('<sip:[email protected]>')
/*消息生成时间*/
expect(text.dateTime.value).toBe('2012-09-01T11:46:43.350+08:00')
/*递送状态*/
expect(text.deliveryNotification).toBe('delivered')
expect(text.displayNotification).toBe('displayed')
expect(text.processingNotification).toBe('stored')

获得联系人列表

const sdkrst = await rcssdk.getContactList()

获得联系人详情

const sdkrst = await rcssdk.getContactDetail(userid)

获得 Chatbot 应用列表

const sdkrst = await rcssdk.getChatbotList()

获得 Chatbot 应用详情

const sdkrst = await rcssdk.getChatbotDetail(chatbotid)

环境变量

服务地址

| 环境变量 | 用途说明 | 默认值 | | --------------------------- | -------------------------------------------------- | ------ | | RCS_SDK_AUTH_API_SERVER | 提供用户认证服务相关 API 的服务访问地址。 | | | RCS_SDK_AUTH_API_PIN | 认证服务需要的万能验证码 | | | RCS_SDK_AUTH_TYPE | 认证方式 apply(appkey、secret)方式 和 账号密码方式 | | | RCS_SDK_AUTH_API_TIMEOUT | 认证服务 API 超时时间 | | | RCS_SDK_MSG_API_SERVER | 提供消息服务相关 API 的服务访问地址。 | | | RCS_SDK_MSG_API_TIMEOUT | 消息服务 API 访问超时时间。 | | | RCS_SDK_CONTACT_API_SERVER | 提供联系人服务相关 API 的服务访问地址。 | | RCS_SDK_CONTACT_API_TIMEOUT | 联系人服务 API 访问超时时间。 | | | RCS_SDK_CHATBOT_API_SERVER | 提供 Chatbot 获取服务相关 API 的服务访问地址。 | | | RCS_SDK_CHATBOT_API_TIMEOUT | Chatbot 获取服务 API 访问超时时间。 | | | RCS_SDK_UPLOAD_API_SERVER | 提供文件上传服务相关 API 的服务访问地址。 | | | RCS_SDK_UPLOAD_API_TIMEOUT | 文件上传服务 API 访问超时时间。 | | | RCS_SDK_SIP_SERVER | 提供消息收发服务的 SIP 服务访问地址。 | |

模拟数据

支持通过环境变量指定服务接口返回模拟数据的存储位置。

| 环境变量 | 用途说明 | 默认值 | | ---------------------------------------- | ----------------------------------------------------------- | ------ | | RCS_SDK_SKIP_AUTH | 设置 SIP 服务是否检查用户认证状态。 | false | | RCS_SDK_MOCK_FILE_PATH_GET_TOKEN | 指定模拟返回当前用户登录成功后获得的 token 数据的存储位置。 | | | RCS_SDK_MOCK_FILE_PATH_GET_ACCOUNT | 指定模拟返回当前用户账户数据的存储位置。 | | | RCS_SDK_MOCK_FILE_PATH_CONVERSATION_LIST | 指定模拟返回当前用户会话列表数据的存储位置。 | | | RCS_SDK_MOCK_FILE_PATH_CONTACT_LIST | 指定模拟返回当前用户联系人列表数据的存储位置。 | | | RCS_SDK_MOCK_FILE_PATH_UPLOAD_FILE | 指定模拟返回当前用户上传文件接口返回数据的存储位置。 | |

单元测试

可以通过指定环境变量使用模拟测试数据和输出调试日志。

使用模拟数据

通过环境变量MOCK控制服务接口访问真实服务还是使用指定的模拟数据。模拟数据的获取位置通过RCS_SDK_MOCK_开通的环变量指定。

MOCK=auth,sip,conversation,message,uploader npm test sdk.test.js
npm test user.test.js
MOCK=message,uploader npm test message
MOCK=conversation npm test conversation
MOCK=contact npm test contact

输出日志

通过环境变量DEBUG控制输出日志。

DEBUG=rcssdk:* MOCK=auth,sip,conversation,message npm test sdk.test.js