@telegenta/webclient 2.0.12 → 3.0.1

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.
Files changed (105) hide show
  1. package/README.md +102 -81
  2. package/demos/add_phone_number.html +8 -7
  3. package/demos/calldata_available.html +5 -5
  4. package/demos/embedded_config.html +3 -3
  5. package/demos/event_client.html +226 -211
  6. package/demos/phone_client.html +540 -514
  7. package/demos/styles.css +0 -0
  8. package/dist/telegenta.js +3663 -0
  9. package/dist/telegenta.min.js +1 -0
  10. package/docs/EventClient.html +3 -1093
  11. package/docs/EventServiceNotConnected.html +3 -0
  12. package/docs/InvalidMediaDevice.html +3 -0
  13. package/docs/InvalidOptions.html +3 -0
  14. package/docs/InvalidParameter.html +3 -0
  15. package/docs/LogHandler.html +7 -0
  16. package/docs/MediaNotPrepared.html +3 -0
  17. package/docs/NoActiveSession.html +3 -0
  18. package/docs/NotAllowed.html +3 -0
  19. package/docs/NotReady.html +3 -0
  20. package/docs/Phone.html +4 -2837
  21. package/docs/Request.html +3 -0
  22. package/docs/Requestor.html +3 -0
  23. package/docs/Session.html +3 -2599
  24. package/docs/UnableToConnect.html +3 -0
  25. package/docs/data/search.json +1 -0
  26. package/docs/event-client.js.html +352 -0
  27. package/docs/exceptions.js.html +104 -0
  28. package/docs/fonts/Inconsolata-Regular.ttf +0 -0
  29. package/docs/fonts/OpenSans-Regular.ttf +0 -0
  30. package/docs/fonts/WorkSans-Bold.ttf +0 -0
  31. package/docs/global.html +5 -4950
  32. package/docs/index.html +3 -66
  33. package/docs/logger.js.html +106 -0
  34. package/docs/phone-client.js.html +2175 -0
  35. package/docs/requestor.js.html +223 -0
  36. package/docs/scripts/core.js +726 -0
  37. package/docs/scripts/core.min.js +23 -0
  38. package/docs/scripts/resize.js +90 -0
  39. package/docs/scripts/search.js +265 -0
  40. package/docs/scripts/search.min.js +6 -0
  41. package/docs/scripts/{prettify → third-party}/Apache-License-2.0.txt +202 -202
  42. package/docs/scripts/third-party/fuse.js +9 -0
  43. package/docs/scripts/third-party/hljs-line-num-original.js +369 -0
  44. package/docs/scripts/third-party/hljs-line-num.js +1 -0
  45. package/docs/scripts/third-party/hljs-original.js +5171 -0
  46. package/docs/scripts/third-party/hljs.js +1 -0
  47. package/docs/scripts/third-party/popper.js +5 -0
  48. package/docs/scripts/third-party/tippy.js +1 -0
  49. package/docs/scripts/third-party/tocbot.js +672 -0
  50. package/docs/scripts/third-party/tocbot.min.js +1 -0
  51. package/docs/styles/clean-jsdoc-theme-base.css +1159 -0
  52. package/docs/styles/clean-jsdoc-theme-dark.css +412 -0
  53. package/docs/styles/clean-jsdoc-theme-light.css +482 -0
  54. package/docs/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  55. package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  56. package/docs/styles/clean-jsdoc-theme.min.css +1 -0
  57. package/package.json +38 -26
  58. package/babel.config.js +0 -16
  59. package/browser/telegenta.min.js +0 -1
  60. package/demos/telegenta.min.js +0 -1
  61. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  62. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  63. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  64. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  65. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  66. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  67. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  68. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  69. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  70. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  71. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  72. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  73. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  74. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  75. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  76. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  77. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  78. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  79. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  80. package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  81. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  82. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  83. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  84. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  85. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  86. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  87. package/docs/scripts/linenumber.js +0 -25
  88. package/docs/scripts/prettify/lang-css.js +0 -2
  89. package/docs/scripts/prettify/prettify.js +0 -28
  90. package/docs/styles/jsdoc-default.css +0 -692
  91. package/docs/styles/prettify-jsdoc.css +0 -111
  92. package/docs/styles/prettify-tomorrow.css +0 -132
  93. package/embedded_client/embedded_phone.js +0 -325
  94. package/embedded_client/index.html +0 -201
  95. package/embedded_client/server.php +0 -28
  96. package/embedded_client/styles.css +0 -310
  97. package/embedded_client/tiny_rest_client.php +0 -73
  98. package/embedded_client/webphone_sprites.png +0 -0
  99. package/es5/event-client.js +0 -277
  100. package/es5/index.js +0 -44
  101. package/es5/phone-client.js +0 -1336
  102. package/src/event-client.js +0 -1
  103. package/src/index.js +0 -10
  104. package/src/phone-client.js +0 -1
  105. package/webpack.config.js +0 -39
