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

@tingyun-sdk/web

v3.6.1

Published

tingyun web SDK

Downloads

86

Readme

@tingyun-sdk/web

听云web SDK

使用

  1. 安装
npm install --save @tingyun-sdk/web
  1. 启动
import Tingyun from '@tingyun-sdk/web';

Tingyun.init({
    token: '<应用token>',
    domain: '<数据上传地址>',
    // ...其他配置项
});
  • token: Tingyun Web应用唯一标识, 可在控制台获取
  • domain: 数据上传地址, 可在控制台获取

API

设置用户ID

语法:

Tingyun.setUid(username)

参数:

  • username: 用户名。字符串类型。必须

自定义操作

语法:

const action = Tingyun.newAction(options);

参数:

  • options
    操作配置项对象

    • key: 操作名称。字符串类型。必须
    • context: 操作包含的附加数据。对象类型。可选
    • duration: 设置操作时间, 对于立即发送的操作, 可以设置此配置指定操作时间。number类型。可选
    • timeout: 操作超时时间, 默认10分钟, 超时后的操作被丢弃, number类型, 可选
    • status: 设置操作状态successfail, 默认success, 只在立即发送模式的操作有效。字符串类型。可选
    • immediate: 是否立即发送此操作, boolean类型, 默认为false。可选

返回:

返回操作对象action, 可以用于结束操作。 action对象包含下列函数。

  • end: 结束操作
    action.end(options);
    • options: 结束操作配置对象。可选
      • context: 操作包含的附加数据。对象类型。可选
      • status: 设置操作状态successfail, 默认success。字符串类型。可选
  • store: 暂存操作, 操作相关信息会保存进localStorage中, 可以使用Tingyun.endStoredAction读取并结束。主要用于跨页面的操作。
    action.store();
    结束存储操作:
    Tingyun.endStoredAction(options);
    • options: 结束存储操作配置对象。可选
      • key: 结束指定key的操作, 不传会结束当前存储的操作。字符串类型。可选
      • status: 指定存储操作的结束状态。successfail。字符串类型。可选
      • timeout: 设置超时时间, 默认60000ms, 如果超时不上传数据。number类型。可选

示例:

提交订单的场景示例:

function submitOrder(order) {
    // 创建提交订单操作, 并传入订单id作为额外信息
    const action = Tingyun.newAction({
        key: '提交订单',
        context: {
            orderId: order.id
        }
    });

    // 自定义提交订单请求业务逻辑
    sendRequest(SUBMIT_ORDER_URL, data)
        .then((res) => {
            // 提交成功, 结束操作, 并设置附加返回的业务状态码
            action.end({
                context: {
                    code: res.data.code
                }
            });
        })
        .catch(() => {
            // 提交失败, 以失败的状态结束操作
            action.fail();
        });
}

自定义事件

语法:

Tingyun.newEvent(options);

参数:

  • options 事件配置项对象

    • name: 事件名称。 字符串类型。 必须
    • msg: 事件信息。字符串类型。可选
    • status: 事件状态。字符串类型。可选
    • context: 操作包含的附加数据。对象类型。可选

示例:

用户页面提示框触发场景示例:

function messageBox(data) {
    // 创建事件, 并设置详细信息到额外信息中
    Tingyun.newEvent({
        name: data.title,
        msg: data.msg,
        status: data.level,
        context: {
            detail: data.detail
        }
    });
}

上报JS错误

语法:

Tingyun.captureException(err[, options])

参数:

  • err: 错误对象, 需要包含message(错误信息)和stack(错误堆栈)两个属性。必须。
  • options: 额外选项。对象类型。可选
    • contexts: 额外附加数据。对象类型。可选
    • breadcrumbs: 面包屑数据。数组。可选

示例:

拦截Vue框架内错误并上报:

import Tingyun from '@tingyun-sdk/web';

Vue.config.errorHandler = function(err, vm, info) {
    Tingyun.captureException(err);
};

全局自定义数据

语法:

Tingyun.setContext(key[, value]);

参数:

  • key: 字符串或对象, 传字符串表示数据分类名称, 如果传对象, 第二个参数值将被忽略
  • value: 对象, 当第一个参数传字符串时,表示数据的内容。

示例:

Tingyun.setContext('app', {
    name: 'my_app',
    version: 'V1.1.1'
});

// 等效使用方式
TINGYUN.setContext({
    app: {
        name: 'my_app',
        version: 'V1.1.1'
    }
});

局部自定义数据

可以使用Action Hook设置局部自定义数据。Action Hook是SDK在采集数据项数据时触发的回调函数, 回调函数中会传入当前数据项的相关信息和关联到当前数据项的Scope对象。最终通过scope对象在具体数据项设置自定义数据。

注册Action Hook语法:

Tingyun.addActionHook(name, handler)

参数:

  • name

    需要注册的Action hook名称, 必须

    取值:

    • ajax: Ajax
    • error: JS错误
    • userAction: 自定义操作
  • handler

    hook回调函数, 会传入params参数, 必须

    • params.target: 数据项原始对象
    • params.actionData: 数据项基本信息, 不同类型的数据结构会不同。具体参考具体action hook的文档。
    • params.scope: scope对象

示例:

在Ajax返回时设置局部自定义数据:

Tingyun.addActionHook('ajax', function(params) {
    const {scope} = params;    

    // 设置局部自定义数据
    scope.setContext({
        // ...
    });
});