@cloudflare/realtimekit-react-native 0.1.3-staging.1 → 0.1.3-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.
@@ -21,4 +21,11 @@
21
21
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
22
22
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
23
23
  <uses-permission android:name="android.permission.MICROPHONE" />
24
+ <application>
25
+ <provider
26
+ android:name="com.facebook.react.modules.blob.BlobProvider"
27
+ android:authorities="@string/blob_provider_authority"
28
+ android:exported="false"
29
+ />
30
+ </application>
24
31
  </manifest>
@@ -0,0 +1,3 @@
1
+ <resources>
2
+ <string name="blob_provider_authority">com.cloudflare.realtimekit.blobs</string>
3
+ </resources>
@@ -77,14 +77,15 @@ RCT_EXPORT_METHOD(setTimeout:(int)timeoutId
77
77
  resolve([NSNumber numberWithBool:YES]);
78
78
  }
79
79
 
80
- /*
81
- RCT_EXPORT_METHOD(clearTimeout:(int)timeoutId
82
- resolver:(RCTPromiseResolveBlock)resolve
83
- rejecter:(RCTPromiseRejectBlock)reject)
80
+ RCT_EXPORT_METHOD(backgroundTimerSetTimeout:(int)timeoutId
81
+ timeout:(double)timeout)
84
82
  {
85
- // Do nothing :)
86
- // timeout will be ignored in javascript anyway :)
87
- }*/
83
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeout * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
84
+ if ([self bridge] != nil) {
85
+ [self sendEventWithName:@"backgroundTimer.timeout" body:[NSNumber numberWithInt:timeoutId]];
86
+ }
87
+ });
88
+ }
88
89
 
89
90
  @end
90
91
 
@@ -0,0 +1,14 @@
1
+ import { EventEmitter } from 'events';
2
+ export default class AudioSampleHandler extends EventEmitter {
3
+ private webRTCModuleEmitter;
4
+ private _audioSamplesListener?;
5
+ private _isListening;
6
+ private _currentSamples;
7
+ constructor();
8
+ static init(): Promise<AudioSampleHandler>;
9
+ private _audioSampleHandler;
10
+ private initialiseSampler;
11
+ getFloatTimeDomainData(samples: Float32Array): void;
12
+ stopListening(): void;
13
+ destructor(): void;
14
+ }
@@ -0,0 +1,57 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { NativeEventEmitter, NativeModules, Platform, } from 'react-native';
11
+ import { EventEmitter } from 'events';
12
+ const { WebRTCModule } = NativeModules;
13
+ export default class AudioSampleHandler extends EventEmitter {
14
+ constructor() {
15
+ super();
16
+ this._isListening = false;
17
+ this.webRTCModuleEmitter = new NativeEventEmitter(WebRTCModule);
18
+ this._audioSampleHandler = this._audioSampleHandler.bind(this);
19
+ this._currentSamples = new Float32Array(1024);
20
+ this.initialiseSampler();
21
+ }
22
+ static init() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ return new AudioSampleHandler();
25
+ });
26
+ }
27
+ _audioSampleHandler(audioData) {
28
+ this._currentSamples.fill(0);
29
+ if (Platform.OS === 'android') {
30
+ this._currentSamples.set(audioData);
31
+ }
32
+ else {
33
+ this._currentSamples.set(audioData.samples);
34
+ }
35
+ }
36
+ initialiseSampler() {
37
+ this._audioSamplesListener = this.webRTCModuleEmitter.addListener('audioSamples', this._audioSampleHandler);
38
+ this._isListening = true;
39
+ }
40
+ getFloatTimeDomainData(samples) {
41
+ if (!this._isListening) {
42
+ this.initialiseSampler();
43
+ }
44
+ samples.set(this._currentSamples);
45
+ }
46
+ stopListening() {
47
+ if (this._audioSamplesListener) {
48
+ this._audioSamplesListener.remove();
49
+ this._audioSamplesListener = undefined;
50
+ this._isListening = false;
51
+ this._currentSamples.fill(0);
52
+ }
53
+ }
54
+ destructor() {
55
+ this.stopListening();
56
+ }
57
+ }
@@ -6,6 +6,7 @@ declare class BackgroundTimer {
6
6
  backgroundTimer: number | NodeJS.Timeout | null;
7
7
  backgroundListener: any;
8
8
  constructor();
9
+ init(): BackgroundTimer;
9
10
  start(delay?: number): any;
10
11
  stop(): any;
11
12
  runBackgroundTimer(callback: any, delay: any): void;
@@ -21,6 +21,9 @@ class BackgroundTimer {
21
21
  }
22
22
  });
23
23
  }
24
+ init() {
25
+ return new BackgroundTimer();
26
+ }
24
27
  // Original API
25
28
  start(delay = 0) {
26
29
  return Platform.OS === 'android'
package/lib/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { NativeModules, Platform } from 'react-native';
2
2
  import RealtimeKitMeeting from '@cloudflare/realtimekit';
3
3
  import LocalMediaHandler from './LocalMediaHandler';
4
+ import AudioSampleHandler from './AudioSampleHandler';
5
+ import BackgroundTimer from './BackgroundHandler';
4
6
  import { registerGlobals } from '@cloudflare/react-native-webrtc';
5
7
  import './utils/crypto';
6
8
  import 'text-encoding-polyfill';
@@ -37,4 +39,14 @@ Object.defineProperty(navigator, 'RNLocalMediaHandlerImpl', {
37
39
  return LocalMediaHandler;
38
40
  },
39
41
  });
42
+ Object.defineProperty(navigator, 'RNAudioSampleHandlerImpl', {
43
+ get: function () {
44
+ return AudioSampleHandler;
45
+ },
46
+ });
47
+ Object.defineProperty(navigator, 'RNBackgroundTimerImpl', {
48
+ get: function () {
49
+ return BackgroundTimer;
50
+ },
51
+ });
40
52
  export default RealtimeKitMeeting;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/realtimekit-react-native",
3
- "version": "0.1.3-staging.1",
3
+ "version": "0.1.3-staging.2",
4
4
  "description": "Cloudflare RealtimeKit SDK for react native",
5
5
  "main": "lib/index.js",
6
6
  "author": "Cloudflare",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "private": false,
27
27
  "dependencies": {
28
- "@cloudflare/realtimekit": "1.0.2",
28
+ "@cloudflare/realtimekit": "1.1.5-staging.1",
29
29
  "events": "^3.3.0",
30
30
  "fast-base64-decode": "1.0.0",
31
31
  "node-libs-react-native": "^1.2.1",
@@ -38,7 +38,7 @@
38
38
  "android"
39
39
  ],
40
40
  "peerDependencies": {
41
- "@cloudflare/react-native-webrtc": "~114.0.18",
41
+ "@cloudflare/react-native-webrtc": "~125.0.1",
42
42
  "@expo/config-plugins": "*",
43
43
  "react": "*",
44
44
  "react-native": "*"