Skip to content

Commit ed75eb6

Browse files
authored
fix: add crypto.randomUUID and webstream polyfills (#247)
* fix: add crypto.randomUUID and webstream polyfills * fix: fixes * fix: reorder symbol shims to the top
1 parent 77dfeaf commit ed75eb6

File tree

5 files changed

+154
-26
lines changed

5 files changed

+154
-26
lines changed

example/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ buildscript {
44
minSdkVersion = 24
55
compileSdkVersion = 34
66
targetSdkVersion = 34
7-
ndkVersion = "26.1.10909125"
7+
ndkVersion = "28.1.13356709"
88
kotlinVersion = "1.9.22"
99
}
1010
repositories {

example/yarn.lock

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2163,12 +2163,12 @@ __metadata:
21632163
languageName: node
21642164
linkType: hard
21652165

2166-
"@livekit/protocol@npm:1.36.1":
2167-
version: 1.36.1
2168-
resolution: "@livekit/protocol@npm:1.36.1"
2166+
"@livekit/protocol@npm:1.39.1":
2167+
version: 1.39.1
2168+
resolution: "@livekit/protocol@npm:1.39.1"
21692169
dependencies:
21702170
"@bufbuild/protobuf": ^1.10.0
2171-
checksum: 5868e498ba3dc8773913830ae1207145551938c6d460e6e1dc1d6f3b5b30213a4ebf59da2c4b2a72fb005e8a2eecba64a95d14cc407a03b9e166ab4ca159cecd
2171+
checksum: 2ca25994ac28c05c618272029f4af82197897545096402548b5ae75b2bd97de993d345b0cca902d2b0fb4f0110602c667844a7a540824d6a12b726f6f495b988
21722172
languageName: node
21732173
linkType: hard
21742174

@@ -6103,19 +6103,21 @@ __metadata:
61036103
linkType: hard
61046104

61056105
"livekit-client@npm:^2.9.8":
6106-
version: 2.11.4
6107-
resolution: "livekit-client@npm:2.11.4"
6106+
version: 2.13.5
6107+
resolution: "livekit-client@npm:2.13.5"
61086108
dependencies:
61096109
"@livekit/mutex": 1.1.1
6110-
"@livekit/protocol": 1.36.1
6110+
"@livekit/protocol": 1.39.1
61116111
events: ^3.3.0
61126112
loglevel: ^1.9.2
61136113
sdp-transform: ^2.15.0
61146114
ts-debounce: ^4.0.0
61156115
tslib: 2.8.1
61166116
typed-emitter: ^2.1.0
61176117
webrtc-adapter: ^9.0.1
6118-
checksum: f47222c8ac1bee5fd7c2f7bf040481110953ba0c6138a5377a57fcb4a8871264f9ff22bfc92d2377de646adc518575d2b3de3f86901992b35386438da7d4aa02
6118+
peerDependencies:
6119+
"@types/dom-mediacapture-record": ^1
6120+
checksum: aaff2e0729a7dd51b8641153043ab77825614c12af80662c4f1b98b713af7b7d2565210eed1a56c9e068c45afe4b03bb60a49de02117769868b516a9d1a3a1de
61196121
languageName: node
61206122
linkType: hard
61216123

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@
4949
"promise.allsettled": "^1.0.5",
5050
"react-native-url-polyfill": "^1.3.0",
5151
"typed-emitter": "^2.1.0",
52-
"well-known-symbols": "^4.0.0"
52+
"web-streams-polyfill": "^4.1.0",
53+
"well-known-symbols": "^4.1.0"
5354
},
5455
"devDependencies": {
5556
"@babel/core": "^7.20.0",

src/index.tsx

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'well-known-symbols/Symbol.asyncIterator/auto';
2+
import 'well-known-symbols/Symbol.iterator/auto';
13
import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';
24
import { setupURLPolyfill } from 'react-native-url-polyfill';
35
import './polyfills/EncoderDecoderTogether.min.js';
@@ -18,6 +20,7 @@ import type { LogLevel, SetLogLevelOptions } from './logger';
1820
import RNE2EEManager from './e2ee/RNE2EEManager';
1921
import RNKeyProvider, { type RNKeyProviderOptions } from './e2ee/RNKeyProvider';
2022
import { setupNativeEvents } from './events/EventEmitter';
23+
import { ReadableStream, WritableStream } from 'web-streams-polyfill';
2124

2225
/**
2326
* Registers the required globals needed for LiveKit to work.
@@ -32,8 +35,8 @@ export function registerGlobals() {
3235
fixWebrtcAdapter();
3336
shimPromiseAllSettled();
3437
shimArrayAt();
35-
shimAsyncIterator();
36-
shimIterator();
38+
shimCryptoUuid();
39+
shimWebstreams();
3740
setupNativeEvents();
3841
}
3942

@@ -91,15 +94,43 @@ function shimArrayAt() {
9194
}
9295
}
9396

94-
function shimAsyncIterator() {
95-
var shim = require('well-known-symbols/Symbol.asyncIterator/shim');
96-
shim();
97+
function shimCryptoUuid() {
98+
let crypto = global.crypto;
99+
if (typeof global.crypto?.randomUUID !== 'function') {
100+
let createRandomUUID = () => {
101+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
102+
/[xy]/g,
103+
function (c) {
104+
/* eslint-disable no-bitwise */
105+
const r = (Math.random() * 16) | 0;
106+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
107+
return v.toString(16);
108+
}
109+
) as `${string}-${string}-${string}-${string}-${string}`;
110+
};
111+
112+
if (!crypto) {
113+
crypto = {} as typeof global.crypto;
114+
global.crypto = crypto;
115+
}
116+
crypto.randomUUID = createRandomUUID;
117+
}
97118
}
98119

