Skip to content

Commit

Permalink
chore: upgrade holoflows kit to fit mv3 (#11521)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jack-Works committed Mar 25, 2024
1 parent cdd96d0 commit 925af28
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 57 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"clean": "npx gulp clean"
},
"dependencies": {
"@dimensiondev/holoflows-kit": "0.9.0-20240104084316-88642f9",
"@dimensiondev/holoflows-kit": "0.9.0-20240322092738-f9180f3",
"@emotion/cache": "11.11.0",
"@emotion/react": "11.11.1",
"@emotion/serialize": "1.1.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/flags/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
"types": "./dist/index.d.ts",
"dependencies": {
"urlcat": "^3.1.0",
"@dimensiondev/holoflows-kit": "0.9.0-20230307045856-46252fb"
"@dimensiondev/holoflows-kit": "0.9.0-20240322092738-f9180f3"
}
}
10 changes: 8 additions & 2 deletions packages/mask/background/services/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ export function startServices() {
AsyncGeneratorCall(GeneratorService, {
key: 'GeneratorService',
encoder,
channel,
channel: {
on: (c) => channel.on((d) => c(d)),
send: (d) => channel.send(d),
},
log: {
beCalled: false,
remoteError: false,
Expand All @@ -75,7 +78,10 @@ function setup<K extends keyof Services>(key: K, implementation: () => Promise<S
AsyncCall(load(), {
key,
encoder,
channel,
channel: {
on: (c) => channel.on((d) => c(d)),
send: (d) => channel.send(d),
},
log:
hasLog ?
{
Expand Down
11 changes: 6 additions & 5 deletions packages/mask/shared-ui/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import {
AsyncCall,
AsyncGeneratorCall,
type AsyncCallOptions,
type CallbackBasedChannel,
type EventBasedChannel,
type AsyncVersionOf,
type AsyncGeneratorVersionOf,
} from 'async-call-rpc/full'
Expand All @@ -26,7 +24,7 @@ import type {
import { setDebugObject } from '@masknet/shared-base'
assertNotEnvironment(Environment.ManifestBackground)

const message = new WebExtensionMessage<Record<string, any>>({ domain: '$' })
const message = new WebExtensionMessage<any>({ domain: '$' })
const log: AsyncCallOptions['log'] = {
type: 'pretty',
requestReplay: process.env.NODE_ENV === 'development',
Expand All @@ -52,14 +50,17 @@ export const GeneratorServices: AsyncGeneratorVersionOf<GeneratorServicesType> =
* @param generator Is the service is a generator?
*/
function add<T extends object>(key: string, generator = false): AsyncVersionOf<T> {
const channel: EventBasedChannel | CallbackBasedChannel = message.events[key].bind(Environment.ManifestBackground)
const channel = message.events[key].bind(Environment.ManifestBackground)

const RPC = (generator ? AsyncGeneratorCall : AsyncCall) as any as typeof AsyncCall
const service = RPC<T>(null, {
key,
encoder,
log,
channel,
channel: {
on: (c) => channel.on((d) => c(d)),
send: (d) => channel.send(d),
},
strict: true,
thenable: false,
})
Expand Down
23 changes: 17 additions & 6 deletions packages/mask/shared/sandboxed-plugin/host-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { createI18NBundle, i18NextInstance } from '@masknet/shared-base'
import type { BasicHostHooks } from '@masknet/sandboxed-plugin-runtime'

export function createHostAPIs(isBackground: boolean): BasicHostHooks {
let message: WebExtensionMessage<{ f: any; g: any }>
return {
async getPluginList() {
const plugins = await fetch(browser.runtime.getURL('/sandboxed-modules/plugins.json'))
Expand Down Expand Up @@ -33,17 +34,27 @@ export function createHostAPIs(isBackground: boolean): BasicHostHooks {
}
createI18NBundle(id, locales)(i18NextInstance)
},
// TODO: support signal
createRpcChannel(id: string) {
return new WebExtensionMessage<{ f: any }>({ domain: `mask-plugin-${id}-rpc` }).events.f.bind(
createRpcChannel(id, signal) {
message ??= new WebExtensionMessage({ domain: `mask-plugin-${id}-rpc` })
const o = message.events.f.bind(
isBackground ? MessageTarget.Broadcast : Environment.ManifestBackground,
signal,
)
return {
send: (data) => o.send(data),
on: (callback) => o.on((data) => callback(data)),
}
},
// TODO: support signal
createRpcGeneratorChannel(id: string) {
return new WebExtensionMessage<{ g: any }>({ domain: `mask-plugin-${id}-rpc` }).events.g.bind(
createRpcGeneratorChannel(id, signal) {
message ??= new WebExtensionMessage({ domain: `mask-plugin-${id}-rpc` })
const o = message.events.g.bind(
isBackground ? MessageTarget.Broadcast : Environment.ManifestBackground,
signal,
)
return {
send: (data) => o.send(data),
on: (callback) => o.on((data) => callback(data)),
}
},
}
}
2 changes: 1 addition & 1 deletion packages/plugin-infra/src/utils/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export let getPluginMessage = <T>(pluginID: string, type?: typeof DOMAIN_RPC): P

const messageCenter = new WebExtensionMessage<T>({ domain })
const events = messageCenter.events
messageCenter.serialization = encoder
messageCenter.encoder = encoder
cache.set(domain, events)
return events
}
Expand Down
13 changes: 9 additions & 4 deletions packages/shared-base/src/KVStorage/kv-storage/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { UnboundedRegistry as MessageChannel } from '@dimensiondev/holoflows-kit'
import { combineAbortSignal } from '@masknet/kit'
import type { Subscription } from 'use-subscription'
import type { KVStorageBackend } from './types.js'
Expand All @@ -19,7 +18,9 @@ export * from './types.js'
*/
export function createKVStorageHost(
backend: KVStorageBackend,
message: Pick<MessageChannel<[string, unknown]>, 'on'>,
message: {
on(callback: (data: [string, unknown]) => void, options?: AddEventListenerOptions): () => void
},
signal = new AbortController().signal,
): ScopedStorage<never>['createSubScope'] {
return (name, defaultValues) => {
Expand Down Expand Up @@ -53,7 +54,9 @@ const alwaysThrowHandler = () => {
function createScope(
signal: AbortSignal,
backend: KVStorageBackend,
message: Pick<MessageChannel<any>, 'on'>,
message: {
on(callback: (data: any) => void, options?: AddEventListenerOptions): () => void
},
parentScope: string | null,
scope: string,
defaultValues: any,
Expand Down Expand Up @@ -101,7 +104,9 @@ function createScope(
function createState(
signal: AbortSignal,
backend: KVStorageBackend,
message: Pick<MessageChannel<any>, 'on'>,
message: {
on(callback: (data: any) => void, options?: AddEventListenerOptions): () => void
},
scope: string,
prop: string,
defaultValue: any,
Expand Down
2 changes: 1 addition & 1 deletion packages/shared-base/src/Messages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { encoder } from '../serializer/index.js'
import type { PluginMessageEmitter } from './CrossIsolationEvents.js'

const m = new WebExtensionMessage<MaskEvents>({ domain: 'mask' })
m.serialization = encoder
m.encoder = encoder

export let MaskMessages: { readonly events: PluginMessageEmitter<MaskEvents> } = m

Expand Down
11 changes: 2 additions & 9 deletions packages/shared-base/src/serializer/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Typeson, TypesonPromise } from 'typeson'
import type { IsomorphicEncoder } from 'async-call-rpc'
import type { Serialization } from '@dimensiondev/holoflows-kit'
import type { Encoder } from '@dimensiondev/holoflows-kit'
import { Err, None, Ok, Some } from 'ts-results-es'
import * as BN from 'bignumber.js'
import { MaskEthereumProviderRpcError } from '@masknet/sdk'
Expand Down Expand Up @@ -55,7 +55,7 @@ function setup() {

for (const a of pendingRegister) a()
}
export const encoder: Serialization & IsomorphicEncoder = {
export const encoder: Encoder & IsomorphicEncoder = {
async encode(from: unknown) {
if (!typeson) setup()
return typeson!.encapsulate(from)
Expand All @@ -64,13 +64,6 @@ export const encoder: Serialization & IsomorphicEncoder = {
if (!typeson) setup()
return typeson!.revive(to)
},
serialization(from) {
return encoder.encode(from)
},
// cspell:disable-next-line
deserialization(to: any) {
return encoder.decode(to)
},
}
function registerEncodableClass(name: string, constructor: NewableFunction): void
function registerEncodableClass<T, Q>(
Expand Down
37 changes: 10 additions & 27 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 925af28

Please sign in to comment.