@livekit/rtc-node 0.11.0 → 0.12.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.
Files changed (153) hide show
  1. package/dist/audio_frame.cjs +94 -0
  2. package/dist/audio_frame.cjs.map +1 -0
  3. package/dist/audio_frame.js +64 -67
  4. package/dist/audio_frame.js.map +1 -1
  5. package/dist/audio_resampler.cjs +153 -0
  6. package/dist/audio_resampler.cjs.map +1 -0
  7. package/dist/audio_resampler.js +129 -134
  8. package/dist/audio_resampler.js.map +1 -1
  9. package/dist/audio_source.cjs +116 -0
  10. package/dist/audio_source.cjs.map +1 -0
  11. package/dist/audio_source.js +92 -85
  12. package/dist/audio_source.js.map +1 -1
  13. package/dist/audio_stream.cjs +104 -0
  14. package/dist/audio_stream.cjs.map +1 -0
  15. package/dist/audio_stream.js +77 -78
  16. package/dist/audio_stream.js.map +1 -1
  17. package/dist/e2ee.cjs +268 -0
  18. package/dist/e2ee.cjs.map +1 -0
  19. package/dist/e2ee.d.ts.map +1 -1
  20. package/dist/e2ee.js +244 -221
  21. package/dist/e2ee.js.map +1 -1
  22. package/dist/ffi_client.cjs +101 -0
  23. package/dist/ffi_client.cjs.map +1 -0
  24. package/dist/ffi_client.js +73 -48
  25. package/dist/ffi_client.js.map +1 -1
  26. package/dist/index.cjs +188 -0
  27. package/dist/index.cjs.map +1 -0
  28. package/dist/index.js +130 -48
  29. package/dist/index.js.map +1 -1
  30. package/dist/napi/native.d.cjs +17 -0
  31. package/dist/napi/native.d.cjs.map +1 -0
  32. package/dist/napi/native.d.js +1 -0
  33. package/dist/napi/native.d.js.map +1 -0
  34. package/dist/napi/native.d.ts +5 -5
  35. package/dist/native.cjs +301 -0
  36. package/dist/native.d.ts +19 -0
  37. package/dist/native.js +15 -0
  38. package/dist/participant.cjs +388 -0
  39. package/dist/participant.cjs.map +1 -0
  40. package/dist/participant.js +363 -339
  41. package/dist/participant.js.map +1 -1
  42. package/dist/proto/audio_frame_pb.cjs +193 -0
  43. package/dist/proto/audio_frame_pb.cjs.map +1 -0
  44. package/dist/proto/audio_frame_pb.d.ts +8 -8
  45. package/dist/proto/audio_frame_pb.d.ts.map +1 -1
  46. package/dist/proto/audio_frame_pb.js +122 -322
  47. package/dist/proto/audio_frame_pb.js.map +1 -1
  48. package/dist/proto/e2ee_pb.cjs +131 -0
  49. package/dist/proto/e2ee_pb.cjs.map +1 -0
  50. package/dist/proto/e2ee_pb.js +76 -202
  51. package/dist/proto/e2ee_pb.js.map +1 -1
  52. package/dist/proto/ffi_pb.cjs +76 -0
  53. package/dist/proto/ffi_pb.cjs.map +1 -0
  54. package/dist/proto/ffi_pb.d.ts +6 -6
  55. package/dist/proto/ffi_pb.d.ts.map +1 -1
  56. package/dist/proto/ffi_pb.js +39 -98
  57. package/dist/proto/ffi_pb.js.map +1 -1
  58. package/dist/proto/handle_pb.cjs +33 -0
  59. package/dist/proto/handle_pb.cjs.map +1 -0
  60. package/dist/proto/handle_pb.js +6 -22
  61. package/dist/proto/handle_pb.js.map +1 -1
  62. package/dist/proto/participant_pb.cjs +50 -0
  63. package/dist/proto/participant_pb.cjs.map +1 -0
  64. package/dist/proto/participant_pb.d.ts +1 -1
  65. package/dist/proto/participant_pb.d.ts.map +1 -1
  66. package/dist/proto/participant_pb.js +20 -58
  67. package/dist/proto/participant_pb.js.map +1 -1
  68. package/dist/proto/room_pb.cjs +370 -0
  69. package/dist/proto/room_pb.cjs.map +1 -0
  70. package/dist/proto/room_pb.d.ts +16 -16
  71. package/dist/proto/room_pb.d.ts.map +1 -1
  72. package/dist/proto/room_pb.js +245 -638
  73. package/dist/proto/room_pb.js.map +1 -1
  74. package/dist/proto/rpc_pb.cjs +63 -0
  75. package/dist/proto/rpc_pb.cjs.map +1 -0
  76. package/dist/proto/rpc_pb.js +26 -72
  77. package/dist/proto/rpc_pb.js.map +1 -1
  78. package/dist/proto/stats_pb.cjs +256 -0
  79. package/dist/proto/stats_pb.cjs.map +1 -0
  80. package/dist/proto/stats_pb.js +175 -456
  81. package/dist/proto/stats_pb.js.map +1 -1
  82. package/dist/proto/track_pb.cjs +116 -0
  83. package/dist/proto/track_pb.cjs.map +1 -0
  84. package/dist/proto/track_pb.d.ts +3 -3
  85. package/dist/proto/track_pb.d.ts.map +1 -1
  86. package/dist/proto/track_pb.js +68 -174
  87. package/dist/proto/track_pb.js.map +1 -1
  88. package/dist/proto/video_frame_pb.cjs +161 -0
  89. package/dist/proto/video_frame_pb.cjs.map +1 -0
  90. package/dist/proto/video_frame_pb.d.ts +5 -5
  91. package/dist/proto/video_frame_pb.d.ts.map +1 -1
  92. package/dist/proto/video_frame_pb.js +103 -271
  93. package/dist/proto/video_frame_pb.js.map +1 -1
  94. package/dist/room.cjs +440 -0
  95. package/dist/room.cjs.map +1 -0
  96. package/dist/room.js +384 -373
  97. package/dist/room.js.map +1 -1
  98. package/dist/rpc.cjs +89 -0
  99. package/dist/rpc.cjs.map +1 -0
  100. package/dist/rpc.js +59 -63
  101. package/dist/rpc.js.map +1 -1
  102. package/dist/track.cjs +100 -0
  103. package/dist/track.cjs.map +1 -0
  104. package/dist/track.js +66 -62
  105. package/dist/track.js.map +1 -1
  106. package/dist/track_publication.cjs +106 -0
  107. package/dist/track_publication.cjs.map +1 -0
  108. package/dist/track_publication.js +76 -74
  109. package/dist/track_publication.js.map +1 -1
  110. package/dist/transcription.cjs +17 -0
  111. package/dist/transcription.cjs.map +1 -0
  112. package/dist/transcription.js +0 -1
  113. package/dist/transcription.js.map +1 -1
  114. package/dist/types.cjs +17 -0
  115. package/dist/types.cjs.map +1 -0
  116. package/dist/types.js +0 -1
  117. package/dist/types.js.map +1 -1
  118. package/dist/version.cjs +29 -0
  119. package/dist/version.cjs.map +1 -0
  120. package/dist/version.d.ts +1 -1
  121. package/dist/version.js +4 -1
  122. package/dist/version.js.map +1 -1
  123. package/dist/video_frame.cjs +242 -0
  124. package/dist/video_frame.cjs.map +1 -0
  125. package/dist/video_frame.js +212 -201
  126. package/dist/video_frame.js.map +1 -1
  127. package/dist/video_source.cjs +63 -0
  128. package/dist/video_source.cjs.map +1 -0
  129. package/dist/video_source.d.ts.map +1 -1
  130. package/dist/video_source.js +42 -37
  131. package/dist/video_source.js.map +1 -1
  132. package/dist/video_stream.cjs +103 -0
  133. package/dist/video_stream.cjs.map +1 -0
  134. package/dist/video_stream.js +76 -77
  135. package/dist/video_stream.js.map +1 -1
  136. package/package.json +18 -9
  137. package/src/audio_frame.ts +2 -2
  138. package/src/audio_source.ts +2 -2
  139. package/src/e2ee.ts +2 -2
  140. package/src/napi/native.d.ts +5 -5
  141. package/src/proto/audio_frame_pb.ts +12 -12
  142. package/src/proto/e2ee_pb.ts +1 -1
  143. package/src/proto/ffi_pb.ts +13 -13
  144. package/src/proto/handle_pb.ts +1 -1
  145. package/src/proto/participant_pb.ts +3 -3
  146. package/src/proto/room_pb.ts +24 -24
  147. package/src/proto/rpc_pb.ts +1 -1
  148. package/src/proto/stats_pb.ts +1 -1
  149. package/src/proto/track_pb.ts +7 -7
  150. package/src/proto/video_frame_pb.ts +9 -9
  151. package/src/version.ts +1 -1
  152. package/src/video_frame.ts +1 -1
  153. package/src/video_source.ts +5 -1