99-
function shimIterator() {
100-
var shim = require('well-known-symbols/Symbol.iterator/shim');
101-
shim();
120+
function shimWebstreams() {
121+
// @ts-expect-error: global.WritableStream isn't typed here.
122+
if (typeof global.WritableStream === 'undefined') {
123+
// @ts-expect-error
124+
global.WritableStream = WritableStream;
125+
}
126+
127+
// @ts-expect-error: global.ReadableStream isn't typed here.
128+
if (typeof global.ReadableStream === 'undefined') {
129+
// @ts-expect-error
130+
global.ReadableStream = ReadableStream;
131+
}
102132
}
133+
103134
export * from './hooks';
104135
export * from './components/BarVisualizer';
105136
export * from './components/LiveKitRoom';

yarn.lock

Lines changed: 102 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2486,7 +2486,8 @@ __metadata:
24862486
typed-emitter: ^2.1.0
24872487
typedoc: ^0.25.13
24882488
typescript: 5.0.4
2489-
well-known-symbols: ^4.0.0
2489+
web-streams-polyfill: ^4.1.0
2490+
well-known-symbols: ^4.1.0
24902491
peerDependencies:
24912492
"@livekit/react-native-webrtc": ^125.0.9
24922493
livekit-client: ^2.9.0
@@ -4391,6 +4392,16 @@ __metadata:
43914392
languageName: node
43924393
linkType: hard
43934394

4395+
"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2":
4396+
version: 1.0.2
4397+
resolution: "call-bind-apply-helpers@npm:1.0.2"
4398+
dependencies:
4399+
es-errors: ^1.3.0
4400+
function-bind: ^1.1.2
4401+
checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b
4402+
languageName: node
4403+
linkType: hard
4404+
43944405
"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
43954406
version: 1.0.7
43964407
resolution: "call-bind@npm:1.0.7"
@@ -5475,6 +5486,17 @@ __metadata:
54755486
languageName: node
54765487
linkType: hard
54775488

5489+
"dunder-proto@npm:^1.0.1":
5490+
version: 1.0.1
5491+
resolution: "dunder-proto@npm:1.0.1"
5492+
dependencies:
5493+
call-bind-apply-helpers: ^1.0.1
5494+
es-errors: ^1.3.0
5495+
gopd: ^1.2.0
5496+
checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90
5497+
languageName: node
5498+
linkType: hard
5499+
54785500
"duplexer3@npm:^0.1.4":
54795501
version: 0.1.5
54805502
resolution: "duplexer3@npm:0.1.5"
@@ -5670,6 +5692,13 @@ __metadata:
56705692
languageName: node
56715693
linkType: hard
56725694

5695+
"es-define-property@npm:^1.0.1":
5696+
version: 1.0.1
5697+
resolution: "es-define-property@npm:1.0.1"
5698+
checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a
5699+
languageName: node
5700+
linkType: hard
5701+
56735702
"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0":
56745703
version: 1.3.0
56755704
resolution: "es-errors@npm:1.3.0"
@@ -5725,6 +5754,15 @@ __metadata:
57255754
languageName: node
57265755
linkType: hard
57275756

5757+
"es-object-atoms@npm:^1.1.1":
5758+
version: 1.1.1
5759+
resolution: "es-object-atoms@npm:1.1.1"
5760+
dependencies:
5761+
es-errors: ^1.3.0
5762+
checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97
5763+
languageName: node
5764+
linkType: hard
5765+
57285766
"es-set-tostringtag@npm:^2.0.3":
57295767
version: 2.0.3
57305768
resolution: "es-set-tostringtag@npm:2.0.3"
@@ -6543,7 +6581,7 @@ __metadata:
65436581
languageName: node
65446582
linkType: hard
65456583

6546-
"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
6584+
"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
65476585
version: 1.2.4
65486586
resolution: "get-intrinsic@npm:1.2.4"
65496587
dependencies:
@@ -6556,6 +6594,24 @@ __metadata:
65566594
languageName: node
65576595
linkType: hard
65586596

6597+
"get-intrinsic@npm:^1.2.7":
6598+
version: 1.3.0
6599+
resolution: "get-intrinsic@npm:1.3.0"
6600+
dependencies:
6601+
call-bind-apply-helpers: ^1.0.2
6602+
es-define-property: ^1.0.1
6603+
es-errors: ^1.3.0
6604+
es-object-atoms: ^1.1.1
6605+
function-bind: ^1.1.2
6606+
get-proto: ^1.0.1
6607+
gopd: ^1.2.0
6608+
has-symbols: ^1.1.0
6609+
hasown: ^2.0.2
6610+
math-intrinsics: ^1.1.0
6611+
checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d
6612+
languageName: node
6613+
linkType: hard
6614+
65596615
"get-package-type@npm:^0.1.0":
65606616
version: 0.1.0
65616617
resolution: "get-package-type@npm:0.1.0"
@@ -6577,6 +6633,16 @@ __metadata:
65776633
languageName: node
65786634
linkType: hard
65796635

6636+
"get-proto@npm:^1.0.1":
6637+
version: 1.0.1
6638+
resolution: "get-proto@npm:1.0.1"
6639+
dependencies:
6640+
dunder-proto: ^1.0.1
6641+
es-object-atoms: ^1.0.0
6642+
checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b
6643+
languageName: node
6644+
linkType: hard
6645+
65806646
"get-stream@npm:^4.1.0":
65816647
version: 4.1.0
65826648
resolution: "get-stream@npm:4.1.0"
@@ -6834,6 +6900,13 @@ __metadata:
68346900
languageName: node
68356901
linkType: hard
68366902

6903+
"gopd@npm:^1.2.0":
6904+
version: 1.2.0
6905+
resolution: "gopd@npm:1.2.0"
6906+
checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3
6907+
languageName: node
6908+
linkType: hard
6909+
68376910
"got@npm:9.6.0, got@npm:^9.6.0":
68386911
version: 9.6.0
68396912
resolution: "got@npm:9.6.0"
@@ -6936,6 +7009,13 @@ __metadata:
69367009
languageName: node
69377010
linkType: hard
69387011

7012+
"has-symbols@npm:^1.1.0":
7013+
version: 1.1.0
7014+
resolution: "has-symbols@npm:1.1.0"
7015+
checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b
7016+
languageName: node
7017+
linkType: hard
7018+
69397019
"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2":
69407020
version: 1.0.2
69417021
resolution: "has-tostringtag@npm:1.0.2"
@@ -9014,6 +9094,13 @@ __metadata:
90149094
languageName: node
90159095
linkType: hard
90169096

9097+
"math-intrinsics@npm:^1.1.0":
9098+
version: 1.1.0
9099+
resolution: "math-intrinsics@npm:1.1.0"
9100+
checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2
9101+
languageName: node
9102+
linkType: hard
9103+
90179104
"memoize-one@npm:^5.0.0":
90189105
version: 5.2.1
90199106
resolution: "memoize-one@npm:5.2.1"
@@ -12739,6 +12826,13 @@ __metadata:
1273912826
languageName: node
1274012827
linkType: hard
1274112828

12829+
"web-streams-polyfill@npm:^4.1.0":
12830+
version: 4.1.0
12831+
resolution: "web-streams-polyfill@npm:4.1.0"
12832+
checksum: bce16f6bcca895439131fb21e4df15659a34d6f31fedd34b1680ab4fe9c438e02aabd336e4641eb1821e04a8da38dd03c6219fa8ca149ee9a002858a0d32f90d
12833+
languageName: node
12834+
linkType: hard
12835+
1274212836
"webidl-conversions@npm:^3.0.0":
1274312837
version: 3.0.1
1274412838
resolution: "webidl-conversions@npm:3.0.1"
@@ -12762,13 +12856,13 @@ __metadata:
1276212856
languageName: node
1276312857
linkType: hard
1276412858

12765-
"well-known-symbols@npm:^4.0.0":
12766-
version: 4.0.0
12767-
resolution: "well-known-symbols@npm:4.0.0"
12859+
"well-known-symbols@npm:^4.1.0":
12860+
version: 4.1.0
12861+
resolution: "well-known-symbols@npm:4.1.0"
1276812862
dependencies:
12769-
get-intrinsic: ^1.2.0
12770-
has-symbols: ^1.0.3
12771-
checksum: f8c55e9bcb79f19d818800c07cc807739a412aebb29a9d6a2ee9fa9ff01c875593120a29a2fbfd2c99220d7c1977849090e74e98eb4a7d4b1b6fc112a1d3b4f0
12863+
get-intrinsic: ^1.2.7
12864+
has-symbols: ^1.1.0
12865+
checksum: 077eb4d3258a3c05e4b877cb93f4d84e41092387ad37c500d72d464d3dd874ff5ee02f2d0a0c86185f314e575ce6b4c9e57e2baf28af1fca28c162547af47f1a
1277212866
languageName: node
1277312867
linkType: hard
1277412868

0 commit comments

Comments
 (0)