package/README.md CHANGED
@@ -1,72 +1,79 @@
1
1
  # Telegenta client lib
2
- A browser client library for using Telegenta phone services
2
+
3
+ A browser client library for using Telegenta phone services
3
4
 
4
5
  # Detailed documentation
6
+
5
7
  Please go to: https://www.telegenta.com/docs/index.html
6
8
 
7
9
  ## Why this library?
8
- There are many great implementations of WebRTC based SIP clients and most work really well, but we found there are
9
- still many things which must handled before you can actually start using them and it just requires a lot of domain
10
- specific knowledge and time to get everything working.
11
- If you want to provide a good phone service in you application, you will (probably) need to deal with the following issues:
12
-
13
- 1. Supporting all browsers takes time and needs extensive regular testing because of inconsistencies in browser
14
- WebRTC implementations
15
- 2. Handling media and devices in the browser requires rarely used knowledge (MediaDevices and WebRTC API)
16
- 3. Features like recording, show number, call privacy are provider specific and not standardized, you will need to
17
- develop your own support for this
18
- 4. It is almost impossible to use WebRTC on "server side" generated frameworks (like PHP), if you click a link and page
19
- is reloaded, your call is terminated
20
- 5. Browsers support multiple tabs and you risk having multiple calls at the same time, you need to handle this scenario
21
- 6. The SIP account credentials can be viewed by everybody, using browser developer console (F12) making them susceptible
22
- to abuse and fraud
23
- 7. Unless all your agents uses the same credentials (pretty bad security practise), you'll need to handle and
24
- maintain individual accounts, which can take a lot of your time
25
- 8. Make sure you don't accidentally close the window, click a link or reload the page during active calls
26
-
27
- As you start developing, you will probably find more issues (these are just the most common). They all require
28
- your time and developer resources, making the case less and less attractive.
29
-
30
- Using this library and api service you will have at least one solution to all these challenges, providing you a quick
31
- way to get up and running.
32
- We also provide a simple embedded html client, which you can use as a "starting point", just include it in your project
10
+
11
+ There are many great implementations of WebRTC based SIP clients and most work really well, but we found there are
12
+ still many things which must handled before you can actually start using them and it just requires a lot of domain
13
+ specific knowledge and time to get everything working.
14
+ If you want to provide a good phone service in you application, you will (probably) need to deal with the following issues:
15
+
16
+ 1. Supporting all browsers takes time and needs extensive regular testing because of inconsistencies in browser
17
+ WebRTC implementations
18
+ 2. Handling media and devices in the browser requires rarely used knowledge (MediaDevices and WebRTC API)
19
+ 3. Features like recording, show number, call privacy are provider specific and not standardized, you will need to
20
+ develop your own support for this
21
+ 4. It is almost impossible to use WebRTC on "server side" generated frameworks (like PHP), if you click a link and page
22
+ is reloaded, your call is terminated
23
+ 5. Browsers support multiple tabs and you risk having multiple calls at the same time, you need to handle this scenario
24
+ 6. The SIP account credentials can be viewed by everybody, using browser developer console (F12) making them susceptible
25
+ to abuse and fraud
26
+ 7. Unless all your agents uses the same credentials (pretty bad security practise), you'll need to handle and
27
+ maintain individual accounts, which can take a lot of your time
28
+ 8. Make sure you don't accidentally close the window, click a link or reload the page during active calls
29
+
30
+ As you start developing, you will probably find more issues (these are just the most common). They all require
31
+ your time and developer resources, making the case less and less attractive.
32
+
33
+ Using this library and api service you will have at least one solution to all these challenges, providing you a quick
34
+ way to get up and running.
35
+ We also provide a simple embedded html client, which you can use as a "starting point", just include it in your project
33
36
  and you are ready to go. The client has no external requirements (like jQuery and Bootstrap) - only our client library of cause.