package/dist/e2ee.js CHANGED
@@ -1,229 +1,252 @@
1
- // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
- //
3
- // SPDX-License-Identifier: Apache-2.0
4
- import { create } from '@bufbuild/protobuf';
5
- import { FfiClient } from './ffi_client.js';
6
- import { E2eeManagerSetEnabledRequestSchema, E2eeRequestSchema, EncryptionType, FrameCryptorSetEnabledRequestSchema, FrameCryptorSetKeyIndexRequestSchema, GetKeyRequestSchema, GetSharedKeyRequestSchema, RatchetKeyRequestSchema, RatchetSharedKeyRequestSchema, SetKeyRequestSchema, SetSharedKeyRequestSchema, } from './proto/e2ee_pb.js';
7
- const DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');
1
+ import { create } from "@bufbuild/protobuf";
2
+ import { FfiClient } from "./ffi_client.js";
3
+ import {
4
+ E2eeManagerSetEnabledRequestSchema,
5
+ E2eeRequestSchema,
6
+ EncryptionType,
7
+ FrameCryptorSetEnabledRequestSchema,
8
+ FrameCryptorSetKeyIndexRequestSchema,
9
+ GetKeyRequestSchema,
10
+ GetSharedKeyRequestSchema,
11
+ RatchetKeyRequestSchema,
12
+ RatchetSharedKeyRequestSchema,
13
+ SetKeyRequestSchema,
14
+ SetSharedKeyRequestSchema
15
+ } from "./proto/e2ee_pb.js";
16
+ const DEFAULT_RATCHET_SALT = new TextEncoder().encode("LKFrameEncryptionKey");
8
17
  const DEFAULT_RATCHET_WINDOW_SIZE = 16;
