@jibb-open/jssdk 3.5.12 → 3.5.14

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 (42) hide show
  1. package/README.md +8 -1
  2. package/api/admin.js +1 -418
  3. package/api/auth.js +1 -246
  4. package/api/eventbus.js +1 -249
  5. package/api/index.js +1 -53
  6. package/api/meeting.js +1 -488
  7. package/api/recording.js +1 -260
  8. package/api/superadmin.js +1 -105
  9. package/api/user.js +1 -51
  10. package/api/webexbot.js +1 -41
  11. package/api/whiteboard.js +1 -179
  12. package/config.js +1 -16
  13. package/package.json +7 -3
  14. package/post-processing.js +1 -43
  15. package/types/exceptions.js +1 -55
  16. package/types/jibb.pb.js +1 -1324
  17. package/types/proto.js +1 -15
  18. package/types/types.js +1 -67
  19. package/utils/cached_variable.js +1 -25
  20. package/utils/future.js +1 -31
  21. package/utils/http/http.axios.js +1 -41
  22. package/utils/http/index.js +1 -10
  23. package/utils/index.js +1 -11
  24. package/utils/logger/index.js +1 -19
  25. package/utils/logger/logger.empty.js +1 -25
  26. package/utils/logger/logger.pino.js +1 -19
  27. package/ws/connection_base.js +1 -95
  28. package/ws/eventbus.js +1 -376
  29. package/ws/index.js +1 -36
  30. package/ws/ipsa.js +1 -262
  31. package/ws/meeting.js +1 -181
  32. package/ws/observable_connection.js +1 -87
  33. package/ws/retry_connection.js +1 -94
  34. package/examples/browser/462.jibb.js +0 -306
  35. package/examples/browser/index.html +0 -17
  36. package/examples/browser/jibb.js +0 -7381
  37. package/examples/browser/startSession.js +0 -102
  38. package/examples/examples.js +0 -6
  39. package/examples/webexDevicesMacros/cameraPresets/jibb.js +0 -279
  40. package/examples/webexDevicesMacros/jssdk/jibb_WebexXapi.js +0 -3033
  41. package/examples/webexDevicesMacros/simplestExample/jibb.js +0 -181
  42. package/examples/webexDevicesMacros/withCameraControl/jibb.js +0 -263
