@stream-io/video-react-native-sdk 0.0.1-alpha.176 → 0.0.1-alpha.178
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +7 -5
- package/dist/jest-setup.js +2 -0
- package/dist/jest-setup.js.map +1 -1
- package/dist/src/components/ParticipantReaction.js +29 -4
- package/dist/src/components/ParticipantReaction.js.map +1 -1
- package/dist/src/components/ReactionsModal.d.ts +1 -1
- package/dist/src/components/ReactionsModal.js +25 -2
- package/dist/src/components/ReactionsModal.js.map +1 -1
- package/dist/src/hooks/index.d.ts +2 -1
- package/dist/src/hooks/index.js +2 -1
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/push/index.d.ts +5 -0
- package/dist/src/hooks/push/index.js +19 -0
- package/dist/src/hooks/push/index.js.map +1 -0
- package/dist/src/hooks/push/useInitAndroidTokenAndRest.d.ts +4 -0
- package/dist/src/hooks/push/useInitAndroidTokenAndRest.js +24 -0
- package/dist/src/hooks/push/useInitAndroidTokenAndRest.js.map +1 -0
- package/dist/src/hooks/push/useIosCallKeepEffect.d.ts +4 -0
- package/dist/src/hooks/push/useIosCallKeepEffect.js +80 -0
- package/dist/src/hooks/push/useIosCallKeepEffect.js.map +1 -0
- package/dist/src/hooks/push/useIosPushEffect.d.ts +5 -0
- package/dist/src/hooks/push/useIosPushEffect.js +66 -0
- package/dist/src/hooks/push/useIosPushEffect.js.map +1 -0
- package/dist/src/hooks/push/useProcessPushCallEffect.d.ts +6 -0
- package/dist/src/hooks/push/useProcessPushCallEffect.js +51 -0
- package/dist/src/hooks/push/useProcessPushCallEffect.js.map +1 -0
- package/dist/src/hooks/useAndroidKeepCallAliveEffect.d.ts +6 -0
- package/dist/src/hooks/useAndroidKeepCallAliveEffect.js +117 -0
- package/dist/src/hooks/useAndroidKeepCallAliveEffect.js.map +1 -0
- package/dist/src/providers/StreamCall.d.ts +1 -1
- package/dist/src/providers/StreamCall.js +17 -4
- package/dist/src/providers/StreamCall.js.map +1 -1
- package/dist/src/providers/StreamVideo.js +10 -0
- package/dist/src/providers/StreamVideo.js.map +1 -1
- package/dist/src/utils/StreamVideoRN/index.d.ts +24 -0
- package/dist/src/utils/StreamVideoRN/index.js +65 -0
- package/dist/src/utils/StreamVideoRN/index.js.map +1 -0
- package/dist/src/utils/StreamVideoRN/types.d.ts +103 -0
- package/dist/src/utils/StreamVideoRN/types.js +3 -0
- package/dist/src/utils/StreamVideoRN/types.js.map +1 -0
- package/dist/src/utils/push/libs.d.ts +9 -0
- package/dist/src/utils/push/libs.js +40 -0
- package/dist/src/utils/push/libs.js.map +1 -0
- package/dist/src/utils/push/rxSubjects.d.ts +3 -0
- package/dist/src/utils/push/rxSubjects.js +7 -0
- package/dist/src/utils/push/rxSubjects.js.map +1 -0
- package/dist/src/utils/push/utils.d.ts +17 -0
- package/dist/src/utils/push/utils.js +247 -0
- package/dist/src/utils/push/utils.js.map +1 -0
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js +2 -1
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js.map +1 -1
- package/package.json +25 -8
- package/src/components/ParticipantReaction.tsx +5 -4
- package/src/components/ReactionsModal.tsx +2 -2
- package/src/hooks/index.ts +2 -1
- package/src/hooks/push/index.ts +15 -0
- package/src/hooks/push/useInitAndroidTokenAndRest.ts +23 -0
- package/src/hooks/push/useIosCallKeepEffect.ts +103 -0
- package/src/hooks/push/useIosPushEffect.ts +66 -0
- package/src/hooks/push/useProcessPushCallEffect.ts +55 -0
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +99 -0
- package/src/providers/StreamCall.tsx +24 -6
- package/src/providers/StreamVideo.tsx +11 -0
- package/src/utils/StreamVideoRN/index.ts +69 -0
- package/src/utils/StreamVideoRN/types.ts +104 -0
- package/src/utils/push/libs.ts +50 -0
- package/src/utils/push/rxSubjects.ts +9 -0
- package/src/utils/push/utils.ts +255 -0
- package/src/utils/verifyAndroidBluetoothPermissions.ts +3 -1
- package/dist/src/hooks/useCallKeep.d.ts +0 -11
- package/dist/src/hooks/useCallKeep.js +0 -41
- package/dist/src/hooks/useCallKeep.js.map +0 -1
- package/dist/src/utils/StreamVideoRN.d.ts +0 -25
- package/dist/src/utils/StreamVideoRN.js +0 -23
- package/dist/src/utils/StreamVideoRN.js.map +0 -1
- package/src/hooks/useCallKeep.tsx +0 -51
- package/src/utils/StreamVideoRN.ts +0 -35
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.1-alpha.178](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.177...@stream-io/video-react-native-sdk-0.0.1-alpha.178) (2023-06-20)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **react-native:** push notification for android ([#626](https://github.com/GetStream/stream-video-js/issues/626)) ([ec2e439](https://github.com/GetStream/stream-video-js/commit/ec2e4390cb724091352ba774c55ad2245ace2955))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.0.1-alpha.177](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.176...@stream-io/video-react-native-sdk-0.0.1-alpha.177) (2023-06-20)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
5
18
|
## [0.0.1-alpha.176](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.175...@stream-io/video-react-native-sdk-0.0.1-alpha.176) (2023-06-19)
|
|
6
19
|
|
|
7
20
|
|
package/README.md
CHANGED
|
@@ -88,13 +88,15 @@ Apps created with Expo are currently not officially supported.
|
|
|
88
88
|
Stream's video roadmap and changelog are available [here](https://github.com/GetStream/protocol/discussions/127).
|
|
89
89
|
|
|
90
90
|
### Remaining 0.1 items
|
|
91
|
-
- [
|
|
92
|
-
- [
|
|
93
|
-
- [
|
|
91
|
+
- [x] Push notification- Android
|
|
92
|
+
- [x] Chat integration guide
|
|
93
|
+
- [x] Simulcasting- Android
|
|
94
|
+
- [ ] Push notification- VoIP iOS
|
|
95
|
+
- [ ] Reconnection (awaiting BE)
|
|
96
|
+
- [ ] Simulcasting- iOS
|
|
94
97
|
- [ ] Components alignment and refactor
|
|
95
98
|
- [ ] UI Component documentation
|
|
96
|
-
- [ ]
|
|
97
|
-
- [ ] Pinning and spotlight participants
|
|
99
|
+
- [ ] Pinning and spotlighting participants
|
|
98
100
|
|
|
99
101
|
### 0.2 milestone
|
|
100
102
|
- [ ] Livestream tutorial
|
package/dist/jest-setup.js
CHANGED
|
@@ -23,6 +23,8 @@ const mockedDevices = [
|
|
|
23
23
|
label: 'mocked-label',
|
|
24
24
|
},
|
|
25
25
|
];
|
|
26
|
+
// Mock the notifee module using the mock provided by @notifee/react-native itself
|
|
27
|
+
jest.mock('@notifee/react-native', () => require('@notifee/react-native/jest-mock'));
|
|
26
28
|
// When mocking we implement only the needed navigator APIs, hence the suppression rule
|
|
27
29
|
// @ts-ignore
|
|
28
30
|
global.navigator = {
|
package/dist/jest-setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest-setup.js","sourceRoot":"","sources":["../jest-setup.ts"],"names":[],"mappings":";;AAAA,8BAA8B;AAC9B,sDAAoD;AAEpD,MAAM,WAAW,GAAG;IAClB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;QACnC;YACE,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;SAChB;KACF,CAAC;CACH,CAAC;AACF,MAAM,aAAa,GAAG;IACpB;QACE,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB;CACF,CAAC;AAEF,uFAAuF;AACvF,aAAa;AACb,MAAM,CAAC,SAAS,GAAG;IACjB,YAAY,EAAE;QACZ,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;QACtD,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC;KAC7D;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"jest-setup.js","sourceRoot":"","sources":["../jest-setup.ts"],"names":[],"mappings":";;AAAA,8BAA8B;AAC9B,sDAAoD;AAEpD,MAAM,WAAW,GAAG;IAClB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;QACnC;YACE,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;SAChB;KACF,CAAC;CACH,CAAC;AACF,MAAM,aAAa,GAAG;IACpB;QACE,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB;CACF,CAAC;AAEF,kFAAkF;AAClF,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CACtC,OAAO,CAAC,iCAAiC,CAAC,CAC3C,CAAC;AAEF,uFAAuF;AACvF,aAAa;AACb,MAAM,CAAC,SAAS,GAAG;IACjB,YAAY,EAAE;QACZ,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;QACtD,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC;KAC7D;CACF,CAAC"}
|
|
@@ -1,13 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.ParticipantReaction = void 0;
|
|
4
|
-
const react_1 = require("react");
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
5
28
|
const react_native_1 = require("react-native");
|
|
6
29
|
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
7
30
|
const theme_1 = require("../theme");
|
|
8
31
|
const utils_1 = require("../utils");
|
|
9
32
|
const ParticipantReaction = (props) => {
|
|
10
|
-
const { supportedReactions } = utils_1.StreamVideoRN.
|
|
33
|
+
const { supportedReactions } = utils_1.StreamVideoRN.getConfig();
|
|
11
34
|
const { reaction, sessionId, hideAfterTimeoutInMs = 5500 } = props;
|
|
12
35
|
const call = (0, video_react_bindings_1.useCall)();
|
|
13
36
|
const [isShowing, setIsShowing] = (0, react_1.useState)(false);
|
|
@@ -28,10 +51,12 @@ const ParticipantReaction = (props) => {
|
|
|
28
51
|
supportedReactions.find((supportedReaction) => supportedReaction.emoji_code === reaction.emoji_code);
|
|
29
52
|
let component;
|
|
30
53
|
if (isShowing) {
|
|
31
|
-
if (typeof currentReaction?.icon !== 'string')
|
|
54
|
+
if (typeof currentReaction?.icon !== 'string') {
|
|
32
55
|
component = currentReaction?.icon;
|
|
33
|
-
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
34
58
|
component = <react_native_1.Text style={styles.reaction}>{currentReaction.icon}</react_native_1.Text>;
|
|
59
|
+
}
|
|
35
60
|
}
|
|
36
61
|
return (<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.md]}>{component}</react_native_1.View>);
|
|
37
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticipantReaction.js","sourceRoot":"","sources":["../../../src/components/ParticipantReaction.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticipantReaction.js","sourceRoot":"","sources":["../../../src/components/ParticipantReaction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAmD;AAEnD,+CAAsD;AACtD,0EAA0D;AAC1D,oCAAiC;AACjC,oCAAyC;AAQlC,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC1D,MAAM,EAAE,kBAAkB,EAAE,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,IAAI,GAAG,IAAA,8BAAO,GAAE,CAAC;IACvB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAE3D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAyB,CAAC;QAC9B,IAAI,IAAI,EAAE;YACR,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC,EAAE,oBAAoB,CAAC,CAAC;SAC1B;QACD,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtD,MAAM,eAAe,GACnB,QAAQ;QACR,kBAAkB,CAAC,IAAI,CACrB,CAAC,iBAAiB,EAAE,EAAE,CACpB,iBAAiB,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CACvD,CAAC;IAEJ,IAAI,SAAS,CAAC;IACd,IAAI,SAAS,EAAE;QACb,IAAI,OAAO,eAAe,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC7C,SAAS,GAAG,eAAe,EAAE,IAAI,CAAC;SACnC;aAAM;YACL,SAAS,GAAG,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,mBAAI,CAAC,CAAC;SACzE;KACF;IAED,OAAO,CACL,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,mBAAI,CAAC,CAC3E,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,mBAAmB,uBAuC9B;AAEF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE;QACR,GAAG,aAAK,CAAC,KAAK,CAAC,QAAQ;KACxB;IACD,iBAAiB,EAAE,EAAE;CACtB,CAAC,CAAC"}
|
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.ReactionModal = void 0;
|
|
4
27
|
const react_native_1 = require("react-native");
|
|
5
28
|
const theme_1 = require("../theme");
|
|
6
|
-
const react_1 = require("react");
|
|
29
|
+
const react_1 = __importStar(require("react"));
|
|
7
30
|
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
8
31
|
const utils_1 = require("../utils");
|
|
9
32
|
const icons_1 = require("../icons");
|
|
@@ -13,7 +36,7 @@ const ReactionModal = (props) => {
|
|
|
13
36
|
setIsReactionModalActive(false);
|
|
14
37
|
}, [setIsReactionModalActive]);
|
|
15
38
|
const call = (0, video_react_bindings_1.useCall)();
|
|
16
|
-
const { supportedReactions } = utils_1.StreamVideoRN.
|
|
39
|
+
const { supportedReactions } = utils_1.StreamVideoRN.getConfig();
|
|
17
40
|
const sendReaction = async (reaction) => {
|
|
18
41
|
await call?.sendReaction(reaction);
|
|
19
42
|
setIsReactionModalActive(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactionsModal.js","sourceRoot":"","sources":["../../../src/components/ReactionsModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactionsModal.js","sourceRoot":"","sources":["../../../src/components/ReactionsModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ export * from './useCallControls';
|
|
|
2
2
|
export * from './useCallCycleEffect';
|
|
3
3
|
export * from './useMutingState';
|
|
4
4
|
export * from './useLocalVideoStream';
|
|
5
|
-
export * from './useCallKeep';
|
|
6
5
|
export * from './useIncallManager';
|
|
7
6
|
export * from './usePublishMediaStreams';
|
|
8
7
|
export * from './usePermissionRequest';
|
|
9
8
|
export * from './usePermissionNotification';
|
|
9
|
+
export * from './push';
|
|
10
|
+
export * from './useAndroidKeepCallAliveEffect';
|
package/dist/src/hooks/index.js
CHANGED
|
@@ -18,9 +18,10 @@ __exportStar(require("./useCallControls"), exports);
|
|
|
18
18
|
__exportStar(require("./useCallCycleEffect"), exports);
|
|
19
19
|
__exportStar(require("./useMutingState"), exports);
|
|
20
20
|
__exportStar(require("./useLocalVideoStream"), exports);
|
|
21
|
-
__exportStar(require("./useCallKeep"), exports);
|
|
22
21
|
__exportStar(require("./useIncallManager"), exports);
|
|
23
22
|
__exportStar(require("./usePublishMediaStreams"), exports);
|
|
24
23
|
__exportStar(require("./usePermissionRequest"), exports);
|
|
25
24
|
__exportStar(require("./usePermissionNotification"), exports);
|
|
25
|
+
__exportStar(require("./push"), exports);
|
|
26
|
+
__exportStar(require("./useAndroidKeepCallAliveEffect"), exports);
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,uDAAqC;AACrC,mDAAiC;AACjC,wDAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,uDAAqC;AACrC,mDAAiC;AACjC,wDAAsC;AACtC,qDAAmC;AACnC,2DAAyC;AACzC,yDAAuC;AACvC,8DAA4C;AAC5C,yCAAuB;AACvB,kEAAgD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.usePushRegisterEffect = void 0;
|
|
4
|
+
const useIosCallKeepEffect_1 = require("./useIosCallKeepEffect");
|
|
5
|
+
const useIosPushEffect_1 = require("./useIosPushEffect");
|
|
6
|
+
const useProcessPushCallEffect_1 = require("./useProcessPushCallEffect");
|
|
7
|
+
const useInitAndroidTokenAndRest_1 = require("./useInitAndroidTokenAndRest");
|
|
8
|
+
/**
|
|
9
|
+
* This hook is used to do the initial setup for push notifications.
|
|
10
|
+
* It must be used in a component which is a child of StreamVideo from bindings
|
|
11
|
+
*/
|
|
12
|
+
const usePushRegisterEffect = () => {
|
|
13
|
+
(0, useIosCallKeepEffect_1.useIosCallKeepEffect)();
|
|
14
|
+
(0, useIosPushEffect_1.useIosPushEffect)();
|
|
15
|
+
(0, useProcessPushCallEffect_1.useProcessPushCallEffect)();
|
|
16
|
+
(0, useInitAndroidTokenAndRest_1.useInitAndroidTokenAndRest)();
|
|
17
|
+
};
|
|
18
|
+
exports.usePushRegisterEffect = usePushRegisterEffect;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/push/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAC9D,yDAAsD;AACtD,yEAAsE;AACtE,6EAA0E;AAE1E;;;GAGG;AACI,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,IAAA,2CAAoB,GAAE,CAAC;IACvB,IAAA,mCAAgB,GAAE,CAAC;IACnB,IAAA,mDAAwB,GAAE,CAAC;IAC3B,IAAA,uDAA0B,GAAE,CAAC;AAC/B,CAAC,CAAC;AALW,QAAA,qBAAqB,yBAKhC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useInitAndroidTokenAndRest = void 0;
|
|
4
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
const utils_2 = require("../../utils/push/utils");
|
|
8
|
+
/**
|
|
9
|
+
* This hook is used to initialize the push token for Android and ask notification permissions.
|
|
10
|
+
*/
|
|
11
|
+
const useInitAndroidTokenAndRest = () => {
|
|
12
|
+
const client = (0, video_react_bindings_1.useStreamVideoClient)();
|
|
13
|
+
const connectedUserId = (0, video_react_bindings_1.useConnectedUser)()?.id;
|
|
14
|
+
(0, react_1.useEffect)(() => {
|
|
15
|
+
const pushConfig = utils_1.StreamVideoRN.getConfig().push;
|
|
16
|
+
// NOTE: we need to wait for user to be connected before we can send the push token
|
|
17
|
+
if (!client || !connectedUserId || !pushConfig) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
(0, utils_2.initAndroidPushTokenAndAskPermissions)(client, pushConfig);
|
|
21
|
+
}, [client, connectedUserId]);
|
|
22
|
+
};
|
|
23
|
+
exports.useInitAndroidTokenAndRest = useInitAndroidTokenAndRest;
|
|
24
|
+
//# sourceMappingURL=useInitAndroidTokenAndRest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInitAndroidTokenAndRest.js","sourceRoot":"","sources":["../../../../src/hooks/push/useInitAndroidTokenAndRest.ts"],"names":[],"mappings":";;;AAAA,0EAGyC;AACzC,iCAAkC;AAClC,uCAA4C;AAC5C,kDAA+E;AAE/E;;GAEG;AACI,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,MAAM,MAAM,GAAG,IAAA,2CAAoB,GAAE,CAAC;IACtC,MAAM,eAAe,GAAG,IAAA,uCAAgB,GAAE,EAAE,EAAE,CAAC;IAC/C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;QAClD,mFAAmF;QACnF,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE;YAC9C,OAAO;SACR;QACD,IAAA,6CAAqC,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useIosCallKeepEffect = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const libs_1 = require("../../utils/push/libs");
|
|
6
|
+
const rxSubjects_1 = require("../../utils/push/rxSubjects");
|
|
7
|
+
const react_native_1 = require("react-native");
|
|
8
|
+
const utils_1 = require("../../utils");
|
|
9
|
+
/**
|
|
10
|
+
* This hook is used to listen to callkeep events and do the necessary actions
|
|
11
|
+
*/
|
|
12
|
+
const useIosCallKeepEffect = () => {
|
|
13
|
+
(0, react_1.useEffect)(() => {
|
|
14
|
+
const pushConfig = utils_1.StreamVideoRN.getConfig().push;
|
|
15
|
+
if (react_native_1.Platform.OS !== 'ios' || !pushConfig) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const callkeep = (0, libs_1.getCallKeepLib)();
|
|
19
|
+
callkeep.addEventListener('didReceiveStartCallAction', ({ handle, callUUID, name }) => {
|
|
20
|
+
console.log('didReceiveStartCallAction', { handle, callUUID, name });
|
|
21
|
+
});
|
|
22
|
+
callkeep.addEventListener('answerCall', ({ callUUID }) => {
|
|
23
|
+
console.log('answerCall', { callUUID });
|
|
24
|
+
callkeep.backToForeground();
|
|
25
|
+
// close the dialer screen so that the app can be seen (only android needs this)
|
|
26
|
+
// callkeep.endCall(callUUID);
|
|
27
|
+
rxSubjects_1.pushAcceptedIncomingCallCId$.next(callUUID);
|
|
28
|
+
pushConfig.navigateAcceptCall();
|
|
29
|
+
});
|
|
30
|
+
callkeep.addEventListener('endCall', ({ callUUID }) => {
|
|
31
|
+
if (callUUID) {
|
|
32
|
+
callkeep.endCall(callUUID);
|
|
33
|
+
}
|
|
34
|
+
rxSubjects_1.pushRejectedIncomingCallCId$.next(callUUID);
|
|
35
|
+
console.log('endCall', { callUUID });
|
|
36
|
+
});
|
|
37
|
+
callkeep.addEventListener('didDisplayIncomingCall', ({ error, callUUID, handle, localizedCallerName, hasVideo, fromPushKit, payload, }) => {
|
|
38
|
+
console.log('didDisplayIncomingCall', {
|
|
39
|
+
error,
|
|
40
|
+
callUUID,
|
|
41
|
+
handle,
|
|
42
|
+
localizedCallerName,
|
|
43
|
+
hasVideo,
|
|
44
|
+
fromPushKit,
|
|
45
|
+
payload,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
callkeep.addEventListener('didPerformSetMutedCallAction', ({ muted, callUUID }) => {
|
|
49
|
+
console.log('didPerformSetMutedCallAction', { muted, callUUID });
|
|
50
|
+
});
|
|
51
|
+
callkeep.addEventListener('didToggleHoldCallAction', ({ hold, callUUID }) => {
|
|
52
|
+
console.log('didToggleHoldCallAction', { hold, callUUID });
|
|
53
|
+
});
|
|
54
|
+
callkeep.addEventListener('didPerformDTMFAction', ({ digits, callUUID }) => {
|
|
55
|
+
console.log('didPerformDTMFAction', { digits, callUUID });
|
|
56
|
+
});
|
|
57
|
+
callkeep.addEventListener('didActivateAudioSession', () => {
|
|
58
|
+
console.log('didActivateAudioSession');
|
|
59
|
+
});
|
|
60
|
+
callkeep.addEventListener('checkReachability', () => {
|
|
61
|
+
/*
|
|
62
|
+
* On Android when the application is in background, after a certain delay the OS will close every connection with informing about it. So we have to check if the application is reachable before making a call from the native phone application.
|
|
63
|
+
*/
|
|
64
|
+
callkeep.setReachable();
|
|
65
|
+
});
|
|
66
|
+
return () => {
|
|
67
|
+
callkeep.removeEventListener('didReceiveStartCallAction');
|
|
68
|
+
callkeep.removeEventListener('answerCall');
|
|
69
|
+
callkeep.removeEventListener('endCall');
|
|
70
|
+
callkeep.removeEventListener('didDisplayIncomingCall');
|
|
71
|
+
callkeep.removeEventListener('didPerformSetMutedCallAction');
|
|
72
|
+
callkeep.removeEventListener('didToggleHoldCallAction');
|
|
73
|
+
callkeep.removeEventListener('didPerformDTMFAction');
|
|
74
|
+
callkeep.removeEventListener('didActivateAudioSession');
|
|
75
|
+
callkeep.removeEventListener('checkReachability');
|
|
76
|
+
};
|
|
77
|
+
}, []);
|
|
78
|
+
};
|
|
79
|
+
exports.useIosCallKeepEffect = useIosCallKeepEffect;
|
|
80
|
+
//# sourceMappingURL=useIosCallKeepEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIosCallKeepEffect.js","sourceRoot":"","sources":["../../../../src/hooks/push/useIosCallKeepEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useIosPushEffect = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const libs_1 = require("../../utils/push/libs");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const utils_1 = require("../../utils");
|
|
8
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
9
|
+
/**
|
|
10
|
+
* This hook is used to do the initial setup of listeners
|
|
11
|
+
* for ios voip push notifications.
|
|
12
|
+
*/
|
|
13
|
+
const useIosPushEffect = () => {
|
|
14
|
+
const client = (0, video_react_bindings_1.useStreamVideoClient)();
|
|
15
|
+
(0, react_1.useEffect)(() => {
|
|
16
|
+
const pushConfig = utils_1.StreamVideoRN.getConfig().push;
|
|
17
|
+
if (react_native_1.Platform.OS !== 'ios' || !pushConfig || !client) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const voipPushNotification = (0, libs_1.getVoipPushNotificationLib)();
|
|
21
|
+
const onTokenReceived = (token) => {
|
|
22
|
+
// send token to stream
|
|
23
|
+
const push_provider_name = pushConfig.ios.pushProviderName;
|
|
24
|
+
client.addVoipDevice(token, 'apn', push_provider_name).catch((err) => {
|
|
25
|
+
console.warn('Failed to send voip token to APN', err);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
voipPushNotification.addEventListener('register', (token) => {
|
|
29
|
+
onTokenReceived(token);
|
|
30
|
+
});
|
|
31
|
+
// ===== Step 2: subscribe `notification` event =====
|
|
32
|
+
// --- this.onvoipPushNotificationReceived
|
|
33
|
+
voipPushNotification.addEventListener('notification', (notification) => {
|
|
34
|
+
// --- when receive remote voip push, register your VoIP client, show local notification ... etc
|
|
35
|
+
console.log({ notification });
|
|
36
|
+
// --- optionally, if you `addCompletionHandler` from the native side, once you have done the js jobs to initiate a call, call `completion()`
|
|
37
|
+
// voipPushNotification.onVoipNotificationCompleted(notification.uuid);
|
|
38
|
+
});
|
|
39
|
+
// ===== Step 3: subscribe `didLoadWithEvents` event =====
|
|
40
|
+
voipPushNotification.addEventListener('didLoadWithEvents', (events) => {
|
|
41
|
+
// --- this will fire when there are events occured before js bridge initialized
|
|
42
|
+
// --- use this event to execute your event handler manually by event type
|
|
43
|
+
if (!events || !Array.isArray(events) || events.length < 1) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
for (let voipPushEvent of events) {
|
|
47
|
+
let { name, data } = voipPushEvent;
|
|
48
|
+
console.log({ voipPushEvent });
|
|
49
|
+
if (name === 'RNVoipPushRemoteNotificationsRegisteredEvent') {
|
|
50
|
+
onTokenReceived(data);
|
|
51
|
+
}
|
|
52
|
+
else if (name === 'RNVoipPushRemoteNotificationReceivedEvent') {
|
|
53
|
+
console.log('RNVoipPushRemoteNotificationReceivedEvent', { data });
|
|
54
|
+
// voipPushNotification.onVoipNotificationCompleted(data.uuid);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return () => {
|
|
59
|
+
voipPushNotification.removeEventListener('didLoadWithEvents');
|
|
60
|
+
voipPushNotification.removeEventListener('register');
|
|
61
|
+
voipPushNotification.removeEventListener('notification');
|
|
62
|
+
};
|
|
63
|
+
}, [client]);
|
|
64
|
+
};
|
|
65
|
+
exports.useIosPushEffect = useIosPushEffect;
|
|
66
|
+
//# sourceMappingURL=useIosPushEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIosPushEffect.js","sourceRoot":"","sources":["../../../../src/hooks/push/useIosPushEffect.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAClC,gDAAmE;AAEnE,+CAAwC;AACxC,uCAA4C;AAC5C,0EAAuE;AAEvE;;;GAGG;AACI,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,MAAM,GAAG,IAAA,2CAAoB,GAAE,CAAC;IACtC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;QAClD,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;YACnD,OAAO;SACR;QACD,MAAM,oBAAoB,GAAG,IAAA,iCAA0B,GAAE,CAAC;QAC1D,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,EAAE;YACxC,uBAAuB;YACvB,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC3D,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnE,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1D,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,0CAA0C;QAC1C,oBAAoB,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,YAAY,EAAE,EAAE;YACrE,gGAAgG;YAChG,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;YAE9B,6IAA6I;YAC7I,uEAAuE;QACzE,CAAC,CAAC,CAAC;QAEH,0DAA0D;QAC1D,oBAAoB,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;YACpE,gFAAgF;YAChF,0EAA0E;YAE1E,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1D,OAAO;aACR;YACD,KAAK,IAAI,aAAa,IAAI,MAAM,EAAE;gBAChC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC/B,IAAI,IAAI,KAAK,8CAA8C,EAAE;oBAC3D,eAAe,CAAC,IAAI,CAAC,CAAC;iBACvB;qBAAM,IAAI,IAAI,KAAK,2CAA2C,EAAE;oBAC/D,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,+DAA+D;iBAChE;aACF;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;YAC9D,oBAAoB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACrD,oBAAoB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC,CAAC;AAtDW,QAAA,gBAAgB,oBAsD3B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This hook is used to process the incoming call data via push notifications using the relevant rxjs subjects
|
|
3
|
+
* It either joins or leaves the call based on the user's action.
|
|
4
|
+
* Note: this effect cannot work when push notifications are received when the app is in quit state this is only if app is in background state
|
|
5
|
+
*/
|
|
6
|
+
export declare const useProcessPushCallEffect: () => void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useProcessPushCallEffect = void 0;
|
|
4
|
+
const rxSubjects_1 = require("../../utils/push/rxSubjects");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
8
|
+
const operators_1 = require("rxjs/operators");
|
|
9
|
+
const utils_2 = require("../../utils/push/utils");
|
|
10
|
+
/**
|
|
11
|
+
* This hook is used to process the incoming call data via push notifications using the relevant rxjs subjects
|
|
12
|
+
* It either joins or leaves the call based on the user's action.
|
|
13
|
+
* Note: this effect cannot work when push notifications are received when the app is in quit state this is only if app is in background state
|
|
14
|
+
*/
|
|
15
|
+
const useProcessPushCallEffect = () => {
|
|
16
|
+
const client = (0, video_react_bindings_1.useStreamVideoClient)();
|
|
17
|
+
const connectedUserId = (0, video_react_bindings_1.useConnectedUser)()?.id;
|
|
18
|
+
// The Effect to join/reject call automatically when incoming call was received and processed from push notification
|
|
19
|
+
(0, react_1.useEffect)(() => {
|
|
20
|
+
const pushConfig = utils_1.StreamVideoRN.getConfig().push;
|
|
21
|
+
if (!pushConfig || !client || !connectedUserId) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// if the user accepts the call from push notification we join the call
|
|
25
|
+
const acceptedCallSubscription = rxSubjects_1.pushAcceptedIncomingCallCId$
|
|
26
|
+
.pipe((0, operators_1.filter)(cidIsNotUndefined))
|
|
27
|
+
.subscribe(async (callCId) => {
|
|
28
|
+
await (0, utils_2.processCallFromPush)(client, callCId, 'accept');
|
|
29
|
+
rxSubjects_1.pushAcceptedIncomingCallCId$.next(undefined); // remove the current call id to avoid processing again
|
|
30
|
+
});
|
|
31
|
+
// if the user rejects the call from push notification we leave the call
|
|
32
|
+
const declinedCallSubscription = rxSubjects_1.pushRejectedIncomingCallCId$
|
|
33
|
+
.pipe((0, operators_1.filter)(cidIsNotUndefined))
|
|
34
|
+
.subscribe(async (callCId) => {
|
|
35
|
+
await (0, utils_2.processCallFromPush)(client, callCId, 'decline');
|
|
36
|
+
rxSubjects_1.pushRejectedIncomingCallCId$.next(undefined); // remove the current call id to avoid processing again
|
|
37
|
+
});
|
|
38
|
+
return () => {
|
|
39
|
+
acceptedCallSubscription.unsubscribe();
|
|
40
|
+
declinedCallSubscription.unsubscribe();
|
|
41
|
+
};
|
|
42
|
+
}, [client, connectedUserId]);
|
|
43
|
+
};
|
|
44
|
+
exports.useProcessPushCallEffect = useProcessPushCallEffect;
|
|
45
|
+
/**
|
|
46
|
+
* A type guard to check if the cid is not undefined
|
|
47
|
+
*/
|
|
48
|
+
function cidIsNotUndefined(cid) {
|
|
49
|
+
return cid !== undefined;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=useProcessPushCallEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProcessPushCallEffect.js","sourceRoot":"","sources":["../../../../src/hooks/push/useProcessPushCallEffect.ts"],"names":[],"mappings":";;;AAAA,4DAGqC;AACrC,iCAAkC;AAClC,uCAA4C;AAC5C,0EAGyC;AACzC,8CAAwC;AACxC,kDAA6D;AAE7D;;;;GAIG;AACI,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,IAAA,2CAAoB,GAAE,CAAC;IACtC,MAAM,eAAe,GAAG,IAAA,uCAAgB,GAAE,EAAE,EAAE,CAAC;IAC/C,oHAAoH;IACpH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE;YAC9C,OAAO;SACR;QAED,uEAAuE;QACvE,MAAM,wBAAwB,GAAG,yCAA4B;aAC1D,IAAI,CAAC,IAAA,kBAAM,EAAC,iBAAiB,CAAC,CAAC;aAC/B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC3B,MAAM,IAAA,2BAAmB,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrD,yCAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,uDAAuD;QACvG,CAAC,CAAC,CAAC;QACL,wEAAwE;QACxE,MAAM,wBAAwB,GAAG,yCAA4B;aAC1D,IAAI,CAAC,IAAA,kBAAM,EAAC,iBAAiB,CAAC,CAAC;aAC/B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC3B,MAAM,IAAA,2BAAmB,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACtD,yCAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,uDAAuD;QACvG,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,wBAAwB,CAAC,WAAW,EAAE,CAAC;YACvC,wBAAwB,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AA7BW,QAAA,wBAAwB,4BA6BnC;AAEF;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAuB;IAChD,OAAO,GAAG,KAAK,SAAS,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This hook is used to keep the call alive in the background for Android.
|
|
3
|
+
* It starts a foreground service to keep the call alive as soon as the call is joined
|
|
4
|
+
* and stops the foreground Service when the call is left.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useAndroidKeepCallAliveEffect: () => void;
|