9
18
  const DEFAULT_FAILURE_TOLERANCE = -1;
10
- export const defaultKeyProviderOptions = {
11
- ratchetSalt: DEFAULT_RATCHET_SALT,
12
- ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,
13
- failureTolerance: DEFAULT_FAILURE_TOLERANCE,
19
+ const defaultKeyProviderOptions = {
20
+ ratchetSalt: DEFAULT_RATCHET_SALT,
21
+ ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,
22
+ failureTolerance: DEFAULT_FAILURE_TOLERANCE
14
23
  };
15
- export const defaultE2EEOptions = {
16
- keyProviderOptions: defaultKeyProviderOptions,
17
- encryptionType: EncryptionType.GCM,
24
+ const defaultE2EEOptions = {
25
+ keyProviderOptions: defaultKeyProviderOptions,
26
+ encryptionType: EncryptionType.GCM
18
27
  };
19
- export class KeyProvider {
20
- /** internal */
21
- constructor(roomHandle, opts) {
22
- this.roomHandle = roomHandle;
23
- this.options = opts;
24
- }
25
- setSharedKey(sharedKey, keyIndex) {
26
- const req = create(E2eeRequestSchema, {
27
- roomHandle: this.roomHandle,
28
- message: {
29
- case: 'setSharedKey',
30
- value: create(SetSharedKeyRequestSchema, {
31
- keyIndex: keyIndex,
32
- sharedKey: sharedKey,
33
- }),
34
- },
35
- });
36
- FfiClient.instance.request({
37
- message: {
38
- case: 'e2ee',
39
- value: req,
40
- },
41
- });
42
- }
43
- exportSharedKey(keyIndex) {
44
- const req = create(E2eeRequestSchema, {
45
- roomHandle: this.roomHandle,
46
- message: {
47
- case: 'getSharedKey',
48
- value: create(GetSharedKeyRequestSchema, {
49
- keyIndex: keyIndex,
50
- }),
51
- },
52
- });
53
- const res = FfiClient.instance.request({
54
- message: {
55
- case: 'e2ee',
56
- value: req,
57
- },
58
- });
59
- return res.message.value.key;
60
- }
61
- ratchetSharedKey(keyIndex) {
62
- const req = create(E2eeRequestSchema, {
63
- roomHandle: this.roomHandle,
64
- message: {
65
- case: 'ratchetSharedKey',
66
- value: create(RatchetSharedKeyRequestSchema, {
67
- keyIndex: keyIndex,
68
- }),
69
- },
70
- });
71
- const res = FfiClient.instance.request({
72
- message: {
73
- case: 'e2ee',
74
- value: req,
75
- },
76
- });
77
- return res.message.value.newKey;
78
- }
79
- setKey(participantIdentity, keyIndex) {
80
- const req = create(E2eeRequestSchema, {
81
- roomHandle: this.roomHandle,
82
- message: {
83
- case: 'setKey',
84
- value: create(SetKeyRequestSchema, {
85
- keyIndex: keyIndex,
86
- participantIdentity: participantIdentity,
87
- }),
88
- },
89
- });
90
- FfiClient.instance.request({
91
- message: {
92
- case: 'e2ee',
93
- value: req,
94
- },
95
- });
96
- }
97
- exportKey(participantIdentity, keyIndex) {
98
- const req = create(E2eeRequestSchema, {
99
- roomHandle: this.roomHandle,
100
- message: {
101
- case: 'getKey',
102
- value: create(GetKeyRequestSchema, {
103
- keyIndex: keyIndex,
104
- participantIdentity: participantIdentity,
105
- }),
106
- },
107
- });
108
- const res = FfiClient.instance.request({
109
- message: {
110
- case: 'e2ee',
111
- value: req,
112
- },
113
- });
114
- return res.message.value.key;
115
- }
116
- ratchetKey(participantIdentity, keyIndex) {
117
- const req = create(E2eeRequestSchema, {
118
- roomHandle: this.roomHandle,
119
- message: {
120
- case: 'ratchetKey',
121
- value: create(RatchetKeyRequestSchema, {
122
- keyIndex: keyIndex,
123
- participantIdentity: participantIdentity,
124
- }),
125
- },
126
- });
127
- const res = FfiClient.instance.request({
128
- message: {
129
- case: 'e2ee',
130
- value: req,
131
- },
132
- });
133
- return res.message.value.newKey;
134
- }
28
+ class KeyProvider {
29
+ /** internal */
30
+ constructor(roomHandle, opts) {
31
+ this.roomHandle = roomHandle;
32
+ this.options = opts;
33
+ }
34
+ setSharedKey(sharedKey, keyIndex) {
35
+ const req = create(E2eeRequestSchema, {
36
+ roomHandle: this.roomHandle,
37
+ message: {
38
+ case: "setSharedKey",
39
+ value: create(SetSharedKeyRequestSchema, {
40
+ keyIndex,
41
+ sharedKey
42
+ })
43
+ }
44
+ });
45
+ FfiClient.instance.request({
46
+ message: {
47
+ case: "e2ee",
48
+ value: req
49
+ }
50
+ });
51
+ }
52
+ exportSharedKey(keyIndex) {
53
+ const req = create(E2eeRequestSchema, {
54
+ roomHandle: this.roomHandle,
55
+ message: {
56
+ case: "getSharedKey",
57
+ value: create(GetSharedKeyRequestSchema, {
58
+ keyIndex
59
+ })
60
+ }
61
+ });
62
+ const res = FfiClient.instance.request({
63
+ message: {
64
+ case: "e2ee",
65
+ value: req
66
+ }
67
+ });
68
+ return res.message.value.key;
69
+ }
70
+ ratchetSharedKey(keyIndex) {
71
+ const req = create(E2eeRequestSchema, {
72
+ roomHandle: this.roomHandle,
73
+ message: {
74
+ case: "ratchetSharedKey",
75
+ value: create(RatchetSharedKeyRequestSchema, {
76
+ keyIndex
77
+ })
78
+ }
79
+ });
80
+ const res = FfiClient.instance.request({
81
+ message: {
82
+ case: "e2ee",
83
+ value: req
84
+ }
85
+ });
86
+ return res.message.value.newKey;
87
+ }
88
+ setKey(participantIdentity, keyIndex) {
89
+ const req = create(E2eeRequestSchema, {
90
+ roomHandle: this.roomHandle,
91
+ message: {
92
+ case: "setKey",
93
+ value: create(SetKeyRequestSchema, {
94
+ keyIndex,
95
+ participantIdentity
96
+ })
97
+ }
98
+ });
99
+ FfiClient.instance.request({
100
+ message: {
101
+ case: "e2ee",
102
+ value: req
103
+ }
104
+ });
105
+ }
106
+ exportKey(participantIdentity, keyIndex) {
107
+ const req = create(E2eeRequestSchema, {
108
+ roomHandle: this.roomHandle,
109
+ message: {
110
+ case: "getKey",
111
+ value: create(GetKeyRequestSchema, {
112
+ keyIndex,
113
+ participantIdentity
114
+ })
115
+ }
116
+ });
117
+ const res = FfiClient.instance.request({
118
+ message: {
119
+ case: "e2ee",
120
+ value: req
121
+ }
122
+ });
123
+ return res.message.value.key;
124
+ }
125
+ ratchetKey(participantIdentity, keyIndex) {
126
+ const req = create(E2eeRequestSchema, {
127
+ roomHandle: this.roomHandle,
128
+ message: {
129
+ case: "ratchetKey",
130
+ value: create(RatchetKeyRequestSchema, {
131
+ keyIndex,
132
+ participantIdentity
133
+ })
134
+ }
135
+ });
136
+ const res = FfiClient.instance.request({
137
+ message: {
138
+ case: "e2ee",
139
+ value: req
140
+ }
141
+ });
142
+ return res.message.value.newKey;
143
+ }
135
144
  }
136
- export class FrameCryptor {
137
- constructor(roomHandle, participantIdentity, keyIndex, enabled) {
138
- this.roomHandle = 0n;
139
- this.roomHandle = roomHandle;
140
- this.participantIdentity = participantIdentity;
141
- this.keyIndex = keyIndex;
142
- this.enabled = enabled;
143
- }
144
- setEnabled(enabled) {
145
- this.enabled = enabled;
146
- const req = create(E2eeRequestSchema, {
147
- roomHandle: this.roomHandle,
148
- message: {
149
- case: 'cryptorSetEnabled',
150
- value: create(FrameCryptorSetEnabledRequestSchema, {
151
- participantIdentity: this.participantIdentity,
152
- enabled: this.enabled,
153
- }),
154
- },
155
- });
156
- FfiClient.instance.request({
157
- message: {
158
- case: 'e2ee',
159
- value: req,
160
- },
161
- });
162
- }
163
- setKeyIndex(keyIndex) {
164
- this.keyIndex = keyIndex;
165
- const req = create(E2eeRequestSchema, {
166
- roomHandle: this.roomHandle,
167
- message: {
168
- case: 'cryptorSetKeyIndex',
169
- value: create(FrameCryptorSetKeyIndexRequestSchema, {
170
- participantIdentity: this.participantIdentity,
171
- keyIndex: this.keyIndex,
172
- }),
173
- },
174
- });
175
- FfiClient.instance.request({
176
- message: {
177
- case: 'e2ee',
178
- value: req,
179
- },
180
- });
181
- }
145
+ class FrameCryptor {
146
+ constructor(roomHandle, participantIdentity, keyIndex, enabled) {
147
+ this.roomHandle = BigInt(0);
148
+ this.roomHandle = roomHandle;
149
+ this.participantIdentity = participantIdentity;
150
+ this.keyIndex = keyIndex;
151
+ this.enabled = enabled;
152
+ }
153
+ setEnabled(enabled) {
154
+ this.enabled = enabled;
155
+ const req = create(E2eeRequestSchema, {
156
+ roomHandle: this.roomHandle,
157
+ message: {
158
+ case: "cryptorSetEnabled",
159
+ value: create(FrameCryptorSetEnabledRequestSchema, {
160
+ participantIdentity: this.participantIdentity,
161
+ enabled: this.enabled
162
+ })
163
+ }
164
+ });
165
+ FfiClient.instance.request({
166
+ message: {
167
+ case: "e2ee",
168
+ value: req
169
+ }
170
+ });
171
+ }
172
+ setKeyIndex(keyIndex) {
173
+ this.keyIndex = keyIndex;
174
+ const req = create(E2eeRequestSchema, {
175
+ roomHandle: this.roomHandle,
176
+ message: {
177
+ case: "cryptorSetKeyIndex",
178
+ value: create(FrameCryptorSetKeyIndexRequestSchema, {
179
+ participantIdentity: this.participantIdentity,
180
+ keyIndex: this.keyIndex
181
+ })
182
+ }
183
+ });
184
+ FfiClient.instance.request({
185
+ message: {
186
+ case: "e2ee",
187
+ value: req
188
+ }
189
+ });
190
+ }
182
191
  }
183
- export class E2EEManager {
184
- constructor(roomHandle, opts) {
185
- this.roomHandle = 0n;
186
- this.roomHandle = roomHandle;
187
- this.enabled = opts !== undefined;
188
- opts ?? (opts = defaultE2EEOptions);
189
- const options = { ...defaultE2EEOptions, ...opts };
190
- this.options = options;
191
- this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);
192
- }
193
- setEnabled(enabled) {
194
- this.enabled = enabled;
195
- const req = create(E2eeRequestSchema, {
196
- roomHandle: this.roomHandle,
197
- message: {
198
- case: 'managerSetEnabled',
199
- value: create(E2eeManagerSetEnabledRequestSchema, {
200
- enabled: this.enabled,
201
- }),
202
- },
203
- });
204
- FfiClient.instance.request({
205
- message: {
206
- case: 'e2ee',
207
- value: req,
208
- },
209
- });
210
- }
211
- frameCryptors() {
212
- const req = create(E2eeRequestSchema, {
213
- roomHandle: this.roomHandle,
214
- message: {
215
- case: 'managerGetFrameCryptors',
216
- value: {},
217
- },
218
- });
219
- const res = FfiClient.instance.request({
220
- message: {
221
- case: 'e2ee',
222
- value: req,
223
- },
224
- });
225
- const frameCryptors = res.message.value.frameCryptors.map((cryptor) => new FrameCryptor(this.roomHandle, cryptor.participantIdentity, cryptor.keyIndex, cryptor.enabled));
226
- return frameCryptors;
227
- }
192
+ class E2EEManager {
193
+ constructor(roomHandle, opts) {
194
+ this.roomHandle = BigInt(0);
195
+ this.roomHandle = roomHandle;
196
+ this.enabled = opts !== void 0;
197
+ opts ??= defaultE2EEOptions;
198
+ const options = { ...defaultE2EEOptions, ...opts };
199
+ this.options = options;
200
+ this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);
201
+ }
202
+ setEnabled(enabled) {
203
+ this.enabled = enabled;
204
+ const req = create(E2eeRequestSchema, {
205
+ roomHandle: this.roomHandle,
206
+ message: {
207
+ case: "managerSetEnabled",
208
+ value: create(E2eeManagerSetEnabledRequestSchema, {
209
+ enabled: this.enabled
210
+ })
211
+ }
212
+ });
213
+ FfiClient.instance.request({
214
+ message: {
215
+ case: "e2ee",
216
+ value: req
217
+ }
218
+ });
219
+ }
220
+ frameCryptors() {
221
+ const req = create(E2eeRequestSchema, {
222
+ roomHandle: this.roomHandle,
223
+ message: {
224
+ case: "managerGetFrameCryptors",
225
+ value: {}
226
+ }
227
+ });
228
+ const res = FfiClient.instance.request({
229
+ message: {
230
+ case: "e2ee",
231
+ value: req
232
+ }
233
+ });
234
+ const frameCryptors = res.message.value.frameCryptors.map(
235
+ (cryptor) => new FrameCryptor(
236
+ this.roomHandle,
237
+ cryptor.participantIdentity,
238
+ cryptor.keyIndex,
239
+ cryptor.enabled
240
+ )
241
+ );
242
+ return frameCryptors;
243
+ }
228
244
  }
245
+ export {
246
+ E2EEManager,
247
+ FrameCryptor,
248
+ KeyProvider,
249
+ defaultE2EEOptions,
250
+ defaultKeyProviderOptions
251
+ };
229
252
  //# sourceMappingURL=e2ee.js.map
package/dist/e2ee.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"e2ee.js","sourceRoot":"","sources":["../src/e2ee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { create } from '@bufbuild/protobuf';\nimport { FfiClient } from './ffi_client.js';\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from './proto/e2ee_pb.js';\nimport {\n E2eeManagerSetEnabledRequestSchema,\n E2eeRequestSchema,\n EncryptionType,\n FrameCryptorSetEnabledRequestSchema,\n FrameCryptorSetKeyIndexRequestSchema,\n GetKeyRequestSchema,\n GetSharedKeyRequestSchema,\n RatchetKeyRequestSchema,\n RatchetSharedKeyRequestSchema,\n SetKeyRequestSchema,\n SetSharedKeyRequestSchema,\n} from './proto/e2ee_pb.js';\n\nconst DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');\nconst DEFAULT_RATCHET_WINDOW_SIZE = 16;\nconst DEFAULT_FAILURE_TOLERANCE = -1;\n\nexport interface KeyProviderOptions {\n sharedKey?: Uint8Array;\n ratchetSalt: Uint8Array;\n ratchetWindowSize: number;\n failureTolerance: number;\n}\n\nexport const defaultKeyProviderOptions: KeyProviderOptions = {\n ratchetSalt: DEFAULT_RATCHET_SALT,\n ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,\n failureTolerance: DEFAULT_FAILURE_TOLERANCE,\n};\n\nexport interface E2EEOptions {\n keyProviderOptions: KeyProviderOptions;\n encryptionType: EncryptionType;\n}\n\nexport const defaultE2EEOptions: E2EEOptions = {\n keyProviderOptions: defaultKeyProviderOptions,\n encryptionType: EncryptionType.GCM,\n};\n\nexport class KeyProvider {\n private roomHandle: bigint;\n options: KeyProviderOptions;\n\n /** internal */\n constructor(roomHandle: bigint, opts: KeyProviderOptions) {\n this.roomHandle = roomHandle;\n this.options = opts;\n }\n\n setSharedKey(sharedKey: Uint8Array, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setSharedKey',\n value: create(SetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n sharedKey: sharedKey,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getSharedKey',\n value: create(GetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetSharedKeyResponse).key;\n }\n\n ratchetSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetSharedKey',\n value: create(RatchetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetSharedKeyResponse).newKey;\n }\n\n setKey(participantIdentity: string, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setKey',\n value: create(SetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getKey',\n value: create(GetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetKeyResponse).key;\n }\n\n ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetKey',\n value: create(RatchetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetKeyResponse).newKey;\n }\n}\n\nexport class FrameCryptor {\n private roomHandle = BigInt(0);\n participantIdentity: string;\n keyIndex: number;\n enabled: boolean;\n\n constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean) {\n this.roomHandle = roomHandle;\n this.participantIdentity = participantIdentity;\n this.keyIndex = keyIndex;\n this.enabled = enabled;\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetEnabled',\n value: create(FrameCryptorSetEnabledRequestSchema, {\n participantIdentity: this.participantIdentity,\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n setKeyIndex(keyIndex: number) {\n this.keyIndex = keyIndex;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetKeyIndex',\n value: create(FrameCryptorSetKeyIndexRequestSchema, {\n participantIdentity: this.participantIdentity,\n keyIndex: this.keyIndex,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n}\n\nexport class E2EEManager {\n private roomHandle = BigInt(0);\n private options: E2EEOptions;\n private keyProvider?: KeyProvider;\n\n enabled: boolean;\n\n constructor(roomHandle: bigint, opts?: E2EEOptions) {\n this.roomHandle = roomHandle;\n this.enabled = opts !== undefined;\n\n opts ??= defaultE2EEOptions;\n const options = { ...defaultE2EEOptions, ...opts };\n\n this.options = options;\n this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerSetEnabled',\n value: create(E2eeManagerSetEnabledRequestSchema, {\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n frameCryptors(): FrameCryptor[] {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerGetFrameCryptors',\n value: {},\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n const frameCryptors = (\n res.message.value as E2eeManagerGetFrameCryptorsResponse\n ).frameCryptors.map(\n (cryptor) =>\n new FrameCryptor(\n this.roomHandle,\n cryptor.participantIdentity,\n cryptor.keyIndex,\n cryptor.enabled,\n ),\n );\n\n return frameCryptors;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ffi_client_exports = {};
30
+ __export(ffi_client_exports, {
31
+ FfiClient: () => FfiClient,
32
+ FfiClientEvent: () => FfiClientEvent,
33
+ FfiEvent: () => import_ffi_pb.FfiEvent,
34
+ FfiHandle: () => import_native.FfiHandle,
35
+ FfiRequest: () => import_ffi_pb.FfiRequest,
36
+ FfiResponse: () => import_ffi_pb.FfiResponse,
37
+ dispose: () => import_native.livekitDispose
38
+ });
39
+ module.exports = __toCommonJS(ffi_client_exports);
40
+ var import_protobuf = require("@bufbuild/protobuf");
41
+ var import_events = __toESM(require("events"), 1);
42
+ var import_native = require("./napi/native.cjs");
43
+ var import_ffi_pb = require("./proto/ffi_pb.cjs");
44
+ var import_version = require("./version.cjs");
45
+ var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
46
+ FfiClientEvent2["FfiEvent"] = "ffi_event";
47
+ return FfiClientEvent2;
48
+ })(FfiClientEvent || {});
49
+ class FfiClient extends import_events.default {
50
+ /** @internal */
51
+ static get instance() {
52
+ if (!FfiClient._client) FfiClient._client = new FfiClient();
53
+ return FfiClient._client;
54
+ }
55
+ constructor() {
56
+ super();
57
+ this.setMaxListeners(0);
58
+ (0, import_native.livekitInitialize)(
59
+ (event_data) => {
60
+ const event = (0, import_protobuf.fromBinary)(import_ffi_pb.FfiEventSchema, event_data);
61
+ this.emit("ffi_event" /* FfiEvent */, event);
62
+ },
63
+ true,
64
+ import_version.SDK_VERSION
65
+ );
66
+ }
67
+ request(req) {
68
+ const request = (0, import_protobuf.create)(import_ffi_pb.FfiRequestSchema, req);
69
+ const req_data = (0, import_protobuf.toBinary)(import_ffi_pb.FfiRequestSchema, request);
70
+ const res_data = (0, import_native.livekitFfiRequest)(req_data);
71
+ return (0, import_protobuf.fromBinary)(import_ffi_pb.FfiResponseSchema, res_data).message.value;
72
+ }
73
+ copyBuffer(ptr, len) {
74
+ return (0, import_native.livekitCopyBuffer)(ptr, len);
75
+ }
76
+ retrievePtr(data) {
77
+ return (0, import_native.livekitRetrievePtr)(data);
78
+ }
79
+ async waitFor(predicate) {
80
+ return new Promise((resolve) => {
81
+ const listener = (ev) => {
82
+ if (predicate(ev)) {
83
+ this.off("ffi_event" /* FfiEvent */, listener);
84
+ resolve(ev.message.value);
85
+ }
86
+ };
87
+ this.on("ffi_event" /* FfiEvent */, listener);
88
+ });
89
+ }
90
+ }
91
+ // Annotate the CommonJS export names for ESM import in node:
92
+ 0 && (module.exports = {
93
+ FfiClient,
94
+ FfiClientEvent,
95
+ FfiEvent,
96
+ FfiHandle,
97
+ FfiRequest,
98
+ FfiResponse,
99
+ dispose
100
+ });
101
+ //# sourceMappingURL=ffi_client.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { MessageInitShape } from '@bufbuild/protobuf';\nimport { create, fromBinary, toBinary } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport {\n FfiEvent,\n FfiEventSchema,\n FfiRequest,\n FfiRequestSchema,\n FfiResponse,\n FfiResponseSchema,\n} from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, FfiEvent, FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n static _client?: FfiClient;\n\n /** @internal */\n static get instance(): FfiClient {\n if (!FfiClient._client) FfiClient._client = new FfiClient();\n\n return FfiClient._client;\n }\n\n constructor() {\n super();\n this.setMaxListeners(0);\n\n livekitInitialize(\n (event_data: Uint8Array) => {\n const event = fromBinary(FfiEventSchema, event_data);\n this.emit(FfiClientEvent.FfiEvent, event);\n },\n true,\n SDK_VERSION,\n );\n }\n\n request<T>(req: MessageInitShape<typeof FfiRequestSchema>): T {\n const request = create(FfiRequestSchema, req);\n const req_data = toBinary(FfiRequestSchema, request);\n const res_data = livekitFfiRequest(req_data);\n return fromBinary(FfiResponseSchema, res_data).message.value as T;\n }\n\n copyBuffer(ptr: bigint, len: number): Uint8Array {\n return livekitCopyBuffer(ptr, len);\n }\n\n retrievePtr(data: Uint8Array): bigint {\n return livekitRetrievePtr(data);\n }\n\n async waitFor<T>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,sBAA6C;AAE7C,oBAAyB;AACzB,oBAOO;AACP,oBAOO;AACP,qBAA4B;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AAIL,MAAM,kBAAmB,cAAAC,QAA4D;AAAA;AAAA,EAI1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,UAAU,QAAS,WAAU,UAAU,IAAI,UAAU;AAE1D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,YAAQ,4BAAW,8BAAgB,UAAU;AACnD,aAAK,KAAK,4BAAyB,KAAK;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAW,KAAmD;AAC5D,UAAM,cAAU,wBAAO,gCAAkB,GAAG;AAC5C,UAAM,eAAW,0BAAS,gCAAkB,OAAO;AACnD,UAAM,eAAW,iCAAkB,QAAQ;AAC3C,eAAO,4BAAW,iCAAmB,QAAQ,EAAE,QAAQ;AAAA,EACzD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,eAAO,iCAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,eAAO,kCAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","EventEmitter"]}