Socket
Socket
Sign inDemoInstall

tiktok-live-connector

Package Overview
Dependencies
84
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.9.20 to 0.9.21

12

dist/index.js

@@ -62,3 +62,5 @@ "use strict";

LINKMICARMIES: 'linkMicArmies',
LIVEINTRO: 'liveIntro'
LIVEINTRO: 'liveIntro',
EMOTE: 'emote',
ENVELOPE: 'envelope'
};

@@ -615,2 +617,10 @@ /**

break;
case 'WebcastEmoteChatMessage':
this.emit(MessageEvents.EMOTE, simplifiedObj);
break;
case 'WebcastEnvelopeMessage':
this.emit(MessageEvents.ENVELOPE, simplifiedObj);
break;
}

@@ -617,0 +627,0 @@ });

@@ -97,2 +97,24 @@ "use strict";

if (webcastObject.emote) {
var _webcastObject$emote, _webcastObject$emote2, _webcastObject$emote3;
webcastObject.emoteId = (_webcastObject$emote = webcastObject.emote) === null || _webcastObject$emote === void 0 ? void 0 : _webcastObject$emote.emoteId;
webcastObject.emoteImageUrl = (_webcastObject$emote2 = webcastObject.emote) === null || _webcastObject$emote2 === void 0 ? void 0 : (_webcastObject$emote3 = _webcastObject$emote2.image) === null || _webcastObject$emote3 === void 0 ? void 0 : _webcastObject$emote3.imageUrl;
delete webcastObject.emote;
}
if (webcastObject.treasureBoxUser) {
var _webcastObject$treasu, _webcastObject$treasu2, _webcastObject$treasu3, _webcastObject$treasu4;
// holy crap
Object.assign(webcastObject, getUserAttributes(((_webcastObject$treasu = webcastObject.treasureBoxUser) === null || _webcastObject$treasu === void 0 ? void 0 : (_webcastObject$treasu2 = _webcastObject$treasu.user2) === null || _webcastObject$treasu2 === void 0 ? void 0 : (_webcastObject$treasu3 = _webcastObject$treasu2.user3[0]) === null || _webcastObject$treasu3 === void 0 ? void 0 : (_webcastObject$treasu4 = _webcastObject$treasu3.user4) === null || _webcastObject$treasu4 === void 0 ? void 0 : _webcastObject$treasu4.user) || {}));
delete webcastObject.treasureBoxUser;
}
if (webcastObject.treasureBoxData) {
Object.assign(webcastObject, webcastObject.treasureBoxData);
delete webcastObject.treasureBoxData;
webcastObject.timestamp = parseInt(webcastObject.timestamp);
}
return Object.assign({}, webcastObject);

@@ -102,6 +124,6 @@ }

function getUserAttributes(webcastUser) {
var _webcastUser$profileP, _webcastUser$extraAtt;
var _webcastUser$userId, _webcastUser$profileP, _webcastUser$extraAtt, _userAttributes$userB, _userAttributes$userB2, _userAttributes$userB3;
return {
userId: webcastUser.userId.toString(),
let userAttributes = {
userId: (_webcastUser$userId = webcastUser.userId) === null || _webcastUser$userId === void 0 ? void 0 : _webcastUser$userId.toString(),
uniqueId: webcastUser.uniqueId !== '' ? webcastUser.uniqueId : undefined,

@@ -111,13 +133,37 @@ nickname: webcastUser.nickname !== '' ? webcastUser.nickname : undefined,

followRole: (_webcastUser$extraAtt = webcastUser.extraAttributes) === null || _webcastUser$extraAtt === void 0 ? void 0 : _webcastUser$extraAtt.followRole,
userBadges: mapBadges(webcastUser.badge)
userBadges: mapBadges(webcastUser.badges)
};
userAttributes.isModerator = userAttributes.userBadges.some(x => x.type && x.type.toLowerCase().includes('moderator'));
userAttributes.isNewGifter = userAttributes.userBadges.some(x => x.type && x.type.toLowerCase().includes('live_ng_'));
userAttributes.isSubscriber = userAttributes.userBadges.some(x => x.url && x.url.toLowerCase().includes('/sub_'));
userAttributes.topGifterRank = (_userAttributes$userB = (_userAttributes$userB2 = userAttributes.userBadges.find(x => x.url && x.url.includes('/ranklist_top_gifter_'))) === null || _userAttributes$userB2 === void 0 ? void 0 : (_userAttributes$userB3 = _userAttributes$userB2.url.match(/(?<=ranklist_top_gifter_)(\d+)(?=.png)/g)) === null || _userAttributes$userB3 === void 0 ? void 0 : _userAttributes$userB3.map(Number)[0]) !== null && _userAttributes$userB !== void 0 ? _userAttributes$userB : null;
return userAttributes;
}
function mapBadges(badge) {
if (!badge || !Array.isArray(badge.badges)) return [];
let badges = [];
badge.badges.forEach(badge => {
badges.push(Object.assign({}, badge));
});
return badges;
function mapBadges(badges) {
let simplifiedBadges = [];
if (Array.isArray(badges)) {
badges.forEach(innerBadges => {
if (Array.isArray(innerBadges.badges)) {
innerBadges.badges.forEach(badge => {
simplifiedBadges.push(Object.assign({}, badge));
});
}
if (Array.isArray(innerBadges.imageBadges)) {
innerBadges.imageBadges.forEach(badge => {
if (badge && badge.image && badge.image.url) {
simplifiedBadges.push({
type: 'image',
displayType: badge.displayType,
url: badge.image.url
});
}
});
}
});
}
return simplifiedBadges;
}

@@ -124,0 +170,0 @@

@@ -39,2 +39,4 @@ "use strict";

case 'WebcastLiveIntroMessage':
case 'WebcastEmoteChatMessage':
case 'WebcastEnvelopeMessage':
message.decodedData = tiktokSchema.lookupType(`TikTok.${message.type}`).decode(message.binary);

@@ -41,0 +43,0 @@ break;

2

package.json
{
"name": "tiktok-live-connector",
"version": "0.9.20",
"version": "0.9.21",
"description": "Node.js module to receive live stream chat events like comments and gifts from TikTok LIVE",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -129,2 +129,4 @@ # TikTok-Live-Connector

- [`social`](#social)
- [`emote`](#emote)
- [`envelope`](#envelope)
- [`questionNew`](#questionnew)

@@ -213,3 +215,7 @@ - [`linkMicBattle`](#linkmicbattle)

followRole: 1, // 0 = none; 1 = follower; 2 = friends
userBadges: [] // e.g. Moderator badge
userBadges: [], // e.g. Moderator badge
isModerator: true,
isNewGifter: false,
isSubscriber: false,
topGifterRank: 3
}

@@ -240,4 +246,20 @@ ```

name: 'Moderator'
},
{
// Top Gifter Badge
type: 'image',
displayType: 1,
url: 'https://p19-webcast.tiktokcdn.com/webcast-va/ranklist_top_gifter_3.png~tplv-obj.image'
},
{
// Subscriber Badge
type: 'image',
displayType: 1,
url: 'https://p19-webcast.tiktokcdn.com/webcast-va/e1b3cdc5d3a687ca5602d84c09117d9b~tplv-obj.image'
}
]
],
isModerator: true,
isNewGifter: false,
isSubscriber: true,
topGifterRank: 3
}

@@ -274,3 +296,7 @@ ```

userBadges: [],
profilePictureUrl: 'https://p16-sign.tiktokcdn-us.com/...',
profilePictureUrl: 'https://p16-sign.tiktokcdn-us.com/...',
isModerator: true,
isNewGifter: false,
isSubscriber: true,
topGifterRank: 3,

@@ -291,3 +317,3 @@ // Gift Details

// Receiver Details
// Receiver Details (can also be a guest broadcaster)
receiverUserId: '7044962356446839814'

@@ -350,2 +376,48 @@ }

#### `emote`
Triggered every time a subscriber sends an emote (sticker).
```javascript
tiktokChatConnection.on('emote', data => {
console.log('emote received', data);
})
```
Data structure:
```javascript
{
userId: '6889810001851728898',
uniqueId: 'zerodytest',
nickname: 'Zerody One',
profilePictureUrl: 'https://p77-sign-va.tiktokcdn.com/...',
followRole: 2,
userBadges: [ ],
isSubscriber: true,
topGifterRank: 3,
emoteId: '7101355900887796486',
emoteImageUrl: 'https://p19-webcast.tiktokcdn.com/...'
}
```
#### `envelope`
Triggered every time someone sends a treasure chest.
```javascript
tiktokChatConnection.on('envelope', data => {
console.log('envelope received', data);
})
```
Data structure:
```javascript
{
userId: '6889810001851728898',
uniqueId: 'zerodytest',
nickname: 'Zerody One',
coins: 220,
canOpen: 10,
timestamp: 1654802658
}
```
#### `questionNew`

@@ -352,0 +424,0 @@ Triggered every time someone asks a new question via the question feature.

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc