agora-token 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ const appId = "970CA35de60c44645bbae8a215061b33"
10
10
  const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b"
11
11
  const expire = 24 * 3600
12
12
 
13
+ // Verifies FPA token generation and parsing.
13
14
  exports.buildToken_Test = function (test) {
14
15
  let token = FpaTokenBuilder.buildToken(appId, appCertificate)
15
16
  let accessToken = new AccessToken2('', '', 0, 0)
@@ -17,6 +18,6 @@ exports.buildToken_Test = function (test) {
17
18
 
18
19
  test.equal(appId, accessToken.appId)
19
20
  test.equal(expire, accessToken.expire)
20
- test.equal(0, accessToken.services[kFpaServiceType].__privileges[ServiceFpa.kPrivilegeLogin])
21
+ test.equal(0, accessToken.getServices(kFpaServiceType)[0].__privileges[ServiceFpa.kPrivilegeLogin])
21
22
  test.done()
22
23
  }
@@ -17,6 +17,7 @@ const expire = 600;
17
17
  const tokenExpirationInSecond = 600;
18
18
  const privilegeExpirationInSecond = 600;
19
19
 
20
+ // Verifies subscriber RTC token generation with a numeric user ID.
20
21
  exports.buildTokenWithUid_SUBSCRIBER_Test = function (test) {
21
22
  let token = RtcTokenBuilder.buildTokenWithUid(
22
23
  appId,
@@ -29,15 +30,17 @@ exports.buildTokenWithUid_SUBSCRIBER_Test = function (test) {
29
30
  );
30
31
  let accessToken = new AccessToken2("", "", 0, 0);
31
32
  accessToken.from_string(token);
33
+ const service = accessToken.getServices(kRtcServiceType)[0];
32
34
 
33
35
  test.equal(appId, accessToken.appId);
34
36
  test.equal(expire, accessToken.expire);
35
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
36
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
37
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
37
+ test.equal(channelName, service.__channel_name);
38
+ test.equal(uidStr, service.__uid);
39
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
38
40
  test.done();
39
41
  };
40
42
 
43
+ // Verifies publisher RTC token generation with a numeric user ID.
41
44
  exports.buildTokenWithUid_PUBLISHER_Test = function (test) {
42
45
  let token = RtcTokenBuilder.buildTokenWithUid(
43
46
  appId,
@@ -50,18 +53,20 @@ exports.buildTokenWithUid_PUBLISHER_Test = function (test) {
50
53
  );
51
54
  let accessToken = new AccessToken2("", "", 0, 0);
52
55
  accessToken.from_string(token);
56
+ const service = accessToken.getServices(kRtcServiceType)[0];
53
57
 
54
58
  test.equal(appId, accessToken.appId);
55
59
  test.equal(expire, accessToken.expire);
56
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
57
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
58
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
59
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
60
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
61
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishDataStream]);
60
+ test.equal(channelName, service.__channel_name);
61
+ test.equal(uidStr, service.__uid);
62
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
63
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
64
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
65
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishDataStream]);
62
66
  test.done();
63
67
  };
64
68
 
69
+ // Verifies subscriber RTC token generation with a user account.
65
70
  exports.buildTokenWithUserAccount_SUBSCRIBER_Test = function (test) {
66
71
  let token = RtcTokenBuilder.buildTokenWithUserAccount(
67
72
  appId,
@@ -74,15 +79,17 @@ exports.buildTokenWithUserAccount_SUBSCRIBER_Test = function (test) {
74
79
  );
75
80
  let accessToken = new AccessToken2("", "", 0, 0);
76
81
  accessToken.from_string(token);
82
+ const service = accessToken.getServices(kRtcServiceType)[0];
77
83
 
78
84
  test.equal(appId, accessToken.appId);
79
85
  test.equal(expire, accessToken.expire);
80
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
81
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
82
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
86
+ test.equal(channelName, service.__channel_name);
87
+ test.equal(uidStr, service.__uid);
88
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
83
89
  test.done();
84
90
  };
85
91
 
92
+ // Verifies publisher RTC token generation with a user account.
86
93
  exports.buildTokenWithUserAccount_PUBLISHER_Test = function (test) {
87
94
  let token = RtcTokenBuilder.buildTokenWithUserAccount(
88
95
  appId,
@@ -95,46 +102,83 @@ exports.buildTokenWithUserAccount_PUBLISHER_Test = function (test) {
95
102
  );
96
103
  let accessToken = new AccessToken2("", "", 0, 0);
97
104
  accessToken.from_string(token);
105
+ const service = accessToken.getServices(kRtcServiceType)[0];
98
106
 
99
107
  test.equal(appId, accessToken.appId);
100
108
  test.equal(expire, accessToken.expire);
101
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
102
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
103
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
104
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
105
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
106
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishDataStream]);
109
+ test.equal(channelName, service.__channel_name);
110
+ test.equal(uidStr, service.__uid);
111
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
112
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
113
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
114
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishDataStream]);
107
115
  test.done();
108
116
  };
109
117
 
118
+ // Verifies RTC token generation with explicit numeric-user privileges.
110
119
  exports.buildTokenWithUidAndPrivilege_Test = function (test) {
111
120
  let token = RtcTokenBuilder.buildTokenWithUidAndPrivilege(appId, appCertificate, channelName, uid, expire, expire, expire, expire, expire);
112
121
  let accessToken = new AccessToken2("", "", 0, 0);
113
122
  accessToken.from_string(token);
123
+ const service = accessToken.getServices(kRtcServiceType)[0];
114
124
 
115
125
  test.equal(appId, accessToken.appId);
116
126
  test.equal(expire, accessToken.expire);
117
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
118
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
119
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
120
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
121
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
122
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishDataStream]);
127
+ test.equal(channelName, service.__channel_name);
128
+ test.equal(uidStr, service.__uid);
129
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
130
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
131
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
132
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishDataStream]);
123
133
  test.done();
124
134
  };
125
135
 
136
+ // Verifies RTC token generation with explicit user-account privileges.
126
137
  exports.BuildTokenWithUserAccountAndPrivilege_Test = function (test) {
127
138
  let token = RtcTokenBuilder.BuildTokenWithUserAccountAndPrivilege(appId, appCertificate, channelName, uidStr, expire, expire, expire, expire, expire);
128
139
  let accessToken = new AccessToken2("", "", 0, 0);
129
140
  accessToken.from_string(token);
141
+ const service = accessToken.getServices(kRtcServiceType)[0];
130
142
 
131
143
  test.equal(appId, accessToken.appId);
132
144
  test.equal(expire, accessToken.expire);
133
- test.equal(channelName, accessToken.services[kRtcServiceType].__channel_name);
134
- test.equal(uidStr, accessToken.services[kRtcServiceType].__uid);
135
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegeJoinChannel]);
136
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
137
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
138
- test.equal(expire, accessToken.services[kRtcServiceType].__privileges[ServiceRtc.kPrivilegePublishDataStream]);
145
+ test.equal(channelName, service.__channel_name);
146
+ test.equal(uidStr, service.__uid);
147
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegeJoinChannel]);
148
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishAudioStream]);
149
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishVideoStream]);
150
+ test.equal(expire, service.__privileges[ServiceRtc.kPrivilegePublishDataStream]);
139
151
  test.done();
140
152
  };
153
+
154
+ // Verifies combined RTC and RTM token generation for both role branches.
155
+ exports.buildTokenWithRtm_Test = function (test) {
156
+ const publisher = RtcTokenBuilder.buildTokenWithRtm(
157
+ appId, appCertificate, channelName, uidStr, Role.PUBLISHER, expire, expire)
158
+ const subscriber = RtcTokenBuilder.buildTokenWithRtm(
159
+ appId, appCertificate, channelName, uidStr, Role.SUBSCRIBER, expire, expire)
160
+
161
+ for (const token of [publisher, subscriber]) {
162
+ const parsed = new AccessToken2('', '', 0, 0)
163
+ test.equal(true, parsed.from_string(token))
164
+ test.equal(2, parsed.services.length)
165
+ }
166
+ test.done()
167
+ };
168
+
169
+ // Verifies combined RTC and RTM token generation with independent privileges.
170
+ exports.buildTokenWithRtm2_Test = function (test) {
171
+ const publisher = RtcTokenBuilder.buildTokenWithRtm2(
172
+ appId, appCertificate, channelName, uidStr, Role.PUBLISHER, expire,
173
+ 1, 2, 3, 4, uidStr, expire)
174
+ const subscriber = RtcTokenBuilder.buildTokenWithRtm2(
175
+ appId, appCertificate, channelName, uidStr, Role.SUBSCRIBER, expire,
176
+ 1, 2, 3, 4, uidStr, expire)
177
+
178
+ for (const token of [publisher, subscriber]) {
179
+ const parsed = new AccessToken2('', '', 0, 0)
180
+ test.equal(true, parsed.from_string(token))
181
+ test.equal(2, parsed.services.length)
182
+ }
183
+ test.done()
184
+ };
@@ -3,22 +3,71 @@
3
3
  * nodeunit test/RtmTokenBuilder2Test.js
4
4
  * see https://github.com/caolan/nodeunit
5
5
  */
6
- const RtmTokenBuilder = require("../src/RtmTokenBuilder2").RtmTokenBuilder;
7
- const { AccessToken2, ServiceRtm, kRtmServiceType } = require("../src/AccessToken2");
6
+ const { Rtm2Permissions, RtmTokenBuilder } = require("../index");
7
+ const { AccessToken2, ServiceRtm, ServiceRtm2, kRtmServiceType, kRtm2ServiceType } = require("../src/AccessToken2");
8
8
 
9
9
  const appId = "970CA35de60c44645bbae8a215061b33";
10
10
  const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";
11
11
  const userId = "test_user";
12
12
  const expire = 600;
13
13
 
14
+ // Verifies RTM Token007 generation and parsing.
14
15
  exports.buildToken = function (test) {
15
16
  let token = RtmTokenBuilder.buildToken(appId, appCertificate, userId, expire);
16
17
  let accessToken = new AccessToken2("", "", 0, 0);
17
18
  accessToken.from_string(token);
19
+ const service = accessToken.getServices(kRtmServiceType)[0];
18
20
 
19
21
  test.equal(appId, accessToken.appId);
20
22
  test.equal(expire, accessToken.expire);
21
- test.equal(userId, accessToken.services[kRtmServiceType].__user_id);
22
- test.equal(expire, accessToken.services[kRtmServiceType].__privileges[ServiceRtm.kPrivilegeLogin]);
23
+ test.equal(userId, service.__user_id);
24
+ test.equal(expire, service.__privileges[ServiceRtm.kPrivilegeLogin]);
25
+ test.done();
26
+ };
27
+
28
+ // Verifies RTM2 permission token generation, parsing, and signature validation.
29
+ exports.buildTokenWithPermissions = function (test) {
30
+ const permissions = new Rtm2Permissions();
31
+ permissions.add(Rtm2Permissions.kMessageChannels, Rtm2Permissions.kRead, ["message-a", "message-b"]);
32
+ permissions.add(Rtm2Permissions.kStreamChannels, Rtm2Permissions.kWrite, ["stream-a"]);
33
+
34
+ const token = RtmTokenBuilder.buildTokenWithPermissions(appId, appCertificate, userId, permissions, expire);
35
+ const parsed = new AccessToken2("", "", 0, 0);
36
+
37
+ test.equal(true, parsed.from_string(token));
38
+ test.equal(true, parsed.verifySignature(appCertificate));
39
+ const service = parsed.getServices(kRtm2ServiceType)[0];
40
+ test.equal(userId, service.__user_id.toString());
41
+ test.deepEqual(permissions.details, service.__permissions.details);
42
+ test.equal(expire, service.__privileges[ServiceRtm2.kPrivilegeLogin]);
43
+ test.done();
44
+ };
45
+
46
+ // Verifies that an RTM2 numeric user ID is encoded as its string representation.
47
+ exports.buildTokenWithPermissionsAndNumericUserId = function (test) {
48
+ const numericUserId = 123;
49
+ const permissions = new Rtm2Permissions();
50
+ const token = RtmTokenBuilder.buildTokenWithPermissions(appId, appCertificate, numericUserId, permissions, expire);
51
+ const parsed = new AccessToken2("", "", 0, 0);
52
+
53
+ test.equal(true, parsed.from_string(token));
54
+ test.equal(true, parsed.verifySignature(appCertificate));
55
+ const service = parsed.getServices(kRtm2ServiceType)[0];
56
+ test.equal(String(numericUserId), service.__user_id.toString());
57
+ test.equal(expire, service.__privileges[ServiceRtm2.kPrivilegeLogin]);
58
+ test.done();
59
+ };
60
+
61
+ // Verifies that the numeric wildcard user ID is encoded as an empty string.
62
+ exports.buildTokenWithPermissionsAndWildcardUserId = function (test) {
63
+ const permissions = new Rtm2Permissions();
64
+ const token = RtmTokenBuilder.buildTokenWithPermissions(appId, appCertificate, 0, permissions, expire);
65
+ const parsed = new AccessToken2("", "", 0, 0);
66
+
67
+ test.equal(true, parsed.from_string(token));
68
+ test.equal(true, parsed.verifySignature(appCertificate));
69
+ const service = parsed.getServices(kRtm2ServiceType)[0];
70
+ test.equal("", service.__user_id.toString());
71
+ test.equal(expire, service.__privileges[ServiceRtm2.kPrivilegeLogin]);
23
72
  test.done();
24
73
  };
