cobrowse-sdk-react-native 2.14.0 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.vscode/settings.json +7 -0
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/io/cobrowse/reactnative/CobrowseIOCommonDelegates.java +3 -3
  4. package/android/src/main/java/io/cobrowse/reactnative/CobrowseIOModule.java +23 -0
  5. package/android/src/main/java/io/cobrowse/reactnative/CommonDelegates.java +20 -83
  6. package/cobrowse-sdk-react-native.podspec +1 -1
  7. package/ios/RCTCobrowseIO.m +20 -71
  8. package/js/CBIOBroadcastPickerView.tsx +15 -0
  9. package/js/CobrowseAccessibilityService.ts +15 -0
  10. package/js/CobrowseIO.ts +156 -0
  11. package/js/CobrowseView.tsx +150 -0
  12. package/js/{Redacted.js → Redacted.tsx} +3 -2
  13. package/js/Session.ts +128 -0
  14. package/js/SessionControl.ts +38 -0
  15. package/js/Unredacted.tsx +106 -0
  16. package/js/{index.js → index.ts} +1 -0
  17. package/js/{useSession.js → useSession.ts} +5 -4
  18. package/lib/commonjs/CBIOBroadcastPickerView.js +15 -0
  19. package/lib/commonjs/CBIOBroadcastPickerView.js.map +1 -0
  20. package/lib/commonjs/CobrowseAccessibilityService.js +22 -0
  21. package/lib/commonjs/CobrowseAccessibilityService.js.map +1 -0
  22. package/lib/commonjs/CobrowseIO.js +149 -0
  23. package/lib/commonjs/CobrowseIO.js.map +1 -0
  24. package/lib/commonjs/CobrowseView.js +146 -0
  25. package/lib/commonjs/CobrowseView.js.map +1 -0
  26. package/lib/commonjs/Redacted.js +14 -0
  27. package/lib/commonjs/Redacted.js.map +1 -0
  28. package/lib/commonjs/Session.js +100 -0
  29. package/lib/commonjs/Session.js.map +1 -0
  30. package/lib/commonjs/SessionControl.js +39 -0
  31. package/lib/commonjs/SessionControl.js.map +1 -0
  32. package/lib/commonjs/Unredacted.js +82 -0
  33. package/lib/commonjs/Unredacted.js.map +1 -0
  34. package/lib/commonjs/index.js +77 -0
  35. package/lib/commonjs/index.js.map +1 -0
  36. package/lib/commonjs/useSession.js +35 -0
  37. package/lib/commonjs/useSession.js.map +1 -0
  38. package/lib/module/CBIOBroadcastPickerView.js +8 -0
  39. package/lib/module/CBIOBroadcastPickerView.js.map +1 -0
  40. package/lib/module/CobrowseAccessibilityService.js +13 -0
  41. package/lib/module/CobrowseAccessibilityService.js.map +1 -0
  42. package/lib/module/CobrowseIO.js +141 -0
  43. package/lib/module/CobrowseIO.js.map +1 -0
  44. package/lib/module/CobrowseView.js +136 -0
  45. package/lib/module/CobrowseView.js.map +1 -0
  46. package/lib/module/Redacted.js +7 -0
  47. package/lib/module/Redacted.js.map +1 -0
  48. package/lib/module/Session.js +93 -0
  49. package/lib/module/Session.js.map +1 -0
  50. package/lib/module/SessionControl.js +31 -0
  51. package/lib/module/SessionControl.js.map +1 -0
  52. package/lib/module/Unredacted.js +71 -0
  53. package/lib/module/Unredacted.js.map +1 -0
  54. package/lib/module/index.js +9 -0
  55. package/lib/module/index.js.map +1 -0
  56. package/lib/module/useSession.js +28 -0
  57. package/lib/module/useSession.js.map +1 -0
  58. package/lib/typescript/CBIOBroadcastPickerView.d.ts +8 -0
  59. package/lib/typescript/CBIOBroadcastPickerView.d.ts.map +1 -0
  60. package/lib/typescript/CobrowseAccessibilityService.d.ts +8 -0
  61. package/lib/typescript/CobrowseAccessibilityService.d.ts.map +1 -0
  62. package/lib/typescript/CobrowseIO.d.ts +30 -0
  63. package/lib/typescript/CobrowseIO.d.ts.map +1 -0
  64. package/lib/typescript/CobrowseView.d.ts +25 -0
  65. package/lib/typescript/CobrowseView.d.ts.map +1 -0
  66. package/lib/typescript/Redacted.d.ts +4 -0
  67. package/lib/typescript/Redacted.d.ts.map +1 -0
  68. package/lib/typescript/Session.d.ts +42 -0
  69. package/lib/typescript/Session.d.ts.map +1 -0
  70. package/lib/typescript/SessionControl.d.ts +17 -0
  71. package/lib/typescript/SessionControl.d.ts.map +1 -0
  72. package/lib/typescript/Unredacted.d.ts +10 -0
  73. package/lib/typescript/Unredacted.d.ts.map +1 -0
  74. package/lib/typescript/index.d.ts +10 -0
  75. package/lib/typescript/index.d.ts.map +1 -0
  76. package/lib/typescript/useSession.d.ts +3 -0
  77. package/lib/typescript/useSession.d.ts.map +1 -0
  78. package/package.json +35 -7
  79. package/tsconfig.build.json +5 -0
  80. package/tsconfig.json +28 -0
  81. package/js/CBIOBroadcastPickerView.js +0 -11
  82. package/js/CobrowseAccessibilityService.js +0 -11
  83. package/js/CobrowseIO.js +0 -141
  84. package/js/CobrowseView.js +0 -129
  85. package/js/Session.js +0 -107
  86. package/js/SessionControl.js +0 -26
  87. package/js/Unredacted.js +0 -82
  88. package/ts/CBIOBroadcastPickerView.d.ts +0 -8
  89. package/ts/CobrowseAccessibilityService.d.ts +0 -6
  90. package/ts/CobrowseIO.d.ts +0 -29
  91. package/ts/CobrowseView.d.ts +0 -20
  92. package/ts/Redacted.d.ts +0 -8
  93. package/ts/Session.d.ts +0 -58
  94. package/ts/SessionControl.d.ts +0 -9
  95. package/ts/Unredacted.d.ts +0 -15
  96. package/ts/index.d.ts +0 -7
  97. package/ts/useSession.d.ts +0 -3
