@dynamic-labs-wallet/browser-wallet-client 1.0.82 → 1.0.84
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/index.cjs +31 -8
- package/index.esm.js +31 -8
- package/package.json +2 -2
- package/src/services/messageTransportBridge.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -246,6 +246,23 @@ class IframeMessageHandler {
|
|
|
246
246
|
|
|
247
247
|
const logger = new logger$1.Logger('DynamicWaasWalletClient');
|
|
248
248
|
|
|
249
|
+
const isOpaqueOrigin = (origin)=>!origin || origin === '' || origin === 'null';
|
|
250
|
+
const isNativeBridgeEvent = (event)=>event.source === null && isOpaqueOrigin(event.origin);
|
|
251
|
+
/**
|
|
252
|
+
* Validate the browser-supplied `origin` and `source` of an incoming message.
|
|
253
|
+
* Native WebView bridge events have an opaque origin and a null source.
|
|
254
|
+
* Messages from the iframe must come from the iframe's contentWindow and
|
|
255
|
+
* declare the iframe's origin.
|
|
256
|
+
*
|
|
257
|
+
* TODO: replace with `@dynamic-labs/message-transport/isMessageEventTrusted`
|
|
258
|
+
* once the wallet client is on a version that exports it.
|
|
259
|
+
*/ const isTrustedIncomingMessage = (event, source, iframe, iframeOrigin)=>{
|
|
260
|
+
if (source === 'document') {
|
|
261
|
+
return isNativeBridgeEvent(event);
|
|
262
|
+
}
|
|
263
|
+
const isFromIframe = event.source === iframe.contentWindow && event.origin === iframeOrigin;
|
|
264
|
+
return isFromIframe || isNativeBridgeEvent(event);
|
|
265
|
+
};
|
|
249
266
|
const setupMessageTransportBridge = (messageTransport$1, iframe, iframeOrigin)=>{
|
|
250
267
|
const logger = new logger$1.Logger('debug');
|
|
251
268
|
function hostListener(message) {
|
|
@@ -267,15 +284,19 @@ const setupMessageTransportBridge = (messageTransport$1, iframe, iframeOrigin)=>
|
|
|
267
284
|
}
|
|
268
285
|
}
|
|
269
286
|
messageTransport$1.on(hostListener);
|
|
270
|
-
const handleIncomingMessage = (
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if ((data == null ? void 0 : data.origin) !== 'webview') {
|
|
287
|
+
const handleIncomingMessage = (event, source)=>{
|
|
288
|
+
if (!isTrustedIncomingMessage(event, source, iframe, iframeOrigin)) {
|
|
289
|
+
logger.debug(`skipped message: untrusted ${source} event (origin: ${event.origin}, source mismatch)`);
|
|
274
290
|
return;
|
|
275
291
|
}
|
|
292
|
+
const { data } = event;
|
|
293
|
+
if (!data) return;
|
|
276
294
|
if (typeof data !== 'object') {
|
|
277
295
|
return;
|
|
278
296
|
}
|
|
297
|
+
if ((data == null ? void 0 : data.origin) !== 'webview') {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
279
300
|
try {
|
|
280
301
|
const message = messageTransport.parseMessageTransportData(data);
|
|
281
302
|
messageTransport$1.emit(message);
|
|
@@ -285,20 +306,22 @@ const setupMessageTransportBridge = (messageTransport$1, iframe, iframeOrigin)=>
|
|
|
285
306
|
}
|
|
286
307
|
}
|
|
287
308
|
};
|
|
309
|
+
const handleDocumentMessage = (event)=>handleIncomingMessage(event, 'document');
|
|
310
|
+
const handleWindowMessage = (event)=>handleIncomingMessage(event, 'window');
|
|
288
311
|
/**
|
|
289
312
|
* Handle incoming message from android client
|
|
290
313
|
*/ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
291
314
|
// @ts-expect-error
|
|
292
|
-
document.addEventListener('message',
|
|
315
|
+
document.addEventListener('message', handleDocumentMessage);
|
|
293
316
|
/**
|
|
294
317
|
* Handle incoming message from iOS client
|
|
295
|
-
*/ window.addEventListener('message',
|
|
318
|
+
*/ window.addEventListener('message', handleWindowMessage);
|
|
296
319
|
return ()=>{
|
|
297
320
|
messageTransport$1.off(hostListener);
|
|
298
321
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
299
322
|
// @ts-expect-error
|
|
300
|
-
document.removeEventListener('message',
|
|
301
|
-
window.removeEventListener('message',
|
|
323
|
+
document.removeEventListener('message', handleDocumentMessage);
|
|
324
|
+
window.removeEventListener('message', handleWindowMessage);
|
|
302
325
|
};
|
|
303
326
|
};
|
|
304
327
|
|
package/index.esm.js
CHANGED
|
@@ -245,6 +245,23 @@ class IframeMessageHandler {
|
|
|
245
245
|
|
|
246
246
|
const logger = new Logger('DynamicWaasWalletClient');
|
|
247
247
|
|
|
248
|
+
const isOpaqueOrigin = (origin)=>!origin || origin === '' || origin === 'null';
|
|
249
|
+
const isNativeBridgeEvent = (event)=>event.source === null && isOpaqueOrigin(event.origin);
|
|
250
|
+
/**
|
|
251
|
+
* Validate the browser-supplied `origin` and `source` of an incoming message.
|
|
252
|
+
* Native WebView bridge events have an opaque origin and a null source.
|
|
253
|
+
* Messages from the iframe must come from the iframe's contentWindow and
|
|
254
|
+
* declare the iframe's origin.
|
|
255
|
+
*
|
|
256
|
+
* TODO: replace with `@dynamic-labs/message-transport/isMessageEventTrusted`
|
|
257
|
+
* once the wallet client is on a version that exports it.
|
|
258
|
+
*/ const isTrustedIncomingMessage = (event, source, iframe, iframeOrigin)=>{
|
|
259
|
+
if (source === 'document') {
|
|
260
|
+
return isNativeBridgeEvent(event);
|
|
261
|
+
}
|
|
262
|
+
const isFromIframe = event.source === iframe.contentWindow && event.origin === iframeOrigin;
|
|
263
|
+
return isFromIframe || isNativeBridgeEvent(event);
|
|
264
|
+
};
|
|
248
265
|
const setupMessageTransportBridge = (messageTransport, iframe, iframeOrigin)=>{
|
|
249
266
|
const logger = new Logger('debug');
|
|
250
267
|
function hostListener(message) {
|
|
@@ -266,15 +283,19 @@ const setupMessageTransportBridge = (messageTransport, iframe, iframeOrigin)=>{
|
|
|
266
283
|
}
|
|
267
284
|
}
|
|
268
285
|
messageTransport.on(hostListener);
|
|
269
|
-
const handleIncomingMessage = (
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
if ((data == null ? void 0 : data.origin) !== 'webview') {
|
|
286
|
+
const handleIncomingMessage = (event, source)=>{
|
|
287
|
+
if (!isTrustedIncomingMessage(event, source, iframe, iframeOrigin)) {
|
|
288
|
+
logger.debug(`skipped message: untrusted ${source} event (origin: ${event.origin}, source mismatch)`);
|
|
273
289
|
return;
|
|
274
290
|
}
|
|
291
|
+
const { data } = event;
|
|
292
|
+
if (!data) return;
|
|
275
293
|
if (typeof data !== 'object') {
|
|
276
294
|
return;
|
|
277
295
|
}
|
|
296
|
+
if ((data == null ? void 0 : data.origin) !== 'webview') {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
278
299
|
try {
|
|
279
300
|
const message = parseMessageTransportData(data);
|
|
280
301
|
messageTransport.emit(message);
|
|
@@ -284,20 +305,22 @@ const setupMessageTransportBridge = (messageTransport, iframe, iframeOrigin)=>{
|
|
|
284
305
|
}
|
|
285
306
|
}
|
|
286
307
|
};
|
|
308
|
+
const handleDocumentMessage = (event)=>handleIncomingMessage(event, 'document');
|
|
309
|
+
const handleWindowMessage = (event)=>handleIncomingMessage(event, 'window');
|
|
287
310
|
/**
|
|
288
311
|
* Handle incoming message from android client
|
|
289
312
|
*/ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
290
313
|
// @ts-expect-error
|
|
291
|
-
document.addEventListener('message',
|
|
314
|
+
document.addEventListener('message', handleDocumentMessage);
|
|
292
315
|
/**
|
|
293
316
|
* Handle incoming message from iOS client
|
|
294
|
-
*/ window.addEventListener('message',
|
|
317
|
+
*/ window.addEventListener('message', handleWindowMessage);
|
|
295
318
|
return ()=>{
|
|
296
319
|
messageTransport.off(hostListener);
|
|
297
320
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
298
321
|
// @ts-expect-error
|
|
299
|
-
document.removeEventListener('message',
|
|
300
|
-
window.removeEventListener('message',
|
|
322
|
+
document.removeEventListener('message', handleDocumentMessage);
|
|
323
|
+
window.removeEventListener('message', handleWindowMessage);
|
|
301
324
|
};
|
|
302
325
|
};
|
|
303
326
|
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/browser-wallet-client",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.84",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/core": "1.0.
|
|
7
|
+
"@dynamic-labs-wallet/core": "1.0.84",
|
|
8
8
|
"@dynamic-labs/logger": "^4.81.0",
|
|
9
9
|
"@dynamic-labs/message-transport": "^4.81.0"
|
|
10
10
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageTransportBridge.d.ts","sourceRoot":"","sources":["../../src/services/messageTransportBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iCAAiC,EAGvC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"messageTransportBridge.d.ts","sourceRoot":"","sources":["../../src/services/messageTransportBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iCAAiC,EAGvC,MAAM,iCAAiC,CAAC;AA+BzC,eAAO,MAAM,2BAA2B,qBACpB,iCAAiC,UAC3C,iBAAiB,gBACX,MAAM,KACnB,CAAC,MAAM,IAAI,CA2Eb,CAAC"}
|