@webex/internal-plugin-llm 3.11.0 → 3.12.0-next.2
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 +83 -12
- package/dist/constants.js +8 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/llm.js +247 -51
- package/dist/llm.js.map +1 -1
- package/dist/llm.types.js +6 -0
- package/dist/llm.types.js.map +1 -1
- package/package.json +6 -6
- package/src/constants.ts +12 -0
- package/src/index.ts +2 -0
- package/src/llm.ts +236 -33
- package/src/llm.types.ts +28 -5
- package/test/unit/spec/llm.js +349 -52
package/README.md
CHANGED
|
@@ -23,22 +23,93 @@ npm install --save @webex/internal-plugin-llm
|
|
|
23
23
|
|
|
24
24
|
```js
|
|
25
25
|
import '@webex/internal-plugin-llm';
|
|
26
|
-
|
|
27
26
|
import WebexCore from '@webex/webex-core';
|
|
27
|
+
// Optional: import enum from package internals if needed in your app setup
|
|
28
|
+
// import {DataChannelTokenType} from '@webex/internal-plugin-llm/src/llm.types';
|
|
28
29
|
|
|
29
30
|
const webex = new WebexCore();
|
|
30
|
-
// locusUrl is got from meeting.locusInfo.url;
|
|
31
|
-
// datachannelUrl is got from meeting.locusInfo.info.datachannelUrl;
|
|
32
|
-
webex.internal.llm.registerAndConnect(locusUrl, datachannelUrl);
|
|
33
|
-
|
|
34
|
-
// Checks if LLM is connected
|
|
35
|
-
webex.internal.llm.isConnected();
|
|
36
|
-
|
|
37
|
-
// Disconnect LLM connection
|
|
38
|
-
webex.internal.llm.disconnectLLM();
|
|
39
31
|
|
|
40
|
-
//
|
|
41
|
-
|
|
32
|
+
// locusUrl and datachannelUrl are from meeting.locusInfo
|
|
33
|
+
const locusUrl = meeting.locusInfo.url;
|
|
34
|
+
const datachannelUrl = meeting.locusInfo.info.datachannelUrl;
|
|
35
|
+
|
|
36
|
+
// Optional JWT token for data channel auth
|
|
37
|
+
const datachannelToken = '<jwt-token>';
|
|
38
|
+
|
|
39
|
+
// Default session (no token)
|
|
40
|
+
await webex.internal.llm.registerAndConnect(locusUrl, datachannelUrl);
|
|
41
|
+
|
|
42
|
+
// Default session (with JWT token)
|
|
43
|
+
await webex.internal.llm.registerAndConnect(locusUrl, datachannelUrl, datachannelToken);
|
|
44
|
+
|
|
45
|
+
// Multiple named sessions
|
|
46
|
+
await webex.internal.llm.registerAndConnect(locusUrlA, datachannelUrlA, undefined, 'session-a');
|
|
47
|
+
await webex.internal.llm.registerAndConnect(
|
|
48
|
+
locusUrlB,
|
|
49
|
+
datachannelUrlB,
|
|
50
|
+
datachannelToken,
|
|
51
|
+
'session-b'
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
// Listen across multiple connections
|
|
55
|
+
const llm = webex.internal.llm;
|
|
56
|
+
const sessionA = 'session-a';
|
|
57
|
+
const sessionB = 'session-b';
|
|
58
|
+
|
|
59
|
+
// Default session events use the base event name.
|
|
60
|
+
llm.on('online', () => {
|
|
61
|
+
console.log('[default] connected');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
llm.on('event', (envelope) => {
|
|
65
|
+
console.log('[default] event', envelope.data?.eventType, envelope.sessionId);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Non-default sessions emit events with :<sessionId> suffix.
|
|
69
|
+
llm.on(`online:${sessionA}`, () => {
|
|
70
|
+
console.log(`[${sessionA}] connected`);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
llm.on(`event:${sessionA}`, (envelope) => {
|
|
74
|
+
console.log(`[${sessionA}] event`, envelope.data?.eventType, envelope.sessionId);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
llm.on(`event:${sessionB}`, (envelope) => {
|
|
78
|
+
console.log(`[${sessionB}] event`, envelope.data?.eventType, envelope.sessionId);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// Optional: store/retrieve token by token type
|
|
82
|
+
webex.internal.llm.setDatachannelToken(datachannelToken, 'llm-default-session');
|
|
83
|
+
webex.internal.llm.getDatachannelToken('llm-default-session');
|
|
84
|
+
|
|
85
|
+
// Optional: inject token refresh handler
|
|
86
|
+
webex.internal.llm.setRefreshHandler(async () => {
|
|
87
|
+
// Return shape must match plugin expectation
|
|
88
|
+
return {
|
|
89
|
+
body: {
|
|
90
|
+
datachannelToken: '<refreshed-jwt-token>',
|
|
91
|
+
datachannelTokenType: 'llm-default-session',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Optional: manually trigger refresh (if needed by your flow)
|
|
97
|
+
await webex.internal.llm.refreshDataChannelToken();
|
|
98
|
+
|
|
99
|
+
// Per-session status and metadata
|
|
100
|
+
webex.internal.llm.isConnected('session-a');
|
|
101
|
+
webex.internal.llm.getBinding('session-a');
|
|
102
|
+
webex.internal.llm.getLocusUrl('session-a');
|
|
103
|
+
webex.internal.llm.getDatachannelUrl('session-a');
|
|
104
|
+
|
|
105
|
+
// All active sessions
|
|
106
|
+
webex.internal.llm.getAllConnections();
|
|
107
|
+
|
|
108
|
+
// Disconnect one session
|
|
109
|
+
await webex.internal.llm.disconnectLLM({code: 1000, reason: 'done'}, 'session-a');
|
|
110
|
+
|
|
111
|
+
// Disconnect all sessions
|
|
112
|
+
await webex.internal.llm.disconnectAllLLM({code: 1000, reason: 'shutdown'});
|
|
42
113
|
```
|
|
43
114
|
|
|
44
115
|
## Maintainers
|
package/dist/constants.js
CHANGED
|
@@ -4,7 +4,14 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.LLM = void 0;
|
|
7
|
+
exports.SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM = exports.LLM_DEFAULT_SESSION = exports.LLM = exports.DATA_CHNANEL_TYPE = exports.DATA_CHANNEL_WITH_JWT_TOKEN = exports.AWARE_DATA_CHANNEL = void 0;
|
|
8
8
|
// eslint-disable-next-line import/prefer-default-export
|
|
9
9
|
var LLM = exports.LLM = 'llm';
|
|
10
|
+
var LLM_DEFAULT_SESSION = exports.LLM_DEFAULT_SESSION = 'llm-default-session';
|
|
11
|
+
var DATA_CHANNEL_WITH_JWT_TOKEN = exports.DATA_CHANNEL_WITH_JWT_TOKEN = 'data-channel-with-jwt-token';
|
|
12
|
+
var SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM = exports.SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM = 'subscriptionAwareSubchannels';
|
|
13
|
+
var DATA_CHNANEL_TYPE = exports.DATA_CHNANEL_TYPE = {
|
|
14
|
+
TRANSCRIPTION: 'transcription'
|
|
15
|
+
};
|
|
16
|
+
var AWARE_DATA_CHANNEL = exports.AWARE_DATA_CHANNEL = [DATA_CHNANEL_TYPE.TRANSCRIPTION];
|
|
10
17
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LLM","exports"],"sources":["constants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const LLM = 'llm';\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG,KAAK","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["LLM","exports","LLM_DEFAULT_SESSION","DATA_CHANNEL_WITH_JWT_TOKEN","SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM","DATA_CHNANEL_TYPE","TRANSCRIPTION","AWARE_DATA_CHANNEL"],"sources":["constants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const LLM = 'llm';\n\nexport const LLM_DEFAULT_SESSION = 'llm-default-session';\n\nexport const DATA_CHANNEL_WITH_JWT_TOKEN = 'data-channel-with-jwt-token';\n\nexport const SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM = 'subscriptionAwareSubchannels';\n\nexport const DATA_CHNANEL_TYPE = {\n TRANSCRIPTION: 'transcription',\n};\n\nexport const AWARE_DATA_CHANNEL = [DATA_CHNANEL_TYPE.TRANSCRIPTION];\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG,KAAK;AAEjB,IAAME,mBAAmB,GAAAD,OAAA,CAAAC,mBAAA,GAAG,qBAAqB;AAEjD,IAAMC,2BAA2B,GAAAF,OAAA,CAAAE,2BAAA,GAAG,6BAA6B;AAEjE,IAAMC,oCAAoC,GAAAH,OAAA,CAAAG,oCAAA,GAAG,8BAA8B;AAE3E,IAAMC,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,GAAG;EAC/BC,aAAa,EAAE;AACjB,CAAC;AAEM,IAAMC,kBAAkB,GAAAN,OAAA,CAAAM,kBAAA,GAAG,CAACF,iBAAiB,CAACC,aAAa,CAAC","ignoreList":[]}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,12 @@ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/o
|
|
|
7
7
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
10
|
+
_Object$defineProperty(exports, "DataChannelTokenType", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function get() {
|
|
13
|
+
return _llm2.DataChannelTokenType;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
10
16
|
_Object$defineProperty(exports, "default", {
|
|
11
17
|
enumerable: true,
|
|
12
18
|
get: function get() {
|
|
@@ -15,6 +21,7 @@ _Object$defineProperty(exports, "default", {
|
|
|
15
21
|
});
|
|
16
22
|
var WebexCore = _interopRequireWildcard(require("@webex/webex-core"));
|
|
17
23
|
var _llm = _interopRequireWildcard(require("./llm"));
|
|
24
|
+
var _llm2 = require("./llm.types");
|
|
18
25
|
function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
26
|
WebexCore.registerInternalPlugin('llm', _llm.default, {
|
|
20
27
|
config: _llm.config
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_llm","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","LLMChannel","config"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\nimport LLMChannel, {config} from './llm';\n\nWebexCore.registerInternalPlugin('llm', LLMChannel, {\n config,\n});\n\nexport {default} from './llm';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["WebexCore","_interopRequireWildcard","require","_llm","_llm2","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","LLMChannel","config"],"sources":["index.ts"],"sourcesContent":["import * as WebexCore from '@webex/webex-core';\nimport LLMChannel, {config} from './llm';\nimport {DataChannelTokenType} from './llm.types';\n\nWebexCore.registerInternalPlugin('llm', LLMChannel, {\n config,\n});\n\nexport {DataChannelTokenType};\nexport {default} from './llm';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAAiD,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAN,uBAAA,YAAAA,wBAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,EAAA,IAAAf,CAAA,gBAAAe,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,EAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,EAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,EAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,EAAA,IAAAf,CAAA,CAAAe,EAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEjDN,SAAS,CAACyB,sBAAsB,CAAC,KAAK,EAAEC,YAAU,EAAE;EAClDC,MAAM,EAANA;AACF,CAAC,CAAC","ignoreList":[]}
|
package/dist/llm.js
CHANGED
|
@@ -7,18 +7,20 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
exports.default = exports.config = void 0;
|
|
10
|
-
var
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
11
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
11
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
14
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
13
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
14
17
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
15
|
-
var
|
|
18
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
16
19
|
var _internalPluginMercury = _interopRequireDefault(require("@webex/internal-plugin-mercury"));
|
|
17
20
|
var _constants = require("./constants");
|
|
21
|
+
var _llm = require("./llm.types");
|
|
18
22
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
19
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable consistent-return */
|
|
20
|
-
// eslint-disable-next-line no-unused-vars
|
|
21
|
-
|
|
23
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable consistent-return */ // eslint-disable-next-line no-unused-vars
|
|
22
24
|
var config = exports.config = {
|
|
23
25
|
llm: {
|
|
24
26
|
/**
|
|
@@ -61,95 +63,289 @@ var LLMChannel = exports.default = /*#__PURE__*/function (_ref) {
|
|
|
61
63
|
args[_key] = arguments[_key];
|
|
62
64
|
}
|
|
63
65
|
_this = _callSuper(this, LLMChannel, [].concat(args));
|
|
64
|
-
(0,
|
|
66
|
+
(0, _defineProperty3.default)(_this, "namespace", _constants.LLM);
|
|
67
|
+
(0, _defineProperty3.default)(_this, "defaultSessionId", _constants.LLM_DEFAULT_SESSION);
|
|
65
68
|
/**
|
|
66
|
-
*
|
|
67
|
-
* @
|
|
68
|
-
* @type {
|
|
69
|
-
* @public
|
|
69
|
+
* Map to store connection-specific data for multiple LLM connections
|
|
70
|
+
* @private
|
|
71
|
+
* @type {Map<string, {webSocketUrl?: string; binding?: string; locusUrl?: string; datachannelUrl?: string}>}
|
|
70
72
|
*/
|
|
71
|
-
(0,
|
|
72
|
-
(0,
|
|
73
|
-
(0,
|
|
74
|
-
(0, _defineProperty2.default)(_this, "datachannelUrl", void 0);
|
|
73
|
+
(0, _defineProperty3.default)(_this, "connections", new _map.default());
|
|
74
|
+
(0, _defineProperty3.default)(_this, "datachannelTokens", (0, _defineProperty3.default)((0, _defineProperty3.default)({}, _llm.DataChannelTokenType.Default, undefined), _llm.DataChannelTokenType.PracticeSession, undefined));
|
|
75
|
+
(0, _defineProperty3.default)(_this, "refreshHandler", void 0);
|
|
75
76
|
/**
|
|
76
77
|
* Register to the websocket
|
|
77
78
|
* @param {string} llmSocketUrl
|
|
79
|
+
* @param {string} datachannelToken
|
|
80
|
+
* @param {string} sessionId - Connection identifier
|
|
78
81
|
* @returns {Promise<void>}
|
|
79
82
|
*/
|
|
80
|
-
(0,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
(0, _defineProperty3.default)(_this, "register", /*#__PURE__*/function () {
|
|
84
|
+
var _ref2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(llmSocketUrl, datachannelToken) {
|
|
85
|
+
var sessionId,
|
|
86
|
+
isDataChannelTokenEnabled,
|
|
87
|
+
_args = arguments;
|
|
88
|
+
return _regenerator.default.wrap(function (_context) {
|
|
89
|
+
while (1) switch (_context.prev = _context.next) {
|
|
90
|
+
case 0:
|
|
91
|
+
sessionId = _args.length > 2 && _args[2] !== undefined ? _args[2] : _constants.LLM_DEFAULT_SESSION;
|
|
92
|
+
_context.next = 1;
|
|
93
|
+
return _this.isDataChannelTokenEnabled();
|
|
94
|
+
case 1:
|
|
95
|
+
isDataChannelTokenEnabled = _context.sent;
|
|
96
|
+
return _context.abrupt("return", _this.request({
|
|
97
|
+
method: 'POST',
|
|
98
|
+
url: llmSocketUrl,
|
|
99
|
+
body: {
|
|
100
|
+
deviceUrl: _this.webex.internal.device.url
|
|
101
|
+
},
|
|
102
|
+
headers: isDataChannelTokenEnabled && datachannelToken ? {
|
|
103
|
+
'Data-Channel-Auth-Token': datachannelToken
|
|
104
|
+
} : {}
|
|
105
|
+
}).then(function (res) {
|
|
106
|
+
// Get or create connection data
|
|
107
|
+
var sessionData = _this.connections.get(sessionId) || {};
|
|
108
|
+
sessionData.webSocketUrl = res.body.webSocketUrl;
|
|
109
|
+
sessionData.binding = res.body.binding;
|
|
110
|
+
_this.connections.set(sessionId, sessionData);
|
|
111
|
+
}).catch(function (error) {
|
|
112
|
+
_this.logger.error("Error connecting to websocket for ".concat(sessionId, ": ").concat(error));
|
|
113
|
+
throw error;
|
|
114
|
+
}));
|
|
115
|
+
case 2:
|
|
116
|
+
case "end":
|
|
117
|
+
return _context.stop();
|
|
118
|
+
}
|
|
119
|
+
}, _callee);
|
|
120
|
+
}));
|
|
121
|
+
return function (_x, _x2) {
|
|
122
|
+
return _ref2.apply(this, arguments);
|
|
123
|
+
};
|
|
124
|
+
}());
|
|
95
125
|
/**
|
|
96
126
|
* Register and connect to the websocket
|
|
97
127
|
* @param {string} locusUrl
|
|
98
128
|
* @param {string} datachannelUrl
|
|
129
|
+
* @param {string} datachannelToken
|
|
130
|
+
* @param {string} sessionId - Connection identifier
|
|
99
131
|
* @returns {Promise<void>}
|
|
100
132
|
*/
|
|
101
|
-
(0,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
133
|
+
(0, _defineProperty3.default)(_this, "registerAndConnect", function (locusUrl, datachannelUrl, datachannelToken) {
|
|
134
|
+
var sessionId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _constants.LLM_DEFAULT_SESSION;
|
|
135
|
+
return _this.register(datachannelUrl, datachannelToken, sessionId).then(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
136
|
+
var sessionData, isDataChannelTokenEnabled, connectUrl;
|
|
137
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
138
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
139
|
+
case 0:
|
|
140
|
+
if (!(!locusUrl || !datachannelUrl)) {
|
|
141
|
+
_context2.next = 1;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
return _context2.abrupt("return", undefined);
|
|
145
|
+
case 1:
|
|
146
|
+
// Get or create connection data
|
|
147
|
+
sessionData = _this.connections.get(sessionId) || {};
|
|
148
|
+
sessionData.locusUrl = locusUrl;
|
|
149
|
+
sessionData.datachannelUrl = datachannelUrl;
|
|
150
|
+
sessionData.datachannelToken = datachannelToken;
|
|
151
|
+
_this.connections.set(sessionId, sessionData);
|
|
152
|
+
_context2.next = 2;
|
|
153
|
+
return _this.isDataChannelTokenEnabled();
|
|
154
|
+
case 2:
|
|
155
|
+
isDataChannelTokenEnabled = _context2.sent;
|
|
156
|
+
connectUrl = isDataChannelTokenEnabled ? LLMChannel.buildUrlWithAwareSubchannels(sessionData.webSocketUrl, _constants.AWARE_DATA_CHANNEL) : sessionData.webSocketUrl;
|
|
157
|
+
return _context2.abrupt("return", _this.connect(connectUrl, sessionId));
|
|
158
|
+
case 3:
|
|
159
|
+
case "end":
|
|
160
|
+
return _context2.stop();
|
|
161
|
+
}
|
|
162
|
+
}, _callee2);
|
|
163
|
+
})));
|
|
108
164
|
});
|
|
109
165
|
/**
|
|
110
166
|
* Tells if LLM socket is connected
|
|
167
|
+
* @param {string} sessionId - Connection identifier
|
|
111
168
|
* @returns {boolean} connected
|
|
112
169
|
*/
|
|
113
|
-
(0,
|
|
114
|
-
|
|
170
|
+
(0, _defineProperty3.default)(_this, "isConnected", function () {
|
|
171
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
172
|
+
var socket = _this.getSocket(sessionId);
|
|
173
|
+
return socket ? socket.connected : false;
|
|
115
174
|
});
|
|
116
175
|
/**
|
|
117
176
|
* Tells if LLM socket is binding
|
|
177
|
+
* @param {string} sessionId - Connection identifier
|
|
118
178
|
* @returns {string} binding
|
|
119
179
|
*/
|
|
120
|
-
(0,
|
|
121
|
-
|
|
180
|
+
(0, _defineProperty3.default)(_this, "getBinding", function () {
|
|
181
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
182
|
+
var sessionData = _this.connections.get(sessionId);
|
|
183
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.binding;
|
|
122
184
|
});
|
|
123
185
|
/**
|
|
124
186
|
* Get Locus URL for the connection
|
|
187
|
+
* @param {string} sessionId - Connection identifier
|
|
125
188
|
* @returns {string} locus Url
|
|
126
189
|
*/
|
|
127
|
-
(0,
|
|
128
|
-
|
|
190
|
+
(0, _defineProperty3.default)(_this, "getLocusUrl", function () {
|
|
191
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
192
|
+
var sessionData = _this.connections.get(sessionId);
|
|
193
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.locusUrl;
|
|
129
194
|
});
|
|
130
195
|
/**
|
|
131
196
|
* Get data channel URL for the connection
|
|
197
|
+
* @param {string} sessionId - Connection identifier
|
|
132
198
|
* @returns {string} data channel Url
|
|
133
199
|
*/
|
|
134
|
-
(0,
|
|
135
|
-
|
|
200
|
+
(0, _defineProperty3.default)(_this, "getDatachannelUrl", function () {
|
|
201
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
202
|
+
var sessionData = _this.connections.get(sessionId);
|
|
203
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.datachannelUrl;
|
|
204
|
+
});
|
|
205
|
+
/**
|
|
206
|
+
* Get data channel token for the connection
|
|
207
|
+
* @param {DataChannelTokenType} dataChannelTokenType
|
|
208
|
+
* @returns {string} data channel token
|
|
209
|
+
*/
|
|
210
|
+
(0, _defineProperty3.default)(_this, "getDatachannelToken", function () {
|
|
211
|
+
var dataChannelTokenType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _llm.DataChannelTokenType.Default;
|
|
212
|
+
return _this.datachannelTokens[dataChannelTokenType];
|
|
213
|
+
});
|
|
214
|
+
/**
|
|
215
|
+
* Set data channel token for the connection
|
|
216
|
+
* @param {string} datachannelToken - data channel token
|
|
217
|
+
* @param {DataChannelTokenType} dataChannelTokenType
|
|
218
|
+
* @returns {void}
|
|
219
|
+
*/
|
|
220
|
+
(0, _defineProperty3.default)(_this, "setDatachannelToken", function (datachannelToken) {
|
|
221
|
+
var dataChannelTokenType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _llm.DataChannelTokenType.Default;
|
|
222
|
+
_this.datachannelTokens[dataChannelTokenType] = datachannelToken;
|
|
136
223
|
});
|
|
137
224
|
/**
|
|
138
225
|
* Disconnects websocket connection
|
|
139
226
|
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
227
|
+
* @param {string} sessionId - Connection identifier
|
|
140
228
|
* @returns {Promise<void>}
|
|
141
229
|
*/
|
|
142
|
-
(0,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
_this.
|
|
147
|
-
_this.webSocketUrl = undefined;
|
|
230
|
+
(0, _defineProperty3.default)(_this, "disconnectLLM", function (options) {
|
|
231
|
+
var sessionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.LLM_DEFAULT_SESSION;
|
|
232
|
+
return _this.disconnect(options, sessionId).then(function () {
|
|
233
|
+
// Clean up sessions data
|
|
234
|
+
_this.connections.delete(sessionId);
|
|
148
235
|
});
|
|
149
236
|
});
|
|
237
|
+
/**
|
|
238
|
+
* Disconnects all LLM websocket connections
|
|
239
|
+
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
240
|
+
* @returns {Promise<void>}
|
|
241
|
+
*/
|
|
242
|
+
(0, _defineProperty3.default)(_this, "disconnectAllLLM", function (options) {
|
|
243
|
+
return _this.disconnectAll(options).then(function () {
|
|
244
|
+
// Clean up all connection data
|
|
245
|
+
_this.connections.clear();
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
/**
|
|
249
|
+
* Get all active LLM connections
|
|
250
|
+
* @returns {Map} Map of sessionId to session data
|
|
251
|
+
*/
|
|
252
|
+
(0, _defineProperty3.default)(_this, "getAllConnections", function () {
|
|
253
|
+
return new _map.default(_this.connections);
|
|
254
|
+
});
|
|
150
255
|
return _this;
|
|
151
256
|
}
|
|
152
257
|
(0, _inherits2.default)(LLMChannel, _ref);
|
|
153
|
-
return (0, _createClass2.default)(LLMChannel
|
|
258
|
+
return (0, _createClass2.default)(LLMChannel, [{
|
|
259
|
+
key: "resetDatachannelTokens",
|
|
260
|
+
value:
|
|
261
|
+
/**
|
|
262
|
+
* Resets all data‑channel tokens to their initial undefined values.
|
|
263
|
+
* Used when leaving or disconnecting from a meeting.
|
|
264
|
+
* @returns {void}
|
|
265
|
+
*/
|
|
266
|
+
function resetDatachannelTokens() {
|
|
267
|
+
this.datachannelTokens = (0, _defineProperty3.default)((0, _defineProperty3.default)({}, _llm.DataChannelTokenType.Default, undefined), _llm.DataChannelTokenType.PracticeSession, undefined);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Set the handler used to refresh the DataChannel token
|
|
272
|
+
*
|
|
273
|
+
* @param {function} handler - Function that returns a refreshed token
|
|
274
|
+
* @returns {void}
|
|
275
|
+
*/
|
|
276
|
+
}, {
|
|
277
|
+
key: "setRefreshHandler",
|
|
278
|
+
value: function setRefreshHandler(handler) {
|
|
279
|
+
this.refreshHandler = handler;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Refresh the data channel token using the injected handler.
|
|
284
|
+
* Logs a descriptive error if the handler is missing or fails.
|
|
285
|
+
*
|
|
286
|
+
* @returns {Promise<string>} The refreshed token.
|
|
287
|
+
*/
|
|
288
|
+
}, {
|
|
289
|
+
key: "refreshDataChannelToken",
|
|
290
|
+
value: (function () {
|
|
291
|
+
var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
292
|
+
var res, _t;
|
|
293
|
+
return _regenerator.default.wrap(function (_context3) {
|
|
294
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
295
|
+
case 0:
|
|
296
|
+
if (this.refreshHandler) {
|
|
297
|
+
_context3.next = 1;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
this.logger.warn('llm#refreshDataChannelToken --> LLM refreshHandler is not set, skipping token refresh');
|
|
301
|
+
return _context3.abrupt("return", null);
|
|
302
|
+
case 1:
|
|
303
|
+
_context3.prev = 1;
|
|
304
|
+
_context3.next = 2;
|
|
305
|
+
return this.refreshHandler();
|
|
306
|
+
case 2:
|
|
307
|
+
res = _context3.sent;
|
|
308
|
+
return _context3.abrupt("return", res);
|
|
309
|
+
case 3:
|
|
310
|
+
_context3.prev = 3;
|
|
311
|
+
_t = _context3["catch"](1);
|
|
312
|
+
this.logger.warn("llm#refreshDataChannelToken --> DataChannel token refresh failed (likely locus changed or participant left): ".concat((_t === null || _t === void 0 ? void 0 : _t.message) || _t));
|
|
313
|
+
return _context3.abrupt("return", null);
|
|
314
|
+
case 4:
|
|
315
|
+
case "end":
|
|
316
|
+
return _context3.stop();
|
|
317
|
+
}
|
|
318
|
+
}, _callee3, this, [[1, 3]]);
|
|
319
|
+
}));
|
|
320
|
+
function refreshDataChannelToken() {
|
|
321
|
+
return _refreshDataChannelToken.apply(this, arguments);
|
|
322
|
+
}
|
|
323
|
+
return refreshDataChannelToken;
|
|
324
|
+
}())
|
|
325
|
+
}, {
|
|
326
|
+
key: "isDataChannelTokenEnabled",
|
|
327
|
+
value:
|
|
328
|
+
/**
|
|
329
|
+
* Returns true if data channel token is enabled, false otherwise
|
|
330
|
+
* @returns {Promise<boolean>} resolves with true if data channel token is enabled
|
|
331
|
+
*/
|
|
332
|
+
function isDataChannelTokenEnabled() {
|
|
333
|
+
// @ts-ignore
|
|
334
|
+
return this.webex.internal.feature.getFeature('developer', _constants.DATA_CHANNEL_WITH_JWT_TOKEN);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Builds a WebSocket URL with the `subscriptionAwareSubchannels` query parameter.
|
|
339
|
+
*
|
|
340
|
+
* @param {string} baseUrl - The original WebSocket URL.
|
|
341
|
+
* @param {string[]} subchannels - List of subchannels to declare as subscription-aware.
|
|
342
|
+
* @returns {string} The final URL with updated query parameters.
|
|
343
|
+
*/
|
|
344
|
+
}]);
|
|
154
345
|
}(_internalPluginMercury.default);
|
|
346
|
+
(0, _defineProperty3.default)(LLMChannel, "buildUrlWithAwareSubchannels", function (baseUrl, subchannels) {
|
|
347
|
+
var urlObj = new URL(baseUrl);
|
|
348
|
+
urlObj.searchParams.set(_constants.SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM, subchannels.join(','));
|
|
349
|
+
return urlObj.toString();
|
|
350
|
+
});
|
|
155
351
|
//# sourceMappingURL=llm.js.map
|
package/dist/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_internalPluginMercury","_interopRequireDefault","require","_constants","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","config","exports","llm","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","LLMChannel","_ref","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","concat","_defineProperty2","LLM","llmSocketUrl","request","method","url","body","deviceUrl","webex","internal","device","then","res","webSocketUrl","binding","catch","error","logger","locusUrl","datachannelUrl","register","undefined","connect","connected","options","disconnect","_inherits2","_createClass2","Mercury"],"sources":["llm.ts"],"sourcesContent":["/* eslint-disable consistent-return */\n\nimport Mercury from '@webex/internal-plugin-mercury';\n\nimport {LLM} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {ILLMChannel} from './llm.types';\n\nexport const config = {\n llm: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n\n/**\n * LLMChannel to provide socket connections\n */\nexport default class LLMChannel extends (Mercury as any) implements ILLMChannel {\n namespace = LLM;\n\n /**\n * If the LLM plugin has been registered and listening\n * @instance\n * @type {Boolean}\n * @public\n */\n\n private webSocketUrl?: string;\n\n private binding?: string;\n\n private locusUrl?: string;\n\n private datachannelUrl?: string;\n\n /**\n * Register to the websocket\n * @param {string} llmSocketUrl\n * @returns {Promise<void>}\n */\n private register = (llmSocketUrl: string): Promise<void> =>\n this.request({\n method: 'POST',\n url: llmSocketUrl,\n body: {deviceUrl: this.webex.internal.device.url},\n })\n .then((res: {body: {webSocketUrl: string; binding: string}}) => {\n this.webSocketUrl = res.body.webSocketUrl;\n this.binding = res.body.binding;\n })\n .catch((error: any) => {\n this.logger.error(`Error connecting to websocket: ${error}`);\n throw error;\n });\n\n /**\n * Register and connect to the websocket\n * @param {string} locusUrl\n * @param {string} datachannelUrl\n * @returns {Promise<void>}\n */\n public registerAndConnect = (locusUrl: string, datachannelUrl: string): Promise<void> =>\n this.register(datachannelUrl).then(() => {\n if (!locusUrl || !datachannelUrl) return undefined;\n this.locusUrl = locusUrl;\n this.datachannelUrl = datachannelUrl;\n this.connect(this.webSocketUrl);\n });\n\n /**\n * Tells if LLM socket is connected\n * @returns {boolean} connected\n */\n public isConnected = (): boolean => this.connected;\n\n /**\n * Tells if LLM socket is binding\n * @returns {string} binding\n */\n public getBinding = (): string => this.binding;\n\n /**\n * Get Locus URL for the connection\n * @returns {string} locus Url\n */\n public getLocusUrl = (): string => this.locusUrl;\n\n /**\n * Get data channel URL for the connection\n * @returns {string} data channel Url\n */\n public getDatachannelUrl = (): string => this.datachannelUrl;\n\n /**\n * Disconnects websocket connection\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @returns {Promise<void>}\n */\n public disconnectLLM = (options: object): Promise<void> =>\n this.disconnect(options).then(() => {\n this.locusUrl = undefined;\n this.datachannelUrl = undefined;\n this.binding = undefined;\n this.webSocketUrl = undefined;\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_internalPluginMercury","_interopRequireDefault","require","_constants","_llm","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","config","exports","llm","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","LLMChannel","_ref","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","concat","_defineProperty3","LLM","LLM_DEFAULT_SESSION","_map","DataChannelTokenType","Default","undefined","PracticeSession","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","llmSocketUrl","datachannelToken","sessionId","isDataChannelTokenEnabled","_args","wrap","_context","prev","next","sent","abrupt","request","method","url","body","deviceUrl","webex","internal","device","headers","then","res","sessionData","connections","get","webSocketUrl","binding","set","catch","error","logger","stop","_x","_x2","locusUrl","datachannelUrl","register","_callee2","connectUrl","_context2","buildUrlWithAwareSubchannels","AWARE_DATA_CHANNEL","connect","socket","getSocket","connected","dataChannelTokenType","datachannelTokens","options","disconnect","delete","disconnectAll","clear","_inherits2","_createClass2","key","value","resetDatachannelTokens","setRefreshHandler","handler","refreshHandler","_refreshDataChannelToken","_callee3","_t","_context3","warn","message","refreshDataChannelToken","feature","getFeature","DATA_CHANNEL_WITH_JWT_TOKEN","Mercury","baseUrl","subchannels","urlObj","URL","searchParams","SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM","join","toString"],"sources":["llm.ts"],"sourcesContent":["/* eslint-disable consistent-return */\n\nimport Mercury from '@webex/internal-plugin-mercury';\n\n// eslint-disable-next-line no-unused-vars\nimport {\n LLM,\n DATA_CHANNEL_WITH_JWT_TOKEN,\n AWARE_DATA_CHANNEL,\n SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM,\n LLM_DEFAULT_SESSION,\n} from './constants';\nimport {ILLMChannel, DataChannelTokenType} from './llm.types';\n\nexport const config = {\n llm: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n\n/**\n * LLMChannel to provide socket connections\n */\nexport default class LLMChannel extends (Mercury as any) implements ILLMChannel {\n namespace = LLM;\n defaultSessionId = LLM_DEFAULT_SESSION;\n /**\n * Map to store connection-specific data for multiple LLM connections\n * @private\n * @type {Map<string, {webSocketUrl?: string; binding?: string; locusUrl?: string; datachannelUrl?: string}>}\n */\n private connections: Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n datachannelToken?: string;\n }\n > = new Map();\n\n private datachannelTokens: Record<DataChannelTokenType, string> = {\n [DataChannelTokenType.Default]: undefined,\n [DataChannelTokenType.PracticeSession]: undefined,\n };\n\n private refreshHandler?: () => Promise<{\n body: {datachannelToken: string; datachannelTokenType: DataChannelTokenType};\n }>;\n\n /**\n * Register to the websocket\n * @param {string} llmSocketUrl\n * @param {string} datachannelToken\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n private register = async (\n llmSocketUrl: string,\n datachannelToken?: string,\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> => {\n const isDataChannelTokenEnabled = await this.isDataChannelTokenEnabled();\n\n return this.request({\n method: 'POST',\n url: llmSocketUrl,\n body: {deviceUrl: this.webex.internal.device.url},\n headers:\n isDataChannelTokenEnabled && datachannelToken\n ? {'Data-Channel-Auth-Token': datachannelToken}\n : {},\n })\n .then((res: {body: {webSocketUrl: string; binding: string}}) => {\n // Get or create connection data\n const sessionData = this.connections.get(sessionId) || {};\n sessionData.webSocketUrl = res.body.webSocketUrl;\n sessionData.binding = res.body.binding;\n this.connections.set(sessionId, sessionData);\n })\n .catch((error: any) => {\n this.logger.error(`Error connecting to websocket for ${sessionId}: ${error}`);\n throw error;\n });\n };\n\n /**\n * Register and connect to the websocket\n * @param {string} locusUrl\n * @param {string} datachannelUrl\n * @param {string} datachannelToken\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n public registerAndConnect = (\n locusUrl: string,\n datachannelUrl: string,\n datachannelToken?: string,\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> =>\n this.register(datachannelUrl, datachannelToken, sessionId).then(async () => {\n if (!locusUrl || !datachannelUrl) return undefined;\n\n // Get or create connection data\n const sessionData = this.connections.get(sessionId) || {};\n sessionData.locusUrl = locusUrl;\n sessionData.datachannelUrl = datachannelUrl;\n sessionData.datachannelToken = datachannelToken;\n this.connections.set(sessionId, sessionData);\n\n const isDataChannelTokenEnabled = await this.isDataChannelTokenEnabled();\n\n const connectUrl = isDataChannelTokenEnabled\n ? LLMChannel.buildUrlWithAwareSubchannels(sessionData.webSocketUrl, AWARE_DATA_CHANNEL)\n : sessionData.webSocketUrl;\n\n return this.connect(connectUrl, sessionId);\n });\n\n /**\n * Tells if LLM socket is connected\n * @param {string} sessionId - Connection identifier\n * @returns {boolean} connected\n */\n public isConnected = (sessionId = LLM_DEFAULT_SESSION): boolean => {\n const socket = this.getSocket(sessionId);\n\n return socket ? socket.connected : false;\n };\n\n /**\n * Tells if LLM socket is binding\n * @param {string} sessionId - Connection identifier\n * @returns {string} binding\n */\n public getBinding = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.binding;\n };\n\n /**\n * Get Locus URL for the connection\n * @param {string} sessionId - Connection identifier\n * @returns {string} locus Url\n */\n public getLocusUrl = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.locusUrl;\n };\n\n /**\n * Get data channel URL for the connection\n * @param {string} sessionId - Connection identifier\n * @returns {string} data channel Url\n */\n public getDatachannelUrl = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.datachannelUrl;\n };\n\n /**\n * Get data channel token for the connection\n * @param {DataChannelTokenType} dataChannelTokenType\n * @returns {string} data channel token\n */\n public getDatachannelToken = (\n dataChannelTokenType: DataChannelTokenType = DataChannelTokenType.Default\n ): string => {\n return this.datachannelTokens[dataChannelTokenType];\n };\n\n /**\n * Set data channel token for the connection\n * @param {string} datachannelToken - data channel token\n * @param {DataChannelTokenType} dataChannelTokenType\n * @returns {void}\n */\n public setDatachannelToken = (\n datachannelToken: string,\n dataChannelTokenType: DataChannelTokenType = DataChannelTokenType.Default\n ): void => {\n this.datachannelTokens[dataChannelTokenType] = datachannelToken;\n };\n\n /**\n * Resets all data‑channel tokens to their initial undefined values.\n * Used when leaving or disconnecting from a meeting.\n * @returns {void}\n */\n public resetDatachannelTokens() {\n this.datachannelTokens = {\n [DataChannelTokenType.Default]: undefined,\n [DataChannelTokenType.PracticeSession]: undefined,\n };\n }\n\n /**\n * Set the handler used to refresh the DataChannel token\n *\n * @param {function} handler - Function that returns a refreshed token\n * @returns {void}\n */\n public setRefreshHandler(\n handler: () => Promise<{\n body: {datachannelToken: string; datachannelTokenType: DataChannelTokenType};\n }>\n ) {\n this.refreshHandler = handler;\n }\n\n /**\n * Refresh the data channel token using the injected handler.\n * Logs a descriptive error if the handler is missing or fails.\n *\n * @returns {Promise<string>} The refreshed token.\n */\n public async refreshDataChannelToken() {\n if (!this.refreshHandler) {\n this.logger.warn(\n 'llm#refreshDataChannelToken --> LLM refreshHandler is not set, skipping token refresh'\n );\n\n return null;\n }\n\n try {\n const res = await this.refreshHandler();\n\n return res;\n } catch (error: any) {\n this.logger.warn(\n `llm#refreshDataChannelToken --> DataChannel token refresh failed (likely locus changed or participant left): ${\n error?.message || error\n }`\n );\n\n return null;\n }\n }\n\n /**\n * Disconnects websocket connection\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n public disconnectLLM = (\n options: {code: number; reason: string},\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> =>\n this.disconnect(options, sessionId).then(() => {\n // Clean up sessions data\n this.connections.delete(sessionId);\n });\n\n /**\n * Disconnects all LLM websocket connections\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @returns {Promise<void>}\n */\n public disconnectAllLLM = (options?: {code: number; reason: string}): Promise<void> =>\n this.disconnectAll(options).then(() => {\n // Clean up all connection data\n this.connections.clear();\n });\n\n /**\n * Get all active LLM connections\n * @returns {Map} Map of sessionId to session data\n */\n public getAllConnections = (): Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n datachannelToken?: string;\n }\n > => new Map(this.connections);\n\n /**\n * Returns true if data channel token is enabled, false otherwise\n * @returns {Promise<boolean>} resolves with true if data channel token is enabled\n */\n public isDataChannelTokenEnabled(): Promise<boolean> {\n // @ts-ignore\n return this.webex.internal.feature.getFeature('developer', DATA_CHANNEL_WITH_JWT_TOKEN);\n }\n\n /**\n * Builds a WebSocket URL with the `subscriptionAwareSubchannels` query parameter.\n *\n * @param {string} baseUrl - The original WebSocket URL.\n * @param {string[]} subchannels - List of subchannels to declare as subscription-aware.\n * @returns {string} The final URL with updated query parameters.\n */\n\n public static buildUrlWithAwareSubchannels = (baseUrl: string, subchannels: string[]) => {\n const urlObj = new URL(baseUrl);\n urlObj.searchParams.set(SUBSCRIPTION_AWARE_SUBCHANNELS_PARAM, subchannels.join(','));\n\n return urlObj.toString();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/llm.types.js
CHANGED
|
@@ -4,4 +4,10 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.DataChannelTokenType = void 0;
|
|
8
|
+
var DataChannelTokenType = exports.DataChannelTokenType = /*#__PURE__*/function (DataChannelTokenType) {
|
|
9
|
+
DataChannelTokenType["Default"] = "llm-default-session";
|
|
10
|
+
DataChannelTokenType["PracticeSession"] = "llm-practice-session";
|
|
11
|
+
return DataChannelTokenType;
|
|
12
|
+
}({}); // eslint-disable-next-line import/prefer-default-export
|
|
7
13
|
//# sourceMappingURL=llm.types.js.map
|
package/dist/llm.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["llm.types.ts"],"sourcesContent":["interface ILLMChannel {\n registerAndConnect: (locusUrl: string
|
|
1
|
+
{"version":3,"names":["DataChannelTokenType","exports"],"sources":["llm.types.ts"],"sourcesContent":["interface ILLMChannel {\n registerAndConnect: (\n locusUrl: string,\n datachannelUrl: string,\n datachannelToken?: string,\n sessionId?: string\n ) => Promise<void>;\n isConnected: (sessionId?: string) => boolean;\n getBinding: (sessionId?: string) => string;\n getLocusUrl: (sessionId?: string) => string;\n getDatachannelUrl: (sessionId?: string) => string;\n disconnectLLM: (options: {code: number; reason: string}, sessionId?: string) => Promise<void>;\n disconnectAllLLM: (options?: {code: number; reason: string}) => Promise<void>;\n getAllConnections: () => Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n datachannelToken?: string;\n }\n >;\n}\n\nexport enum DataChannelTokenType {\n Default = 'llm-default-session',\n PracticeSession = 'llm-practice-session',\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport type {ILLMChannel};\n"],"mappings":";;;;;;;IAyBYA,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA,OAKhC","ignoreList":[]}
|