@@ -13,6 +13,7 @@ const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";
13
13
  const account = "test_user";
14
14
  const expireTimestamp = 1446455471;
15
15
 
16
+ // Verifies legacy RTM token generation and parsing.
16
17
  exports.RtmToken_Test = function (test) {
17
18
  const token = RtmTokenBuilder.buildToken(appID, appCertificate, account, Role.Rtm_User, expireTimestamp);
18
19
  let accessToken = new AccessToken("", "", 0, 0);
@@ -0,0 +1,58 @@
1
+ /**
2
+ * run this test with command:
3
+ * nodeunit test/SttTokenBuilderTest.js
4
+ */
5
+ const { SttTokenBuilder } = require('../src/SttTokenBuilder')
6
+ const { AccessToken2, kRtcServiceType, kRtmServiceType, kSttServiceType, ServiceRtc, ServiceRtm } = require('../src/AccessToken2')
7
+ const { Role } = require('../src/RtcTokenBuilder2')
8
+
9
+ const appId = '970CA35de60c44645bbae8a215061b33'
10
+ const appCertificate = '5CFd2fd1755d40ecb72977518be15d3b'
11
+ const channelName = '7d72365eb983485397e3e3f9d460bdda'
12
+ const rtcAccount = '2882341273'
13
+ const rtmUserId = '2882341273'
14
+ const rtcTokenExpire = 600
15
+ const joinChannelPrivilegeExpire = 600
16
+ const pubAudioPrivilegeExpire = 600
17
+ const pubVideoPrivilegeExpire = 600
18
+ const pubDataStreamPrivilegeExpire = 600
19
+ const rtmTokenExpire = 600
20
+
21
+ exports.buildToken_PUBLISHER_Test = function (test) {
22
+ const token = SttTokenBuilder.buildToken(
23
+ appId, appCertificate, channelName, rtcAccount, Role.PUBLISHER, rtcTokenExpire,
24
+ joinChannelPrivilegeExpire, pubAudioPrivilegeExpire, pubVideoPrivilegeExpire,
25
+ pubDataStreamPrivilegeExpire, rtmUserId, rtmTokenExpire)
26
+ const parsed = new AccessToken2('', '', 0, 0)
27
+ parsed.from_string(token)
28
+
29
+ const rtc = parsed.getServices(kRtcServiceType)[0]
30
+ const rtm = parsed.getServices(kRtmServiceType)[0]
31
+ const stt = parsed.getServices(kSttServiceType)[0]
32
+
33
+ test.equal(appId, parsed.appId)
34
+ test.equal(rtcTokenExpire, parsed.expire)
35
+ test.equal(channelName, rtc.__channel_name)
36
+ test.equal(rtcAccount, rtc.__uid)
37
+ test.equal(joinChannelPrivilegeExpire, rtc.__privileges[ServiceRtc.kPrivilegeJoinChannel])
38
+ test.equal(pubAudioPrivilegeExpire, rtc.__privileges[ServiceRtc.kPrivilegePublishAudioStream])
39
+ test.equal(pubVideoPrivilegeExpire, rtc.__privileges[ServiceRtc.kPrivilegePublishVideoStream])
40
+ test.equal(pubDataStreamPrivilegeExpire, rtc.__privileges[ServiceRtc.kPrivilegePublishDataStream])
41
+ test.equal(rtmUserId, rtm.__user_id)
42
+ test.equal(rtmTokenExpire, rtm.__privileges[ServiceRtm.kPrivilegeLogin])
43
+ test.deepEqual({}, stt.__privileges)
44
+ test.done()
45
+ }
46
+
47
+ exports.buildToken_SUBSCRIBER_Test = function (test) {
48
+ const token = SttTokenBuilder.buildToken(
49
+ appId, appCertificate, channelName, rtcAccount, Role.SUBSCRIBER, rtcTokenExpire,
50
+ joinChannelPrivilegeExpire, pubAudioPrivilegeExpire, pubVideoPrivilegeExpire,
51
+ pubDataStreamPrivilegeExpire, rtmUserId, rtmTokenExpire)
52
+ const parsed = new AccessToken2('', '', 0, 0)
53
+ parsed.from_string(token)
54
+
55
+ const rtc = parsed.getServices(kRtcServiceType)[0]
56
+ test.deepEqual({ [ServiceRtc.kPrivilegeJoinChannel]: joinChannelPrivilegeExpire }, rtc.__privileges)
57
+ test.done()
58
+ }
package/sample.js DELETED
@@ -1,46 +0,0 @@
1
- const {RtcTokenBuilder, RtmTokenBuilder, RtcRole, RtmRole} = require('./index')
2
-
3
- const generateRtcToken = () => {
4
- // Rtc Examples
5
- const appID = '970CA35de60c44645bbae8a215061b33';
6
- const appCertificate = '5CFd2fd1755d40ecb72977518be15d3b';
7
- const channelName = '7d72365eb983485397e3e3f9d460bdda';
8
- const uid = 2882341273;
9
- const account = "2882341273";
10
- const role = RtcRole.PUBLISHER;
11
-
12
- const expirationTimeInSeconds = 3600
13
-
14
- const currentTimestamp = Math.floor(Date.now() / 1000)
15
-
16
- const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds
17
-
18
- // IMPORTANT! Build token with either the uid or with the user account. Comment out the option you do not want to use below.
19
-
20
- // Build token with uid
21
- const tokenA = RtcTokenBuilder.buildTokenWithUid(appID, appCertificate, channelName, uid, role, privilegeExpiredTs);
22
- console.log("Token With Integer Number Uid: " + tokenA);
23
-
24
- // Build token with user account
25
- const tokenB = RtcTokenBuilder.buildTokenWithUserAccount(appID, appCertificate, channelName, account, role, privilegeExpiredTs);
26
- console.log("Token With UserAccount: " + tokenB);
27
- }
28
-
29
-
30
- const generateRtmToken = () => {
31
- // Rtm Examples
32
- const appID = "970CA35de60c44645bbae8a215061b33";
33
- const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";
34
- const account = "test_user_id";
35
-
36
- const expirationTimeInSeconds = 3600
37
- const currentTimestamp = Math.floor(Date.now() / 1000)
38
-
39
- const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds
40
-
41
- const token = RtmTokenBuilder.buildToken(appID, appCertificate, account, RtmRole, privilegeExpiredTs);
42
- console.log("Rtm Token: " + token);
43
- }
44
-
45
- generateRtcToken()
46
- generateRtmToken()