Skip to content

Commit 366aeb5

Browse files
author
Shane Osbourne
committed
Only export core types from messaging
1 parent 924c35b commit 366aeb5

15 files changed

+94
-79
lines changed

Diff for: injected/entry-points/android.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import { load, init } from '../src/content-scope-features.js'
55
import { processConfig, isGloballyDisabled } from './../src/utils'
66
import { isTrackerOrigin } from '../src/trackers'
7-
import { AndroidMessagingConfig } from '../../messaging/index.js'
7+
import { AndroidMessagingConfig } from '../../messaging/lib/android.js'
88

99
function initCode () {
1010
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f

Diff for: injected/entry-points/apple.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import { load, init } from '../src/content-scope-features.js'
55
import { processConfig, isGloballyDisabled } from './../src/utils'
66
import { isTrackerOrigin } from '../src/trackers'
7-
import { WebkitMessagingConfig, TestTransportConfig } from '../../messaging/index.js'
7+
import { TestTransportConfig } from '../../messaging/index.js'
8+
import { WebkitMessagingConfig } from '../../messaging/lib/webkit.js'
89

910
function initCode () {
1011
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f

Diff for: injected/entry-points/windows.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import { load, init } from '../src/content-scope-features.js'
55
import { processConfig, isGloballyDisabled, windowsSpecificFeatures } from './../src/utils'
66
import { isTrackerOrigin } from '../src/trackers'
7-
import { WindowsMessagingConfig } from '../../messaging/index.js'
7+
import { WindowsMessagingConfig } from '../../messaging/lib/windows.js'
88

99
function initCode () {
1010
// @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f

Diff for: injected/src/content-feature.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { immutableJSONPatch } from 'immutable-json-patch'
33
import { PerformanceMonitor } from './performance.js'
44
import { defineProperty, shimInterface, shimProperty, wrapMethod, wrapProperty, wrapToString } from './wrapper-utils.js'
55
import { Proxy, Reflect } from './captured-globals.js'
6-
import { Messaging, MessagingContext } from '../../messaging/index.js'
6+
import { MessagingContext } from '../../messaging/index.js'
77
import { extensionConstructMessagingConfig } from './sendmessage-transport.js'
88

99
/**
@@ -125,7 +125,7 @@ export default class ContentFeature {
125125
if (this.platform?.name !== 'extension') throw new Error('Only extension messaging supported, all others should be passed in')
126126
messagingConfig = extensionConstructMessagingConfig()
127127
}
128-
this._messaging = new Messaging(messagingContext, messagingConfig)
128+
this._messaging = messagingConfig.intoMessaging(messagingContext)
129129
return this._messaging
130130
}
131131

Diff for: injected/src/features/click-to-load.js

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Messaging, TestTransportConfig, WebkitMessagingConfig } from '../../../messaging/index.js'
21
import { createCustomEvent, originalWindowDispatchEvent } from '../utils.js'
32
import { logoImg, loadingImages, closeIcon, facebookLogo } from './click-to-load/ctl-assets.js'
43
import { getStyles, getConfig } from './click-to-load/ctl-config.js'
@@ -7,6 +6,7 @@ import ContentFeature from '../content-feature.js'
76
import { DDGCtlPlaceholderBlockedElement } from './click-to-load/components/ctl-placeholder-blocked.js'
87
import { DDGCtlLoginButton } from './click-to-load/components/ctl-login-button.js'
98
import { registerCustomElements } from './click-to-load/components'
9+
import { TestTransportConfig } from '@duckduckgo/messaging'
1010

1111
/**
1212
* @typedef {'darkMode' | 'lightMode' | 'loginMode' | 'cancelMode'} displayMode
@@ -2019,16 +2019,10 @@ export default class ClickToLoad extends ContentFeature {
20192019
if (this.platform.name === 'android' || this.platform.name === 'extension') {
20202020
this._clickToLoadMessagingTransport = new SendMessageMessagingTransport()
20212021
const config = new TestTransportConfig(this._clickToLoadMessagingTransport)
2022-
this._messaging = new Messaging(this.messagingContext, config)
2022+
this._messaging = config.intoMessaging(this.messagingContext)
20232023
return this._messaging
20242024
} else if (this.platform.name === 'ios' || this.platform.name === 'macos') {
2025-
const config = new WebkitMessagingConfig({
2026-
secret: '',
2027-
hasModernWebkitAPI: true,
2028-
webkitMessageHandlerNames: ['contentScopeScriptsIsolated']
2029-
})
2030-
this._messaging = new Messaging(this.messagingContext, config)
2031-
return this._messaging
2025+
return this.messaging
20322026
} else {
20332027
throw new Error('Messaging not supported yet on platform: ' + this.name)
20342028
}

Diff for: injected/unit-test/messaging.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
Messaging,
32
MessagingContext,
43
TestTransportConfig,
54
RequestMessage, NotificationMessage, Subscription, MessageResponse, SubscriptionEvent
@@ -82,7 +81,7 @@ describe('Android', () => {
8281
featureName,
8382
env: 'development'
8483
})
85-
const messaging = new Messaging(messageContextA, config)
84+
const messaging = config.intoMessaging(messageContextA)
8685
return { messaging }
8786
}
8887
it('sends notification to 1 feature', () => {
@@ -232,7 +231,7 @@ function createMessaging () {
232231
env: 'development'
233232
})
234233

235-
const messaging = new Messaging(messagingContext, testTransportConfig)
234+
const messaging = testTransportConfig.intoMessaging(messagingContext)
236235

237236
return { transport, messaging }
238237
}

Diff for: messaging/index.js

+26-41
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@
1919
* - Implementation Guide: {@link "Messaging Implementation Guide"}
2020
*
2121
* @module Messaging
22+
*
23+
* @import { WindowsMessagingConfig, } from './lib/windows.js'
24+
* @import { WebkitMessagingConfig, WebkitMessagingTransport } from './lib/webkit.js';
25+
* @import { AndroidMessagingConfig } from './lib/android.js';
26+
* @typedef {WebkitMessagingConfig | WindowsMessagingConfig | AndroidMessagingConfig | TestTransportConfig} MessagingConfig
27+
* @typedef {{intoMessaging: (ctx: MessagingContext) => Messaging}} IntoMessaging
28+
*
2229
*/
23-
import { WindowsMessagingConfig, WindowsMessagingTransport, WindowsInteropMethods, WindowsNotification, WindowsRequestMessage } from './lib/windows.js'
24-
import { WebkitMessagingConfig, WebkitMessagingTransport } from './lib/webkit.js'
30+
2531
import { NotificationMessage, RequestMessage, Subscription, MessageResponse, MessageError, SubscriptionEvent } from './schema.js'
26-
import { AndroidMessagingConfig, AndroidMessagingTransport } from './lib/android.js'
2732
import { createTypedMessages } from './lib/typed-messages.js'
2833

2934
/**
@@ -45,20 +50,22 @@ export class MessagingContext {
4550
}
4651

4752
/**
48-
* @typedef {WebkitMessagingConfig | WindowsMessagingConfig | AndroidMessagingConfig | TestTransportConfig} MessagingConfig
49-
*/
50-
51-
/**
52-
*
53+
* The consumer interface
5354
*/
5455
export class Messaging {
5556
/**
5657
* @param {MessagingContext} messagingContext
57-
* @param {MessagingConfig} config
58+
* @param {MessagingTransport} transport
5859
*/
59-
constructor (messagingContext, config) {
60+
constructor (messagingContext, transport) {
61+
/**
62+
* @internal
63+
*/
6064
this.messagingContext = messagingContext
61-
this.transport = getTransport(config, this.messagingContext)
65+
/**
66+
* @internal
67+
*/
68+
this.transport = transport
6269
}
6370

6471
/**
@@ -164,6 +171,7 @@ export class MessagingTransport {
164171
* It's useful for debugging, and for enabling scripts to run in
165172
* other environments - for example, testing in a browser without the need
166173
* for a full integration
174+
* @implements IntoMessaging
167175
*/
168176
export class TestTransportConfig {
169177
/**
@@ -172,6 +180,13 @@ export class TestTransportConfig {
172180
constructor (impl) {
173181
this.impl = impl
174182
}
183+
184+
/**
185+
* @param {MessagingContext} context
186+
*/
187+
intoMessaging (context) {
188+
return new Messaging(context, new TestTransport(this, context))
189+
}
175190
}
176191

177192
/**
@@ -200,27 +215,6 @@ export class TestTransport {
200215
}
201216
}
202217

203-
/**
204-
* @param {WebkitMessagingConfig | WindowsMessagingConfig | AndroidMessagingConfig | TestTransportConfig} config
205-
* @param {MessagingContext} messagingContext
206-
* @returns {MessagingTransport}
207-
*/
208-
function getTransport (config, messagingContext) {
209-
if (config instanceof WebkitMessagingConfig) {
210-
return new WebkitMessagingTransport(config, messagingContext)
211-
}
212-
if (config instanceof WindowsMessagingConfig) {
213-
return new WindowsMessagingTransport(config, messagingContext)
214-
}
215-
if (config instanceof AndroidMessagingConfig) {
216-
return new AndroidMessagingTransport(config, messagingContext)
217-
}
218-
if (config instanceof TestTransportConfig) {
219-
return new TestTransport(config, messagingContext)
220-
}
221-
throw new Error('unreachable')
222-
}
223-
224218
/**
225219
* Thrown when a handler cannot be found
226220
*/
@@ -239,20 +233,11 @@ export class MissingHandler extends Error {
239233
* Some re-exports for convenience
240234
*/
241235
export {
242-
WebkitMessagingConfig,
243-
WebkitMessagingTransport,
244-
WindowsMessagingConfig,
245-
WindowsMessagingTransport,
246-
WindowsInteropMethods,
247236
NotificationMessage,
248237
RequestMessage,
249238
Subscription,
250239
MessageResponse,
251240
MessageError,
252241
SubscriptionEvent,
253-
WindowsNotification,
254-
WindowsRequestMessage,
255-
AndroidMessagingConfig,
256-
AndroidMessagingTransport,
257242
createTypedMessages
258243
}

Diff for: messaging/lib/android.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
*
77
*/
88
// eslint-disable-next-line @typescript-eslint/no-unused-vars
9-
import { MessagingTransport, MessageResponse, SubscriptionEvent } from '../index.js'
9+
import { Messaging, MessagingTransport } from '../index.js'
1010
import { isResponseFor, isSubscriptionEventFor } from '../schema.js'
1111

1212
/**
1313
* @typedef {import('../index.js').Subscription} Subscription
1414
* @typedef {import('../index.js').MessagingContext} MessagingContext
1515
* @typedef {import('../index.js').RequestMessage} RequestMessage
16+
* @typedef {import('../index.js').SubscriptionEvent} SubscriptionEvent
17+
* @typedef {import('../index.js').MessageResponse} MessageResponse
18+
* @typedef {import('../index.js').IntoMessaging} IntoMessaging
1619
* @typedef {import('../index.js').NotificationMessage} NotificationMessage
1720
*/
1821

@@ -171,6 +174,7 @@ export class AndroidMessagingTransport {
171174
* }
172175
* }
173176
* ```
177+
* @implements IntoMessaging
174178
*/
175179
export class AndroidMessagingConfig {
176180
/** @type {(json: string, secret: string) => void} */
@@ -210,6 +214,14 @@ export class AndroidMessagingConfig {
210214
this._assignHandlerMethod()
211215
}
212216

217+
/**
218+
* @param {MessagingContext} context
219+
* @return {Messaging}
220+
*/
221+
intoMessaging (context) {
222+
return new Messaging(context, new AndroidMessagingTransport(this, context))
223+
}
224+
213225
/**
214226
* The transport can call this to transmit a JSON payload along with a secret
215227
* to the native Android handler.

Diff for: messaging/lib/examples/android.example.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Messaging, MessagingContext } from '../../index.js'
1+
import { MessagingContext } from '../../index.js'
22
import { AndroidMessagingConfig } from '../android.js'
33

44
/**
@@ -30,7 +30,7 @@ const messagingContext = new MessagingContext({
3030
/**
3131
* And then send notifications!
3232
*/
33-
const messaging = new Messaging(messagingContext, config)
33+
const messaging = config.intoMessaging(messagingContext)
3434
messaging.notify('helloWorld')
3535

3636
/**
@@ -63,8 +63,8 @@ const messagingContext2 = { ...messagingContext1, featureName: 'duckPlayer' }
6363
/**
6464
* Now, each feature has its own isolated messaging...
6565
*/
66-
const messaging1 = new Messaging(messagingContext, config)
66+
const messaging1 = config.intoMessaging(messagingContext1)
6767
messaging1.notify('helloWorld')
6868

69-
const messaging2 = new Messaging(messagingContext2, config)
69+
const messaging2 = config.intoMessaging(messagingContext2)
7070
messaging2.notify('getUserValues')

Diff for: messaging/lib/examples/test.example.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Messaging, MessagingContext, TestTransportConfig } from '../../index.js'
1+
import { MessagingContext, TestTransportConfig } from '../../index.js'
22

33
/**
44
* Creates an ad-hoc messaging transport on the fly - useful for testing
@@ -36,7 +36,7 @@ const messagingContext = new MessagingContext({
3636
/**
3737
* And then send notifications!
3838
*/
39-
const messaging = new Messaging(messagingContext, config)
39+
const messaging = config.intoMessaging(messagingContext)
4040
messaging.notify('helloWorld')
4141

4242
/**

Diff for: messaging/lib/examples/webkit.example.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Messaging, MessagingContext, WebkitMessagingConfig } from '../../index.js'
1+
import { MessagingContext } from '../../index.js'
2+
import { WebkitMessagingConfig } from '../webkit.js'
23

34
/**
45
* Configuration for WebkitMessaging
@@ -21,7 +22,7 @@ const messagingContext = new MessagingContext({
2122
/**
2223
* With config + context, now create an instance:
2324
*/
24-
const messaging = new Messaging(messagingContext, config)
25+
const messaging = config.intoMessaging(messagingContext)
2526

2627
/**
2728
* send notifications (fire and forget)

Diff for: messaging/lib/examples/windows.example.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { WindowsMessagingConfig } from '../windows.js'
2-
import { Messaging, MessagingContext } from '../../index.js'
2+
import { MessagingContext } from '../../index.js'
33

44
/**
55
* These 3 required methods that get assigned by the Native side.
@@ -32,7 +32,7 @@ const messagingContext = new MessagingContext({
3232
/**
3333
* And then send notifications!
3434
*/
35-
const messaging = new Messaging(messagingContext, config)
35+
const messaging = config.intoMessaging(messagingContext)
3636
messaging.notify('helloWorld')
3737

3838
/**

Diff for: messaging/lib/webkit.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* part of the message handling, see {@link WebkitMessagingTransport} for details.
88
*/
99
// eslint-disable-next-line @typescript-eslint/no-unused-vars
10-
import { MessagingTransport, MissingHandler } from '../index.js'
10+
import { MessagingTransport, MissingHandler, Messaging } from '../index.js'
1111
import { isResponseFor, isSubscriptionEventFor } from '../schema.js'
1212

1313
/**
@@ -317,6 +317,9 @@ export class WebkitMessagingTransport {
317317
* Please see {@link WebkitMessagingTransport} for details on how messages are sent/received
318318
*
319319
* [Example](./examples/webkit.example.js)
320+
*
321+
* @import { IntoMessaging, MessagingContext } from "../index.js"
322+
* @implements IntoMessaging
320323
*/
321324
export class WebkitMessagingConfig {
322325
/**
@@ -354,6 +357,14 @@ export class WebkitMessagingConfig {
354357
*/
355358
this.secret = params.secret
356359
}
360+
361+
/**
362+
* @param {MessagingContext} context
363+
* @return {Messaging}
364+
*/
365+
intoMessaging (context) {
366+
return new Messaging(context, new WebkitMessagingTransport(this, context))
367+
}
357368
}
358369

359370
/**

0 commit comments

Comments
 (0)