@cloudflare/realtimekit-react-native 0.1.4-staging.1 → 0.1.4-staging.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.
Files changed (79) hide show
  1. package/lib/commonjs/AudioSampleHandler.js +61 -0
  2. package/lib/commonjs/AudioSampleHandler.js.map +1 -0
  3. package/lib/commonjs/BackgroundHandler.js +109 -0
  4. package/lib/commonjs/BackgroundHandler.js.map +1 -0
  5. package/lib/commonjs/DeviceInfo.js +39 -0
  6. package/lib/commonjs/DeviceInfo.js.map +1 -0
  7. package/lib/commonjs/LocalMediaError.js +18 -0
  8. package/lib/commonjs/LocalMediaError.js.map +1 -0
  9. package/lib/commonjs/LocalMediaHandler.js +785 -0
  10. package/lib/commonjs/LocalMediaHandler.js.map +1 -0
  11. package/lib/commonjs/LocalMediaInterfaces.js +2 -0
  12. package/lib/commonjs/LocalMediaInterfaces.js.map +1 -0
  13. package/lib/commonjs/LocalMediaUtils.js +298 -0
  14. package/lib/commonjs/LocalMediaUtils.js.map +1 -0
  15. package/lib/commonjs/NativeAudioManager.js +72 -0
  16. package/lib/commonjs/NativeAudioManager.js.map +1 -0
  17. package/lib/commonjs/PermissionHandler.js +157 -0
  18. package/lib/commonjs/PermissionHandler.js.map +1 -0
  19. package/lib/commonjs/ReactContext.js +116 -0
  20. package/lib/commonjs/ReactContext.js.map +1 -0
  21. package/lib/commonjs/ReactHooks.js +99 -0
  22. package/lib/commonjs/ReactHooks.js.map +1 -0
  23. package/lib/commonjs/index.js +95 -0
  24. package/lib/commonjs/index.js.map +1 -0
  25. package/lib/commonjs/utils/crypto.js +76 -0
  26. package/lib/commonjs/utils/crypto.js.map +1 -0
  27. package/lib/module/AudioSampleHandler.js +54 -0
  28. package/lib/module/AudioSampleHandler.js.map +1 -0
  29. package/lib/module/BackgroundHandler.js +103 -0
  30. package/lib/module/BackgroundHandler.js.map +1 -0
  31. package/lib/module/DeviceInfo.js +32 -0
  32. package/lib/module/DeviceInfo.js.map +1 -0
  33. package/lib/module/LocalMediaError.js +11 -0
  34. package/lib/module/LocalMediaError.js.map +1 -0
  35. package/lib/module/LocalMediaHandler.js +778 -0
  36. package/lib/module/LocalMediaHandler.js.map +1 -0
  37. package/lib/module/LocalMediaInterfaces.js +2 -0
  38. package/lib/module/LocalMediaInterfaces.js.map +1 -0
  39. package/lib/module/LocalMediaUtils.js +290 -0
  40. package/lib/module/LocalMediaUtils.js.map +1 -0
  41. package/lib/module/NativeAudioManager.js +65 -0
  42. package/lib/module/NativeAudioManager.js.map +1 -0
  43. package/lib/module/PermissionHandler.js +149 -0
  44. package/lib/module/PermissionHandler.js.map +1 -0
  45. package/lib/module/ReactContext.js +107 -0
  46. package/lib/module/ReactContext.js.map +1 -0
  47. package/lib/module/ReactHooks.js +75 -0
  48. package/lib/module/ReactHooks.js.map +1 -0
  49. package/lib/{src → module}/index.js +32 -32
  50. package/lib/module/index.js.map +1 -0
  51. package/lib/module/utils/crypto.js +74 -0
  52. package/lib/module/utils/crypto.js.map +1 -0
  53. package/lib/{src → typescript/src}/LocalMediaHandler.d.ts +0 -4
  54. package/package.json +5 -4
  55. package/lib/package.json +0 -168
  56. package/lib/src/AudioSampleHandler.js +0 -57
  57. package/lib/src/BackgroundHandler.js +0 -100
  58. package/lib/src/DeviceInfo.js +0 -27
  59. package/lib/src/LocalMediaError.js +0 -6
  60. package/lib/src/LocalMediaHandler.js +0 -860
  61. package/lib/src/LocalMediaInterfaces.js +0 -1
  62. package/lib/src/LocalMediaUtils.js +0 -288
  63. package/lib/src/NativeAudioManager.js +0 -93
  64. package/lib/src/PermissionHandler.js +0 -179
  65. package/lib/src/ReactContext.js +0 -90
  66. package/lib/src/ReactHooks.js +0 -80
  67. package/lib/src/utils/crypto.js +0 -82
  68. /package/lib/{src → typescript/src}/AudioSampleHandler.d.ts +0 -0
  69. /package/lib/{src → typescript/src}/BackgroundHandler.d.ts +0 -0
  70. /package/lib/{src → typescript/src}/DeviceInfo.d.ts +0 -0
  71. /package/lib/{src → typescript/src}/LocalMediaError.d.ts +0 -0
  72. /package/lib/{src → typescript/src}/LocalMediaInterfaces.d.ts +0 -0
  73. /package/lib/{src → typescript/src}/LocalMediaUtils.d.ts +0 -0
  74. /package/lib/{src → typescript/src}/NativeAudioManager.d.ts +0 -0
  75. /package/lib/{src → typescript/src}/PermissionHandler.d.ts +0 -0
  76. /package/lib/{src → typescript/src}/ReactContext.d.ts +0 -0
  77. /package/lib/{src → typescript/src}/ReactHooks.d.ts +0 -0
  78. /package/lib/{src → typescript/src}/index.d.ts +0 -0
  79. /package/lib/{src → typescript/src}/utils/crypto.d.ts +0 -0
