livekit-client 0.11.2 → 0.13.0
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/.eslintrc.js +1 -0
- package/.github/workflows/publish.yaml +1 -3
- package/CHANGELOG.md +5 -0
- package/README.md +21 -1
- package/dist/api/SignalClient.d.ts +10 -7
- package/dist/api/SignalClient.js +19 -10
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/connect.d.ts +23 -0
- package/dist/connect.js +93 -0
- package/dist/connect.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +5 -3
- package/dist/options.js.map +1 -1
- package/dist/proto/livekit_models.d.ts +68 -54
- package/dist/proto/livekit_models.js +324 -362
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +31 -61
- package/dist/proto/livekit_rtc.js +177 -356
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/DeviceManager.d.ts +10 -0
- package/dist/room/DeviceManager.js +77 -0
- package/dist/room/DeviceManager.js.map +1 -0
- package/dist/room/PCTransport.d.ts +5 -0
- package/dist/room/PCTransport.js +43 -0
- package/dist/room/PCTransport.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +21 -15
- package/dist/room/RTCEngine.js +122 -87
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.d.ts +47 -3
- package/dist/room/Room.js +167 -10
- package/dist/room/Room.js.map +1 -1
- package/dist/room/defaults.d.ts +3 -0
- package/dist/room/defaults.js +13 -0
- package/dist/room/defaults.js.map +1 -0
- package/dist/room/events.d.ts +26 -3
- package/dist/room/events.js +25 -2
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +32 -9
- package/dist/room/participant/LocalParticipant.js +165 -60
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/Participant.d.ts +14 -0
- package/dist/room/participant/Participant.js +39 -0
- package/dist/room/participant/Participant.js.map +1 -1
- package/dist/room/participant/RemoteParticipant.d.ts +2 -0
- package/dist/room/participant/RemoteParticipant.js +14 -0
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/track/LocalAudioTrack.d.ts +3 -0
- package/dist/room/track/LocalAudioTrack.js +37 -0
- package/dist/room/track/LocalAudioTrack.js.map +1 -1
- package/dist/room/track/LocalTrack.d.ts +6 -2
- package/dist/room/track/LocalTrack.js +49 -6
- package/dist/room/track/LocalTrack.js.map +1 -1
- package/dist/room/track/LocalTrackPublication.d.ts +6 -3
- package/dist/room/track/LocalTrackPublication.js +21 -2
- package/dist/room/track/LocalTrackPublication.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.d.ts +3 -2
- package/dist/room/track/LocalVideoTrack.js +34 -5
- package/dist/room/track/LocalVideoTrack.js.map +1 -1
- package/dist/room/track/RemoteAudioTrack.d.ts +2 -0
- package/dist/room/track/RemoteAudioTrack.js +8 -0
- package/dist/room/track/RemoteAudioTrack.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +1 -0
- package/dist/room/track/RemoteVideoTrack.js +6 -1
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.d.ts +14 -2
- package/dist/room/track/Track.js +42 -0
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/TrackPublication.d.ts +1 -0
- package/dist/room/track/TrackPublication.js +2 -0
- package/dist/room/track/TrackPublication.js.map +1 -1
- package/dist/room/track/create.d.ts +23 -0
- package/dist/room/track/create.js +166 -0
- package/dist/room/track/create.js.map +1 -0
- package/dist/room/track/options.d.ts +47 -17
- package/dist/room/track/options.js +11 -6
- package/dist/room/track/options.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/example/index.html +51 -20
- package/example/sample.ts +204 -75
- package/example/webpack.config.js +8 -2
- package/package.json +11 -10
- package/dist/livekit.d.ts +0 -42
- package/dist/livekit.js +0 -194
- package/dist/livekit.js.map +0 -1
package/dist/livekit.js
DELETED
@@ -1,194 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
-
};
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
-
exports.createLocalTracks = exports.createLocalScreenTrack = exports.createLocalAudioTrack = exports.createLocalVideoTrack = exports.connect = exports.version = void 0;
|
16
|
-
const loglevel_1 = __importDefault(require("loglevel"));
|
17
|
-
const SignalClient_1 = require("./api/SignalClient");
|
18
|
-
const options_1 = require("./options");
|
19
|
-
const errors_1 = require("./room/errors");
|
20
|
-
const Room_1 = __importDefault(require("./room/Room"));
|
21
|
-
const LocalAudioTrack_1 = __importDefault(require("./room/track/LocalAudioTrack"));
|
22
|
-
const LocalTrack_1 = __importDefault(require("./room/track/LocalTrack"));
|
23
|
-
const LocalVideoTrack_1 = __importDefault(require("./room/track/LocalVideoTrack"));
|
24
|
-
const options_2 = require("./room/track/options");
|
25
|
-
const Track_1 = require("./room/track/Track");
|
26
|
-
var version_1 = require("./version");
|
27
|
-
Object.defineProperty(exports, "version", { enumerable: true, get: function () { return version_1.version; } });
|
28
|
-
/**
|
29
|
-
* Connects to a LiveKit room
|
30
|
-
*
|
31
|
-
* ```typescript
|
32
|
-
* connect('wss://myhost.livekit.io', token, {
|
33
|
-
* // publish audio and video tracks on joining
|
34
|
-
* audio: true,
|
35
|
-
* video: {
|
36
|
-
* resolution: VideoPresets.hd,
|
37
|
-
* facingMode: {
|
38
|
-
* ideal: "user",
|
39
|
-
* }
|
40
|
-
* }
|
41
|
-
* })
|
42
|
-
* ```
|
43
|
-
* @param url URL to LiveKit server
|
44
|
-
* @param token AccessToken, a JWT token that includes authentication and room details
|
45
|
-
* @param options
|
46
|
-
*/
|
47
|
-
function connect(url, token, options) {
|
48
|
-
var _a;
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
50
|
-
// set defaults
|
51
|
-
options || (options = {});
|
52
|
-
options.logLevel || (options.logLevel = options_1.LogLevel.info);
|
53
|
-
if (options.audio === undefined)
|
54
|
-
options.audio = false;
|
55
|
-
if (options.video === undefined)
|
56
|
-
options.video = false;
|
57
|
-
loglevel_1.default.setLevel(options.logLevel);
|
58
|
-
const config = (_a = options.rtcConfig) !== null && _a !== void 0 ? _a : {};
|
59
|
-
if (options.iceServers) {
|
60
|
-
config.iceServers = options.iceServers;
|
61
|
-
}
|
62
|
-
const client = new SignalClient_1.WSSignalClient();
|
63
|
-
const room = new Room_1.default(client, config);
|
64
|
-
// connect to room
|
65
|
-
yield room.connect(url, token, {
|
66
|
-
autoSubscribe: options === null || options === void 0 ? void 0 : options.autoSubscribe,
|
67
|
-
});
|
68
|
-
// add tracks if available
|
69
|
-
let { tracks } = options;
|
70
|
-
if (!tracks) {
|
71
|
-
if (options.audio || options.video) {
|
72
|
-
tracks = yield createLocalTracks({
|
73
|
-
audio: options.audio,
|
74
|
-
video: options.video,
|
75
|
-
});
|
76
|
-
}
|
77
|
-
}
|
78
|
-
if (tracks) {
|
79
|
-
for (let i = 0; i < tracks.length; i += 1) {
|
80
|
-
const track = tracks[i];
|
81
|
-
// translate publish options
|
82
|
-
const trackOptions = {};
|
83
|
-
if (track.kind === Track_1.Track.Kind.Video.toString()
|
84
|
-
|| track.kind === Track_1.Track.Kind.Video) {
|
85
|
-
trackOptions.videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;
|
86
|
-
trackOptions.videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;
|
87
|
-
trackOptions.simulcast = options === null || options === void 0 ? void 0 : options.simulcast;
|
88
|
-
}
|
89
|
-
else if (track.kind === Track_1.Track.Kind.Audio.toString()
|
90
|
-
|| track.kind === Track_1.Track.Kind.Audio) {
|
91
|
-
trackOptions.audioBitrate = options.audioBitrate;
|
92
|
-
}
|
93
|
-
yield room.localParticipant.publishTrack(track, trackOptions);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
return room;
|
97
|
-
});
|
98
|
-
}
|
99
|
-
exports.connect = connect;
|
100
|
-
/**
|
101
|
-
* Creates a [[LocalVideoTrack]] with getUserMedia()
|
102
|
-
* @param options
|
103
|
-
*/
|
104
|
-
function createLocalVideoTrack(options) {
|
105
|
-
return __awaiter(this, void 0, void 0, function* () {
|
106
|
-
const tracks = yield createLocalTracks({
|
107
|
-
audio: false,
|
108
|
-
video: options,
|
109
|
-
});
|
110
|
-
return tracks[0];
|
111
|
-
});
|
112
|
-
}
|
113
|
-
exports.createLocalVideoTrack = createLocalVideoTrack;
|
114
|
-
function createLocalAudioTrack(options) {
|
115
|
-
return __awaiter(this, void 0, void 0, function* () {
|
116
|
-
const tracks = yield createLocalTracks({
|
117
|
-
audio: options,
|
118
|
-
video: false,
|
119
|
-
});
|
120
|
-
return tracks[0];
|
121
|
-
});
|
122
|
-
}
|
123
|
-
exports.createLocalAudioTrack = createLocalAudioTrack;
|
124
|
-
/**
|
125
|
-
* Creates a [[LocalVideoTrack]] of screen capture with getDisplayMedia()
|
126
|
-
*/
|
127
|
-
function createLocalScreenTrack(options) {
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
129
|
-
if (options === undefined) {
|
130
|
-
options = {};
|
131
|
-
}
|
132
|
-
if (options.name === undefined) {
|
133
|
-
options.name = 'screen';
|
134
|
-
}
|
135
|
-
if (options.resolution === undefined) {
|
136
|
-
options.resolution = options_2.VideoPresets.fhd.resolution;
|
137
|
-
}
|
138
|
-
// typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232
|
139
|
-
// @ts-ignore
|
140
|
-
const stream = yield navigator.mediaDevices.getDisplayMedia({
|
141
|
-
audio: false,
|
142
|
-
video: {
|
143
|
-
width: options.resolution.width,
|
144
|
-
height: options.resolution.height,
|
145
|
-
},
|
146
|
-
});
|
147
|
-
const tracks = stream.getVideoTracks();
|
148
|
-
if (tracks.length === 0) {
|
149
|
-
throw new errors_1.TrackInvalidError('no video track found');
|
150
|
-
}
|
151
|
-
return new LocalVideoTrack_1.default(tracks[0], options.name);
|
152
|
-
});
|
153
|
-
}
|
154
|
-
exports.createLocalScreenTrack = createLocalScreenTrack;
|
155
|
-
/**
|
156
|
-
* creates a local video and audio track at the same time
|
157
|
-
* @param options
|
158
|
-
*/
|
159
|
-
function createLocalTracks(options) {
|
160
|
-
return __awaiter(this, void 0, void 0, function* () {
|
161
|
-
if (!options)
|
162
|
-
options = {};
|
163
|
-
if (options.audio === undefined)
|
164
|
-
options.audio = {};
|
165
|
-
const constraints = LocalTrack_1.default.constraintsForOptions(options);
|
166
|
-
const stream = yield navigator.mediaDevices.getUserMedia(constraints);
|
167
|
-
return stream.getTracks().map((mediaStreamTrack) => {
|
168
|
-
const isAudio = mediaStreamTrack.kind === 'audio';
|
169
|
-
let trackOptions = isAudio ? options.audio : options.video;
|
170
|
-
if (typeof trackOptions === 'boolean' || !trackOptions) {
|
171
|
-
trackOptions = {};
|
172
|
-
}
|
173
|
-
let trackConstraints;
|
174
|
-
const conOrBool = isAudio ? constraints.audio : constraints.video;
|
175
|
-
if (typeof conOrBool !== 'boolean') {
|
176
|
-
trackConstraints = conOrBool;
|
177
|
-
}
|
178
|
-
return createLocalTrack(mediaStreamTrack, trackOptions === null || trackOptions === void 0 ? void 0 : trackOptions.name, trackConstraints);
|
179
|
-
});
|
180
|
-
});
|
181
|
-
}
|
182
|
-
exports.createLocalTracks = createLocalTracks;
|
183
|
-
/** @internal */
|
184
|
-
function createLocalTrack(mediaStreamTrack, name, constraints) {
|
185
|
-
switch (mediaStreamTrack.kind) {
|
186
|
-
case 'audio':
|
187
|
-
return new LocalAudioTrack_1.default(mediaStreamTrack, name, constraints);
|
188
|
-
case 'video':
|
189
|
-
return new LocalVideoTrack_1.default(mediaStreamTrack, name, constraints);
|
190
|
-
default:
|
191
|
-
throw new errors_1.TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`);
|
192
|
-
}
|
193
|
-
}
|
194
|
-
//# sourceMappingURL=livekit.js.map
|
package/dist/livekit.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"livekit.js","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"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"}
|