@jibb-open/jssdk 3.5.9 → 3.5.11
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.
- package/README.md +5 -2
- package/{dist/api → api}/admin.js +0 -0
- package/{dist/api → api}/auth.js +0 -0
- package/{dist/api → api}/eventbus.js +0 -0
- package/{dist/api → api}/index.js +0 -0
- package/{dist/api → api}/meeting.js +0 -0
- package/{dist/api → api}/recording.js +0 -0
- package/{dist/api → api}/superadmin.js +0 -0
- package/{dist/api → api}/user.js +0 -0
- package/{dist/api → api}/webexbot.js +0 -0
- package/{dist/api → api}/whiteboard.js +0 -0
- package/{dist/config.js → config.js} +0 -0
- package/{dist/examples → examples}/browser/462.jibb.js +0 -0
- package/{dist/examples → examples}/browser/index.html +0 -0
- package/{dist/examples → examples}/browser/jibb.js +0 -0
- package/{dist/examples → examples}/browser/startSession.js +0 -0
- package/{dist/examples → examples}/examples.js +0 -0
- package/{dist/examples → examples}/webexDevicesMacros/cameraPresets/jibb.js +2 -3
- package/{dist/examples/webexDevicesMacros/webexDevice JSSDK → examples/webexDevicesMacros/jssdk}/jibb_WebexXapi.js +0 -0
- package/{dist/examples → examples}/webexDevicesMacros/simplestExample/jibb.js +2 -3
- package/{dist/examples → examples}/webexDevicesMacros/withCameraControl/jibb.js +2 -3
- package/package.json +1 -1
- package/{dist/post-processing.js → post-processing.js} +0 -0
- package/{dist/types → types}/exceptions.js +0 -0
- package/{dist/types → types}/jibb.pb.js +0 -0
- package/{dist/types → types}/proto.js +0 -0
- package/{dist/types → types}/types.js +0 -0
- package/{dist/utils → utils}/cached_variable.js +0 -0
- package/{dist/utils → utils}/future.js +0 -0
- package/{dist/utils → utils}/http/http.axios.js +0 -0
- package/{dist/utils → utils}/http/index.js +0 -0
- package/{dist/utils → utils}/index.js +0 -0
- package/{dist/utils → utils}/logger/index.js +0 -0
- package/{dist/utils → utils}/logger/logger.empty.js +0 -0
- package/{dist/utils → utils}/logger/logger.pino.js +0 -0
- package/{dist/ws → ws}/connection_base.js +0 -0
- package/{dist/ws → ws}/eventbus.js +0 -0
- package/{dist/ws → ws}/index.js +0 -0
- package/{dist/ws → ws}/ipsa.js +0 -0
- package/{dist/ws → ws}/meeting.js +0 -0
- package/{dist/ws → ws}/observable_connection.js +0 -0
- package/{dist/ws → ws}/retry_connection.js +0 -0
- package/.babelrc +0 -31
- package/dist/package.json +0 -69
- package/src/api/admin.js +0 -333
- package/src/api/auth.js +0 -208
- package/src/api/eventbus.js +0 -246
- package/src/api/index.js +0 -26
- package/src/api/meeting.js +0 -421
- package/src/api/recording.js +0 -225
- package/src/api/superadmin.js +0 -84
- package/src/api/user.js +0 -46
- package/src/api/webexbot.js +0 -32
- package/src/api/whiteboard.js +0 -175
- package/src/config.js +0 -12
- package/src/examples/browser/462.jibb.js +0 -1
- package/src/examples/browser/index.html +0 -17
- package/src/examples/browser/jibb.js +0 -2
- package/src/examples/browser/startSession.js +0 -112
- package/src/examples/examples.js +0 -5
- package/src/examples/webexDevicesMacros/cameraPresets/jibb.js +0 -338
- package/src/examples/webexDevicesMacros/simplestExample/jibb.js +0 -212
- package/src/examples/webexDevicesMacros/webexDevice JSSDK/jibb_WebexXapi.js +0 -2
- package/src/examples/webexDevicesMacros/withCameraControl/jibb.js +0 -303
- package/src/index.webex-devices.js +0 -13
- package/src/post-processing.js +0 -39
- package/src/types/exceptions.js +0 -48
- package/src/types/jibb.pb.js +0 -1357
- package/src/types/proto.js +0 -7
- package/src/types/types.js +0 -64
- package/src/utils/cached_variable.js +0 -23
- package/src/utils/future.js +0 -24
- package/src/utils/http/http.axios.js +0 -34
- package/src/utils/http/http.xapi.js +0 -87
- package/src/utils/http/index.js +0 -8
- package/src/utils/index.js +0 -5
- package/src/utils/logger/index.js +0 -11
- package/src/utils/logger/logger.empty.js +0 -25
- package/src/utils/logger/logger.pino.js +0 -15
- package/src/ws/connection_base.js +0 -81
- package/src/ws/eventbus.js +0 -363
- package/src/ws/index.js +0 -15
- package/src/ws/ipsa.js +0 -246
- package/src/ws/meeting.js +0 -170
- package/src/ws/observable_connection.js +0 -84
- package/src/ws/retry_connection.js +0 -82
- package/webpack.config.cjs +0 -144
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* <h2>webex Device Macro Camera Presets example.</h2>
|
|
5
|
-
*
|
|
6
|
-
* <ul style="list-style: none;">
|
|
7
|
-
* <li>Click on source to see the script example.
|
|
8
|
-
* </ul>
|
|
9
|
-
* <h3>File Discribtion</h3>
|
|
10
|
-
* <ul style="list-style: square;">
|
|
11
|
-
* <li> jibb.js -> entry point.
|
|
12
|
-
* <li> jibbWebexXapi.js -> jibb SDK responsbile HTPP requests.
|
|
13
|
-
* </ul>
|
|
14
|
-
* <h3>Installation</h3>
|
|
15
|
-
* <ul style="list-style: circle;">
|
|
16
|
-
* <li> downalod/get jibb.js.
|
|
17
|
-
* <li> Get jibbWebexXapi.js from "www.s3.*******.com" for latest jibb sdk or you could use the file in webexDevice jssdk folder (could be out of date).
|
|
18
|
-
* <li> Log into your Cisco Room Device as and admin.
|
|
19
|
-
* <li> Navigate to the Macro Editor.
|
|
20
|
-
* <li> Import and Save each of the following Macros into the Room System: jibbWebexXapi.js and jibb.js .
|
|
21
|
-
* <li> Edite jibb.js by adding camera postion to sanp to when clicked in line 189, 237, 239 or comment lines.
|
|
22
|
-
* <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.
|
|
23
|
-
* <li> Save and activate jibb.js .
|
|
24
|
-
* <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
|
|
25
|
-
* </ul>
|
|
26
|
-
*
|
|
27
|
-
* @name webexDevice Camera Presets
|
|
28
|
-
* @memberof Examples
|
|
29
|
-
*
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import xapi from "xapi"
|
|
33
|
-
import * as JIBB from "./jibb_WebexXapi"
|
|
34
|
-
|
|
35
|
-
let MeetingAPI = JIBB.Meeting
|
|
36
|
-
let Auth = JIBB.Auth
|
|
37
|
-
let EventBus = JIBB.EventBus
|
|
38
|
-
|
|
39
|
-
const SurfaceType = {
|
|
40
|
-
PAPER: "PAPER",
|
|
41
|
-
WHITEBOARD: "WHITEBOARD",
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function Config(apiKey) {
|
|
45
|
-
this.apiKey = apiKey
|
|
46
|
-
this.webURL = "https://app.jibb.ai"
|
|
47
|
-
xapi.Command.WebEngine.MediaAccess.add({ Hostname: "app.jibb.ai", Device: "Camera" })
|
|
48
|
-
xapi.Command.WebEngine.MediaAccess.add({ Hostname: "app.jibb.ai", Device: "Microphone" })
|
|
49
|
-
JIBB.Auth.setApiKey(this.apiKey)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async function generateMeetingLink() {
|
|
53
|
-
console.log("generating meeting link ...")
|
|
54
|
-
|
|
55
|
-
var title = String(await xapi.Config.SystemUnit.CustomDeviceId.get())
|
|
56
|
-
if (String(title) == "") {
|
|
57
|
-
title = "webex"
|
|
58
|
-
}
|
|
59
|
-
let userToken = await Auth.getUserToken()
|
|
60
|
-
|
|
61
|
-
meetingId = await MeetingAPI.createMeeting({ title: title, isTemporary: true })
|
|
62
|
-
|
|
63
|
-
let url = `${config.webURL}/remote/${meetingId}?user_token=${userToken}`
|
|
64
|
-
return url
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async function autoStartMeeting() {
|
|
68
|
-
console.log("autoStartMeeting ...")
|
|
69
|
-
|
|
70
|
-
xapi.Command.UserInterface.Extensions.Panel.Close()
|
|
71
|
-
|
|
72
|
-
let url = await generateMeetingLink()
|
|
73
|
-
await xapi.Command.UserInterface.WebView.Display({ Title: "jibb", Url: url })
|
|
74
|
-
await sleep(10000)
|
|
75
|
-
|
|
76
|
-
let statusList = await EventBus.getClientStatusList()
|
|
77
|
-
|
|
78
|
-
let clinetID = statusList[0].id
|
|
79
|
-
|
|
80
|
-
let cameraList = await EventBus.getCameraList(clinetID)
|
|
81
|
-
|
|
82
|
-
if (cameraList.length) {
|
|
83
|
-
let meetingToken = await MeetingAPI.getMeetingToken({ meetingId: meetingId, permission: 2 })
|
|
84
|
-
let surfaceType = SurfaceType.WHITEBOARD
|
|
85
|
-
let cameraId = cameraList[0].id
|
|
86
|
-
|
|
87
|
-
let req = {
|
|
88
|
-
meetingId: meetingId,
|
|
89
|
-
meetingToken: meetingToken,
|
|
90
|
-
surfaceType: surfaceType,
|
|
91
|
-
cameraId: cameraId,
|
|
92
|
-
clientId: clinetID,
|
|
93
|
-
enableColor: true,
|
|
94
|
-
}
|
|
95
|
-
await EventBus.startStream(req)
|
|
96
|
-
} else return Promise.reject("No Camera Access")
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function stopMeeting() {
|
|
100
|
-
console.log("stopMeeting ...")
|
|
101
|
-
|
|
102
|
-
xapi.Command.UserInterface.WebView.Clear({ Target: "PersistentWebApp" })
|
|
103
|
-
|
|
104
|
-
xapi.Command.Video.Selfview.Set({
|
|
105
|
-
FullscreenMode: "Off",
|
|
106
|
-
Mode: "Off",
|
|
107
|
-
PIPPosition: "LowerRight",
|
|
108
|
-
})
|
|
109
|
-
xapi.Command.UserInterface.Extensions.Panel.Close()
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async function zoomIn() {
|
|
113
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Zoom.get()
|
|
114
|
-
value = parseInt(value) - 100
|
|
115
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Zoom: value })
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async function zoomOut() {
|
|
119
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Zoom.get()
|
|
120
|
-
value = parseInt(value) + 100
|
|
121
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Zoom: value })
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
async function moveUp() {
|
|
125
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Tilt.get()
|
|
126
|
-
value = parseInt(value) + 100
|
|
127
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Tilt: value })
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
async function moveDown() {
|
|
131
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Tilt.get()
|
|
132
|
-
value = parseInt(value) - 100
|
|
133
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Tilt: value })
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
async function moveRigt() {
|
|
137
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Pan.get()
|
|
138
|
-
value = parseInt(value) - 100
|
|
139
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Pan: value })
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
async function moveLeft() {
|
|
143
|
-
let value = await xapi.Status.Cameras.Camera[1].Position.Pan.get()
|
|
144
|
-
value = parseInt(value) + 100
|
|
145
|
-
xapi.Command.Camera.PositionSet({ CameraId: "1", Pan: value })
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
async function resetCamera() {
|
|
149
|
-
xapi.Command.Camera.PositionReset({ Axis: "all", CameraId: 1 })
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
async function setCameraPosition({ Pan, Tilt, Zoom }) {
|
|
153
|
-
xapi.Command.Camera.PositionSet({
|
|
154
|
-
CameraId: "1",
|
|
155
|
-
Pan: Pan,
|
|
156
|
-
Tilt: Tilt,
|
|
157
|
-
Zoom: Zoom,
|
|
158
|
-
})
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Add the management panel to UI
|
|
162
|
-
async function addPanel() {
|
|
163
|
-
console.info("Adding panel")
|
|
164
|
-
|
|
165
|
-
const xml = uiExtension
|
|
166
|
-
|
|
167
|
-
await xapi.Command.UserInterface.Extensions.Panel.Save(
|
|
168
|
-
{
|
|
169
|
-
PanelId: "jibb_panel",
|
|
170
|
-
},
|
|
171
|
-
xml
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
// Update manager on layout change
|
|
175
|
-
xapi.Event.UserInterface.Extensions.Widget.LayoutUpdated.once(addPanel)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function sleep(ms) {
|
|
179
|
-
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
let config = new Config("yourApiKey")
|
|
183
|
-
var meetingId = ""
|
|
184
|
-
// Startup!
|
|
185
|
-
async function main() {
|
|
186
|
-
addPanel()
|
|
187
|
-
xapi.Event.UserInterface.Extensions.Panel.Clicked.on((value) => {
|
|
188
|
-
if (value.PanelId == "jibb_panel") {
|
|
189
|
-
setCameraPosition({ Pan: 981, Tilt: 42, Zoom: 4586 })
|
|
190
|
-
xapi.Command.Video.Selfview.Set({ FullscreenMode: "Off", Mode: "On", PIPPosition: "LowerRight" })
|
|
191
|
-
}
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
xapi.Event.UserInterface.Extensions.Widget.Action.on((event) => {
|
|
195
|
-
if (event.Type == "released") {
|
|
196
|
-
switch (event.WidgetId) {
|
|
197
|
-
case `jibb_start_toggle`:
|
|
198
|
-
console.log("start toggle" + event.Value)
|
|
199
|
-
if (event.Value == "start") {
|
|
200
|
-
autoStartMeeting()
|
|
201
|
-
} else if (event.Value == "stop") {
|
|
202
|
-
stopMeeting()
|
|
203
|
-
}
|
|
204
|
-
break
|
|
205
|
-
|
|
206
|
-
case `jibb_zoom_in`:
|
|
207
|
-
zoomIn()
|
|
208
|
-
break
|
|
209
|
-
case `jibb_zoom_out`:
|
|
210
|
-
zoomOut()
|
|
211
|
-
break
|
|
212
|
-
|
|
213
|
-
case `jibb_camera_control`:
|
|
214
|
-
switch (event.Value) {
|
|
215
|
-
case `up`:
|
|
216
|
-
moveUp()
|
|
217
|
-
break
|
|
218
|
-
case `down`:
|
|
219
|
-
moveDown()
|
|
220
|
-
break
|
|
221
|
-
case `right`:
|
|
222
|
-
moveRigt()
|
|
223
|
-
break
|
|
224
|
-
case `left`:
|
|
225
|
-
moveLeft()
|
|
226
|
-
break
|
|
227
|
-
case `center`:
|
|
228
|
-
resetCamera()
|
|
229
|
-
break
|
|
230
|
-
default:
|
|
231
|
-
break
|
|
232
|
-
}
|
|
233
|
-
break
|
|
234
|
-
case `jibb_Camera_preset`:
|
|
235
|
-
console.log("start toggle" + event.Value)
|
|
236
|
-
if (event.Value == "position_1") {
|
|
237
|
-
setCameraPosition({ Pan: 981, Tilt: 42, Zoom: 4586 })
|
|
238
|
-
} else if (event.Value == "position_2") {
|
|
239
|
-
setCameraPosition({ Pan: 400, Tilt: 80, Zoom: 4586 })
|
|
240
|
-
}
|
|
241
|
-
break
|
|
242
|
-
default:
|
|
243
|
-
break
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
})
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const uiExtension = `<Extensions>
|
|
250
|
-
<Version>1.9</Version>
|
|
251
|
-
<Panel>
|
|
252
|
-
<Order>3</Order>
|
|
253
|
-
<PanelId>jibb_panel</PanelId>
|
|
254
|
-
<Origin>local</Origin>
|
|
255
|
-
<Location>HomeScreenAndCallControls</Location>
|
|
256
|
-
<Icon>Custom</Icon>
|
|
257
|
-
<Name>JIBB</Name>
|
|
258
|
-
<ActivityType>Custom</ActivityType>
|
|
259
|
-
<CustomIcon>
|
|
260
|
-
<Content>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</Content>
|
|
261
|
-
<Id>d5c72d04a0311f930447729e1331908693ed5d5494d6e1003149ddb0a4a5ed95</Id>
|
|
262
|
-
</CustomIcon>
|
|
263
|
-
<Page>
|
|
264
|
-
<Name>JIBB</Name>
|
|
265
|
-
<Row>
|
|
266
|
-
<Name/>
|
|
267
|
-
</Row>
|
|
268
|
-
<Row>
|
|
269
|
-
<Name>Session</Name>
|
|
270
|
-
<Widget>
|
|
271
|
-
<WidgetId>jibb_start_toggle</WidgetId>
|
|
272
|
-
<Type>GroupButton</Type>
|
|
273
|
-
<Options>size=4</Options>
|
|
274
|
-
<ValueSpace>
|
|
275
|
-
<Value>
|
|
276
|
-
<Key>start</Key>
|
|
277
|
-
<Name>Start</Name>
|
|
278
|
-
</Value>
|
|
279
|
-
<Value>
|
|
280
|
-
<Key>stop</Key>
|
|
281
|
-
<Name>Stop</Name>
|
|
282
|
-
</Value>
|
|
283
|
-
</ValueSpace>
|
|
284
|
-
</Widget>
|
|
285
|
-
</Row>
|
|
286
|
-
<Row>
|
|
287
|
-
<Name>Camera Preset</Name>
|
|
288
|
-
<Widget>
|
|
289
|
-
<WidgetId>jibb_Camera_preset</WidgetId>
|
|
290
|
-
<Type>GroupButton</Type>
|
|
291
|
-
<Options>size=4</Options>
|
|
292
|
-
<ValueSpace>
|
|
293
|
-
<Value>
|
|
294
|
-
<Key>position_1</Key>
|
|
295
|
-
<Name>Camera Position 1</Name>
|
|
296
|
-
</Value>
|
|
297
|
-
<Value>
|
|
298
|
-
<Key>position_2</Key>
|
|
299
|
-
<Name>Camera Position 1</Name>
|
|
300
|
-
</Value>
|
|
301
|
-
</ValueSpace>
|
|
302
|
-
</Widget>
|
|
303
|
-
</Row>
|
|
304
|
-
<Row>
|
|
305
|
-
<Name/>
|
|
306
|
-
</Row>
|
|
307
|
-
<Options>hideRowNames=0</Options>
|
|
308
|
-
</Page>
|
|
309
|
-
<Page>
|
|
310
|
-
<Name>Camera</Name>
|
|
311
|
-
<Row>
|
|
312
|
-
<Name>Row</Name>
|
|
313
|
-
<Widget>
|
|
314
|
-
<WidgetId>jibb_camera_control</WidgetId>
|
|
315
|
-
<Type>DirectionalPad</Type>
|
|
316
|
-
<Options>size=4</Options>
|
|
317
|
-
</Widget>
|
|
318
|
-
</Row>
|
|
319
|
-
<Row>
|
|
320
|
-
<Name>Row</Name>
|
|
321
|
-
<Widget>
|
|
322
|
-
<WidgetId>jibb_zoom_out</WidgetId>
|
|
323
|
-
<Type>Button</Type>
|
|
324
|
-
<Options>size=1;icon=zoom_out</Options>
|
|
325
|
-
</Widget>
|
|
326
|
-
<Widget>
|
|
327
|
-
<WidgetId>jibb_zoom_in</WidgetId>
|
|
328
|
-
<Type>Button</Type>
|
|
329
|
-
<Options>size=1;icon=zoom_in</Options>
|
|
330
|
-
</Widget>
|
|
331
|
-
</Row>
|
|
332
|
-
<Options>hideRowNames=1</Options>
|
|
333
|
-
</Page>
|
|
334
|
-
</Panel>
|
|
335
|
-
</Extensions>
|
|
336
|
-
`
|
|
337
|
-
|
|
338
|
-
main()
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* <h2>webex Device Macro simple example.</h2>
|
|
5
|
-
*
|
|
6
|
-
* <ul style="list-style: none;">
|
|
7
|
-
* <li>Click on source to see the script example.
|
|
8
|
-
* </ul>
|
|
9
|
-
* <h3>File Discribtion</h3>
|
|
10
|
-
* <ul style="list-style: square;">
|
|
11
|
-
* <li> jibb.js -> entry point.
|
|
12
|
-
* <li> jibbWebexXapi.js -> jibb SDK responsbile HTPP requests.
|
|
13
|
-
* </ul>
|
|
14
|
-
* <h3>Installation</h3>
|
|
15
|
-
* <ul style="list-style: circle;">
|
|
16
|
-
* <li> downalod/get jibb.js.
|
|
17
|
-
* <li> Get jibbWebexXapi.js from "www.s3.*******.com" for latest jibb sdk or you could use the file in webexDevice jssdk folder (could be out of date).
|
|
18
|
-
* <li> Log into your Cisco Room Device as and admin.
|
|
19
|
-
* <li> Navigate to the Macro Editor.
|
|
20
|
-
* <li> Import and Save each of the following Macros into the Room System: jibbWebexXapi.js and jibb.js .
|
|
21
|
-
* <li> Edite jibb.js by adding camera postion to sanp to when clicked in line 114 or comment line 150 to disable it.
|
|
22
|
-
* <li> Edite jibb.js by adding your personal Jibb Api Key to in line 143, to get your Api key visit https://app.jibb.ai/ then navigate to personal settings and click Generate.
|
|
23
|
-
* <li> Save and activate jibb.js .
|
|
24
|
-
* <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
|
|
25
|
-
* </ul>
|
|
26
|
-
*
|
|
27
|
-
* @name webexDevice simple
|
|
28
|
-
* @memberof Examples
|
|
29
|
-
*
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import xapi from "xapi"
|
|
33
|
-
import * as JIBB from "./jibb_WebexXapi"
|
|
34
|
-
|
|
35
|
-
let MeetingAPI = JIBB.Meeting
|
|
36
|
-
let Auth = JIBB.Auth
|
|
37
|
-
let EventBus = JIBB.EventBus
|
|
38
|
-
|
|
39
|
-
const SurfaceType = {
|
|
40
|
-
PAPER: "PAPER",
|
|
41
|
-
WHITEBOARD: "WHITEBOARD",
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function Config(apiKey) {
|
|
45
|
-
this.apiKey = apiKey
|
|
46
|
-
this.webURL = "https://app.jibb.ai"
|
|
47
|
-
xapi.Command.WebEngine.MediaAccess.add({ Hostname: "app.jibb.ai", Device: "Camera" })
|
|
48
|
-
xapi.Command.WebEngine.MediaAccess.add({ Hostname: "app.jibb.ai", Device: "Microphone" })
|
|
49
|
-
JIBB.Auth.setApiKey(this.apiKey)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async function generateMeetingLink() {
|
|
53
|
-
console.log("generating meeting link ...")
|
|
54
|
-
|
|
55
|
-
var title = String(await xapi.Config.SystemUnit.CustomDeviceId.get())
|
|
56
|
-
if (String(title) == "") {
|
|
57
|
-
title = "webex"
|
|
58
|
-
}
|
|
59
|
-
let userToken = await Auth.getUserToken()
|
|
60
|
-
|
|
61
|
-
meetingId = await MeetingAPI.createMeeting({ title: title, isTemporary: true })
|
|
62
|
-
|
|
63
|
-
let url = `${config.webURL}/remote/${meetingId}?user_token=${userToken}`
|
|
64
|
-
return url
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async function autoStartMeeting() {
|
|
68
|
-
console.log("autoStartMeeting ...")
|
|
69
|
-
|
|
70
|
-
xapi.Command.UserInterface.Extensions.Panel.Close()
|
|
71
|
-
|
|
72
|
-
let url = await generateMeetingLink()
|
|
73
|
-
await xapi.Command.UserInterface.WebView.Display({ Title: "jibb", Url: url })
|
|
74
|
-
await sleep(10000)
|
|
75
|
-
|
|
76
|
-
let statusList = await EventBus.getClientStatusList()
|
|
77
|
-
|
|
78
|
-
let clinetID = statusList[0].id
|
|
79
|
-
|
|
80
|
-
let cameraList = await EventBus.getCameraList(clinetID)
|
|
81
|
-
|
|
82
|
-
if (cameraList.length) {
|
|
83
|
-
let meetingToken = await MeetingAPI.getMeetingToken({ meetingId: meetingId, permission: 2 })
|
|
84
|
-
let surfaceType = SurfaceType.WHITEBOARD
|
|
85
|
-
let cameraId = cameraList[0].id
|
|
86
|
-
|
|
87
|
-
let req = {
|
|
88
|
-
meetingId: meetingId,
|
|
89
|
-
meetingToken: meetingToken,
|
|
90
|
-
surfaceType: surfaceType,
|
|
91
|
-
cameraId: cameraId,
|
|
92
|
-
clientId: clinetID,
|
|
93
|
-
enableColor: false,
|
|
94
|
-
}
|
|
95
|
-
await EventBus.startStream(req)
|
|
96
|
-
} else return Promise.reject("No Camera Access")
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function stopMeeting() {
|
|
100
|
-
console.log("stopMeeting ...")
|
|
101
|
-
|
|
102
|
-
xapi.Command.UserInterface.WebView.Clear({ Target: "PersistentWebApp" })
|
|
103
|
-
|
|
104
|
-
xapi.Command.Video.Selfview.Set({
|
|
105
|
-
FullscreenMode: "Off",
|
|
106
|
-
Mode: "Off",
|
|
107
|
-
PIPPosition: "LowerRight",
|
|
108
|
-
})
|
|
109
|
-
xapi.Command.UserInterface.Extensions.Panel.Close()
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
async function setCameraPosition({ Pan, Tilt, Zoom }) {
|
|
114
|
-
xapi.Command.Camera.PositionSet({
|
|
115
|
-
CameraId: "1",
|
|
116
|
-
Pan: Pan,
|
|
117
|
-
Tilt: Tilt,
|
|
118
|
-
Zoom: Zoom,
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Add the management panel to UI
|
|
123
|
-
async function addPanel() {
|
|
124
|
-
console.info("Adding panel")
|
|
125
|
-
|
|
126
|
-
const xml = uiExtension
|
|
127
|
-
|
|
128
|
-
await xapi.Command.UserInterface.Extensions.Panel.Save(
|
|
129
|
-
{
|
|
130
|
-
PanelId: "jibb_panel",
|
|
131
|
-
},
|
|
132
|
-
xml
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
// Update manager on layout change
|
|
136
|
-
xapi.Event.UserInterface.Extensions.Widget.LayoutUpdated.once(addPanel)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function sleep(ms) {
|
|
140
|
-
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
let config = new Config("64f9fe98-dd9d-4285-bb82-668debfa4a5c")
|
|
144
|
-
var meetingId = ""
|
|
145
|
-
// Startup!
|
|
146
|
-
async function main() {
|
|
147
|
-
addPanel()
|
|
148
|
-
xapi.Event.UserInterface.Extensions.Panel.Clicked.on((value) => {
|
|
149
|
-
if (value.PanelId == "jibb_panel") {
|
|
150
|
-
setCameraPosition({ Pan: 981, Tilt: 42, Zoom: 4586 })
|
|
151
|
-
xapi.Command.Video.Selfview.Set({ FullscreenMode: "Off", Mode: "On", PIPPosition: "LowerRight" })
|
|
152
|
-
}
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
xapi.Event.UserInterface.Extensions.Widget.Action.on((event) => {
|
|
156
|
-
if (event.Type == "released") {
|
|
157
|
-
switch (event.WidgetId) {
|
|
158
|
-
case `jibb_start_toggle`:
|
|
159
|
-
console.log("start toggle" + event.Value)
|
|
160
|
-
if (event.Value == "start") {
|
|
161
|
-
autoStartMeeting()
|
|
162
|
-
} else if (event.Value == "stop") {
|
|
163
|
-
stopMeeting()
|
|
164
|
-
}
|
|
165
|
-
break
|
|
166
|
-
default:
|
|
167
|
-
break
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
})
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const uiExtension = `<Extensions>
|
|
174
|
-
<Version>1.9</Version>
|
|
175
|
-
<Panel>
|
|
176
|
-
<Order>1</Order>
|
|
177
|
-
<PanelId>jibb_panel</PanelId>
|
|
178
|
-
<Location>HomeScreenAndCallControls</Location>
|
|
179
|
-
<Icon>Custom</Icon>
|
|
180
|
-
<Name>JIBB</Name>
|
|
181
|
-
<ActivityType>Custom</ActivityType>
|
|
182
|
-
<CustomIcon>
|
|
183
|
-
<Content>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</Content>
|
|
184
|
-
<Id>d5c72d04a0311f930447729e1331908693ed5d5494d6e1003149ddb0a4a5ed95</Id>
|
|
185
|
-
</CustomIcon>
|
|
186
|
-
<Page>
|
|
187
|
-
<Name>JIBB</Name>
|
|
188
|
-
<Row>
|
|
189
|
-
<Name>Row</Name>
|
|
190
|
-
<Widget>
|
|
191
|
-
<WidgetId>jibb_start_toggle</WidgetId>
|
|
192
|
-
<Type>GroupButton</Type>
|
|
193
|
-
<Options>size=4</Options>
|
|
194
|
-
<ValueSpace>
|
|
195
|
-
<Value>
|
|
196
|
-
<Key>start</Key>
|
|
197
|
-
<Name>Start</Name>
|
|
198
|
-
</Value>
|
|
199
|
-
<Value>
|
|
200
|
-
<Key>stop</Key>
|
|
201
|
-
<Name>Stop</Name>
|
|
202
|
-
</Value>
|
|
203
|
-
</ValueSpace>
|
|
204
|
-
</Widget>
|
|
205
|
-
</Row>
|
|
206
|
-
<Options>hideRowNames=1</Options>
|
|
207
|
-
</Page>
|
|
208
|
-
</Panel>
|
|
209
|
-
</Extensions>
|
|
210
|
-
`
|
|
211
|
-
|
|
212
|
-
main()
|