@@ -0,0 +1,149 @@
1
+ import { Platform, NativeModules } from 'react-native';
2
+ const ANDROID = Object.freeze({
3
+ CAMERA: 'android.permission.CAMERA',
4
+ BLUETOOTH: 'android.permission.BLUETOOTH_CONNECT',
5
+ RECORD_AUDIO: 'android.permission.RECORD_AUDIO',
6
+ LOCATION: 'android.permission.ACCESS_FINE_LOCATION'
7
+ });
8
+ const IOS = Object.freeze({
9
+ APP_TRACKING_TRANSPARENCY: 'ios.permission.APP_TRACKING_TRANSPARENCY',
10
+ BLUETOOTH_PERIPHERAL: 'ios.permission.BLUETOOTH_PERIPHERAL',
11
+ CAMERA: 'ios.permission.CAMERA',
12
+ MICROPHONE: 'ios.permission.MICROPHONE'
13
+ });
14
+ export const PERMISSIONS = Object.freeze({
15
+ ANDROID: ANDROID,
16
+ IOS: IOS
17
+ });
18
+ export const RESULTS = Object.freeze({
19
+ UNAVAILABLE: 'unavailable',
20
+ BLOCKED: 'blocked',
21
+ DENIED: 'denied',
22
+ GRANTED: 'granted',
23
+ LIMITED: 'limited',
24
+ PROMPTED: 'prompted'
25
+ });
26
+ const {
27
+ RTKRNPermissions
28
+ } = NativeModules;
29
+ async function request(permission) {
30
+ return RTKRNPermissions.available.includes(permission) ? await RTKRNPermissions.request(permission) : RESULTS.UNAVAILABLE;
31
+ }
32
+ async function check(permission) {
33
+ return RTKRNPermissions.available.includes(permission) ? await RTKRNPermissions.check(permission) : RESULTS.UNAVAILABLE;
34
+ }
35
+ export function uniq(array) {
36
+ return array.filter((item, index) => item != null && array.indexOf(item) === index);
37
+ }
38
+ async function requestMultiplePermissions(permissions) {
39
+ if (Platform.OS === 'ios') {
40
+ const output = {};
41
+ const dedup = uniq(permissions);
42
+ for (let index = 0; index < dedup.length; index += 1) {
43
+ const permission = dedup[index];
44
+ output[permission] = await request(permission);
45
+ }
46
+ return output;
47
+ }
48
+ const output = await RTKRNPermissions.requestMultiplePermissions(permissions, true);
49
+ return output;
50
+ }
51
+ async function checkMultiplePermissions(permissions) {
52
+ if (Platform.OS === 'ios') {
53
+ const output = {};
54
+ const dedup = uniq(permissions);
55
+ for (let index = 0; index < dedup.length; index += 1) {
56
+ const permission = dedup[index];
57
+ output[permission] = await check(permission);
58
+ }
59
+ return output;
60
+ }
61
+ const output = await RTKRNPermissions.checkMultiplePermissions(permissions);
62
+ return output;
63
+ }
64
+ const getPlatformEquiPermission = (permission, reverse = false) => {
65
+ const android = {
66
+ camera: PERMISSIONS.ANDROID.CAMERA,
67
+ microphone: PERMISSIONS.ANDROID.RECORD_AUDIO,
68
+ bluetooth: PERMISSIONS.ANDROID.BLUETOOTH,
69
+ location: PERMISSIONS.ANDROID.LOCATION
70
+ };
71
+ const ios = {
72
+ camera: PERMISSIONS.IOS.CAMERA,
73
+ microphone: PERMISSIONS.IOS.MICROPHONE,
74
+ bluetooth: PERMISSIONS.IOS.BLUETOOTH_PERIPHERAL
75
+ };
76
+ if (!reverse) {
77
+ if (Platform.OS === 'android') {
78
+ return android[permission];
79
+ }
80
+ return ios[permission];
81
+ }
82
+ if (Platform.OS === 'android') {
83
+ const androidReverse = {};
84
+ Object.keys(android).forEach(key => {
85
+ androidReverse[android[key]] = key;
86
+ });
87
+ return androidReverse[permission];
88
+ }
89
+ const iosReverse = {};
90
+ Object.keys(ios).forEach(key => {
91
+ iosReverse[ios[key]] = key;
92
+ });
93
+ return iosReverse[permission];
94
+ };
95
+ let timeout;
96
+ const processPermissionResult = (systemPermissionRequired, audio, video) => async status => {
97
+ const permissionState = {
98
+ camera: 'NOT_REQUESTED',
99
+ microphone: 'NOT_REQUESTED',
100
+ bluetooth: 'NOT_REQUESTED',
101
+ location: 'NOT_REQUESTED'
102
+ };
103
+ systemPermissionRequired.forEach(permission => {
104
+ const normalPermission = getPlatformEquiPermission(permission, true);
105
+ if (status[permission] === RESULTS.GRANTED) {
106
+ permissionState[normalPermission] = 'ACCEPTED';
107
+ } else if (status[permission] !== RESULTS.PROMPTED) {
108
+ permissionState[normalPermission] = 'DENIED';
109
+ }
110
+ });
111
+ const isBluetoothGranted = Platform.OS === 'ios' || permissionState.bluetooth !== 'NOT_REQUESTED';
112
+ if ((permissionState.camera !== 'NOT_REQUESTED' || !video) && (permissionState.microphone !== 'NOT_REQUESTED' || !audio) && isBluetoothGranted && timeout) clearInterval(timeout);else {
113
+ await requestMultiplePermissions(systemPermissionRequired);
114
+ const checkResponse = await checkMultiplePermissions(systemPermissionRequired);
115
+ await processPermissionResult(systemPermissionRequired, audio, video)(checkResponse);
116
+ }
117
+ return permissionState;
118
+ };
119
+ export const setupPermissions = async (audio, video) => {
120
+ return new Promise(async (resolve, reject) => {
121
+ let statusCheck;
122
+ const systemPermissionRequired = [];
123
+ const isIOS = Platform.OS === 'ios';
124
+ const permissionsRequired = [].concat(audio ? ['microphone'] : []).concat(isIOS ? [] : ['bluetooth']).concat(video ? ['camera'] : []);
125
+ permissionsRequired.forEach(permission => {
126
+ const systemPermissionEquivalent = getPlatformEquiPermission(permission);
127
+ if (systemPermissionEquivalent) {
128
+ systemPermissionRequired.push(systemPermissionEquivalent);
129
+ }
130
+ });
131
+ const checkPermLoop = async id => {
132
+ timeout = id;
133
+ statusCheck = await processPermissionResult(systemPermissionRequired, audio, video)(requestResponse);
134
+ if (statusCheck !== undefined) resolve(statusCheck);
135
+ };
136
+ // Requesting permission status
137
+ const requestResponse = await requestMultiplePermissions(systemPermissionRequired);
138
+ const timeout_sample = setInterval(() => checkPermLoop(timeout_sample), 1000);
139
+ if (timeout) statusCheck = await processPermissionResult(systemPermissionRequired, audio, video)(requestResponse);
140
+ if (timeout) {
141
+ clearInterval(timeout);
142
+ }
143
+ if (statusCheck) resolve(statusCheck);
144
+ setTimeout(() => {
145
+ reject(statusCheck);
146
+ }, 20000);
147
+ });
148
+ };
149
+ //# sourceMappingURL=PermissionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","NativeModules","ANDROID","Object","freeze","CAMERA","BLUETOOTH","RECORD_AUDIO","LOCATION","IOS","APP_TRACKING_TRANSPARENCY","BLUETOOTH_PERIPHERAL","MICROPHONE","PERMISSIONS","RESULTS","UNAVAILABLE","BLOCKED","DENIED","GRANTED","LIMITED","PROMPTED","RTKRNPermissions","request","permission","available","includes","check","uniq","array","filter","item","index","indexOf","requestMultiplePermissions","permissions","OS","output","dedup","length","checkMultiplePermissions","getPlatformEquiPermission","reverse","android","camera","microphone","bluetooth","location","ios","androidReverse","keys","forEach","key","iosReverse","timeout","processPermissionResult","systemPermissionRequired","audio","video","status","permissionState","normalPermission","isBluetoothGranted","clearInterval","checkResponse","setupPermissions","Promise","resolve","reject","statusCheck","isIOS","permissionsRequired","concat","systemPermissionEquivalent","push","checkPermLoop","id","requestResponse","undefined","timeout_sample","setInterval","setTimeout"],"sources":["PermissionHandler.ts"],"sourcesContent":["import { Platform, NativeModules } from 'react-native';\nimport { MediaPermission } from './LocalMediaInterfaces';\n\nconst ANDROID = Object.freeze({\n CAMERA: 'android.permission.CAMERA',\n BLUETOOTH: 'android.permission.BLUETOOTH_CONNECT',\n RECORD_AUDIO: 'android.permission.RECORD_AUDIO',\n LOCATION: 'android.permission.ACCESS_FINE_LOCATION',\n} as const);\n\ntype AndroidPermissionMap = typeof ANDROID;\n\nconst IOS = Object.freeze({\n APP_TRACKING_TRANSPARENCY: 'ios.permission.APP_TRACKING_TRANSPARENCY',\n BLUETOOTH_PERIPHERAL: 'ios.permission.BLUETOOTH_PERIPHERAL',\n CAMERA: 'ios.permission.CAMERA',\n MICROPHONE: 'ios.permission.MICROPHONE',\n} as const);\n\ntype IOSPermissionMap = typeof IOS;\n\nexport const PERMISSIONS = Object.freeze({\n ANDROID: ANDROID as AndroidPermissionMap,\n IOS: IOS as IOSPermissionMap,\n} as const);\n\nexport const RESULTS = Object.freeze({\n UNAVAILABLE: 'unavailable',\n BLOCKED: 'blocked',\n DENIED: 'denied',\n GRANTED: 'granted',\n LIMITED: 'limited',\n PROMPTED: 'prompted',\n} as const);\n\nconst { RTKRNPermissions } = NativeModules;\n\nasync function request(permission) {\n return RTKRNPermissions.available.includes(permission)\n ? await RTKRNPermissions.request(permission)\n : RESULTS.UNAVAILABLE;\n}\n\nasync function check(permission) {\n return RTKRNPermissions.available.includes(permission)\n ? await RTKRNPermissions.check(permission)\n : RESULTS.UNAVAILABLE;\n}\n\nexport function uniq(array) {\n return array.filter(\n (item, index) => item != null && array.indexOf(item) === index\n );\n}\n\nasync function requestMultiplePermissions(permissions) {\n if (Platform.OS === 'ios') {\n const output = {};\n const dedup = uniq(permissions);\n\n for (let index = 0; index < dedup.length; index += 1) {\n const permission = dedup[index];\n output[permission] = await request(permission);\n }\n return output;\n }\n const output = await RTKRNPermissions.requestMultiplePermissions(\n permissions,\n true\n );\n return output;\n}\n\nasync function checkMultiplePermissions(permissions) {\n if (Platform.OS === 'ios') {\n const output = {};\n const dedup = uniq(permissions);\n\n for (let index = 0; index < dedup.length; index += 1) {\n const permission = dedup[index];\n output[permission] = await check(permission);\n }\n return output;\n }\n const output = await RTKRNPermissions.checkMultiplePermissions(permissions);\n return output;\n}\n\nexport type DynamicPermissions = Array<'camera' | 'microphone'>;\n\nconst getPlatformEquiPermission = (permission, reverse = false) => {\n const android = {\n camera: PERMISSIONS.ANDROID.CAMERA,\n microphone: PERMISSIONS.ANDROID.RECORD_AUDIO,\n bluetooth: PERMISSIONS.ANDROID.BLUETOOTH,\n location: PERMISSIONS.ANDROID.LOCATION,\n };\n const ios = {\n camera: PERMISSIONS.IOS.CAMERA,\n microphone: PERMISSIONS.IOS.MICROPHONE,\n bluetooth: PERMISSIONS.IOS.BLUETOOTH_PERIPHERAL,\n };\n if (!reverse) {\n if (Platform.OS === 'android') {\n return android[permission];\n }\n return ios[permission];\n }\n if (Platform.OS === 'android') {\n const androidReverse = {};\n Object.keys(android).forEach((key) => {\n androidReverse[android[key]] = key;\n });\n return androidReverse[permission];\n }\n const iosReverse = {};\n Object.keys(ios).forEach((key) => {\n iosReverse[ios[key]] = key;\n });\n return iosReverse[permission];\n};\n\nlet timeout: any;\n\nconst processPermissionResult =\n (systemPermissionRequired, audio, video) => async (status) => {\n const permissionState: { [key: string]: MediaPermission } = {\n camera: 'NOT_REQUESTED',\n microphone: 'NOT_REQUESTED',\n bluetooth: 'NOT_REQUESTED',\n location: 'NOT_REQUESTED',\n };\n systemPermissionRequired.forEach((permission) => {\n const normalPermission = getPlatformEquiPermission(permission, true);\n if (status[permission] === RESULTS.GRANTED) {\n permissionState[normalPermission] = 'ACCEPTED';\n } else if (status[permission] !== RESULTS.PROMPTED) {\n permissionState[normalPermission] = 'DENIED';\n }\n });\n const isBluetoothGranted =\n Platform.OS === 'ios' || permissionState.bluetooth !== 'NOT_REQUESTED';\n if (\n (permissionState.camera !== 'NOT_REQUESTED' || !video) &&\n (permissionState.microphone !== 'NOT_REQUESTED' || !audio) &&\n isBluetoothGranted &&\n timeout\n )\n clearInterval(timeout);\n else {\n await requestMultiplePermissions(systemPermissionRequired);\n const checkResponse = await checkMultiplePermissions(\n systemPermissionRequired\n );\n await processPermissionResult(\n systemPermissionRequired,\n audio,\n video\n )(checkResponse);\n }\n return permissionState;\n };\n\nexport const setupPermissions = async (\n audio: boolean,\n video: boolean\n): Promise<{\n [key: string]: MediaPermission;\n}> => {\n return new Promise<{\n [key: string]: MediaPermission;\n }>(async (resolve, reject) => {\n let statusCheck: {\n [key: string]: MediaPermission;\n };\n const systemPermissionRequired = [];\n const isIOS = Platform.OS === 'ios';\n const permissionsRequired = []\n .concat(audio ? ['microphone'] : [])\n .concat(isIOS ? [] : ['bluetooth'])\n .concat(video ? ['camera'] : []);\n permissionsRequired.forEach((permission) => {\n const systemPermissionEquivalent = getPlatformEquiPermission(permission);\n if (systemPermissionEquivalent) {\n systemPermissionRequired.push(systemPermissionEquivalent);\n }\n });\n\n const checkPermLoop = async (id) => {\n timeout = id;\n statusCheck = await processPermissionResult(\n systemPermissionRequired,\n audio,\n video\n )(requestResponse);\n if (statusCheck !== undefined) resolve(statusCheck);\n };\n // Requesting permission status\n const requestResponse = await requestMultiplePermissions(\n systemPermissionRequired\n );\n const timeout_sample = setInterval(\n () => checkPermLoop(timeout_sample),\n 1000\n );\n\n if (timeout)\n statusCheck = await processPermissionResult(\n systemPermissionRequired,\n audio,\n video\n )(requestResponse);\n\n if (timeout) {\n clearInterval(timeout);\n }\n\n if (statusCheck) resolve(statusCheck);\n\n setTimeout(() => {\n reject(statusCheck);\n }, 20000);\n });\n};\n\nexport type ResultMap = typeof RESULTS;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ // @ts-nocheck
5
+ import React, { createContext, useContext, useEffect, useRef, useState } from 'react';
6
+ class RealtimeKitUpdates {
7
+ constructor(meeting) {
8
+ var _this$meeting$self, _this$meeting$meta, _this$meeting$partici, _this$meeting$partici2, _this$meeting$partici3, _this$meeting$partici4, _this$meeting$chat, _this$meeting$polls, _this$meeting$plugins, _this$meeting$plugins2, _this$meeting$recordi, _this$meeting$stage, _this$meeting$livestr;
9
+ _defineProperty(this, "meeting", void 0);
10
+ _defineProperty(this, "l", void 0);
11
+ this.meeting = meeting;
12
+ this.l = new Set();
13
+ (_this$meeting$self = this.meeting.self) === null || _this$meeting$self === void 0 || _this$meeting$self.addListener('*', this.update.bind(this));
14
+ (_this$meeting$meta = this.meeting.meta) === null || _this$meeting$meta === void 0 || _this$meeting$meta.addListener('*', this.update.bind(this));
15
+ (_this$meeting$partici = this.meeting.participants) === null || _this$meeting$partici === void 0 || _this$meeting$partici.addListener('*', this.update.bind(this));
16
+ (_this$meeting$partici2 = this.meeting.participants) === null || _this$meeting$partici2 === void 0 || (_this$meeting$partici2 = _this$meeting$partici2.joined) === null || _this$meeting$partici2 === void 0 || _this$meeting$partici2.addListener('*', this.update.bind(this));
17
+ (_this$meeting$partici3 = this.meeting.participants) === null || _this$meeting$partici3 === void 0 || (_this$meeting$partici3 = _this$meeting$partici3.active) === null || _this$meeting$partici3 === void 0 || _this$meeting$partici3.addListener('*', this.update.bind(this));
18
+ (_this$meeting$partici4 = this.meeting.participants) === null || _this$meeting$partici4 === void 0 || (_this$meeting$partici4 = _this$meeting$partici4.pinned) === null || _this$meeting$partici4 === void 0 || _this$meeting$partici4.addListener('*', this.update.bind(this));
19
+ (_this$meeting$chat = this.meeting.chat) === null || _this$meeting$chat === void 0 || _this$meeting$chat.addListener('*', this.update.bind(this));
20
+ (_this$meeting$polls = this.meeting.polls) === null || _this$meeting$polls === void 0 || _this$meeting$polls.addListener('*', this.update.bind(this));
21
+ (_this$meeting$plugins = this.meeting.plugins) === null || _this$meeting$plugins === void 0 || (_this$meeting$plugins = _this$meeting$plugins.all) === null || _this$meeting$plugins === void 0 || _this$meeting$plugins.addListener('*', this.update.bind(this));
22
+ (_this$meeting$plugins2 = this.meeting.plugins) === null || _this$meeting$plugins2 === void 0 || (_this$meeting$plugins2 = _this$meeting$plugins2.active) === null || _this$meeting$plugins2 === void 0 || _this$meeting$plugins2.addListener('*', this.update.bind(this));
23
+ (_this$meeting$recordi = this.meeting.recording) === null || _this$meeting$recordi === void 0 || _this$meeting$recordi.addListener('*', this.update.bind(this));
24
+ (_this$meeting$stage = this.meeting.stage) === null || _this$meeting$stage === void 0 || _this$meeting$stage.addListener('*', this.update.bind(this));
25
+ (_this$meeting$livestr = this.meeting.livestream) === null || _this$meeting$livestr === void 0 || _this$meeting$livestr.addListener('*', this.update.bind(this));
26
+ }
27
+ clean() {
28
+ var _this$meeting$self2, _this$meeting$meta2, _this$meeting$partici5, _this$meeting$partici6, _this$meeting$partici7, _this$meeting$partici8, _this$meeting$chat2, _this$meeting$polls2, _this$meeting$plugins3, _this$meeting$plugins4, _this$meeting$recordi2, _this$meeting$stage2, _this$meeting$livestr2;
29
+ (_this$meeting$self2 = this.meeting.self) === null || _this$meeting$self2 === void 0 || _this$meeting$self2.removeListener('*', this.update.bind(this));
30
+ (_this$meeting$meta2 = this.meeting.meta) === null || _this$meeting$meta2 === void 0 || _this$meeting$meta2.removeListener('*', this.update.bind(this));
31
+ (_this$meeting$partici5 = this.meeting.participants) === null || _this$meeting$partici5 === void 0 || _this$meeting$partici5.removeListener('*', this.update.bind(this));
32
+ (_this$meeting$partici6 = this.meeting.participants) === null || _this$meeting$partici6 === void 0 || (_this$meeting$partici6 = _this$meeting$partici6.joined) === null || _this$meeting$partici6 === void 0 || _this$meeting$partici6.removeListener('*', this.update.bind(this));
33
+ (_this$meeting$partici7 = this.meeting.participants) === null || _this$meeting$partici7 === void 0 || (_this$meeting$partici7 = _this$meeting$partici7.active) === null || _this$meeting$partici7 === void 0 || _this$meeting$partici7.removeListener('*', this.update.bind(this));
34
+ (_this$meeting$partici8 = this.meeting.participants) === null || _this$meeting$partici8 === void 0 || (_this$meeting$partici8 = _this$meeting$partici8.pinned) === null || _this$meeting$partici8 === void 0 || _this$meeting$partici8.removeListener('*', this.update.bind(this));
35
+ (_this$meeting$chat2 = this.meeting.chat) === null || _this$meeting$chat2 === void 0 || _this$meeting$chat2.removeListener('*', this.update.bind(this));
36
+ (_this$meeting$polls2 = this.meeting.polls) === null || _this$meeting$polls2 === void 0 || _this$meeting$polls2.removeListener('*', this.update.bind(this));
37
+ (_this$meeting$plugins3 = this.meeting.plugins) === null || _this$meeting$plugins3 === void 0 || (_this$meeting$plugins3 = _this$meeting$plugins3.all) === null || _this$meeting$plugins3 === void 0 || _this$meeting$plugins3.removeListener('*', this.update.bind(this));
38
+ (_this$meeting$plugins4 = this.meeting.plugins) === null || _this$meeting$plugins4 === void 0 || (_this$meeting$plugins4 = _this$meeting$plugins4.active) === null || _this$meeting$plugins4 === void 0 || _this$meeting$plugins4.removeListener('*', this.update.bind(this));
39
+ (_this$meeting$recordi2 = this.meeting.recording) === null || _this$meeting$recordi2 === void 0 || _this$meeting$recordi2.removeListener('*', this.update.bind(this));
40
+ (_this$meeting$stage2 = this.meeting.stage) === null || _this$meeting$stage2 === void 0 || _this$meeting$stage2.removeListener('*', this.update.bind(this));
41
+ (_this$meeting$livestr2 = this.meeting.livestream) === null || _this$meeting$livestr2 === void 0 || _this$meeting$livestr2.removeListener('*', this.update.bind(this));
42
+ }
43
+ addListener(listener) {
44
+ this.l.add(listener);
45
+ }
46
+ removeListener(listener) {
47
+ this.l.delete(listener);
48
+ }
49
+ update() {
50
+ this.l.forEach(l => {
51
+ l();
52
+ });
53
+ }
54
+ }
55
+ export const RealtimeKitContext = /*#__PURE__*/createContext({
56
+ meeting: undefined,
57
+ updates: undefined
58
+ });
59
+
60
+ /**
61
+ * Provider component which makes the RealtimeKitClient object
62
+ * available to nested components
63
+ * @component
64
+ * @param value The RealtimeKitClient instance from `useRealtimeKitClient()`
65
+ * @param renderBeforeLoad The provider will not render children by default
66
+ * until it gets a client object, renderBeforeLoad can be used to override that
67
+ */
68
+ export function RealtimeKitProvider({
69
+ value,
70
+ children,
71
+ fallback = null
72
+ }) {
73
+ const [updates, setUpdates] = useState();
74
+ const updatesRef = useRef();
75
+ useEffect(() => {
76
+ if (value) {
77
+ const newUpdate = new RealtimeKitUpdates(value);
78
+ setUpdates(newUpdate);
79
+ updatesRef.current = newUpdate;
80
+ }
81
+ return () => {
82
+ var _updatesRef$current;
83
+ (_updatesRef$current = updatesRef.current) === null || _updatesRef$current === void 0 || _updatesRef$current.clean();
84
+ };
85
+ }, [value]);
86
+ return /*#__PURE__*/React.createElement(RealtimeKitContext.Provider, {
87
+ value: {
88
+ meeting: value,
89
+ updates
90
+ }
91
+ }, value ? children : fallback);
92
+ }
93
+
94
+ /**
95
+ * Hook which returns the reference to the RealtimeKitClient object
96
+ * @returns meeting instance from `useRealtimeKitClient()`
97
+ */
98
+ export const useRealtimeKitMeeting = () => {
99
+ const {
100
+ meeting
101
+ } = useContext(RealtimeKitContext);
102
+ if (!meeting) throw new Error('useRealtimeKitMeeting must be used within the RealtimeKitProvider');
103
+ return {
104
+ meeting
105
+ };
106
+ };
107
+ //# sourceMappingURL=ReactContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useContext","useEffect","useRef","useState","RealtimeKitUpdates","constructor","meeting","_this$meeting$self","_this$meeting$meta","_this$meeting$partici","_this$meeting$partici2","_this$meeting$partici3","_this$meeting$partici4","_this$meeting$chat","_this$meeting$polls","_this$meeting$plugins","_this$meeting$plugins2","_this$meeting$recordi","_this$meeting$stage","_this$meeting$livestr","_defineProperty","l","Set","self","addListener","update","bind","meta","participants","joined","active","pinned","chat","polls","plugins","all","recording","stage","livestream","clean","_this$meeting$self2","_this$meeting$meta2","_this$meeting$partici5","_this$meeting$partici6","_this$meeting$partici7","_this$meeting$partici8","_this$meeting$chat2","_this$meeting$polls2","_this$meeting$plugins3","_this$meeting$plugins4","_this$meeting$recordi2","_this$meeting$stage2","_this$meeting$livestr2","removeListener","listener","add","delete","forEach","RealtimeKitContext","undefined","updates","RealtimeKitProvider","value","children","fallback","setUpdates","updatesRef","newUpdate","current","_updatesRef$current","createElement","Provider","useRealtimeKitMeeting","Error"],"sources":["ReactContext.tsx"],"sourcesContent":["// @ts-nocheck\nimport React, {\n createContext,\n useContext,\n ReactChild,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport RealtimeKitClient from '@cloudflare/realtimekit';\n\ntype Listener = () => void;\nclass RealtimeKitUpdates {\n private meeting: RealtimeKitClient;\n\n private l: Set<Listener>;\n\n constructor(meeting: RealtimeKitClient) {\n this.meeting = meeting;\n this.l = new Set();\n this.meeting.self?.addListener('*', this.update.bind(this));\n this.meeting.meta?.addListener('*', this.update.bind(this));\n this.meeting.participants?.addListener('*', this.update.bind(this));\n this.meeting.participants?.joined?.addListener('*', this.update.bind(this));\n this.meeting.participants?.active?.addListener('*', this.update.bind(this));\n this.meeting.participants?.pinned?.addListener('*', this.update.bind(this));\n this.meeting.chat?.addListener('*', this.update.bind(this));\n this.meeting.polls?.addListener('*', this.update.bind(this));\n this.meeting.plugins?.all?.addListener('*', this.update.bind(this));\n this.meeting.plugins?.active?.addListener('*', this.update.bind(this));\n this.meeting.recording?.addListener('*', this.update.bind(this));\n this.meeting.stage?.addListener('*', this.update.bind(this));\n this.meeting.livestream?.addListener('*', this.update.bind(this));\n }\n\n clean() {\n this.meeting.self?.removeListener('*', this.update.bind(this));\n this.meeting.meta?.removeListener('*', this.update.bind(this));\n this.meeting.participants?.removeListener('*', this.update.bind(this));\n this.meeting.participants?.joined?.removeListener(\n '*',\n this.update.bind(this)\n );\n this.meeting.participants?.active?.removeListener(\n '*',\n this.update.bind(this)\n );\n this.meeting.participants?.pinned?.removeListener(\n '*',\n this.update.bind(this)\n );\n this.meeting.chat?.removeListener('*', this.update.bind(this));\n this.meeting.polls?.removeListener('*', this.update.bind(this));\n this.meeting.plugins?.all?.removeListener('*', this.update.bind(this));\n this.meeting.plugins?.active?.removeListener('*', this.update.bind(this));\n this.meeting.recording?.removeListener('*', this.update.bind(this));\n this.meeting.stage?.removeListener('*', this.update.bind(this));\n this.meeting.livestream?.removeListener('*', this.update.bind(this));\n }\n\n addListener(listener: Listener) {\n this.l.add(listener);\n }\n\n removeListener(listener: Listener) {\n this.l.delete(listener);\n }\n\n private update() {\n this.l.forEach((l) => {\n l();\n });\n }\n}\n\nexport const RealtimeKitContext = createContext<{\n meeting: RealtimeKitClient | undefined;\n updates: RealtimeKitUpdates | undefined;\n}>({\n meeting: undefined,\n updates: undefined,\n});\n\n/**\n * Provider component which makes the RealtimeKitClient object\n * available to nested components\n * @component\n * @param value The RealtimeKitClient instance from `useRealtimeKitClient()`\n * @param renderBeforeLoad The provider will not render children by default\n * until it gets a client object, renderBeforeLoad can be used to override that\n */\nexport function RealtimeKitProvider({\n value,\n children,\n fallback = null,\n}: {\n value: RealtimeKitClient | undefined;\n children: ReactChild | ReactChild[];\n fallback?: ReactChild | ReactChild[];\n}) {\n const [updates, setUpdates] = useState<RealtimeKitUpdates>();\n const updatesRef = useRef<RealtimeKitUpdates>();\n\n useEffect(() => {\n if (value) {\n const newUpdate = new RealtimeKitUpdates(value);\n setUpdates(newUpdate);\n updatesRef.current = newUpdate;\n }\n return () => {\n updatesRef.current?.clean();\n };\n }, [value]);\n\n return (\n <RealtimeKitContext.Provider\n value={{\n meeting: value,\n updates,\n }}\n >\n {value ? children : fallback}\n </RealtimeKitContext.Provider>\n );\n}\n\n/**\n * Hook which returns the reference to the RealtimeKitClient object\n * @returns meeting instance from `useRealtimeKitClient()`\n */\nexport const useRealtimeKitMeeting = () => {\n const { meeting } = useContext(RealtimeKitContext);\n if (!meeting)\n throw new Error(\n 'useRealtimeKitMeeting must be used within the RealtimeKitProvider'\n );\n\n return { meeting };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ import { useState, useEffect, useRef, useReducer, useContext } from 'react';
2
+ import RealtimeKitClient from '@cloudflare/realtimekit';
3
+ import { RealtimeKitContext } from './ReactContext';
4
+
5
+ /**
6
+ * Hook which manages a RealtimeKitClient instance
7
+ */
8
+ export const useRealtimeKitClient = () => {
9
+ const [client, setClient] = useState();
10
+ const initClient = async options => {
11
+ const cli = await RealtimeKitClient.init(options);
12
+ setClient(cli);
13
+ return cli;
14
+ };
15
+ return [client, initClient];
16
+ };
17
+
18
+ /**
19
+ * Utility function which determines whether to trigger update or not
20
+ */
21
+ const shouldUpdate = (slice, newSlice) => {
22
+ if (slice !== newSlice) {
23
+ return true;
24
+ }
25
+ if (Array.isArray(slice) && Array.isArray(newSlice)) {
26
+ if (slice.length !== newSlice.length) {
27
+ return true;
28
+ }
29
+ }
30
+ return false;
31
+ };
32
+ /**
33
+ * @deprecated Use `useRealtimeKitSelector` instead.
34
+ * Hook which extracts data from the RealtimeKitClient object
35
+ */
36
+ export const useRTKSelector = selector => {
37
+ return useRealtimeKitSelector(selector);
38
+ };
39
+
40
+ /**
41
+ * Hook which extracts data from the RealtimeKitClient object
42
+ */
43
+ export const useRealtimeKitSelector = selector => {
44
+ const {
45
+ meeting,
46
+ updates
47
+ } = useContext(RealtimeKitContext);
48
+ if (!meeting) throw new Error('useRealtimeKitSelector must be used within the RealtimeKitProvider');
49
+ const state = useRef(selector(meeting));
50
+ const [, forceUpdate] = useReducer(c => c + 1, 0);
51
+ useEffect(() => {
52
+ const currentState = meeting && selector(meeting);
53
+ const listener = () => {
54
+ const newStateSlice = meeting && selector(meeting);
55
+ if (shouldUpdate(state.current, newStateSlice)) {
56
+ state.current = newStateSlice;
57
+ forceUpdate();
58
+ }
59
+ };
60
+ if (currentState && typeof currentState === 'object' && 'addListener' in currentState) {
61
+ currentState.addListener('*', forceUpdate);
62
+ return () => {
63
+ currentState.removeListener('*', forceUpdate);
64
+ };
65
+ }
66
+ updates === null || updates === void 0 || updates.addListener(listener);
67
+ return () => {
68
+ updates === null || updates === void 0 || updates.removeListener(listener);
69
+ };
70
+ // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ }, [meeting, updates]);
72
+ return state.current;
73
+ };
74
+ export * from './ReactContext';
75
+ //# sourceMappingURL=ReactHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","useRef","useReducer","useContext","RealtimeKitClient","RealtimeKitContext","useRealtimeKitClient","client","setClient","initClient","options","cli","init","shouldUpdate","slice","newSlice","Array","isArray","length","useRTKSelector","selector","useRealtimeKitSelector","meeting","updates","Error","state","forceUpdate","c","currentState","listener","newStateSlice","current","addListener","removeListener"],"sources":["ReactHooks.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useReducer, useContext } from 'react';\nimport RealtimeKitClient from '@cloudflare/realtimekit';\nimport { RealtimeKitContext } from './ReactContext';\n\n/**\n * Hook which manages a RealtimeKitClient instance\n */\nexport const useRealtimeKitClient = (): [\n RealtimeKitClient | undefined,\n (options: any) => {}\n] => {\n const [client, setClient] = useState<RealtimeKitClient>();\n const initClient = async (options: any): Promise<RealtimeKitClient> => {\n const cli = await RealtimeKitClient.init(options);\n setClient(cli);\n return cli;\n };\n return [client, initClient];\n};\n\n/**\n * Utility function which determines whether to trigger update or not\n */\nconst shouldUpdate = <StateSlice,>(\n slice: StateSlice,\n newSlice: StateSlice\n): boolean => {\n if (slice !== newSlice) {\n return true;\n }\n if (Array.isArray(slice) && Array.isArray(newSlice)) {\n if (slice.length !== newSlice.length) {\n return true;\n }\n }\n\n return false;\n};\n\ntype StateSelector<T extends object, U> = (state: T) => U;\n\n/**\n * @deprecated Use `useRealtimeKitSelector` instead.\n * Hook which extracts data from the RealtimeKitClient object\n */\nexport const useRTKSelector = <StateSlice,>(\n selector: StateSelector<RealtimeKitClient, StateSlice>\n) => {\n return useRealtimeKitSelector(selector);\n};\n\n/**\n * Hook which extracts data from the RealtimeKitClient object\n */\nexport const useRealtimeKitSelector = <StateSlice,>(\n selector: StateSelector<RealtimeKitClient, StateSlice>\n) => {\n const { meeting, updates } = useContext(RealtimeKitContext);\n if (!meeting)\n throw new Error(\n 'useRealtimeKitSelector must be used within the RealtimeKitProvider'\n );\n const state = useRef(selector(meeting));\n const [, forceUpdate] = useReducer((c) => c + 1, 0) as [never, () => void];\n\n useEffect(() => {\n const currentState = meeting && selector(meeting);\n const listener = () => {\n const newStateSlice = meeting && selector(meeting);\n if (shouldUpdate(state.current, newStateSlice)) {\n state.current = newStateSlice;\n forceUpdate();\n }\n };\n if (\n currentState &&\n typeof currentState === 'object' &&\n 'addListener' in currentState\n ) {\n (currentState as any).addListener('*', forceUpdate);\n return () => {\n (currentState as any).removeListener('*', forceUpdate);\n };\n }\n updates?.addListener(listener);\n return () => {\n updates?.removeListener(listener);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [meeting, updates]);\n return state.current;\n};\n\nexport * from './ReactContext';\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,MAAM,EAAEC,UAAU,EAAEC,UAAU,QAAQ,OAAO;AAC3E,OAAOC,iBAAiB,MAAM,yBAAyB;AACvD,SAASC,kBAAkB,QAAQ,gBAAgB;;AAEnD;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAAA,KAG/B;EACH,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGT,QAAQ,CAAoB,CAAC;EACzD,MAAMU,UAAU,GAAG,MAAOC,OAAY,IAAiC;IACrE,MAAMC,GAAG,GAAG,MAAMP,iBAAiB,CAACQ,IAAI,CAACF,OAAO,CAAC;IACjDF,SAAS,CAACG,GAAG,CAAC;IACd,OAAOA,GAAG;EACZ,CAAC;EACD,OAAO,CAACJ,MAAM,EAAEE,UAAU,CAAC;AAC7B,CAAC;;AAED;AACA;AACA;AACA,MAAMI,YAAY,GAAGA,CACnBC,KAAiB,EACjBC,QAAoB,KACR;EACZ,IAAID,KAAK,KAAKC,QAAQ,EAAE;IACtB,OAAO,IAAI;EACb;EACA,IAAIC,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,IAAIE,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;IACnD,IAAID,KAAK,CAACI,MAAM,KAAKH,QAAQ,CAACG,MAAM,EAAE;MACpC,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;AAID;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GACzBC,QAAsD,IACnD;EACH,OAAOC,sBAAsB,CAACD,QAAQ,CAAC;AACzC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GACjCD,QAAsD,IACnD;EACH,MAAM;IAAEE,OAAO;IAAEC;EAAQ,CAAC,GAAGpB,UAAU,CAACE,kBAAkB,CAAC;EAC3D,IAAI,CAACiB,OAAO,EACV,MAAM,IAAIE,KAAK,CACb,oEACF,CAAC;EACH,MAAMC,KAAK,GAAGxB,MAAM,CAACmB,QAAQ,CAACE,OAAO,CAAC,CAAC;EACvC,MAAM,GAAGI,WAAW,CAAC,GAAGxB,UAAU,CAAEyB,CAAC,IAAKA,CAAC,GAAG,CAAC,EAAE,CAAC,CAAwB;EAE1E3B,SAAS,CAAC,MAAM;IACd,MAAM4B,YAAY,GAAGN,OAAO,IAAIF,QAAQ,CAACE,OAAO,CAAC;IACjD,MAAMO,QAAQ,GAAGA,CAAA,KAAM;MACrB,MAAMC,aAAa,GAAGR,OAAO,IAAIF,QAAQ,CAACE,OAAO,CAAC;MAClD,IAAIT,YAAY,CAACY,KAAK,CAACM,OAAO,EAAED,aAAa,CAAC,EAAE;QAC9CL,KAAK,CAACM,OAAO,GAAGD,aAAa;QAC7BJ,WAAW,CAAC,CAAC;MACf;IACF,CAAC;IACD,IACEE,YAAY,IACZ,OAAOA,YAAY,KAAK,QAAQ,IAChC,aAAa,IAAIA,YAAY,EAC7B;MACCA,YAAY,CAASI,WAAW,CAAC,GAAG,EAAEN,WAAW,CAAC;MACnD,OAAO,MAAM;QACVE,YAAY,CAASK,cAAc,CAAC,GAAG,EAAEP,WAAW,CAAC;MACxD,CAAC;IACH;IACAH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAES,WAAW,CAACH,QAAQ,CAAC;IAC9B,OAAO,MAAM;MACXN,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEU,cAAc,CAACJ,QAAQ,CAAC;IACnC,CAAC;IACD;EACF,CAAC,EAAE,CAACP,OAAO,EAAEC,OAAO,CAAC,CAAC;EACtB,OAAOE,KAAK,CAACM,OAAO;AACtB,CAAC;AAED,cAAc,gBAAgB","ignoreList":[]}
@@ -9,50 +9,50 @@ import 'text-encoding-polyfill';
9
9
  import 'node-libs-react-native/globals';
10
10
  import 'react-native-url-polyfill/auto';
11
11
  import DeviceInfo from './DeviceInfo';
12
- export { RealtimeKitProvider, useRealtimeKitClient, useRTKSelector, useRealtimeKitSelector, useRealtimeKitMeeting, } from './ReactHooks';
12
+ export { RealtimeKitProvider, useRealtimeKitClient, useRTKSelector, useRealtimeKitSelector, useRealtimeKitMeeting } from './ReactHooks';
13
13
  registerGlobals();
14
- const LINKING_ERROR = `The package '@cloudflare/realtimekit-react-native' doesn't seem to be linked. Make sure: \n\n` +
15
- Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
16
- '- You rebuilt the app after installing the package\n' +
17
- '- You are not using Expo managed workflow\n';
14
+ const LINKING_ERROR = `The package '@cloudflare/realtimekit-react-native' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
15
+ ios: "- You have run 'pod install'\n",
16
+ default: ''
17
+ }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo managed workflow\n';
18
+
18
19
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
- const Core = NativeModules.Core
20
- ? NativeModules.Core
21
- : new Proxy({}, {
22
- get() {
23
- throw new Error(LINKING_ERROR);
24
- },
25
- });
20
+ const Core = NativeModules.Core ? NativeModules.Core : new Proxy({}, {
21
+ get() {
22
+ throw new Error(LINKING_ERROR);
23
+ }
24
+ });
26
25
  Object.defineProperty(navigator, 'isReactNative', {
27
- get: function () {
28
- return true;
29
- },
30
- configurable: true,
26
+ get: function () {
27
+ return true;
28
+ },
29
+ configurable: true
31
30
  });
32
31
  Object.defineProperty(navigator, 'userAgent', {
33
- get: function () {
34
- return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4753.0 Safari/537.36'; // customized user agent
35
- },
36
- configurable: true,
32
+ get: function () {
33
+ return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4753.0 Safari/537.36'; // customized user agent
34
+ },
35
+ configurable: true
37
36
  });
38
37
  Object.defineProperty(navigator, 'RNLocalMediaHandlerImpl', {
39
- get: function () {
40
- return LocalMediaHandler;
41
- },
38
+ get: function () {
39
+ return LocalMediaHandler;
40
+ }
42
41
  });
43
42
  Object.defineProperty(navigator, 'RNAudioSampleHandlerImpl', {
44
- get: function () {
45
- return AudioSampleHandler;
46
- },
43
+ get: function () {
44
+ return AudioSampleHandler;
45
+ }
47
46
  });
48
47
  Object.defineProperty(navigator, 'RNBackgroundTimerImpl', {
49
- get: function () {
50
- return BackgroundTimer;
51
- },
48
+ get: function () {
49
+ return BackgroundTimer;
50
+ }
52
51
  });
53
52
  Object.defineProperty(navigator, 'RNDeviceInfoImpl', {
54
- get: function () {
55
- return DeviceInfo;
56
- },
53
+ get: function () {
54
+ return DeviceInfo;
55
+ }
57
56
  });
58
57
  export default RealtimeKitMeeting;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","Platform","RealtimeKitMeeting","LocalMediaHandler","AudioSampleHandler","BackgroundTimer","registerGlobals","DeviceInfo","RealtimeKitProvider","useRealtimeKitClient","useRTKSelector","useRealtimeKitSelector","useRealtimeKitMeeting","LINKING_ERROR","select","ios","default","Core","Proxy","get","Error","Object","defineProperty","navigator","configurable"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules, Platform } from 'react-native';\nimport RealtimeKitMeeting from '@cloudflare/realtimekit';\nimport LocalMediaHandler from './LocalMediaHandler';\nimport AudioSampleHandler from './AudioSampleHandler';\nimport BackgroundTimer from './BackgroundHandler';\nimport { registerGlobals } from '@cloudflare/react-native-webrtc';\nimport './utils/crypto';\nimport 'text-encoding-polyfill';\nimport 'node-libs-react-native/globals';\nimport 'react-native-url-polyfill/auto';\nimport DeviceInfo from './DeviceInfo';\n\nexport {\n RealtimeKitProvider,\n useRealtimeKitClient,\n useRTKSelector,\n useRealtimeKitSelector,\n useRealtimeKitMeeting,\n} from './ReactHooks';\n\nregisterGlobals();\n\nconst LINKING_ERROR =\n `The package '@cloudflare/realtimekit-react-native' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst Core = NativeModules.Core\n ? NativeModules.Core\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\ndeclare global {\n // @ts-ignore\n var navigator: any;\n}\n\nObject.defineProperty(navigator as any, 'isReactNative', {\n get: function () {\n return true;\n },\n configurable: true,\n});\n\nObject.defineProperty(navigator as any, 'userAgent', {\n get: function () {\n return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4753.0 Safari/537.36'; // customized user agent\n },\n configurable: true,\n});\n\nObject.defineProperty(navigator as any, 'RNLocalMediaHandlerImpl', {\n get: function () {\n return LocalMediaHandler;\n },\n});\n\nObject.defineProperty(navigator as any, 'RNAudioSampleHandlerImpl', {\n get: function () {\n return AudioSampleHandler;\n },\n});\n\nObject.defineProperty(navigator as any, 'RNBackgroundTimerImpl', {\n get: function () {\n return BackgroundTimer;\n },\n});\n\nObject.defineProperty(navigator as any, 'RNDeviceInfoImpl', {\n get: function () {\n return DeviceInfo;\n },\n});\n\nexport default RealtimeKitMeeting;\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,OAAOC,kBAAkB,MAAM,yBAAyB;AACxD,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,kBAAkB,MAAM,sBAAsB;AACrD,OAAOC,eAAe,MAAM,qBAAqB;AACjD,SAASC,eAAe,QAAQ,iCAAiC;AACjE,OAAO,gBAAgB;AACvB,OAAO,wBAAwB;AAC/B,OAAO,gCAAgC;AACvC,OAAO,gCAAgC;AACvC,OAAOC,UAAU,MAAM,cAAc;AAErC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,cAAc,EACdC,sBAAsB,EACtBC,qBAAqB,QAChB,cAAc;AAErBN,eAAe,CAAC,CAAC;AAEjB,MAAMO,aAAa,GACjB,+FAA+F,GAC/FZ,QAAQ,CAACa,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,6CAA6C;;AAE/C;AACA,MAAMC,IAAI,GAAGjB,aAAa,CAACiB,IAAI,GAC3BjB,aAAa,CAACiB,IAAI,GAClB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAOLQ,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,eAAe,EAAE;EACvDJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAO,IAAI;EACb,CAAC;EACDK,YAAY,EAAE;AAChB,CAAC,CAAC;AAEFH,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,WAAW,EAAE;EACnDJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAO,yHAAyH,CAAC,CAAC;EACpI,CAAC;EACDK,YAAY,EAAE;AAChB,CAAC,CAAC;AAEFH,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,yBAAyB,EAAE;EACjEJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAOhB,iBAAiB;EAC1B;AACF,CAAC,CAAC;AAEFkB,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,0BAA0B,EAAE;EAClEJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAOf,kBAAkB;EAC3B;AACF,CAAC,CAAC;AAEFiB,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,uBAAuB,EAAE;EAC/DJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAOd,eAAe;EACxB;AACF,CAAC,CAAC;AAEFgB,MAAM,CAACC,cAAc,CAACC,SAAS,EAAS,kBAAkB,EAAE;EAC1DJ,GAAG,EAAE,SAAAA,CAAA,EAAY;IACf,OAAOZ,UAAU;EACnB;AACF,CAAC,CAAC;AAEF,eAAeL,kBAAkB","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ const base64Decode = require('fast-base64-decode');
2
+ const {
3
+ NativeModules
4
+ } = require('react-native');
5
+ class TypeMismatchError extends Error {}
6
+ class QuotaExceededError extends Error {}
7
+ let warned = false;
8
+ function insecureRandomValues(array) {
9
+ if (!warned) {
10
+ console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto.getRandomValues');
11
+ warned = true;
12
+ }
13
+ for (let i = 0, r; i < array.length; i++) {
14
+ if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
15
+ array[i] = r >>> ((i & 0x03) << 3) & 0xff;
16
+ }
17
+ return array;
18
+ }
19
+
20
+ /**
21
+ * @param {number} byteLength
22
+ * @returns {string}
23
+ */
24
+ function getRandomBase64(byteLength) {
25
+ if (NativeModules.Core) {
26
+ return NativeModules.Core.getRandomBase64(byteLength);
27
+ } else if (NativeModules.ExpoRandom) {
28
+ // Expo SDK 41-44
29
+ return NativeModules.ExpoRandom.getRandomBase64String(byteLength);
30
+ } else if (global.ExpoModules) {
31
+ // Expo SDK 45+
32
+ return global.ExpoModules.ExpoRandom.getRandomBase64String(byteLength);
33
+ } else {
34
+ throw new Error('Native module not found');
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray} array
40
+ */
41
+ function getRandomValues(array) {
42
+ if (!(array instanceof Int8Array || array instanceof Uint8Array || array instanceof Int16Array || array instanceof Uint16Array || array instanceof Int32Array || array instanceof Uint32Array || array instanceof Uint8ClampedArray)) {
43
+ throw new TypeMismatchError('Expected an integer array');
44
+ }
45
+ if (array.byteLength > 65536) {
46
+ throw new QuotaExceededError('Can only request a maximum of 65536 bytes');
47
+ }
48
+
49
+ // Expo SDK 48+
50
+ if (global.expo && global.expo.modules && global.expo.modules.ExpoCrypto && global.expo.modules.ExpoCrypto.getRandomValues) {
51
+ // ExpoCrypto.getRandomValues doesn't return the array
52
+ global.expo.modules.ExpoCrypto.getRandomValues(array);
53
+ return array;
54
+ }
55
+
56
+ // Calling getRandomBase64 in debug mode leads to the error
57
+ // "Calling synchronous methods on native modules is not supported in Chrome".
58
+ // So in that specific case we fall back to just using Math.random.
59
+ if (__DEV__) {
60
+ if (typeof global.nativeCallSyncHook === 'undefined') {
61
+ return insecureRandomValues(array);
62
+ }
63
+ }
64
+ base64Decode(getRandomBase64(array.byteLength), new Uint8Array(array.buffer, array.byteOffset, array.byteLength));
65
+ return array;
66
+ }
67
+ if (typeof global.crypto !== 'object') {
68
+ // @ts-ignore
69
+ global.crypto = {};
70
+ }
71
+ if (typeof global.crypto.getRandomValues !== 'function') {
72
+ global.crypto.getRandomValues = getRandomValues;
73
+ }
74
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["base64Decode","require","NativeModules","TypeMismatchError","Error","QuotaExceededError","warned","insecureRandomValues","array","console","warn","i","r","length","Math","random","getRandomBase64","byteLength","Core","ExpoRandom","getRandomBase64String","global","ExpoModules","getRandomValues","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Uint8ClampedArray","expo","modules","ExpoCrypto","__DEV__","nativeCallSyncHook","buffer","byteOffset","crypto"],"sources":["crypto.ts"],"sourcesContent":["const base64Decode = require('fast-base64-decode');\nconst { NativeModules } = require('react-native');\n\nclass TypeMismatchError extends Error {}\nclass QuotaExceededError extends Error {}\n\nlet warned = false;\nfunction insecureRandomValues(array) {\n if (!warned) {\n console.warn(\n 'Using an insecure random number generator, this should only happen when running in a debugger without support for crypto.getRandomValues'\n );\n warned = true;\n }\n\n for (let i = 0, r; i < array.length; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n array[i] = (r >>> ((i & 0x03) << 3)) & 0xff;\n }\n\n return array;\n}\n\n/**\n * @param {number} byteLength\n * @returns {string}\n */\nfunction getRandomBase64(byteLength) {\n if (NativeModules.Core) {\n return NativeModules.Core.getRandomBase64(byteLength);\n } else if (NativeModules.ExpoRandom) {\n // Expo SDK 41-44\n return NativeModules.ExpoRandom.getRandomBase64String(byteLength);\n } else if (global.ExpoModules) {\n // Expo SDK 45+\n return global.ExpoModules.ExpoRandom.getRandomBase64String(byteLength);\n } else {\n throw new Error('Native module not found');\n }\n}\n\n/**\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray} array\n */\nfunction getRandomValues(array) {\n if (\n !(\n array instanceof Int8Array ||\n array instanceof Uint8Array ||\n array instanceof Int16Array ||\n array instanceof Uint16Array ||\n array instanceof Int32Array ||\n array instanceof Uint32Array ||\n array instanceof Uint8ClampedArray\n )\n ) {\n throw new TypeMismatchError('Expected an integer array');\n }\n\n if (array.byteLength > 65536) {\n throw new QuotaExceededError('Can only request a maximum of 65536 bytes');\n }\n\n // Expo SDK 48+\n if (\n global.expo &&\n global.expo.modules &&\n global.expo.modules.ExpoCrypto &&\n global.expo.modules.ExpoCrypto.getRandomValues\n ) {\n // ExpoCrypto.getRandomValues doesn't return the array\n global.expo.modules.ExpoCrypto.getRandomValues(array);\n return array;\n }\n\n // Calling getRandomBase64 in debug mode leads to the error\n // \"Calling synchronous methods on native modules is not supported in Chrome\".\n // So in that specific case we fall back to just using Math.random.\n if (__DEV__) {\n if (typeof global.nativeCallSyncHook === 'undefined') {\n return insecureRandomValues(array);\n }\n }\n\n base64Decode(\n getRandomBase64(array.byteLength),\n new Uint8Array(array.buffer, array.byteOffset, array.byteLength)\n );\n\n return array;\n}\n\nif (typeof global.crypto !== 'object') {\n // @ts-ignore\n global.crypto = {};\n}\n\nif (typeof global.crypto.getRandomValues !== 'function') {\n global.crypto.getRandomValues = getRandomValues;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -111,12 +111,8 @@ export default class LocalMediaHandler extends EventEmitter {
111
111
  emit(event: keyof typeof MediaEvents, ...args: any[]): boolean;
112
112
  on(event: keyof typeof MediaEvents, listener: (...args: any[]) => void): this;
113
113
  destruct(): void;
114
- destructMediaHandler(): Promise<void>;
115
- removeAllTracks(): void;
116
114
  private stopAudioTrack;
117
- removeAudioTrack(): void;
118
115
  private stopVideoTrack;
119
- removeVideoTrack(): void;
120
116
  }
121
117
  export interface RNLocalMediaHandler {
122
118
  new (): LocalMediaHandler;
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@cloudflare/realtimekit-react-native",
3
- "version": "0.1.4-staging.1",
3
+ "version": "0.1.4-staging.2",
4
4
  "description": "Cloudflare RealtimeKit SDK for react native",
5
- "main": "lib/index.js",
5
+ "main": "lib/commonjs/index",
6
6
  "author": "Cloudflare",
7
7
  "homepage": "https://realtime.cloudflare.com",
8
- "types": "lib/index.d.ts",
8
+ "module": "lib/module/index",
9
+ "types": "lib/typescript/src/index.d.ts",
9
10
  "files": [
10
11
  "lib",
11
12
  "android",
@@ -25,7 +26,7 @@
25
26
  },
26
27
  "private": false,
27
28
  "dependencies": {
28
- "@cloudflare/realtimekit": "1.1.7-staging.2",
29
+ "@cloudflare/realtimekit": "1.1.7",
29
30
  "events": "^3.3.0",
30
31
  "fast-base64-decode": "1.0.0",
31
32
  "node-libs-react-native": "^1.2.1",