open-index/open-npm huggingface dataset:
npm package: @lofter-common-features/ad
Description: ```ts import {   AdPlayTask } from '@lofter-common-features/ad/play-ad';
Latest version: 0.2.6

# 广告相关 Ad

## 调用例子
```ts
import {
  AdPlayTask
} from '@lofter-common-features/ad/play-ad';

const adPlayTask = new AdPlayTask(options);
adPlayTask.play().then(
  () => {
    // 播放广告成功
    // 通过 adPlayTask.status 查询即可
    业务代码xxx
    // 建议销毁
    adPlayTask.destroy();
  },
  () => {
    // 播放广告失败
    // 通过 adPlayTask.status 查询原因即可
    业务代码xxx
    // 建议销毁
    adPlayTask.destroy();
  }
)
```

## 参数说明
#### options.orderId
类型：string

必填，广告订单ID

#### options.userId
类型：number

必填，登陆用户id,需要传给客户端

#### options.location 和 options.category
广告参数

#### options.playAgainCount
类型：number

非必填，连续的第几次播放，默认为1

#### options.pollingConfig
非必填，如果不传则不会进行轮询，并在客户端回调后标记为resolve
```ts
{
  /**
   * 第一次收到回调后立刻查询，
   * 后续每2秒轮询一次，
   */
  pollingDelay: 2000,
  /**
   * 总共的轮询次数
   */
  pollingMaxCount: 10,
  pollingFunction: ({
    /**
     * 当前是第几次轮询，从1开始
     */
    times
  }) => Promise<void | {
    success: true | false,
    /**
     *
     */
    orderResults: OrdersResult
  }>
}


/**
 * 给客户端打点用的，透传后端数据
 */
type OrdersResult = {
  id: number;
  /**
   * 0-未成功；1-已成功
   */
  status: 0 | 1;
  rewardType: number;
  rewardCount: number;
}[]
```

#### options.tracking
非必填，埋点函数的回调
```ts
(
  eventId: string,
  eventData: any
) => void;
```

## 播放状态
```ts
export const PLAY_AD_STATUS = {
  /**
   * 广告任初始化后，默认是prepare
   */
  PREPARE: -1,
  /**
   * 调用 njb_playAd 但是还没收到反馈
   */
  START: 0,
  /**
   * 客户端通过 njb_playAdCallback 回调成功
   */
  COMPLETED: 1,
  /**
   * 规定时间内，未收到客户端的njb_playAdCallback回调
   */
  TIME_OUT: 2,
  /**
   * 播放中的状态，一半可以葫芦
   */
  PLAYING: 3,
  /**
   * 用户主动取消
   */
  CANCEL: 4,
  /**
   * 客户端回调状态为 0 或者未识别的状态吗
   */
  ERROR: 5,
  /**
   * 订单轮询成功
   */
  ORDER_SUCCESS: 6,
  /**
   * 订单轮询失败
   */
  ORDER_FAILURE: 7,
}
```

广告播放 bridge 返回 code用于debug
```ts
/**
 * 广告播放 bridge 返回 code
 */
export const PLAY_AD_CODE = {
  COMPLETED: 200,
  ORDER_COMPLETED: 202,
  ERROR: 0,
  PLAYING: 201,
  CANCEL: 100
}
```

## 播放事件
```ts
export interface PlayAdEvents {
  completed: AdPlayTask;
  playing: AdPlayTask;
  cancel: AdPlayTask;
  error: AdPlayTask;
  play: AdPlayTask;
  orderSuccess: AdPlayTask;
  orderFailure: AdPlayTask;
  timeout: AdPlayTask;
}

const removeListener = adPlayTask.addListener('eventName', () => {})
```
npm package: @lofter-common-shared/rn-webview-message
Description: rn上的webview 基于 react-native-webview
Latest version: 0.1.9

# rn和webview基础协议
rn上的webview 基于 react-native-webview




#### 通信 协议
RN -> webview
const run = `
  try {
    window.lofterMessage("
      {
        "key": "xx",
        "data": {}
      }
    ")
  } catch(e){}
`;

this.webref.injectJavaScript(run);
webview -> RN
// webview
window.ReactNativeWebView.postMessage("{
  "key": "xx",
  "data": {}
}")

// RN
<WebView
  source={{ html }}
  onMessage={(event) => {
    JSON.parse(event.nativeEvent.data);
  }}
/>