{"_id":"@abetterchoice/abc_web_sdk","name":"@abetterchoice/abc_web_sdk","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@abetterchoice/abc_web_sdk","version":"1.0.1","description":"ABetterChoice实验平台配套Web SDK","license":"MIT","contributors":[{"name":"fitchzheng","email":"fitchzheng@tencent.com"}],"main":"dist/abc_websdk.min.js","types":"lib/index.d.ts","scripts":{"build":"rimraf lib tsconfig.tsbuildinfo && tsc","buildjs":"rimraf dist && webpack --config webpack.js --progress --colors","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","dev":"webpack-dev-server --open --config webpack_dev.js --progress --colors","prepublishOnly":"yarn build"},"dependencies":{"@abetterchoice/abc_web_core":"1.0.1"},"gitHead":"ee0773a5018fa89031822b644e09b1592b355389","_id":"@abetterchoice/abc_web_sdk@1.0.1","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-eN8jv1ZE1toj8HQ2qGNyOTs7qxaiEBH0JRTqczfVTvuS9MkBltySVhMXtf45qOQy3dQLe+XWUAJaDYXuLL77qg==","shasum":"7d2e69167ede54068e3da4a8b08b9433490a0933","tarball":"https://registry.npmjs.org/@abetterchoice/abc_web_sdk/-/abc_web_sdk-1.0.1.tgz","fileCount":80,"unpackedSize":459408,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBr4OERvUBQgH/XTQUJ44VFl88rdGn+khT1beVGP1+9NAiEA18YaaiUk0QpL1AbJn+D54VOZY0e+ZVnfwtdFvAYKKbU="}]},"_npmUser":{"name":"fitchzheng","email":"fitchzheng@tencent.com"},"directories":{},"maintainers":[{"name":"fitchzheng","email":"fitchzheng@tencent.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/abc_web_sdk_1.0.1_1716974350232_0.8711475701857883"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-29T09:19:10.097Z","1.0.1":"2024-05-29T09:19:10.429Z","modified":"2024-05-29T09:19:10.765Z"},"maintainers":[{"name":"fitchzheng","email":"fitchzheng@tencent.com"}],"description":"ABetterChoice实验平台配套Web SDK","contributors":[{"name":"fitchzheng","email":"fitchzheng@tencent.com"}],"license":"MIT","readme":"## TAB 实验平台 web js sdk\n\n## Installation\n\n1. install using tnpm\n\n```bash\n$ tnpm install @tencent/abc_web_sdk\n// （可选）上报实验数据，还需要加入灯塔sdk。如果业务已经集成灯塔sdk或者不需要在上报实验数据，忽略这一步\n$ tnpm install @tencent/beacon-web-sdk\n```\n\n2. import script\n\n```html\n<script src=\"https://res.ab.qq.com/tab/tab_jssdk.min.js\"></script>\n\n//\n可选）上报实验数据，还需要加入灯塔sdk。如果业务已经集成灯塔sdk或者不需要在上报实验数据，忽略这一步\n<script src=\"https://beaconcdn.qq.com/sdk/3.1.42/beacon_web.min.js\"></script>\n```\n\n## Usage\n\n### 1. 集成 SDK:\n\n```js\nwabt.init(\n  // 可选 await 或者promise.then替代onInit\n  // 只能初始化一次\n  {\n    appid: \"303\", // TAB平台的业务id\n    guid: \"123456789012345678901234567890ab\", // 可选，传人一个用户身份，用来做分流标识。 不设置的话默认生成一个\n    // isTest: true, // 使用测试环境\n    profiles: { age: \"10\" }, // 用户属性，可以用来做标签使用\n    onInit: function (data) {\n      // 初始化完成，加载完本地缓存策略\n      console.log(\"init fniish\");\n    },\n    onNetData: function (data) {\n      // 加载完成网络策略\n      console.log(\"net fnish\");\n    },\n  }\n);\n```\n\n> `profiles` 中 `value` 的类型必须为字符串，其它类型会被强制转换成字符串。\n\n```js\n//获取不同的实例，（比如不同的业务或者不同的实验用户体系）\nconst abtest2 = abtest.getInstance(\"otherKey\"); // use otherKey get target instance\nabtest2.init({\n  /** appid */\n}); //\n```\n\n```js\n// 设置用户属性 （只会追加和覆盖）\nwabt.setProfiles(pfs);\n\n// 强制更新策略\nawait wabt.forceReload();\n\n// 切换用户\n// newProfiles为空则使用旧的profiles，否则使用新的profiles\nawait wabt.switchUser(newGuid, newProfiles);\n```\n\n### 2. 使用方法:\n\n```js\n// 2.1 获取实验，并上报一次实验曝光\n// 通过expName获取实验, 缓存中没有数据则发起网络请求获取\nconst exp = await wabt.getExpByNameAndReport(\"expName1\");\n// TAB平台定义的实验版本名称，一般用control代替对照组。你也可以定义其他的名字\nif (exp.assignment === \"contorol\") {\n  // 对照组逻辑\n} else if (exp.assignment === \"treatment1\") {\n  // TAB平台定义的实验版本名称\n  // 实验组1逻辑\n} else {\n  // exp.assignment === 'default' 未命中实验\n  // 默认\n}\n```\n\n```js\n// 2.2 获取实验, 不上报曝光\n// 通过expName获取实验, 缓存中没有数据则发起网络请求获取\nconst exp2 = await wabt.getExpByName('expName2');\n......\n// 在合适的时机手动上报曝光\nwabt.reportExpExpose(exp2);\n```\n\n```js\n// 2.3 获取缓存中得实验, 不上报曝光\n// 通过expName获取实验, 缓存中没有数据则发起网络请求获取\nconst exp2 = wabt.getCachedExpByName(\"expName2\");\n```\n\n```js\n// 上报一条实验自定义事件\nwabt.reportExpEvent(\"myEvent\", exp);\n```\n\n```js\n// 2.4 通过expName和guid获取实验（只限本次的网络请求，不会缓存到内存和磁盘）\nconst exp3 = await wabt.getTargetExpByName(\"expName\", \"userid\");\n```\n\n## 远程配置\n\nTAB 平台提供了远程配置功能，使用远程配置需要对应业务的`appkey`，可找 TAB 接口人查询（@kelvinxiao、@xieli）。\n\n### 使用\n\n```js\nimport RemoteConfig from \"@tencent/abc_web_sdk/dist/config.min\";\n\nconst remoteConfig = new RemoteConfig({\n  appid: \"6666\",\n  appKey: \"*****\",\n  guid: \"xxxx\",\n  defaultConfig: {\n    color: \"red\",\n    amount: 0,\n  },\n});\n\nremoteConfig.init(() => {\n  remoteConfig.getString(\"color\");\n  remoteConfig.getNumber(\"amount\");\n});\n```\n\n### 加载策略\n\nSDK 会读取缓存中的数据，判断是否过期。没有过期，直接使用缓存数据。\n\n如果过期，将会收集 `defaultConfig` 所有的属性 key，向服务端发送请求。服务端只会返回 `defaultConfig` 中有的值。在拉取数据之后，会更新本地缓存。SDK 首先会使用 `indexDB` 缓存，不支持的浏览器则会用 `localStorage`。\n\n使用 API 取值时，首先尝试读取远端配置，如果没有则会返回实例化时传入的默认值，如果都没有，则会返回一个空值。\n\n### API\n\n`getAll()`\n\n返回全部配置表。\n\n`getValue(string)`\n\n返回对应 `Value` 实例，可以调用`asString`，`asBoolean`，`asNumber`将数据转换成特定的类型。`getSource`返回数据的来源。\n\n`getString(string)`\n\n将值转换成 `String` 返回。\n\n`getNumber(string)`\n\n将值转换成 `Number` 返回。\n\n`getBoolean(string)`\n\n将值转换成 `Boolean` 返回。\n\n`clearLocalstorage()`\n\n清除 localstoarge 缓存。\n\n### Options\n\n| 属性          | 说明                          | 类型    |\n| ------------- | ----------------------------- | ------- |\n| appid         | 业务 ID，必填                 | String  |\n| appkey        | 请求时用作鉴权，必填          | String  |\n| defaultConfig | 默认配置                      | Object  |\n| guid          | 用户 id，可选，不填会默认生成 | String  |\n| profiles      | 用户属性，可选                | Object  |\n| isTest        | 设置成测试环境                | Boolean |\n| fetchInterval | 缓存过期时长，默认 1 小时     | Number  |\n| disableCache  | 是否禁用缓存                  | Boolean |\n\n### License\n\nISC\n","readmeFilename":"README.md"}