34
37
 
35
38
  ## Getting started
36
- Before starting, you will need an account on telegenta.com, to create sip accounts and api tokens.
39
+
40
+ Before starting, you will need an account on telegenta.com, to create sip accounts and api tokens.
37
41
 
38
42
  #### Example 1: Simple phone with static account
39
- In this example we will use a normal SIP User account, as it does not require you to use our API service.
43
+
44
+ In this example we will use a normal SIP User account, as it does not require you to use our API service.
40
45
 
41
46
  Log into the administration frontend (https://admin.telegenta.com) and create a "SIP User account", this will provide
42
- you with credentials (username and password). Once you have these open the embedded html client provided with this
47
+ you with credentials (username and password). Once you have these open the embedded html client provided with this
43
48
  library /embedded_client/index.html and modify the credentials:
44
49
 
45
50
  ```
46
51
  // SIP account username and password
47
- var USERNAME='your username';
52
+ var USERNAME='your username';
48
53
  var PASSWORD='your password';
49
54
 
50
55
  window.onload = function () {
51
- ...
56
+ ...
52
57
  ```
53
58
 
54
- Now open the file (index.html) in your browser. After you have been prompted for permission to use the audio devices,
55
- you should have a working phone.
56
- Note: If you are viewing a file using "file://index.html", it is not considered a secure connection by the browser
57
- and media permissions are not remembered, so you will be prompted every time you open the file.
58
- However, once you move the file to a secure webserver (https), this will no longer be an issue.
59
+ Now open the file (index.html) in your browser. After you have been prompted for permission to use the audio devices,
60
+ you should have a working phone.
61
+ Note: If you are viewing a file using "file://index.html", it is not considered a secure connection by the browser
62
+ and media permissions are not remembered, so you will be prompted every time you open the file.
63
+ However, once you move the file to a secure webserver (https), this will no longer be an issue.
59
64
 
60
65
  #### Example 2: Using SIP Flex accounts
61
- When using SIP flex accounts, you need to use our API service to retrieve account information first.
62
- This approach solves the authentication problem and provides you with short-lived sip accounts used in client sessions.
63
- For this example we need a backend service and we provide a simple example in PHP using the built in Webserver.
66
+
67
+ When using SIP flex accounts, you need to use our API service to retrieve account information first.
68
+ This approach solves the authentication problem and provides you with short-lived sip accounts used in client sessions.
69
+ For this example we need a backend service and we provide a simple example in PHP using the built in Webserver.
64
70
 
65
71
  First go to the admin interface and create following 2 items:
66
- 1. SIP Flex account with "flex account identification" set to 'test'
67
- 2. A static api token (https://admin.telegenta.com/integration/access-tokens).
68
72
 
69
- Now open the file /embedded_client/server.html and insert the API token at the top of the file:
73
+ 1. SIP Flex account with "flex account identification" set to 'test'
74
+ 2. A static api token (https://admin.telegenta.com/integration/access-tokens).
75
+
76
+ Now open the file /embedded_client/server.html and insert the API token at the top of the file:
70
77
 
71
78
  ```
72
79
  // Your API Token
@@ -78,7 +85,8 @@ $flex_identification = 'test';
78
85
  ...
79
86
  ```
80
87
 
81
- Once you have added the token, you can start the php Webserver (requires php v5.4+) like this:
88
+ Once you have added the token, you can start the php Webserver (requires php v5.4+) like this:
89
+
82
90
  ```
83
91
  cd embedded_client
84
92
  php -S localhost:9000
@@ -86,60 +94,73 @@ php -S localhost:9000
86
94
 
87
95
  Now open the URL http://localhost:9000/server.php and you should see the phone and be able to perform calls.
88
96
  Note: If you use any other host than localhost, you won't be able to call because the built in php webserver does not
89
- support secure (https) connections and this is required by the browser to use WebRTC. If needed, you can tunnel to
97
+ support secure (https) connections and this is required by the browser to use WebRTC. If needed, you can tunnel to
90
98
  localhost using your ssh client for testing.
91
99
 
92
- ## Approaching the integration ##
93
- Every application is different, so it can be hard to come up with one solution that fits all.
100
+ ## Approaching the integration
101
+
102
+ Every application is different, so it can be hard to come up with one solution that fits all.
94
103
  Depending on how much flexibility you need, you can choose between the following options:
95
104
 
96
- 1. Use an existing WebRTC client like JsSIP, SipML, SipJs, etc..
97
- We believe in using standard protocols as much as possible and it will work nicely, but you need to address most
98
- of the issues we listed above in the previous section yourself.
99
-
100
- 2. Use our free library (lib/telegenta.min.js) and provide your own frontend
101
- This way you just need to handle events and use javascript methods like call, hangup, startRecord, etc..
102
-
103
- 3. Use our complete embedded phone client with frontend.
104
- We have made a simple phone with frontend, which can be easily included in your own project. Just grab the
105
- index.html, style.css and embedded_phone.js and insert it into your own project.
106
- We named the JS and CSS to try and avoid any potential conflicts.
107
- You only need to provide it with credentials or provisioning token (as in the example above) from you backend and
108
- you are set to start calling.
109
-
110
- ## Migrating from 1.7.x ##
105
+ 1. Use an existing WebRTC client like JsSIP, SipML, SipJs, etc..
106
+ We believe in using standard protocols as much as possible and it will work nicely, but you need to address most
107
+ of the issues we listed above in the previous section yourself.
108
+
109
+ 2. Use our free library (lib/telegenta.min.js) and provide your own frontend
110
+ This way you just need to handle events and use javascript methods like call, hangup, startRecord, etc..
111
+
112
+ 3. Use our complete embedded phone client with frontend.
113
+ We have made a simple phone with frontend, which can be easily included in your own project. Just grab the
114
+ index.html, style.css and embedded_phone.js and insert it into your own project.
115
+ We named the JS and CSS to try and avoid any potential conflicts.
116
+ You only need to provide it with credentials or provisioning token (as in the example above) from you backend and
117
+ you are set to start calling.
118
+
119
+ ## Migrating from 2.x
120
+
121
+ If you are migrating from 2.x, there are only few non breaking code changes.
122
+
123
+ - We no longer support ES5 and CommonJS going forward we will only support ES6 and ESM modules.
124
+ - The utility library @Telegenta/common have been deprecated is now merged into phone client package.
125
+
126
+ ## Migrating from 1.7.x
127
+
111
128
  If you are migrating from 1.7.x release into 2.x, some code breaking changes needs to be handled.
112
129
 
113
- * Library now supports multiple sessions, which means call now returns session object instead of uuid and incoming call event will contain new session as well.
114
- If you still need the call uuid, the session object has a UUID property
115
- * Many sessions specific methods like hangup(), startRecording(), sendDTMF(), etc. have been moved to the session object
130
+ - Library now supports multiple sessions, which means call now returns session object instead of uuid and incoming call event will contain new session as well.
131
+ If you still need the call uuid, the session object has a UUID property
132
+ - Many sessions specific methods like hangup(), startRecording(), sendDTMF(), etc. have been moved to the session object
116
133
 
117
- * calldataAvailable event no longer exists and has been split into two new separate events:
118
- - session.callEnded : local event containing simple call information
119
- - phone.callDataInfo : Remote server event containing detailed call information (billing info and recording url).
134
+ - calldataAvailable event no longer exists and has been split into two new separate events:
120
135
 
121
- * Incoming calls will now create a new session, which must be handled by 'incomingCall' event
136
+ - session.callEnded : local event containing simple call information
137
+ - phone.callDataInfo : Remote server event containing detailed call information (billing info and recording url).
122
138
 
123
- * Audio device selection hs been remove from 2.x release (will be added later)
124
- audioInputDeviceList(), audioOutputDeviceList(), setAudioInputDevice(), setAudioOutputDevice(), supportsDeviceSelection() has been removed
139
+ - Incoming calls will now create a new session, which must be handled by 'incomingCall' event
125
140
 
126
- * New methods to handle sessions have been added, to facilitate switching between calls and transferring them
127
- - hold() : Hold call
128
- - unHold() : Unhold call
129
- - transfer(<session>) : Transfer call from one session to another (assisted transfer)
141
+ - Audio device selection hs been remove from 2.x release (will be added later)
142
+ audioInputDeviceList(), audioOutputDeviceList(), setAudioInputDevice(), setAudioOutputDevice(), supportsDeviceSelection() has been removed
130
143
 
131
- * RemoteAudioElement no longer needed, will be created automatically
144
+ - New methods to handle sessions have been added, to facilitate switching between calls and transferring them
132
145
 
133
- * Session IDLE state removed and autoIdleTime is replaced with autoRemoveSessionTime
146
+ - hold() : Hold call
147
+ - unHold() : Unhold call
148
+ - transfer(<session>) : Transfer call from one session to another (assisted transfer)
134
149
 
135
- * Remember to update "@telegenta/common" npm
150
+ - RemoteAudioElement no longer needed, will be created automatically
136
151
 
137
- * Phone state "RINGING" changed named to "INCOMING" because it was ambiguous with outgoing calls
152
+ - Session IDLE state removed and autoIdleTime is replaced with autoRemoveSessionTime
153
+
154
+ - Remember to update "@telegenta/common" npm
155
+
156
+ - Phone state "RINGING" changed named to "INCOMING" because it was ambiguous with outgoing calls
157
+
158
+ - Added option to play ringing tone on incoming calls (playRingOnIncoming)
138
159
 
139
- * Added option to play ringing tone on incoming calls (playRingOnIncoming)
140
-
141
160
  #### Acknowledgements
161
+
142
162
  This library uses the JsSIP library (www.jssip.net) created by José Luis Milàn, Iñaki Baz Castillo and Saúl Ibarra Corretgé
143
163
 
144
164
  #### License
145
- This software is provided for free together with our service
165
+
166
+ This software is provided for free together with our service
@@ -15,7 +15,7 @@
15
15
 
16
16
  <!-- STEP 1 -->
17
17
  <div class="groupelements">
18
- <H3>STEP 1: Add your phone number</H3>
18
+ <h3>STEP 1: Add your phone number</h3>
19
19
  <div class="inputelements">
20
20
  <label for="api_key">API Key / OAuth2 token</label>
21
21
  <input type="text" size="40" id="api_key" placeholder="Enter API Key" value="">
@@ -25,7 +25,7 @@
25
25
 
26
26
  <!-- STEP 2 -->
27
27
  <div class="groupelements">
28
- <H3>STEP 2: Add phone number</H3>
28
+ <h3>STEP 2: Add phone number</h3>
29
29
  <div class="inputelements">
30
30
  <label for="country_selector">Phone number country</label>
31
31
  <select id="country_selector">
@@ -40,17 +40,18 @@
40
40
 
41
41
  <!-- STEP 3-->
42
42
  <div class="groupelements">
43
- <H3>STEP 3: Verify your number (verification call)</H3>
43
+ <h3>STEP 3: Verify your number (verification call)</h3>
44
44
  <div class="inputelements">
45
45
  Activation pin code: <span id="pin_code">----</span>
46
46
  <p>
47
47
  <button onclick="verifyNumber()">Start verification process now</button>
48
+ </p>
48
49
  </div>
49
50
  </div>
50
51
 
51
52
  <!-- STEP 4 -->
52
53
  <div class="groupelements">
53
- <H3>STEP 4: Check verification status</H3>
54
+ <h3>STEP 4: Check verification status</h3>
54
55
  <div class="inputelements">
55
56
  State: <span id="state"></span><br>
56
57
  Attempts used: <span id="attempts"></span><br>
@@ -61,7 +62,7 @@
61
62
 
62
63
  <!-- STEP 5 -->
63
64
  <div class="groupelements">
64
- <H3>STEP 5: Remove number (cleanup)</H3>
65
+ <h3>STEP 5: Remove number (cleanup)</h3>
65
66
  <div class="inputelements">
66
67
  <button onclick="deleteNumber()">Delete number</button><br>
67
68
  <small>If you forget to delete number, you can do it manually using the admin interface</small>
@@ -131,7 +132,7 @@
131
132
  }
132
133
  // Optional START
133
134
  // Use event client to listen for verification status
134
- // logger = new Telegenta.Logger.LogHandler(Telegenta.Logger.LOGLVL.INFO);
135
+ // logger = new Telegenta.LogHandler(Telegenta.LOGLVL.INFO);
135
136
  // eventClient = new Telegenta.EventClient(logger);
136
137
  // Optional END
137
138
 
@@ -205,4 +206,4 @@
205
206
  }
206
207
  </script>
207
208
 
208
- </html>
209
+ </html>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <title>Telegenta Event Calldata Available Demo</title>
6
- <script src="telegenta.min.js"></script>
6
+ <script src="../dist/telegenta.min.js"></script>
7
7
  <link rel="stylesheet" type="text/css" href="styles.css">
8
8
  </head>
9
9
 
@@ -15,7 +15,7 @@
15
15
  <h2>Telegenta Event Client Demo</h2>
16
16
 
17
17
  <div class="groupelements">
18
- <H3>Input call token</H3>
18
+ <h3>Input call token</h3>
19
19
  <div class="inputelements">
20
20
  <label for="call_token">Call token</label>
21
21
  <input type="text" size="40" id="call_token" placeholder="Enter Call Token" value="">
@@ -25,7 +25,7 @@
25
25
  </div>
26
26
 
27
27
  <div class="groupelements">
28
- <H3>Calldata available event info</H3>
28
+ <h3>Calldata available event info</h3>
29
29
  <textarea id="event_info" cols="180" rows="24">
30
30
  </textarea>
31
31
  </div>
@@ -41,7 +41,7 @@
41
41
  // Start when DOM is ready
42
42
  window.onload = function () {
43
43
  // Create event client instance
44
- logger = new Telegenta.Logger.LogHandler(Telegenta.Logger.LOGLVL.DEBUG);
44
+ logger = new Telegenta.LogHandler(Telegenta.LOGLVL.DEBUG);
45
45
  eventClient = new Telegenta.EventClient(logger);
46
46
 
47
47
  // Connect to event server
@@ -88,4 +88,4 @@
88
88
 
89
89
  </script>
90
90
 
91
- </html>
91
+ </html>
@@ -13,7 +13,7 @@
13
13
 
14
14
  <h2>Telegenta Event Client Demo</h2>
15
15
  <div class="groupelements">
16
- <H3>Input API Key</H3>
16
+ <h3>Input API Key</h3>
17
17
  <div class="inputelements">
18
18
  <label for="api_key">API Key</label>
19
19
  <input type="text" size="40" id="api_key" placeholder="Enter API Key" value="">
@@ -91,5 +91,5 @@
91
91
  }
92
92
 
93
93
  </script>
94
-
95
- </html>
94
+ </body>
95
+ </html>