cozy-external-bridge 0.9.0 → 0.11.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.
- package/README.md +1 -1
- package/dist/container/helpers.js +3 -3
- package/dist/container/index.js +14 -77
- package/dist/container/useBuildUrlToLoad.js +50 -0
- package/dist/container/{hooks.spec.ts → useBuildUrlToLoad.spec.ts} +20 -21
- package/dist/container/useListenBridgeRequests.js +102 -0
- package/dist/container/useListenParentOriginRequest.js +50 -0
- package/package.json +2 -2
- package/dist/container/hooks.js +0 -53
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Add the `useExternalBridge` hook and it will :
|
|
|
14
14
|
import { useExternalBridge } from 'cozy-external-bridge/container'
|
|
15
15
|
|
|
16
16
|
const App = () => {
|
|
17
|
-
useExternalBridge('https://chat.twake.app')
|
|
17
|
+
const { isReady, urlToLoad } = useExternalBridge('https://chat.twake.app')
|
|
18
18
|
}
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.handleParentOriginRequest = exports.getIframe = exports.extractUrl = void 0;
|
|
7
7
|
|
|
8
8
|
var getIframe = function getIframe() {
|
|
9
9
|
var iframe = document.getElementById('embeddedApp');
|
|
@@ -28,7 +28,7 @@ var extractUrl = function extractUrl(url) {
|
|
|
28
28
|
|
|
29
29
|
exports.extractUrl = extractUrl;
|
|
30
30
|
|
|
31
|
-
var
|
|
31
|
+
var handleParentOriginRequest = function handleParentOriginRequest(event, origin) {
|
|
32
32
|
// We do not care about message from other origin that our iframe
|
|
33
33
|
if (event.origin !== origin) {
|
|
34
34
|
return;
|
|
@@ -40,4 +40,4 @@ var handleRequestParentOrigin = function handleRequestParentOrigin(event, origin
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
exports.
|
|
43
|
+
exports.handleParentOriginRequest = handleParentOriginRequest;
|
package/dist/container/index.js
CHANGED
|
@@ -1,94 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.useExternalBridge = void 0;
|
|
9
7
|
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
|
-
var Comlink = _interopRequireWildcard(require("comlink"));
|
|
15
|
-
|
|
16
|
-
var _react = require("react");
|
|
17
|
-
|
|
18
|
-
var _reactRouterDom = require("react-router-dom");
|
|
19
|
-
|
|
20
|
-
var _cozyClient = require("cozy-client");
|
|
21
|
-
|
|
22
|
-
var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
|
|
8
|
+
var _useBuildUrlToLoad2 = require("./useBuildUrlToLoad");
|
|
23
9
|
|
|
24
|
-
var
|
|
10
|
+
var _useListenBridgeRequests = require("./useListenBridgeRequests");
|
|
25
11
|
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
var _helpers = require("./helpers");
|
|
29
|
-
|
|
30
|
-
var _hooks = require("./hooks");
|
|
31
|
-
|
|
32
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
-
|
|
34
|
-
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; }
|
|
35
|
-
|
|
36
|
-
var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
|
|
12
|
+
var _useListenParentOriginRequest = require("./useListenParentOriginRequest");
|
|
37
13
|
|
|
38
14
|
var useExternalBridge = function useExternalBridge(origin) {
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
(0, _hooks.useInitialRedirection)();
|
|
42
|
-
(0, _hooks.useParentOrigin)(origin);
|
|
43
|
-
(0, _react.useEffect)(function () {
|
|
44
|
-
if (!client) return;
|
|
45
|
-
var exposedMethods = {
|
|
46
|
-
// Proof of concepts of Twake <-> Cozy communication
|
|
47
|
-
getContacts: function () {
|
|
48
|
-
var _getContacts = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
49
|
-
var _ref, data;
|
|
50
|
-
|
|
51
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
52
|
-
while (1) {
|
|
53
|
-
switch (_context.prev = _context.next) {
|
|
54
|
-
case 0:
|
|
55
|
-
_context.next = 2;
|
|
56
|
-
return client.query((0, _cozyClient.Q)('io.cozy.contacts'));
|
|
57
|
-
|
|
58
|
-
case 2:
|
|
59
|
-
_ref = _context.sent;
|
|
60
|
-
data = _ref.data;
|
|
61
|
-
return _context.abrupt("return", data);
|
|
15
|
+
var _useBuildUrlToLoad = (0, _useBuildUrlToLoad2.useBuildUrlToLoad)(origin),
|
|
16
|
+
urlToLoad = _useBuildUrlToLoad.urlToLoad;
|
|
62
17
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return _context.stop();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}, _callee);
|
|
69
|
-
}));
|
|
18
|
+
var _useListenParentOrigi = (0, _useListenParentOriginRequest.useListenParentOriginRequest)(origin),
|
|
19
|
+
isParentOriginRequestListenerReady = _useListenParentOrigi.isReady;
|
|
70
20
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
21
|
+
var _useListenBridgeReque = (0, _useListenBridgeRequests.useListenBridgeRequests)(origin),
|
|
22
|
+
isBridgeListenerReady = _useListenBridgeReque.isReady;
|
|
74
23
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// Proof of concepts of Twake <-> Cozy URL synchronization
|
|
81
|
-
updateHistory: function updateHistory(newUrl) {
|
|
82
|
-
var url = (0, _helpers.extractUrl)(newUrl);
|
|
83
|
-
log.debug("Navigating to ".concat(url, " because received ").concat(newUrl, " from embedded app"));
|
|
84
|
-
navigate(_constants.BRIDGE_ROUTE_PREFIX + url, {
|
|
85
|
-
replace: true
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
Comlink.expose(exposedMethods, Comlink.windowEndpoint((0, _helpers.getIframe)().contentWindow, self, origin));
|
|
90
|
-
log.debug('Bridge initialized');
|
|
91
|
-
}, [navigate, client, origin]);
|
|
24
|
+
var isReady = isParentOriginRequestListenerReady && isBridgeListenerReady;
|
|
25
|
+
return {
|
|
26
|
+
isReady: isReady,
|
|
27
|
+
urlToLoad: urlToLoad
|
|
28
|
+
};
|
|
92
29
|
};
|
|
93
30
|
|
|
94
31
|
exports.useExternalBridge = useExternalBridge;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useBuildUrlToLoad = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _reactRouterDom = require("react-router-dom");
|
|
15
|
+
|
|
16
|
+
var _cozyMinilog = _interopRequireDefault(require("cozy-minilog"));
|
|
17
|
+
|
|
18
|
+
var _constants = require("./constants");
|
|
19
|
+
|
|
20
|
+
var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
|
|
21
|
+
|
|
22
|
+
// When we load the container app, we want to forward
|
|
23
|
+
// the relevant part of the URL to the iframe
|
|
24
|
+
var useBuildUrlToLoad = function useBuildUrlToLoad(origin) {
|
|
25
|
+
var location = (0, _reactRouterDom.useLocation)();
|
|
26
|
+
|
|
27
|
+
var _useState = (0, _react.useState)(undefined),
|
|
28
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
29
|
+
urlToLoad = _useState2[0],
|
|
30
|
+
setUrlToLoad = _useState2[1];
|
|
31
|
+
|
|
32
|
+
(0, _react.useEffect)(function () {
|
|
33
|
+
if (location.pathname.startsWith(_constants.BRIDGE_ROUTE_PREFIX)) {
|
|
34
|
+
var destUrl = new URL(origin);
|
|
35
|
+
destUrl.pathname = location.pathname.replace(_constants.BRIDGE_ROUTE_PREFIX, '');
|
|
36
|
+
destUrl.hash = location.hash;
|
|
37
|
+
destUrl.search = location.search;
|
|
38
|
+
log.debug('Setting iframe to', destUrl.toString(), 'after modification');
|
|
39
|
+
setUrlToLoad(destUrl.toString());
|
|
40
|
+
} else {
|
|
41
|
+
log.debug('Setting iframe to', origin);
|
|
42
|
+
setUrlToLoad(origin);
|
|
43
|
+
}
|
|
44
|
+
}, []);
|
|
45
|
+
return {
|
|
46
|
+
urlToLoad: urlToLoad
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.useBuildUrlToLoad = useBuildUrlToLoad;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { renderHook } from '@testing-library/react-hooks'
|
|
2
2
|
import { useLocation } from 'react-router-dom'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { useInitialRedirection } from './hooks'
|
|
4
|
+
import { useBuildUrlToLoad } from './useBuildUrlToLoad'
|
|
6
5
|
|
|
7
6
|
jest.mock('react-router-dom', () => ({
|
|
8
7
|
useLocation: jest.fn()
|
|
@@ -13,9 +12,8 @@ jest.mock('./helpers', () => ({
|
|
|
13
12
|
}))
|
|
14
13
|
|
|
15
14
|
const mockedUseLocation = useLocation as jest.Mock
|
|
16
|
-
const mockedGetIframe = getIframe as jest.Mock
|
|
17
15
|
|
|
18
|
-
describe('
|
|
16
|
+
describe('useBuildUrlToLoad', () => {
|
|
19
17
|
afterEach(() => {
|
|
20
18
|
jest.clearAllMocks()
|
|
21
19
|
})
|
|
@@ -24,24 +22,26 @@ describe('useInitialRedirection', () => {
|
|
|
24
22
|
const mockLocation = { pathname: 'assistant', hash: '', search: '' }
|
|
25
23
|
mockedUseLocation.mockReturnValue(mockLocation)
|
|
26
24
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
renderHook(() => useInitialRedirection())
|
|
25
|
+
const { result } = renderHook(() =>
|
|
26
|
+
useBuildUrlToLoad('https://alice-chat.mycozy.cloud')
|
|
27
|
+
)
|
|
31
28
|
|
|
32
|
-
expect(
|
|
29
|
+
expect(result.current).toStrictEqual({
|
|
30
|
+
urlToLoad: 'https://alice-chat.mycozy.cloud'
|
|
31
|
+
})
|
|
33
32
|
})
|
|
34
33
|
|
|
35
34
|
it('should modify iframe.src when pathname start with bridge prefix', () => {
|
|
36
35
|
const mockLocation = { pathname: '/bridge/welcome', hash: '', search: '' }
|
|
37
36
|
mockedUseLocation.mockReturnValue(mockLocation)
|
|
38
37
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
renderHook(() => useInitialRedirection())
|
|
38
|
+
const { result } = renderHook(() =>
|
|
39
|
+
useBuildUrlToLoad('https://alice-chat.mycozy.cloud')
|
|
40
|
+
)
|
|
43
41
|
|
|
44
|
-
expect(
|
|
42
|
+
expect(result.current).toStrictEqual({
|
|
43
|
+
urlToLoad: 'https://alice-chat.mycozy.cloud/welcome'
|
|
44
|
+
})
|
|
45
45
|
})
|
|
46
46
|
|
|
47
47
|
it('should modify iframe.src when pathname start with bridge prefix and allow bridge keyword in iframe url', () => {
|
|
@@ -52,13 +52,12 @@ describe('useInitialRedirection', () => {
|
|
|
52
52
|
}
|
|
53
53
|
mockedUseLocation.mockReturnValue(mockLocation)
|
|
54
54
|
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
renderHook(() => useInitialRedirection())
|
|
59
|
-
|
|
60
|
-
expect(mockIframe.src).toBe(
|
|
61
|
-
'https://alice-chat.mycozy.cloud/welcome/bridge'
|
|
55
|
+
const { result } = renderHook(() =>
|
|
56
|
+
useBuildUrlToLoad('https://alice-chat.mycozy.cloud')
|
|
62
57
|
)
|
|
58
|
+
|
|
59
|
+
expect(result.current).toStrictEqual({
|
|
60
|
+
urlToLoad: 'https://alice-chat.mycozy.cloud/welcome/bridge'
|
|
61
|
+
})
|
|
63
62
|
})
|
|
64
63
|
})
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useListenBridgeRequests = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var Comlink = _interopRequireWildcard(require("comlink"));
|
|
17
|
+
|
|
18
|
+
var _react = require("react");
|
|
19
|
+
|
|
20
|
+
var _reactRouterDom = require("react-router-dom");
|
|
21
|
+
|
|
22
|
+
var _cozyClient = require("cozy-client");
|
|
23
|
+
|
|
24
|
+
var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
|
|
25
|
+
|
|
26
|
+
var _cozyMinilog = _interopRequireDefault(require("cozy-minilog"));
|
|
27
|
+
|
|
28
|
+
var _constants = require("./constants");
|
|
29
|
+
|
|
30
|
+
var _helpers = require("./helpers");
|
|
31
|
+
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
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; }
|
|
35
|
+
|
|
36
|
+
var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
|
|
37
|
+
|
|
38
|
+
var useListenBridgeRequests = function useListenBridgeRequests(origin) {
|
|
39
|
+
var client = (0, _cozyClient.useClient)();
|
|
40
|
+
var navigate = (0, _reactRouterDom.useNavigate)();
|
|
41
|
+
|
|
42
|
+
var _useState = (0, _react.useState)(false),
|
|
43
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
44
|
+
isReady = _useState2[0],
|
|
45
|
+
setIsReady = _useState2[1];
|
|
46
|
+
|
|
47
|
+
(0, _react.useEffect)(function () {
|
|
48
|
+
if (!client) return;
|
|
49
|
+
var exposedMethods = {
|
|
50
|
+
// Proof of concepts of Twake <-> Cozy communication
|
|
51
|
+
getContacts: function () {
|
|
52
|
+
var _getContacts = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
53
|
+
var _ref, data;
|
|
54
|
+
|
|
55
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
56
|
+
while (1) {
|
|
57
|
+
switch (_context.prev = _context.next) {
|
|
58
|
+
case 0:
|
|
59
|
+
_context.next = 2;
|
|
60
|
+
return client.query((0, _cozyClient.Q)('io.cozy.contacts'));
|
|
61
|
+
|
|
62
|
+
case 2:
|
|
63
|
+
_ref = _context.sent;
|
|
64
|
+
data = _ref.data;
|
|
65
|
+
return _context.abrupt("return", data);
|
|
66
|
+
|
|
67
|
+
case 5:
|
|
68
|
+
case "end":
|
|
69
|
+
return _context.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, _callee);
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
function getContacts() {
|
|
76
|
+
return _getContacts.apply(this, arguments);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return getContacts;
|
|
80
|
+
}(),
|
|
81
|
+
getFlag: function getFlag(key) {
|
|
82
|
+
return (0, _cozyFlags.default)(key);
|
|
83
|
+
},
|
|
84
|
+
// Proof of concepts of Twake <-> Cozy URL synchronization
|
|
85
|
+
updateHistory: function updateHistory(newUrl) {
|
|
86
|
+
var url = (0, _helpers.extractUrl)(newUrl);
|
|
87
|
+
log.debug("Navigating to ".concat(url, " because received ").concat(newUrl, " from embedded app"));
|
|
88
|
+
navigate(_constants.BRIDGE_ROUTE_PREFIX + url, {
|
|
89
|
+
replace: true
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
Comlink.expose(exposedMethods, Comlink.windowEndpoint((0, _helpers.getIframe)().contentWindow, self, origin));
|
|
94
|
+
log.debug('Listening to bridge requests');
|
|
95
|
+
setIsReady(true);
|
|
96
|
+
}, [navigate, client, origin]);
|
|
97
|
+
return {
|
|
98
|
+
isReady: isReady
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
exports.useListenBridgeRequests = useListenBridgeRequests;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useListenParentOriginRequest = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _cozyClient = require("cozy-client");
|
|
15
|
+
|
|
16
|
+
var _cozyMinilog = _interopRequireDefault(require("cozy-minilog"));
|
|
17
|
+
|
|
18
|
+
var _helpers = require("./helpers");
|
|
19
|
+
|
|
20
|
+
var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
|
|
21
|
+
|
|
22
|
+
// Allow the iframe to request the origin of the parent window
|
|
23
|
+
var useListenParentOriginRequest = function useListenParentOriginRequest(origin) {
|
|
24
|
+
var client = (0, _cozyClient.useClient)();
|
|
25
|
+
|
|
26
|
+
var _useState = (0, _react.useState)(false),
|
|
27
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
28
|
+
isReady = _useState2[0],
|
|
29
|
+
setIsReady = _useState2[1];
|
|
30
|
+
|
|
31
|
+
(0, _react.useEffect)(function () {
|
|
32
|
+
if (!client) return;
|
|
33
|
+
|
|
34
|
+
var parentOriginRequestHandler = function parentOriginRequestHandler(event) {
|
|
35
|
+
return (0, _helpers.handleParentOriginRequest)(event, origin);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
window.addEventListener('message', parentOriginRequestHandler);
|
|
39
|
+
log.debug('Listening to parent origin request');
|
|
40
|
+
setIsReady(true);
|
|
41
|
+
return function () {
|
|
42
|
+
window.removeEventListener('message', parentOriginRequestHandler);
|
|
43
|
+
};
|
|
44
|
+
}, [client, origin]);
|
|
45
|
+
return {
|
|
46
|
+
isReady: isReady
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.useListenParentOriginRequest = useListenParentOriginRequest;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cozy-external-bridge",
|
|
3
3
|
"description": "Library allows communication between a container app and an app embedded in an iframe",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cozy Cloud",
|
|
7
7
|
"url": "https://github.com/cozy"
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
"lint": "cd ../.. && yarn eslint --ext js,jsx,ts packages/cozy-external-bridge"
|
|
69
69
|
},
|
|
70
70
|
"types": "dist/index.d.ts",
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "3d9296d0eb4bd53f20569f9197947a7e6f04a1f4"
|
|
72
72
|
}
|
package/dist/container/hooks.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useParentOrigin = exports.useInitialRedirection = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
var _reactRouterDom = require("react-router-dom");
|
|
11
|
-
|
|
12
|
-
var _cozyClient = require("cozy-client");
|
|
13
|
-
|
|
14
|
-
var _constants = require("./constants");
|
|
15
|
-
|
|
16
|
-
var _helpers = require("./helpers");
|
|
17
|
-
|
|
18
|
-
// Initial redirection is necessary when we load a page from a direct link
|
|
19
|
-
// to load the iframe to the direct link
|
|
20
|
-
var useInitialRedirection = function useInitialRedirection() {
|
|
21
|
-
var location = (0, _reactRouterDom.useLocation)();
|
|
22
|
-
(0, _react.useEffect)(function () {
|
|
23
|
-
if (location.pathname.startsWith(_constants.BRIDGE_ROUTE_PREFIX)) {
|
|
24
|
-
var iframe = (0, _helpers.getIframe)();
|
|
25
|
-
var destUrl = new URL(iframe.src);
|
|
26
|
-
destUrl.pathname = location.pathname.replace(_constants.BRIDGE_ROUTE_PREFIX, '');
|
|
27
|
-
destUrl.hash = location.hash;
|
|
28
|
-
destUrl.search = location.search;
|
|
29
|
-
iframe.src = destUrl.toString();
|
|
30
|
-
}
|
|
31
|
-
}, []);
|
|
32
|
-
}; // Allow the iframe to request the origin of the parent window
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
exports.useInitialRedirection = useInitialRedirection;
|
|
36
|
-
|
|
37
|
-
var useParentOrigin = function useParentOrigin(origin) {
|
|
38
|
-
var client = (0, _cozyClient.useClient)();
|
|
39
|
-
(0, _react.useEffect)(function () {
|
|
40
|
-
if (!client) return;
|
|
41
|
-
|
|
42
|
-
var requestParentOriginHandler = function requestParentOriginHandler(event) {
|
|
43
|
-
return (0, _helpers.handleRequestParentOrigin)(event, origin);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
window.addEventListener('message', requestParentOriginHandler);
|
|
47
|
-
return function () {
|
|
48
|
-
window.removeEventListener('message', requestParentOriginHandler);
|
|
49
|
-
};
|
|
50
|
-
}, [client, origin]);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
exports.useParentOrigin = useParentOrigin;
|