package/js/Session.ts ADDED
@@ -0,0 +1,128 @@
1
+ import { EmitterSubscription, NativeEventEmitter, NativeModules } from 'react-native'
2
+ const CobrowseIONative = NativeModules.CobrowseIO
3
+
4
+ const emitter = new NativeEventEmitter(CobrowseIONative)
5
+
6
+ export type SessionEvent = 'updated' | 'ended'
7
+ export type CobrowseSessionEvents = `session.${SessionEvent}`
8
+ export type SessionState = 'active' | 'authorizing' | 'ended' | 'pending'
9
+ export type RemoteControlState = 'on' | 'requested' | 'rejected' | 'off'
10
+ export type FullDeviceState = 'on' | 'requested' | 'rejected' | 'off'
11
+
12
+ export interface Agent {
13
+ id: string
14
+ name: string
15
+ }
16
+
17
+ export interface SessionLike {
18
+ id: string
19
+ code: string
20
+ state: SessionState
21
+ full_device: boolean
22
+ remote_control: RemoteControlState
23
+ agent: Agent
24
+ full_device_state: FullDeviceState
25
+ }
26
+
27
+ export default class Session {
28
+ constructor (private session: SessionLike | Record<string, never> = {}) {
29
+ this._listen()
30
+ }
31
+
32
+ private _update (session: SessionLike, onMatch?: () => void): void {
33
+ if (this.session.id === undefined || (session != null && this.session.id === session.id)) {
34
+ this.session = session
35
+ if (typeof onMatch === 'function') onMatch()
36
+ }
37
+ }
38
+
39
+ _listen (): void {
40
+ const updates = emitter.addListener('session.updated', (session: SessionLike) => this._update(session))
41
+ const ended = emitter.addListener('session.ended', (session: SessionLike) => {
42
+ this._update(session, () => {
43
+ updates.remove()
44
+ ended.remove()
45
+ })
46
+ })
47
+ }
48
+
49
+ addListener (eventType: SessionEvent, listener: (session: Session) => void): EmitterSubscription {
50
+ let mappedEventsType: CobrowseSessionEvents
51
+ // TODO: this class should extend EventEmitter and forward
52
+ // on the non-namespaced versions of these events
53
+ switch (eventType) {
54
+ case 'ended':
55
+ mappedEventsType = 'session.updated'
56
+ break
57
+ case 'updated':
58
+ mappedEventsType = 'session.ended'
59
+ break
60
+ }
61
+
62
+ return emitter.addListener(mappedEventsType ?? eventType, (session: SessionLike) => {
63
+ this._update(session, () => {
64
+ listener(this)
65
+ })
66
+ })
67
+ }
68
+
69
+ get id (): string | null {
70
+ return this.session.id
71
+ }
72
+
73
+ get code (): string | null {
74
+ return this.session.code
75
+ }
76
+
77
+ get state (): SessionState | null {
78
+ return this.session.state
79
+ }
80
+
81
+ get full_device (): boolean {
82
+ return this.session.full_device ?? false
83
+ }
84
+
85
+ get full_device_state (): FullDeviceState {
86
+ return this.session.full_device_state ?? 'off'
87
+ }
88
+
89
+ get remote_control (): RemoteControlState | null {
90
+ return this.session.remote_control
91
+ }
92
+
93
+ get agent (): Agent | null {
94
+ return this.session.agent
95
+ }
96
+
97
+ async activate (): Promise<void> {
98
+ return CobrowseIONative.activateSession().then(() => {})
99
+ }
100
+
101
+ async end (): Promise<void> {
102
+ return CobrowseIONative.endSession()
103
+ }
104
+
105
+ isActive (): boolean {
106
+ return this.session.state === 'active'
107
+ }
108
+
109
+ isAuthorizing (): boolean {
110
+ return this.session.state === 'authorizing'
111
+ }
112
+
113
+ isPending (): boolean {
114
+ return this.session.state === 'pending'
115
+ }
116
+
117
+ isEnded (): boolean {
118
+ return this.session.state === 'ended'
119
+ }
120
+
121
+ async setFullDevice (state: boolean | FullDeviceState): Promise<void> {
122
+ return CobrowseIONative.updateSession({ full_device: state })
123
+ }
124
+
125
+ async setRemoteControl (state: RemoteControlState): Promise<void> {
126
+ return CobrowseIONative.updateSession({ remote_control: state })
127
+ }
128
+ }
@@ -0,0 +1,38 @@
1
+ import React, { Component } from 'react'
2
+ import CobrowseIO from './CobrowseIO'
3
+ import type { EmitterSubscription } from 'react-native'
4
+ import type Session from './Session'
5
+
6
+ interface SessionControlProps {
7
+ children: React.ReactNode
8
+ }
9
+
10
+ interface SessionControlState {
11
+ session: Session | null
12
+ }
13
+
14
+ export default class SessionControl extends Component<SessionControlProps, SessionControlState> {
15
+ private _updateListener: EmitterSubscription | null = null
16
+
17
+ constructor (props: SessionControlProps) {
18
+ super(props)
19
+ this.state = { session: null }
20
+ }
21
+
22
+ async componentDidMount (): Promise<void> {
23
+ this.setState({ session: await CobrowseIO.currentSession() })
24
+ this._updateListener = CobrowseIO.addListener(CobrowseIO.SESSION_UPDATED, (session) => {
25
+ this.setState({ session })
26
+ })
27
+ }
28
+
29
+ componentWillUnmount (): void {
30
+ if (this._updateListener != null) this._updateListener.remove()
31
+ }
32
+
33
+ render (): React.ReactNode | null {
34
+ const { session } = this.state
35
+ if (session?.isActive() === true) return this.props.children
36
+ else return null
37
+ }
38
+ }
@@ -0,0 +1,106 @@
1
+ import React, {
2
+ forwardRef,
3
+ useMemo,
4
+ useRef,
5
+ useCallback,
6
+ useEffect,
7
+ Component as ReactComponentType,
8
+ PropsWithoutRef,
9
+ type ForwardRefExoticComponent,
10
+ type RefAttributes,
11
+ type ComponentClass,
12
+ type Ref,
13
+ type PropsWithChildren,
14
+ type ForwardedRef
15
+ } from 'react'
16
+ import { ScrollView, Text, View, SectionList, FlatList, Image, findNodeHandle, NativeModules } from 'react-native'
17
+ import { throttle } from 'lodash'
18
+
19
+ const CobrowseIONative = NativeModules.CobrowseIO
20
+
21
+ type RefHandlingComponent<T, P> =
22
+ | ComponentClass<P & { ref?: Ref<T> }, any>
23
+ | ForwardRefExoticComponent<PropsWithChildren<P> & RefAttributes<T>>
24
+
25
+ function mergeRefs<T> (refs: Array<ForwardedRef<T>>): Ref<T> {
26
+ return (value) => {
27
+ refs.forEach((ref) => {
28
+ if (typeof ref === 'function') {
29
+ ref(value)
30
+ } else if (ref != null) {
31
+ ref.current = value
32
+ }
33
+ })
34
+ }
35
+ }
36
+
37
+ const unredactedTags = new Set()
38
+ const sendUnredactionUpdates = throttle(() => {
39
+ CobrowseIONative.setUnredactedTags([...unredactedTags])
40
+ }, 50, { leading: false })
41
+
42
+ function removeUnredactedView (view: number | null): void {
43
+ if (view != null) {
44
+ unredactedTags.delete(view)
45
+ sendUnredactionUpdates()
46
+ }
47
+ }
48
+
49
+ export function useUnredaction<C extends ComponentClass | ReactComponentType = View | ScrollView | Text | Image | FlatList | SectionList> (shouldWarnUnhandledRefs = true, componentName = ''): ForwardedRef<C> {
50
+ const ref = useRef<number | null>(null)
51
+
52
+ const setRef = useCallback((node: C | null) => {
53
+ let hasRemovedRef = false
54
+ if (ref.current != null) {
55
+ hasRemovedRef = true
56
+ removeUnredactedView(ref.current)
57
+ }
58
+
59
+ if (node != null) {
60
+ const view = findNodeHandle(node)
61
+
62
+ if (view != null) {
63
+ unredactedTags.add(view)
64
+ sendUnredactionUpdates()
65
+
66
+ ref.current = view
67
+ } else {
68
+ console.warn(`Failed to apply unredact() to ${componentName} due to view not found`)
69
+ }
70
+ } else if (!hasRemovedRef) {
71
+ console.warn(
72
+ `Failed to apply unredact() to ${componentName} due to null node handle – make sure you are forwarding refs`
73
+ )
74
+ }
75
+ }, [])
76
+
77
+ useEffect(() => {
78
+ if (shouldWarnUnhandledRefs && ref.current == null) {
79
+ console.warn(
80
+ `Failed to apply unredact() to ${componentName} due to null node handle – make sure the setRef function is called with the ref`
81
+ )
82
+ }
83
+
84
+ return () => removeUnredactedView(ref.current)
85
+ }, [])
86
+
87
+ return setRef
88
+ }
89
+
90
+ export function unredact<T, P extends {}> (
91
+ Component: RefHandlingComponent<T, P>
92
+ ): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>> {
93
+ return forwardRef<T, P>(
94
+ function ComponentFromHOC (props, ref) {
95
+ const localRef = useUnredaction(true, Component?.displayName) as ForwardedRef<T>
96
+ const refs = useMemo(() => mergeRefs([localRef, ref]), [localRef, ref])
97
+
98
+ return (
99
+ <Component {...(props)} ref={refs} />
100
+ )
101
+ }
102
+ )
103
+ }
104
+
105
+ const Unredacted = unredact(View)
106
+ export default Unredacted
@@ -6,3 +6,4 @@ export { default as SessionControl } from './SessionControl'
6
6
  export { default as CobrowseAccessibilityService } from './CobrowseAccessibilityService'
