@@ -4,6 +4,7 @@ const assert = require('assert');
44const urlBase64 = require ( 'urlsafe-base64' ) ;
55const webPush = require ( '../src/index' ) ;
66const crypto = require ( 'crypto' ) ;
7+ const jws = require ( 'jws' ) ;
78
89suite ( 'Test Generate Request Details' , function ( ) {
910 test ( 'is defined' , function ( ) {
@@ -243,4 +244,31 @@ suite('Test Generate Request Details', function() {
243244 assert . equal ( details . headers . Topic , extraOptions . headers . Topic ) ;
244245 assert . equal ( details . headers . Urgency , extraOptions . headers . Urgency ) ;
245246 } ) ;
247+
248+ test ( 'Audience contains port' , function ( ) {
249+ const subscription = {
250+ endpoint : 'http://example.com:4242/life-universe-and-everything'
251+ } ;
252+
253+ const extraOptions = {
254+ vapidDetails : {
255+ subject :
'mailto:[email protected] ' , 256+ publicKey : vapidKeys . publicKey ,
257+ privateKey : vapidKeys . privateKey
258+ }
259+ } ;
260+
261+ const requestDetails = webPush . generateRequestDetails ( subscription , null , extraOptions ) ;
262+ const authHeader = requestDetails . headers . Authorization ;
263+
264+ // Get the Encoded JWT Token from the Authorization Header
265+ // and decoded it using `jws.decode`
266+ // to get the value of audience in jwt payload
267+ const jwtContents = authHeader . match ( / W e b P u s h \s ( .* ) / ) [ 1 ] ;
268+ const decodedContents = jws . decode ( jwtContents ) ;
269+ const audience = decodedContents . payload . aud ;
270+
271+ assert . ok ( audience , 'Audience exists' ) ;
272+ assert . equal ( audience , 'http://example.com:4242' , 'Audience contains expected value with port' ) ;
273+ } ) ;
246274} ) ;
0 commit comments