@onekeyfe/extension-bridge-hosted 1.1.24 → 1.1.26
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/dist/JsBridgeExtBackground.d.ts +11 -0
- package/dist/JsBridgeExtBackground.js +36 -6
- package/dist/JsBridgeExtOffscreen.d.ts +14 -0
- package/dist/JsBridgeExtOffscreen.js +46 -0
- package/dist/JsBridgeExtUi.d.ts +0 -1
- package/dist/JsBridgeExtUi.js +2 -12
- package/dist/bridgeSetup/index.d.ts +3 -0
- package/dist/bridgeSetup/index.js +2 -0
- package/dist/bridgeSetup/offscreen.d.ts +6 -0
- package/dist/bridgeSetup/offscreen.js +8 -0
- package/dist/cjs/JsBridgeExtBackground.js +36 -6
- package/dist/cjs/JsBridgeExtOffscreen.js +52 -0
- package/dist/cjs/JsBridgeExtUi.js +2 -12
- package/dist/cjs/bridgeSetup/index.js +2 -0
- package/dist/cjs/bridgeSetup/offscreen.js +10 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/utils.js +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +19 -0
- package/package.json +4 -4
|
@@ -5,10 +5,21 @@ declare class JsBridgeExtBackground extends JsBridgeBase {
|
|
|
5
5
|
constructor(config: IJsBridgeConfig);
|
|
6
6
|
sendAsString: boolean;
|
|
7
7
|
ports: Record<number | string, chrome.runtime.Port>;
|
|
8
|
+
offscreenPort: chrome.runtime.Port | undefined;
|
|
9
|
+
offscreenPortId: number | undefined;
|
|
8
10
|
private portIdIndex;
|
|
11
|
+
addPort({ portId, port }: {
|
|
12
|
+
portId: number;
|
|
13
|
+
port: chrome.runtime.Port;
|
|
14
|
+
}): void;
|
|
15
|
+
removePort({ portId, port }: {
|
|
16
|
+
portId: number;
|
|
17
|
+
port: chrome.runtime.Port;
|
|
18
|
+
}): void;
|
|
9
19
|
sendPayload(payload0: IJsBridgeMessagePayload | string): void;
|
|
10
20
|
_getOriginFromPort(port: chrome.runtime.Port): string;
|
|
11
21
|
setupMessagePortOnConnect(): void;
|
|
22
|
+
requestToOffscreen(data: unknown): Promise<import("@onekeyfe/cross-inpage-provider-types").IJsonRpcResponse<unknown>> | undefined;
|
|
12
23
|
requestToAllCS(scope: IInjectedProviderNamesStrings, data: unknown): void;
|
|
13
24
|
requestToAllUi(data: unknown): void;
|
|
14
25
|
}
|
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import isFunction from 'lodash/isFunction';
|
|
11
11
|
import entries from 'lodash/entries';
|
|
12
12
|
import { JsBridgeBase, consts } from '@onekeyfe/cross-inpage-provider-core';
|
|
13
|
-
const { EXT_PORT_CS_TO_BG, EXT_PORT_UI_TO_BG } = consts;
|
|
13
|
+
const { EXT_PORT_OFFSCREEN_TO_BG, EXT_PORT_CS_TO_BG, EXT_PORT_UI_TO_BG } = consts;
|
|
14
14
|
class JsBridgeExtBackground extends JsBridgeBase {
|
|
15
15
|
constructor(config) {
|
|
16
16
|
super(config);
|
|
@@ -19,6 +19,20 @@ class JsBridgeExtBackground extends JsBridgeBase {
|
|
|
19
19
|
this.portIdIndex = 1;
|
|
20
20
|
this.setupMessagePortOnConnect();
|
|
21
21
|
}
|
|
22
|
+
addPort({ portId, port }) {
|
|
23
|
+
this.ports[portId] = port;
|
|
24
|
+
if (port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
25
|
+
this.offscreenPort = port;
|
|
26
|
+
this.offscreenPortId = portId;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
removePort({ portId, port }) {
|
|
30
|
+
delete this.ports[portId];
|
|
31
|
+
if (port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
32
|
+
this.offscreenPort = undefined;
|
|
33
|
+
this.offscreenPortId = undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
22
36
|
sendPayload(payload0) {
|
|
23
37
|
const payload = payload0;
|
|
24
38
|
if (!payload.remoteId) {
|
|
@@ -39,6 +53,7 @@ class JsBridgeExtBackground extends JsBridgeBase {
|
|
|
39
53
|
throw error;
|
|
40
54
|
}
|
|
41
55
|
}
|
|
56
|
+
// TODO use utils
|
|
42
57
|
_getOriginFromPort(port) {
|
|
43
58
|
var _a, _b, _c, _d;
|
|
44
59
|
// chrome
|
|
@@ -64,10 +79,15 @@ class JsBridgeExtBackground extends JsBridgeBase {
|
|
|
64
79
|
url: "https://app.uniswap.org/#/swap"
|
|
65
80
|
*/
|
|
66
81
|
// content-script may be multiple
|
|
67
|
-
if (port.name === EXT_PORT_CS_TO_BG ||
|
|
82
|
+
if (port.name === EXT_PORT_CS_TO_BG ||
|
|
83
|
+
port.name === EXT_PORT_UI_TO_BG ||
|
|
84
|
+
port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
68
85
|
this.portIdIndex += 1;
|
|
69
86
|
const portId = this.portIdIndex;
|
|
70
|
-
this.
|
|
87
|
+
this.addPort({
|
|
88
|
+
portId,
|
|
89
|
+
port,
|
|
90
|
+
});
|
|
71
91
|
const onMessage = (payload, port0) => {
|
|
72
92
|
const origin = this._getOriginFromPort(port0);
|
|
73
93
|
payload.remoteId = portId;
|
|
@@ -78,22 +98,32 @@ class JsBridgeExtBackground extends JsBridgeBase {
|
|
|
78
98
|
// - receive
|
|
79
99
|
jsBridge.receive(payload, {
|
|
80
100
|
origin,
|
|
81
|
-
//
|
|
82
|
-
|
|
101
|
+
// TODO trust origin
|
|
102
|
+
// only trust message from UI/Offscreen, but NOT from content-script(dapp)
|
|
103
|
+
internal: port.name === EXT_PORT_UI_TO_BG || port.name === EXT_PORT_OFFSCREEN_TO_BG,
|
|
83
104
|
});
|
|
84
105
|
};
|
|
85
106
|
// #### content-script -> background
|
|
86
107
|
port.onMessage.addListener(onMessage);
|
|
87
108
|
// TODO onDisconnect remove ports cache
|
|
88
109
|
const onDisconnect = () => {
|
|
89
|
-
delete this.ports[portId];
|
|
90
110
|
port.onMessage.removeListener(onMessage);
|
|
91
111
|
port.onDisconnect.removeListener(onDisconnect);
|
|
112
|
+
this.removePort({
|
|
113
|
+
portId,
|
|
114
|
+
port,
|
|
115
|
+
});
|
|
92
116
|
};
|
|
93
117
|
port.onDisconnect.addListener(onDisconnect);
|
|
94
118
|
}
|
|
95
119
|
});
|
|
96
120
|
}
|
|
121
|
+
requestToOffscreen(data) {
|
|
122
|
+
if (!this.offscreenPort) {
|
|
123
|
+
throw new Error('offscreenPort not ready.');
|
|
124
|
+
}
|
|
125
|
+
return this.request({ data, remoteId: this.offscreenPortId });
|
|
126
|
+
}
|
|
97
127
|
requestToAllCS(scope, data) {
|
|
98
128
|
// TODO optimize rename: broadcastRequest
|
|
99
129
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="chrome" />
|
|
2
|
+
import { IJsBridgeConfig, IJsBridgeMessagePayload } from '@onekeyfe/cross-inpage-provider-types';
|
|
3
|
+
import { JsBridgeBase } from '@onekeyfe/cross-inpage-provider-core';
|
|
4
|
+
export declare type IJsBridgeExtOffscreenConfig = IJsBridgeConfig & {
|
|
5
|
+
onPortConnect: (port0: chrome.runtime.Port) => void;
|
|
6
|
+
};
|
|
7
|
+
declare class JsBridgeExtOffscreen extends JsBridgeBase {
|
|
8
|
+
constructor(config: IJsBridgeExtOffscreenConfig);
|
|
9
|
+
sendAsString: boolean;
|
|
10
|
+
private portToBg;
|
|
11
|
+
sendPayload(payload: IJsBridgeMessagePayload | string): void;
|
|
12
|
+
setupMessagePortConnect(config: IJsBridgeExtOffscreenConfig): void;
|
|
13
|
+
}
|
|
14
|
+
export { JsBridgeExtOffscreen };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import messagePort from './extensionMessagePort';
|
|
2
|
+
import { JsBridgeBase, consts } from '@onekeyfe/cross-inpage-provider-core';
|
|
3
|
+
import utils from './utils';
|
|
4
|
+
const { EXT_PORT_OFFSCREEN_TO_BG } = consts;
|
|
5
|
+
class JsBridgeExtOffscreen extends JsBridgeBase {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
super(config);
|
|
8
|
+
this.sendAsString = false;
|
|
9
|
+
this.portToBg = null;
|
|
10
|
+
this.setupMessagePortConnect(config);
|
|
11
|
+
}
|
|
12
|
+
sendPayload(payload) {
|
|
13
|
+
if (this.portToBg) {
|
|
14
|
+
this.portToBg.postMessage(payload);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
setupMessagePortConnect(config) {
|
|
18
|
+
messagePort.connect({
|
|
19
|
+
name: EXT_PORT_OFFSCREEN_TO_BG,
|
|
20
|
+
// #### background -> offscreen
|
|
21
|
+
onMessage: (payload, port0) => {
|
|
22
|
+
let origin = utils.getOriginFromPort(port0) || '';
|
|
23
|
+
// in ext offscreen, port.sender?.origin is always empty,
|
|
24
|
+
// so we trust remote (background) origin
|
|
25
|
+
origin = origin || payload.origin || '';
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
27
|
+
const jsBridge = this;
|
|
28
|
+
jsBridge.receive(payload, {
|
|
29
|
+
origin,
|
|
30
|
+
// trust message from background
|
|
31
|
+
internal: port0.name === EXT_PORT_OFFSCREEN_TO_BG,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
onConnect: (port) => {
|
|
35
|
+
this.portToBg = port;
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
config.onPortConnect(port);
|
|
38
|
+
}, 0);
|
|
39
|
+
return () => {
|
|
40
|
+
this.portToBg = null;
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export { JsBridgeExtOffscreen };
|
package/dist/JsBridgeExtUi.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ declare class JsBridgeExtUi extends JsBridgeBase {
|
|
|
10
10
|
sendAsString: boolean;
|
|
11
11
|
private portToBg;
|
|
12
12
|
sendPayload(payload: IJsBridgeMessagePayload | string): void;
|
|
13
|
-
_getOriginFromPort(port: chrome.runtime.Port): string;
|
|
14
13
|
setupMessagePortConnect(config: IJsBridgeExtUiConfig): void;
|
|
15
14
|
}
|
|
16
15
|
export { JsBridgeExtUi };
|
package/dist/JsBridgeExtUi.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import messagePort from './extensionMessagePort';
|
|
2
2
|
import { JsBridgeBase, consts } from '@onekeyfe/cross-inpage-provider-core';
|
|
3
|
+
import utils from './utils';
|
|
3
4
|
const { EXT_PORT_UI_TO_BG } = consts;
|
|
4
5
|
class JsBridgeExtUi extends JsBridgeBase {
|
|
5
6
|
constructor(config) {
|
|
@@ -14,23 +15,12 @@ class JsBridgeExtUi extends JsBridgeBase {
|
|
|
14
15
|
this.portToBg.postMessage(payload);
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
_getOriginFromPort(port) {
|
|
18
|
-
var _a, _b, _c;
|
|
19
|
-
// chrome
|
|
20
|
-
let origin = ((_a = port === null || port === void 0 ? void 0 : port.sender) === null || _a === void 0 ? void 0 : _a.origin) || '';
|
|
21
|
-
// firefox
|
|
22
|
-
if (!origin && ((_b = port === null || port === void 0 ? void 0 : port.sender) === null || _b === void 0 ? void 0 : _b.url)) {
|
|
23
|
-
const uri = new URL((_c = port === null || port === void 0 ? void 0 : port.sender) === null || _c === void 0 ? void 0 : _c.url);
|
|
24
|
-
origin = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
25
|
-
}
|
|
26
|
-
return origin;
|
|
27
|
-
}
|
|
28
18
|
setupMessagePortConnect(config) {
|
|
29
19
|
messagePort.connect({
|
|
30
20
|
name: EXT_PORT_UI_TO_BG,
|
|
31
21
|
// #### background -> ui
|
|
32
22
|
onMessage: (payload, port0) => {
|
|
33
|
-
let origin =
|
|
23
|
+
let origin = utils.getOriginFromPort(port0) || '';
|
|
34
24
|
// in ext ui, port.sender?.origin is always empty,
|
|
35
25
|
// so we trust remote (background) origin
|
|
36
26
|
origin = origin || payload.origin || '';
|
|
@@ -15,4 +15,7 @@ export declare const bridgeSetup: {
|
|
|
15
15
|
receiveHandler: import("@onekeyfe/cross-inpage-provider-types").IJsBridgeReceiveHandler;
|
|
16
16
|
}) => import("../JsBridgeExtBackground").JsBridgeExtBackground;
|
|
17
17
|
};
|
|
18
|
+
offscreen: {
|
|
19
|
+
createOffscreenJsBridge: (config: import("..").IJsBridgeExtOffscreenConfig) => import("../JsBridgeExtOffscreen").JsBridgeExtOffscreen;
|
|
20
|
+
};
|
|
18
21
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { JsBridgeExtOffscreen, IJsBridgeExtOffscreenConfig } from '../JsBridgeExtOffscreen';
|
|
2
|
+
declare function createOffscreenJsBridge(config: IJsBridgeExtOffscreenConfig): JsBridgeExtOffscreen;
|
|
3
|
+
declare const _default: {
|
|
4
|
+
createOffscreenJsBridge: typeof createOffscreenJsBridge;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
@@ -16,7 +16,7 @@ exports.JsBridgeExtBackground = void 0;
|
|
|
16
16
|
const isFunction_1 = __importDefault(require("lodash/isFunction"));
|
|
17
17
|
const entries_1 = __importDefault(require("lodash/entries"));
|
|
18
18
|
const cross_inpage_provider_core_1 = require("@onekeyfe/cross-inpage-provider-core");
|
|
19
|
-
const { EXT_PORT_CS_TO_BG, EXT_PORT_UI_TO_BG } = cross_inpage_provider_core_1.consts;
|
|
19
|
+
const { EXT_PORT_OFFSCREEN_TO_BG, EXT_PORT_CS_TO_BG, EXT_PORT_UI_TO_BG } = cross_inpage_provider_core_1.consts;
|
|
20
20
|
class JsBridgeExtBackground extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
21
21
|
constructor(config) {
|
|
22
22
|
super(config);
|
|
@@ -25,6 +25,20 @@ class JsBridgeExtBackground extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
|
25
25
|
this.portIdIndex = 1;
|
|
26
26
|
this.setupMessagePortOnConnect();
|
|
27
27
|
}
|
|
28
|
+
addPort({ portId, port }) {
|
|
29
|
+
this.ports[portId] = port;
|
|
30
|
+
if (port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
31
|
+
this.offscreenPort = port;
|
|
32
|
+
this.offscreenPortId = portId;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
removePort({ portId, port }) {
|
|
36
|
+
delete this.ports[portId];
|
|
37
|
+
if (port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
38
|
+
this.offscreenPort = undefined;
|
|
39
|
+
this.offscreenPortId = undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
28
42
|
sendPayload(payload0) {
|
|
29
43
|
const payload = payload0;
|
|
30
44
|
if (!payload.remoteId) {
|
|
@@ -45,6 +59,7 @@ class JsBridgeExtBackground extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
|
45
59
|
throw error;
|
|
46
60
|
}
|
|
47
61
|
}
|
|
62
|
+
// TODO use utils
|
|
48
63
|
_getOriginFromPort(port) {
|
|
49
64
|
var _a, _b, _c, _d;
|
|
50
65
|
// chrome
|
|
@@ -70,10 +85,15 @@ class JsBridgeExtBackground extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
|
70
85
|
url: "https://app.uniswap.org/#/swap"
|
|
71
86
|
*/
|
|
72
87
|
// content-script may be multiple
|
|
73
|
-
if (port.name === EXT_PORT_CS_TO_BG ||
|
|
88
|
+
if (port.name === EXT_PORT_CS_TO_BG ||
|
|
89
|
+
port.name === EXT_PORT_UI_TO_BG ||
|
|
90
|
+
port.name === EXT_PORT_OFFSCREEN_TO_BG) {
|
|
74
91
|
this.portIdIndex += 1;
|
|
75
92
|
const portId = this.portIdIndex;
|
|
76
|
-
this.
|
|
93
|
+
this.addPort({
|
|
94
|
+
portId,
|
|
95
|
+
port,
|
|
96
|
+
});
|
|
77
97
|
const onMessage = (payload, port0) => {
|
|
78
98
|
const origin = this._getOriginFromPort(port0);
|
|
79
99
|
payload.remoteId = portId;
|
|
@@ -84,22 +104,32 @@ class JsBridgeExtBackground extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
|
84
104
|
// - receive
|
|
85
105
|
jsBridge.receive(payload, {
|
|
86
106
|
origin,
|
|
87
|
-
//
|
|
88
|
-
|
|
107
|
+
// TODO trust origin
|
|
108
|
+
// only trust message from UI/Offscreen, but NOT from content-script(dapp)
|
|
109
|
+
internal: port.name === EXT_PORT_UI_TO_BG || port.name === EXT_PORT_OFFSCREEN_TO_BG,
|
|
89
110
|
});
|
|
90
111
|
};
|
|
91
112
|
// #### content-script -> background
|
|
92
113
|
port.onMessage.addListener(onMessage);
|
|
93
114
|
// TODO onDisconnect remove ports cache
|
|
94
115
|
const onDisconnect = () => {
|
|
95
|
-
delete this.ports[portId];
|
|
96
116
|
port.onMessage.removeListener(onMessage);
|
|
97
117
|
port.onDisconnect.removeListener(onDisconnect);
|
|
118
|
+
this.removePort({
|
|
119
|
+
portId,
|
|
120
|
+
port,
|
|
121
|
+
});
|
|
98
122
|
};
|
|
99
123
|
port.onDisconnect.addListener(onDisconnect);
|
|
100
124
|
}
|
|
101
125
|
});
|
|
102
126
|
}
|
|
127
|
+
requestToOffscreen(data) {
|
|
128
|
+
if (!this.offscreenPort) {
|
|
129
|
+
throw new Error('offscreenPort not ready.');
|
|
130
|
+
}
|
|
131
|
+
return this.request({ data, remoteId: this.offscreenPortId });
|
|
132
|
+
}
|
|
103
133
|
requestToAllCS(scope, data) {
|
|
104
134
|
// TODO optimize rename: broadcastRequest
|
|
105
135
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.JsBridgeExtOffscreen = void 0;
|
|
7
|
+
const extensionMessagePort_1 = __importDefault(require("./extensionMessagePort"));
|
|
8
|
+
const cross_inpage_provider_core_1 = require("@onekeyfe/cross-inpage-provider-core");
|
|
9
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
10
|
+
const { EXT_PORT_OFFSCREEN_TO_BG } = cross_inpage_provider_core_1.consts;
|
|
11
|
+
class JsBridgeExtOffscreen extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
super(config);
|
|
14
|
+
this.sendAsString = false;
|
|
15
|
+
this.portToBg = null;
|
|
16
|
+
this.setupMessagePortConnect(config);
|
|
17
|
+
}
|
|
18
|
+
sendPayload(payload) {
|
|
19
|
+
if (this.portToBg) {
|
|
20
|
+
this.portToBg.postMessage(payload);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
setupMessagePortConnect(config) {
|
|
24
|
+
extensionMessagePort_1.default.connect({
|
|
25
|
+
name: EXT_PORT_OFFSCREEN_TO_BG,
|
|
26
|
+
// #### background -> offscreen
|
|
27
|
+
onMessage: (payload, port0) => {
|
|
28
|
+
let origin = utils_1.default.getOriginFromPort(port0) || '';
|
|
29
|
+
// in ext offscreen, port.sender?.origin is always empty,
|
|
30
|
+
// so we trust remote (background) origin
|
|
31
|
+
origin = origin || payload.origin || '';
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
33
|
+
const jsBridge = this;
|
|
34
|
+
jsBridge.receive(payload, {
|
|
35
|
+
origin,
|
|
36
|
+
// trust message from background
|
|
37
|
+
internal: port0.name === EXT_PORT_OFFSCREEN_TO_BG,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
onConnect: (port) => {
|
|
41
|
+
this.portToBg = port;
|
|
42
|
+
setTimeout(() => {
|
|
43
|
+
config.onPortConnect(port);
|
|
44
|
+
}, 0);
|
|
45
|
+
return () => {
|
|
46
|
+
this.portToBg = null;
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.JsBridgeExtOffscreen = JsBridgeExtOffscreen;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.JsBridgeExtUi = void 0;
|
|
7
7
|
const extensionMessagePort_1 = __importDefault(require("./extensionMessagePort"));
|
|
8
8
|
const cross_inpage_provider_core_1 = require("@onekeyfe/cross-inpage-provider-core");
|
|
9
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
9
10
|
const { EXT_PORT_UI_TO_BG } = cross_inpage_provider_core_1.consts;
|
|
10
11
|
class JsBridgeExtUi extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
11
12
|
constructor(config) {
|
|
@@ -20,23 +21,12 @@ class JsBridgeExtUi extends cross_inpage_provider_core_1.JsBridgeBase {
|
|
|
20
21
|
this.portToBg.postMessage(payload);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
_getOriginFromPort(port) {
|
|
24
|
-
var _a, _b, _c;
|
|
25
|
-
// chrome
|
|
26
|
-
let origin = ((_a = port === null || port === void 0 ? void 0 : port.sender) === null || _a === void 0 ? void 0 : _a.origin) || '';
|
|
27
|
-
// firefox
|
|
28
|
-
if (!origin && ((_b = port === null || port === void 0 ? void 0 : port.sender) === null || _b === void 0 ? void 0 : _b.url)) {
|
|
29
|
-
const uri = new URL((_c = port === null || port === void 0 ? void 0 : port.sender) === null || _c === void 0 ? void 0 : _c.url);
|
|
30
|
-
origin = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
31
|
-
}
|
|
32
|
-
return origin;
|
|
33
|
-
}
|
|
34
24
|
setupMessagePortConnect(config) {
|
|
35
25
|
extensionMessagePort_1.default.connect({
|
|
36
26
|
name: EXT_PORT_UI_TO_BG,
|
|
37
27
|
// #### background -> ui
|
|
38
28
|
onMessage: (payload, port0) => {
|
|
39
|
-
let origin =
|
|
29
|
+
let origin = utils_1.default.getOriginFromPort(port0) || '';
|
|
40
30
|
// in ext ui, port.sender?.origin is always empty,
|
|
41
31
|
// so we trust remote (background) origin
|
|
42
32
|
origin = origin || payload.origin || '';
|
|
@@ -7,8 +7,10 @@ exports.bridgeSetup = void 0;
|
|
|
7
7
|
const background_1 = __importDefault(require("./background"));
|
|
8
8
|
const ui_1 = __importDefault(require("./ui"));
|
|
9
9
|
const contentScript_1 = __importDefault(require("./contentScript"));
|
|
10
|
+
const offscreen_1 = __importDefault(require("./offscreen"));
|
|
10
11
|
exports.bridgeSetup = {
|
|
11
12
|
contentScript: contentScript_1.default,
|
|
12
13
|
ui: ui_1.default,
|
|
13
14
|
background: background_1.default,
|
|
15
|
+
offscreen: offscreen_1.default,
|
|
14
16
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const JsBridgeExtOffscreen_1 = require("../JsBridgeExtOffscreen");
|
|
4
|
+
function createOffscreenJsBridge(config) {
|
|
5
|
+
const bridge = new JsBridgeExtOffscreen_1.JsBridgeExtOffscreen(config);
|
|
6
|
+
return bridge;
|
|
7
|
+
}
|
|
8
|
+
exports.default = {
|
|
9
|
+
createOffscreenJsBridge,
|
|
10
|
+
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
exports.extensionMessagePort = void 0;
|
|
17
17
|
__exportStar(require("./bridgeSetup"), exports);
|
|
18
18
|
__exportStar(require("./JsBridgeExtBackground"), exports);
|
|
19
|
+
__exportStar(require("./JsBridgeExtOffscreen"), exports);
|
|
19
20
|
__exportStar(require("./JsBridgeExtUi"), exports);
|
|
20
21
|
__exportStar(require("./JsBridgeSimple"), exports);
|
|
21
22
|
const extensionMessagePort_1 = __importDefault(require("./extensionMessagePort"));
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function getOriginFromPort(port) {
|
|
4
|
+
var _a, _b, _c;
|
|
5
|
+
// chrome
|
|
6
|
+
let origin = ((_a = port === null || port === void 0 ? void 0 : port.sender) === null || _a === void 0 ? void 0 : _a.origin) || '';
|
|
7
|
+
// firefox
|
|
8
|
+
if (!origin && ((_b = port === null || port === void 0 ? void 0 : port.sender) === null || _b === void 0 ? void 0 : _b.url)) {
|
|
9
|
+
try {
|
|
10
|
+
const uri = new URL((_c = port === null || port === void 0 ? void 0 : port.sender) === null || _c === void 0 ? void 0 : _c.url);
|
|
11
|
+
origin = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
console.error(error);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return origin || '';
|
|
18
|
+
}
|
|
19
|
+
exports.default = {
|
|
20
|
+
getOriginFromPort,
|
|
21
|
+
};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function getOriginFromPort(port) {
|
|
2
|
+
var _a, _b, _c;
|
|
3
|
+
// chrome
|
|
4
|
+
let origin = ((_a = port === null || port === void 0 ? void 0 : port.sender) === null || _a === void 0 ? void 0 : _a.origin) || '';
|
|
5
|
+
// firefox
|
|
6
|
+
if (!origin && ((_b = port === null || port === void 0 ? void 0 : port.sender) === null || _b === void 0 ? void 0 : _b.url)) {
|
|
7
|
+
try {
|
|
8
|
+
const uri = new URL((_c = port === null || port === void 0 ? void 0 : port.sender) === null || _c === void 0 ? void 0 : _c.url);
|
|
9
|
+
origin = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
console.error(error);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return origin || '';
|
|
16
|
+
}
|
|
17
|
+
export default {
|
|
18
|
+
getOriginFromPort,
|
|
19
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/extension-bridge-hosted",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.26",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"cross-inpage-provider"
|
|
6
6
|
],
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"start": "tsc --watch"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@onekeyfe/cross-inpage-provider-core": "1.1.
|
|
32
|
-
"@onekeyfe/cross-inpage-provider-types": "1.1.
|
|
31
|
+
"@onekeyfe/cross-inpage-provider-core": "1.1.26",
|
|
32
|
+
"@onekeyfe/cross-inpage-provider-types": "1.1.26"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "c5fecd176e00c399c4829f73b9da5e74e1f4e1b9"
|
|
35
35
|
}
|