7
7
  export { default as CBIOBroadcastPickerView } from './CBIOBroadcastPickerView'
8
8
  export { useSession } from './useSession'
9
+ export type { default as Session, CobrowseSessionEvents } from './Session'
@@ -1,13 +1,14 @@
1
1
  import { useEffect, useState } from 'react'
2
2
  import CobrowseIO from './CobrowseIO'
3
+ import type Session from './Session'
3
4
 
4
- export function useSession () {
5
- const [session, setSession] = useState(null)
5
+ export function useSession (): Session | null {
6
+ const [session, setSession] = useState<Session | null>(null)
6
7
 
7
8
  // initial value
8
9
  useEffect(() => {
9
10
  let isMounted = true
10
- const getSession = async () => {
11
+ async function getSession (): Promise<void> {
11
12
  const session = await CobrowseIO.currentSession()
12
13
 
13
14
  if (isMounted) {
@@ -15,7 +16,7 @@ export function useSession () {
15
16
  }
16
17
  }
17
18
 
18
- getSession()
19
+ void getSession()
19
20
 
20
21
  return () => {
21
22
  isMounted = false
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = CBIOBroadcastPickerView;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const CBIOBroadcastPickerViewNativeView = (0, _reactNative.requireNativeComponent)('CBIOBroadcastPickerView');
11
+ function CBIOBroadcastPickerView(props) {
12
+ // this native component is only available on iOS
13
+ return _reactNative.Platform.OS === 'ios' ? /*#__PURE__*/_react.default.createElement(CBIOBroadcastPickerViewNativeView, props) : null;
14
+ }
15
+ //# sourceMappingURL=CBIOBroadcastPickerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","obj","__esModule","default","CBIOBroadcastPickerViewNativeView","requireNativeComponent","CBIOBroadcastPickerView","props","Platform","OS","createElement"],"sourceRoot":"../../js","sources":["CBIOBroadcastPickerView.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAA+E,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE/E,MAAMG,iCAAiC,GAAG,IAAAC,mCAAsB,EAC9D,yBACF,CAAC;AAMc,SAASC,uBAAuBA,CAAEC,KAAmC,EAAsB;EACxG;EACA,OAAOC,qBAAQ,CAACC,EAAE,KAAK,KAAK,gBAAGZ,MAAA,CAAAM,OAAA,CAAAO,aAAA,CAACN,iCAAiC,EAAKG,KAAQ,CAAC,GAAG,IAAI;AACxF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.isRunning = isRunning;
8
+ exports.showSetup = showSetup;
9
+ var _reactNative = require("react-native");
10
+ const CobrowseIONative = _reactNative.NativeModules.CobrowseIO;
11
+ function showSetup() {
12
+ return CobrowseIONative.accessibilityServiceShowSetup();
13
+ }
14
+ function isRunning() {
15
+ return CobrowseIONative.accessibilityServiceIsRunning();
16
+ }
17
+ var _default = {
18
+ showSetup,
19
+ isRunning
20
+ };
21
+ exports.default = _default;
22
+ //# sourceMappingURL=CobrowseAccessibilityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","CobrowseIONative","NativeModules","CobrowseIO","showSetup","accessibilityServiceShowSetup","isRunning","accessibilityServiceIsRunning","_default","exports","default"],"sourceRoot":"../../js","sources":["CobrowseAccessibilityService.ts"],"mappings":";;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,MAAMC,gBAAgB,GAAGC,0BAAa,CAACC,UAAU;AAE1C,SAASC,SAASA,CAAA,EAAU;EACjC,OAAOH,gBAAgB,CAACI,6BAA6B,CAAC,CAAC;AACzD;AAEO,SAASC,SAASA,CAAA,EAAa;EACpC,OAAOL,gBAAgB,CAACM,6BAA6B,CAAC,CAAC;AACzD;AAAC,IAAAC,QAAA,GAEc;EACbJ,SAAS;EACTE;AACF,CAAC;AAAAG,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _Session = _interopRequireDefault(require("./Session"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const CobrowseIONative = _reactNative.NativeModules.CobrowseIO;
11
+ const emitter = new _reactNative.NativeEventEmitter(CobrowseIONative);
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
14
+ class CobrowseIO {
15
+ static sessionRequestShown = false;
16
+ static remoteControlRequestShown = false;
17
+
18
+ /** @deprecated */
19
+ static get SESSION_UPDATED() {
20
+ return 'session.updated';
21
+ }
22
+
23
+ /** @deprecated */
24
+ static get SESSION_ENDED() {
25
+ return 'session.ended';
26
+ }
27
+ static handleSessionRequest(session) {
28
+ if (this.sessionRequestShown) return;
29
+ this.sessionRequestShown = true;
30
+ _reactNative.Alert.alert('Support Request', 'A support agent would like to use this app with you. Do you accept?', [{
31
+ text: 'Reject',
32
+ onPress: () => {
33
+ this.sessionRequestShown = false;
34
+ void session.end();
35
+ },
36
+ style: 'cancel'
37
+ }, {
38
+ text: 'Accept',
39
+ onPress: () => {
40
+ this.sessionRequestShown = false;
41
+ void session.activate();
42
+ }
43
+ }], {
44
+ cancelable: false
45
+ });
46
+ }
47
+ static handleRemoteControlRequest(session) {
48
+ if (this.remoteControlRequestShown) return;
49
+ this.remoteControlRequestShown = true;
50
+ _reactNative.Alert.alert('Remote Control Request', 'A support agent would like to take remote control of this app. Do you accept?', [{
51
+ text: 'Reject',
52
+ onPress: () => {
53
+ this.remoteControlRequestShown = false;
54
+ void session.setRemoteControl('rejected');
55
+ },
56
+ style: 'cancel'
57
+ }, {
58
+ text: 'Accept',
59
+ onPress: () => {
60
+ this.remoteControlRequestShown = false;
61
+ void session.setRemoteControl('on');
62
+ }
63
+ }], {
64
+ cancelable: false
65
+ });
66
+ }
67
+ static addListener(event, cb) {
68
+ return emitter.addListener(event, session => cb(new _Session.default(session)));
69
+ }
70
+ static start() {
71
+ CobrowseIONative.start();
72
+ }
73
+ static stop() {
74
+ CobrowseIONative.stop();
75
+ }
76
+
77
+ // eslint-disable-next-line accessor-pairs
78
+ static set api(api) {
79
+ CobrowseIONative.api(api);
80
+ }
81
+
82
+ // eslint-disable-next-line accessor-pairs
83
+ static set license(license) {
84
+ CobrowseIONative.license(license);
85
+ }
86
+
87
+ // eslint-disable-next-line accessor-pairs
88
+ static set customData(customData) {
89
+ CobrowseIONative.customData(customData);
90
+ }
91
+
92
+ // eslint-disable-next-line accessor-pairs
93
+ static set capabilities(capabilities) {
94
+ CobrowseIONative.capabilities(capabilities);
95
+ }
96
+
97
+ // eslint-disable-next-line accessor-pairs
98
+ static set deviceToken(token) {
99
+ CobrowseIONative.deviceToken(token);
100
+ }
101
+ static currentSession() {
102
+ return CobrowseIONative.currentSession().then(session => session != null ? new _Session.default(session) : null);
103
+ }
104
+ static createSession() {
105
+ return CobrowseIONative.createSession().then(session => session != null ? new _Session.default(session) : null);
106
+ }
107
+ static getSession(codeOrId) {
108
+ return CobrowseIONative.getSession(codeOrId).then(session => session != null ? new _Session.default(session) : null);
109
+ }
110
+
111
+ /** @deprecated */
112
+ static activateSession() {
113
+ return CobrowseIONative.activateSession().then(session => session != null ? new _Session.default(session) : null);
114
+ }
115
+
116
+ /** @deprecated */
117
+ static endSession() {
118
+ return CobrowseIONative.endSession();
119
+ }
120
+ static showSessionControls = null;
121
+ static handleFullDeviceRequest = null;
122
+ }
123
+
124
+ // the session.requested event is considered internal, it should
125
+ // not be used outside these bindings
126
+ exports.default = CobrowseIO;
127
+ CobrowseIO.addListener('session.requested', session => {
128
+ if (CobrowseIO.showSessionControls === false) {
129
+ CobrowseIONative.overwriteSessionIndicator();
130
+ }
131
+ if (_reactNative.Platform.OS === 'ios' && CobrowseIO.handleFullDeviceRequest != null) {
132
+ CobrowseIONative.overwriteFullControlUI();
133
+ }
134
+ CobrowseIO.handleSessionRequest(session);
135
+ });
136
+ CobrowseIO.addListener('session.updated', session => {
137
+ if (session.isActive() && session.remote_control === 'requested') {
138
+ CobrowseIO.handleRemoteControlRequest(session);
139
+ }
140
+ if (session.isActive() && session.full_device_state === 'requested') {
141
+ if (CobrowseIO.handleFullDeviceRequest != null) {
142
+ CobrowseIO.handleFullDeviceRequest(session);
143
+ } else if (_reactNative.Platform.OS === 'android') {
144
+ // accept the incoming connection by default
145
+ void session.setFullDevice('on');
146
+ }
147
+ }
148
+ });
149
+ //# sourceMappingURL=CobrowseIO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_Session","_interopRequireDefault","obj","__esModule","default","CobrowseIONative","NativeModules","CobrowseIO","emitter","NativeEventEmitter","sessionRequestShown","remoteControlRequestShown","SESSION_UPDATED","SESSION_ENDED","handleSessionRequest","session","Alert","alert","text","onPress","end","style","activate","cancelable","handleRemoteControlRequest","setRemoteControl","addListener","event","cb","Session","start","stop","api","license","customData","capabilities","deviceToken","token","currentSession","then","createSession","getSession","codeOrId","activateSession","endSession","showSessionControls","handleFullDeviceRequest","exports","overwriteSessionIndicator","Platform","OS","overwriteFullControlUI","isActive","remote_control","full_device_state","setFullDevice"],"sourceRoot":"../../js","sources":["CobrowseIO.ts"],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _CobrowseIO = _interopRequireDefault(require("./CobrowseIO"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ const styles = _reactNative.StyleSheet.create({
14
+ container: {
15
+ flex: 1,
16
+ justifyContent: 'flex-end'
17
+ },
18
+ text: {
19
+ textAlign: 'center',
20
+ margin: 15,
21
+ fontSize: 15,
22
+ lineHeight: 20
23
+ },
24
+ code: {
25
+ fontSize: 29,
26
+ padding: 20,
27
+ fontWeight: 'bold',
28
+ textAlign: 'center'
29
+ },
30
+ button: {
31
+ color: 'rgb(0, 122, 255)',
32
+ fontSize: 18,
33
+ margin: 10
34
+ }
35
+ });
36
+ class CobrowseView extends _react.Component {
37
+ _updateListener = null;
38
+ _endListener = null;
39
+ constructor(props) {
40
+ super(props);
41
+ this.state = {
42
+ error: null,
43
+ session: null
44
+ };
45
+ }
46
+ async componentDidMount() {
47
+ if (this.props.license != null) {
48
+ console.warn('Passing license to view is deprecated. Use CobrowseIO.license = "..." instead');
49
+ _CobrowseIO.default.license = this.props.license;
50
+ }
51
+ try {
52
+ const current = await _CobrowseIO.default.currentSession();
53
+ if (current != null) this.setState({
54
+ session: current
55
+ });else {
56
+ const session = await _CobrowseIO.default.createSession();
57
+ this.setState({
58
+ session
59
+ });
60
+ }
61
+ } catch (error) {
62
+ this.setState({
63
+ error: error
64
+ });
65
+ }
66
+ this._updateListener = _CobrowseIO.default.addListener('session.updated', session => {
67
+ this.setState({
68
+ session
69
+ });
70
+ });
71
+ this._endListener = _CobrowseIO.default.addListener('session.ended', () => {
72
+ if (this.props.onEnded != null) this.props.onEnded();
73
+ this.setState({
74
+ session: null
75
+ });
76
+ });
77
+ }
78
+ componentWillUnmount() {
79
+ if (this._updateListener != null) this._updateListener.remove();
80
+ if (this._endListener != null) this._endListener.remove();
81
+ }
82
+ async endSession() {
83
+ try {
84
+ const {
85
+ session
86
+ } = this.state;
87
+ if (session == null) {
88
+ throw new Error('No session to end');
89
+ }
90
+ await session.end();
91
+ this.setState({
92
+ session: null
93
+ });
94
+ } catch (error) {
95
+ this.setState({
96
+ error: error
97
+ });
98
+ }
99
+ }
100
+ renderError(error) {
101
+ return /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
102
+ style: [styles.text]
103
+ }, error.message);
104
+ }
105
+ renderCode() {
106
+ var _this$state$session;
107
+ let code = (_this$state$session = this.state.session) === null || _this$state$session === void 0 ? void 0 : _this$state$session.code;
108
+ if (code != null) code = code.substr(0, 3) + '-' + code.substr(3);
109
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
110
+ style: [styles.code, {
111
+ opacity: code != null ? 1 : 0.2
112
+ }]
113
+ }, code ?? '000-000'), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
114
+ style: [styles.text]
115
+ }, "Provide this code to your support agent to begin screen sharing."), /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, null));
116
+ }
117
+ renderManageSession() {
118
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
119
+ style: [styles.text]
120
+ }, "You're sharing screens from this app with a support agent."), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
121
+ onPress: () => this.endSession
122
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
123
+ style: [styles.text, styles.button]
124
+ }, "End Session")));
125
+ }
126
+ renderContent() {
127
+ const {
128
+ error,
129
+ session
130
+ } = this.state;
131
+ if (error != null) {
132
+ return this.renderError(error);
133
+ } else if (session == null || session.state === 'pending' || session.state === 'authorizing') {
134
+ return this.renderCode();
135
+ } else {
136
+ return this.renderManageSession();
137
+ }
138
+ }
139
+ render() {
140
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
141
+ style: styles.container
142
+ }, this.renderContent());
143
+ }
144
+ }
145
+ exports.default = CobrowseView;
146
+ //# sourceMappingURL=CobrowseView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_CobrowseIO","_interopRequireDefault","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","styles","StyleSheet","create","container","flex","justifyContent","text","textAlign","margin","fontSize","lineHeight","code","padding","fontWeight","button","color","CobrowseView","Component","_updateListener","_endListener","constructor","props","state","error","session","componentDidMount","license","console","warn","CobrowseIO","current","currentSession","setState","createSession","addListener","onEnded","componentWillUnmount","remove","endSession","Error","end","renderError","createElement","Text","style","message","renderCode","_this$state$session","substr","View","opacity","ActivityIndicator","renderManageSession","TouchableOpacity","onPress","renderContent","render","exports"],"sourceRoot":"../../js","sources":["CobrowseView.tsx"],"mappings":"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"}