@@ -1,102 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.promise.js");
4
- /**
5
- *
6
- *
7
- * <h2>Browser start session example.</h2>
8
- *
9
- * <ul style="list-style: none;">
10
- * <li> Click on source to see the script example.
11
- * <li> Check the html example below for full example were jibb.js is the sdk.
12
- * </ul>
13
- *
14
- * @example
15
- * <!DOCTYPE html>
16
- * <html>
17
- * <body>
18
- *
19
- * <h1>The script testing start session</h1>
20
- * <script type="module">
21
- * import * as JIBB from './jibb.js'
22
- * </script>
23
- * <script type="module" src="startSession.js">
24
- * </script>
25
- *
26
- * </body>
27
- * </html>
28
- * @name Browser Start Session
29
- * @memberof Examples
30
- *
31
- */
32
-
33
- let MeetingAPI = JIBB.Meeting;
34
- let Auth = JIBB.Auth;
35
- let EventBus = JIBB.EventBus;
36
- const SurfaceType = {
37
- PAPER: "PAPER",
38
- WHITEBOARD: "WHITEBOARD"
39
- };
40
- function Config(apiKey) {
41
- this.apiKey = apiKey;
42
- this.webURL = "https://app.jibb.ai";
43
- Auth.setApiKey(this.apiKey);
44
- }
45
- var meetingId = "";
46
- function sleep(ms) {
47
- return new Promise(resolve => setTimeout(resolve, ms));
48
- }
49
- function openInNewTab(url) {
50
- console.log("openInNewTab ...");
51
- // needs to be opened in a different app so that the script continue, browser might stop popup for this example, click allow popup.
52
- window.open(url, "_blank");
53
- }
54
- async function generateMeetingLink() {
55
- console.log("generating meeting link ...");
56
- let userToken = await Auth.getUserToken();
57
- let title = "start Session example";
58
- meetingId = await MeetingAPI.createMeeting({
59
- title: title,
60
- isTemporary: true
61
- });
62
- let url = "".concat(config.webURL, "/remote/").concat(meetingId, "?user_token=").concat(userToken);
63
- return url;
64
- }
65
- async function StartMeeting() {
66
- console.log("StartMeeting ...");
67
- let url = await generateMeetingLink();
68
- openInNewTab(url);
69
- // waiting for browser to open the URL, next calls needs to be done after the link is opened
70
- await sleep(10000);
71
-
72
- // getting the opened browser client ID
73
- let statusList = await EventBus.getClientStatusList();
74
- let clinetID = statusList[0].id;
75
-
76
- // asking the browser for the availble camera Ids, make sure camera access is already allowed.
77
- let cameraList = await EventBus.getCameraList(clinetID);
78
- if (cameraList.length) {
79
- //preparing the startstream request
80
- // getting meeting token, required for any meeting related requests.
81
- let meetingToken = await MeetingAPI.getMeetingToken({
82
- meetingId: meetingId,
83
- permission: 2
84
- });
85
- let surfaceType = SurfaceType.WHITEBOARD;
86
- //choose desired camera
87
- let cameraId = cameraList[1].id;
88
- let req = {
89
- meetingId: meetingId,
90
- meetingToken: meetingToken,
91
- surfaceType: surfaceType,
92
- cameraId: cameraId,
93
- clientId: clinetID
94
- };
95
- await EventBus.startStream(req);
96
- } else return Promise.reject("No Camera Access");
97
- }
98
- async function main() {
99
- StartMeeting();
100
- }
101
- let config = new Config("a2ec50bc-76cf-4d4c-8b54-b6b664f3815c");
102
- main();
@@ -1,6 +0,0 @@
1
- /**
2
- * Examples group/ namespace/ category.
3
- * @namespace Examples
4
- *
5
- */
6
- "use strict";
@@ -1,279 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/web.dom-collections.iterator.js");
4
- require("core-js/modules/es.promise.js");
5
- require("core-js/modules/es.parse-int.js");
6
- var _xapi = _interopRequireDefault();
7
- var JIBB = _interopRequireWildcard(require("./jibb_WebexXapi"));
8
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- /**
12
- *
13
- *
14
- * <h2>webex Device Macro Camera Presets example.</h2>
15
- *
16
- * <ul style="list-style: none;">
17
- * <li>Click on source to see the script example.
18
- * </ul>
19
- * <h3>File Discribtion</h3>
20
- * <ul style="list-style: square;">
21
- * <li> jibb.js -> entry point.
22
- * <li> jibbWebexXapi.js -> jibb SDK responsbile HTPP requests.
23
- * </ul>
24
- * <h3>Installation</h3>
25
- * <ul style="list-style: circle;">
26
- * <li> downalod webexMacrosExamples.zip from https://github.com/Inkerz/jibb-jssdk/releases.
27
- * <li> Log into your Cisco Room Device as and admin.
28
- * <li> Navigate to the Macro Editor.
29
- * <li> Import and Save each of the following Macros into the Room System: jibbWebexXapi.js found under jssdk folder and jibb.js from desired example.
30
- * <li> Edite jibb.js by adding camera postion to sanp to when clicked in line 189, 237, 239 or comment lines.
31
- * <li> Edite jibb.js by adding your personal Jibb Api Key to in line 182, to get your Api key visit https://app.jibb.ai/ then navigate to personal settings and click Generate.
32
- * <li> Save and activate jibb.js .
33
- * <li> After refreshing the webage you will find jibb panel automatically added in the UI Extension Editor. variable uiExtension line 172 is is the exported XML panel
34
- * </ul>
35
- *
36
- * @name webexDevice Camera Presets
37
- * @memberof Examples
38
- *
39
- */
40
-
41
- let MeetingAPI = JIBB.Meeting;
42
- let Auth = JIBB.Auth;
43
- let EventBus = JIBB.EventBus;
44
- const SurfaceType = {
45
- PAPER: "PAPER",
46
- WHITEBOARD: "WHITEBOARD"
47
- };
48
- function Config(apiKey) {
49
- this.apiKey = apiKey;
50
- this.webURL = "https://app.jibb.ai";
51
- _xapi.default.Command.WebEngine.MediaAccess.add({
52
- Hostname: "app.jibb.ai",
53
- Device: "Camera"
54
- });
55
- _xapi.default.Command.WebEngine.MediaAccess.add({
56
- Hostname: "app.jibb.ai",
57
- Device: "Microphone"
58
- });
59
- JIBB.Auth.setApiKey(this.apiKey);
60
- }
61
- async function generateMeetingLink() {
62
- console.log("generating meeting link ...");
63
- var title = String(await _xapi.default.Config.SystemUnit.CustomDeviceId.get());
64
- if (String(title) == "") {
65
- title = "webex";
66
- }
67
- let userToken = await Auth.getUserToken();
68
- meetingId = await MeetingAPI.createMeeting({
69
- title: title,
70
- isTemporary: true
71
- });
72
- let url = "".concat(config.webURL, "/remote/").concat(meetingId, "?user_token=").concat(userToken);
73
- return url;
74
- }
75
- async function autoStartMeeting() {
76
- console.log("autoStartMeeting ...");
77
- _xapi.default.Command.UserInterface.Extensions.Panel.Close();
78
- let url = await generateMeetingLink();
79
- await _xapi.default.Command.UserInterface.WebView.Display({
80
- Title: "jibb",
81
- Url: url
82
- });
83
- await sleep(10000);
84
- let statusList = await EventBus.getClientStatusList();
85
- let clinetID = statusList[0].id;
86
- let cameraList = await EventBus.getCameraList(clinetID);
87
- if (cameraList.length) {
88
- let meetingToken = await MeetingAPI.getMeetingToken({
89
- meetingId: meetingId,
90
- permission: 2
91
- });
92
- let surfaceType = SurfaceType.WHITEBOARD;
93
- let cameraId = cameraList[0].id;
94
- let req = {
95
- meetingId: meetingId,
96
- meetingToken: meetingToken,
97
- surfaceType: surfaceType,
98
- cameraId: cameraId,
99
- clientId: clinetID,
100
- enableColor: true
101
- };
102
- await EventBus.startStream(req);
103
- } else return Promise.reject("No Camera Access");
104
- }
105
- async function stopMeeting() {
106
- console.log("stopMeeting ...");
107
- _xapi.default.Command.UserInterface.WebView.Clear({
108
- Target: "PersistentWebApp"
109
- });
110
- _xapi.default.Command.Video.Selfview.Set({
111
- FullscreenMode: "Off",
112
- Mode: "Off",
113
- PIPPosition: "LowerRight"
114
- });
115
- _xapi.default.Command.UserInterface.Extensions.Panel.Close();
116
- }
117
- async function zoomIn() {
118
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Zoom.get();
119
- value = parseInt(value) - 100;
120
- _xapi.default.Command.Camera.PositionSet({
121
- CameraId: "1",
122
- Zoom: value
123
- });
124
- }
125
- async function zoomOut() {
126
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Zoom.get();
127
- value = parseInt(value) + 100;
128
- _xapi.default.Command.Camera.PositionSet({
129
- CameraId: "1",
130
- Zoom: value
131
- });
132
- }
133
- async function moveUp() {
134
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Tilt.get();
135
- value = parseInt(value) + 100;
136
- _xapi.default.Command.Camera.PositionSet({
137
- CameraId: "1",
138
- Tilt: value
139
- });
140
- }
141
- async function moveDown() {
142
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Tilt.get();
143
- value = parseInt(value) - 100;
144
- _xapi.default.Command.Camera.PositionSet({
145
- CameraId: "1",
146
- Tilt: value
147
- });
148
- }
149
- async function moveRigt() {
150
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Pan.get();
151
- value = parseInt(value) - 100;
152
- _xapi.default.Command.Camera.PositionSet({
153
- CameraId: "1",
154
- Pan: value
155
- });
156
- }
157
- async function moveLeft() {
158
- let value = await _xapi.default.Status.Cameras.Camera[1].Position.Pan.get();
159
- value = parseInt(value) + 100;
160
- _xapi.default.Command.Camera.PositionSet({
161
- CameraId: "1",
162
- Pan: value
163
- });
164
- }
165
- async function resetCamera() {
166
- _xapi.default.Command.Camera.PositionReset({
167
- Axis: "all",
168
- CameraId: 1
169
- });
170
- }
171
- async function setCameraPosition(_ref) {
172
- let {
173
- Pan,
174
- Tilt,
175
- Zoom
176
- } = _ref;
177
- _xapi.default.Command.Camera.PositionSet({
178
- CameraId: "1",
179
- Pan: Pan,
180
- Tilt: Tilt,
181
- Zoom: Zoom
182
- });
183
- }
184
-
185
- // Add the management panel to UI
186
- async function addPanel() {
187
- console.info("Adding panel");
188
- const xml = uiExtension;
189
- await _xapi.default.Command.UserInterface.Extensions.Panel.Save({
190
- PanelId: "jibb_panel"
191
- }, xml);
192
-
193
- // Update manager on layout change
194
- _xapi.default.Event.UserInterface.Extensions.Widget.LayoutUpdated.once(addPanel);
195
- }
196
- function sleep(ms) {
197
- return new Promise(resolve => setTimeout(resolve, ms));
198
- }
199
- let config = new Config("yourApiKey");
200
- var meetingId = "";
201
- // Startup!
202
- async function main() {
203
- addPanel();
204
- _xapi.default.Event.UserInterface.Extensions.Panel.Clicked.on(value => {
205
- if (value.PanelId == "jibb_panel") {
206
- setCameraPosition({
207
- Pan: 981,
208
- Tilt: 42,
209
- Zoom: 4586
210
- });
211
- _xapi.default.Command.Video.Selfview.Set({
212
- FullscreenMode: "Off",
213
- Mode: "On",
214
- PIPPosition: "LowerRight"
215
- });
216
- }
217
- });
218
- _xapi.default.Event.UserInterface.Extensions.Widget.Action.on(event => {
219
- if (event.Type == "released") {
220
- switch (event.WidgetId) {
221
- case "jibb_start_toggle":
222
- console.log("start toggle" + event.Value);
223
- if (event.Value == "start") {
224
- autoStartMeeting();
225
- } else if (event.Value == "stop") {
226
- stopMeeting();
227
- }
228
- break;
229
- case "jibb_zoom_in":
230
- zoomIn();
231
- break;
232
- case "jibb_zoom_out":
233
- zoomOut();
234
- break;
235
- case "jibb_camera_control":
236
- switch (event.Value) {
237
- case "up":
238
- moveUp();
239
- break;
240
- case "down":
241
- moveDown();
242
- break;
243
- case "right":
244
- moveRigt();
245
- break;
246
- case "left":
247
- moveLeft();
248
- break;
249
- case "center":
250
- resetCamera();
251
- break;
252
- default:
253
- break;
254
- }
255
- break;
256
- case "jibb_Camera_preset":
257
- console.log("start toggle" + event.Value);
258
- if (event.Value == "position_1") {
259
- setCameraPosition({
260
- Pan: 981,
261
- Tilt: 42,
262
- Zoom: 4586
263
- });
264
- } else if (event.Value == "position_2") {
265
- setCameraPosition({
266
- Pan: 400,
267
- Tilt: 80,
268
- Zoom: 4586
269
- });
270
- }
271
- break;
272
- default:
273
- break;
274
- }
275
- }
276
- });
277
- }
278
- const uiExtension = "<Extensions>\n <Version>1.9</Version>\n <Panel>\n <Order>3</Order>\n <PanelId>jibb_panel</PanelId>\n <Origin>local</Origin>\n <Location>HomeScreenAndCallControls</Location>\n <Icon>Custom</Icon>\n <Name>JIBB</Name>\n <ActivityType>Custom</ActivityType>\n <CustomIcon>\n <Content>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</Content>\n <Id>d5c72d04a0311f930447729e1331908693ed5d5494d6e1003149ddb0a4a5ed95</Id>\n </CustomIcon>\n <Page>\n <Name>JIBB</Name>\n <Row>\n <Name/>\n </Row>\n <Row>\n <Name>Session</Name>\n <Widget>\n <WidgetId>jibb_start_toggle</WidgetId>\n <Type>GroupButton</Type>\n <Options>size=4</Options>\n <ValueSpace>\n <Value>\n <Key>start</Key>\n <Name>Start</Name>\n </Value>\n <Value>\n <Key>stop</Key>\n <Name>Stop</Name>\n </Value>\n </ValueSpace>\n </Widget>\n </Row>\n <Row>\n <Name>Camera Preset</Name>\n <Widget>\n <WidgetId>jibb_Camera_preset</WidgetId>\n <Type>GroupButton</Type>\n <Options>size=4</Options>\n <ValueSpace>\n <Value>\n <Key>position_1</Key>\n <Name>Camera Position 1</Name>\n </Value>\n <Value>\n <Key>position_2</Key>\n <Name>Camera Position 1</Name>\n </Value>\n </ValueSpace>\n </Widget>\n </Row>\n <Row>\n <Name/>\n </Row>\n <Options>hideRowNames=0</Options>\n </Page>\n <Page>\n <Name>Camera</Name>\n <Row>\n <Name>Row</Name>\n <Widget>\n <WidgetId>jibb_camera_control</WidgetId>\n <Type>DirectionalPad</Type>\n <Options>size=4</Options>\n </Widget>\n </Row>\n <Row>\n <Name>Row</Name>\n <Widget>\n <WidgetId>jibb_zoom_out</WidgetId>\n <Type>Button</Type>\n <Options>size=1;icon=zoom_out</Options>\n </Widget>\n <Widget>\n <WidgetId>jibb_zoom_in</WidgetId>\n <Type>Button</Type>\n <Options>size=1;icon=zoom_in</Options>\n </Widget>\n </Row>\n <Options>hideRowNames=1</Options>\n </Page>\n </Panel>\n</Extensions>\n ";
279
- main();