@adobe/uix-core 0.7.0 → 0.7.1-nightly.20230114

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.
@@ -1,11 +1,6 @@
1
1
  import EventEmitter from "eventemitter3";
2
- import { isIframe, isTunnelSource } from "../value-assertions";
3
- import {
4
- isHandshakeAccepting,
5
- isHandshakeOffer,
6
- makeAccepted,
7
- makeOffered,
8
- } from "./tunnel-message";
2
+ import { isIframe } from "../value-assertions";
3
+ import { TunnelMessenger } from "./tunnel-messenger";
9
4
  import { unwrap } from "../message-wrapper";
10
5
 
11
6
  /**
@@ -46,6 +41,10 @@ export interface TunnelConfig {
46
41
  * @defaultValue 4000
47
42
  */
48
43
  timeout: number;
44
+ /**
45
+ * Logger instance to use for debugging tunnel connection.
46
+ */
47
+ logger: Console;
49
48
 
50
49
  // #endregion Properties
51
50
  }
@@ -120,17 +119,23 @@ export class Tunnel extends EventEmitter {
120
119
  )}`
121
120
  );
122
121
  }
122
+
123
123
  const source = target.contentWindow;
124
124
  const config = Tunnel._normalizeConfig(options);
125
125
  const tunnel = new Tunnel(config);
126
+ const messenger = new TunnelMessenger({
127
+ myOrigin: window.location.origin,
128
+ targetOrigin: options.targetOrigin,
129
+ logger: options.logger || console,
130
+ });
126
131
  let frameStatusCheck: number;
127
132
  let timeout: number;
128
133
  const offerListener = (event: MessageEvent) => {
129
134
  if (
130
135
  isFromOrigin(event, source, config.targetOrigin) &&
131
- isHandshakeOffer(event.data)
136
+ messenger.isHandshakeOffer(event.data)
132
137
  ) {
133
- const accepted = makeAccepted(unwrap(event.data).offers);
138
+ const accepted = messenger.makeAccepted(unwrap(event.data).offers);
134
139
  const channel = new MessageChannel();
135
140
  source.postMessage(accepted, config.targetOrigin, [channel.port1]);
136
141
  tunnel.connect(channel.port2);
@@ -187,11 +192,16 @@ export class Tunnel extends EventEmitter {
187
192
  const key = makeKey();
188
193
  const config = Tunnel._normalizeConfig(opts);
189
194
  const tunnel = new Tunnel(config);
195
+ const messenger = new TunnelMessenger({
196
+ myOrigin: window.location.origin,
197
+ targetOrigin: config.targetOrigin,
198
+ logger: config.logger,
199
+ });
190
200
  const acceptListener = (event: MessageEvent) => {
191
201
  if (
192
202
  !timedOut &&
193
203
  isFromOrigin(event, source, config.targetOrigin) &&
194
- isHandshakeAccepting(event.data, key)
204
+ messenger.isHandshakeAccepting(event.data, key)
195
205
  ) {
196
206
  cleanup();
197
207
  if (!event.ports || !event.ports.length) {
@@ -225,7 +235,7 @@ export class Tunnel extends EventEmitter {
225
235
  tunnel.on("connected", cleanup);
226
236
 
227
237
  const sendOffer = () =>
228
- source.postMessage(makeOffered(key), config.targetOrigin);
238
+ source.postMessage(messenger.makeOffered(key), config.targetOrigin);
229
239
  retrying = window.setInterval(sendOffer, RETRY_MS);
230
240
  sendOffer();
231
241
 
@@ -279,6 +289,7 @@ export class Tunnel extends EventEmitter {
279
289
  let errorMessage = "";
280
290
  const config: Partial<TunnelConfig> = {
281
291
  timeout: 4000,
292
+ logger: console,
282
293
  ...options,
283
294
  };
284
295
 
@@ -46,3 +46,13 @@ export function isIframe(value: unknown): value is HTMLIFrameElement {
46
46
  const { nodeName } = value as HTMLIFrameElement;
47
47
  return typeof nodeName === "string" && nodeName.toLowerCase() === "iframe";
48
48
  }
49
+
50
+ export function isObjectWithPrototype<T>(
51
+ value: unknown
52
+ ): value is T & { [key: string | symbol]: unknown } {
53
+ if (!value || typeof value !== "object") {
54
+ return false;
55
+ }
56
+ const proto = Reflect.getPrototypeOf(value);
57
+ return proto !== Object.prototype;
58
+ }
@@ -1,19 +0,0 @@
1
- import { WrappedMessage } from "../message-wrapper";
2
- import { HandshakeAcceptedTicket, HandshakeOfferedTicket } from "../tickets";
3
- declare type HandshakeAccepted = WrappedMessage<HandshakeAcceptedTicket>;
4
- declare type HandshakeOffered = WrappedMessage<HandshakeOfferedTicket>;
5
- declare type HandshakeMessage = HandshakeAccepted | HandshakeOffered;
6
- export declare function resetWarnings(): void;
7
- export declare function makeAccepted(id: string): HandshakeAccepted;
8
- export declare function makeOffered(id: string): HandshakeOffered;
9
- export declare function isHandshakeAccepting(message: unknown, id: string): message is HandshakeAccepted;
10
- export declare function isHandshakeOffer(message: unknown): message is HandshakeOffered;
11
- export declare function isHandshake(message: unknown): message is HandshakeMessage;
12
- declare const _default: {
13
- makeOffered: typeof makeOffered;
14
- makeAccepted: typeof makeAccepted;
15
- isHandshake: typeof isHandshake;
16
- resetWarnings: typeof resetWarnings;
17
- };
18
- export default _default;
19
- //# sourceMappingURL=tunnel-message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnel-message.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAA2B,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG7E,aAAK,iBAAiB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AACjE,aAAK,gBAAgB,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;AAC/D,aAAK,gBAAgB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAI7D,wBAAgB,aAAa,SAE5B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAK1D;AACD,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAKxD;AACD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,MAAM,GACT,OAAO,IAAI,iBAAiB,CAI9B;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,OAAO,IAAI,gBAAgB,CAK7B;AACD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAuBzE;;;;;;;AAED,wBAKE"}
@@ -1,75 +0,0 @@
1
- import { NS_ROOT, VERSION } from "../constants";
2
- import { isPlainObject } from "../value-assertions";
3
- import { WrappedMessage, isWrapped, wrap, unwrap } from "../message-wrapper";
4
- import { HandshakeAcceptedTicket, HandshakeOfferedTicket } from "../tickets";
5
-
6
- type Handshake = HandshakeAcceptedTicket | HandshakeOfferedTicket;
7
- type HandshakeAccepted = WrappedMessage<HandshakeAcceptedTicket>;
8
- type HandshakeOffered = WrappedMessage<HandshakeOfferedTicket>;
9
- type HandshakeMessage = HandshakeAccepted | HandshakeOffered;
10
-
11
- const VERSION_WARNINGS = new Set();
12
-
13
- export function resetWarnings() {
14
- VERSION_WARNINGS.clear();
15
- }
16
-
17
- export function makeAccepted(id: string): HandshakeAccepted {
18
- return wrap({
19
- accepts: id,
20
- version: VERSION,
21
- });
22
- }
23
- export function makeOffered(id: string): HandshakeOffered {
24
- return wrap({
25
- offers: id,
26
- version: VERSION,
27
- });
28
- }
29
- export function isHandshakeAccepting(
30
- message: unknown,
31
- id: string
32
- ): message is HandshakeAccepted {
33
- return (
34
- isHandshake(message) && unwrap(message as HandshakeAccepted).accepts === id
35
- );
36
- }
37
- export function isHandshakeOffer(
38
- message: unknown
39
- ): message is HandshakeOffered {
40
- return (
41
- isHandshake(message) &&
42
- typeof unwrap(message as HandshakeOffered).offers === "string"
43
- );
44
- }
45
- export function isHandshake(message: unknown): message is HandshakeMessage {
46
- if (!isWrapped(message)) {
47
- return false;
48
- }
49
- const tunnelData: Handshake = unwrap<Handshake>(message as HandshakeMessage);
50
- if (
51
- !isPlainObject(tunnelData) ||
52
- typeof tunnelData.version !== "string" ||
53
- !(Reflect.has(tunnelData, "accepts") || Reflect.has(tunnelData, "offers"))
54
- ) {
55
- console.error(
56
- `malformed tunnel message, message.${NS_ROOT} must be an object with a "version" string and an either an "accepts" or "offers" property containing an ID string.`
57
- );
58
- return false;
59
- }
60
- const { version } = tunnelData;
61
- if (version !== VERSION && !VERSION_WARNINGS.has(version)) {
62
- VERSION_WARNINGS.add(version);
63
- console.warn(
64
- `Version mismatch: current Tunnel is ${VERSION} and remote Tunnel is ${version}. May cause problems.`
65
- );
66
- }
67
- return true;
68
- }
69
-
70
- export default {
71
- makeOffered,
72
- makeAccepted,
73
- isHandshake,
74
- resetWarnings,
75
- };