@xyo-network/bridge-pub-sub 2.92.11 → 2.93.0-rc.2
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/browser/AsyncQueryBus/AsyncQueryBusBase.d.cts.map +1 -1
- package/dist/browser/AsyncQueryBus/AsyncQueryBusBase.d.mts.map +1 -1
- package/dist/browser/AsyncQueryBus/AsyncQueryBusBase.d.ts.map +1 -1
- package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.cts.map +1 -1
- package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.mts.map +1 -1
- package/dist/browser/AsyncQueryBus/AsyncQueryBusClient.d.ts.map +1 -1
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts +8 -2
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts +8 -2
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts +8 -2
- package/dist/browser/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/browser/Config.d.cts +2 -0
- package/dist/browser/Config.d.cts.map +1 -1
- package/dist/browser/Config.d.mts +2 -0
- package/dist/browser/Config.d.mts.map +1 -1
- package/dist/browser/Config.d.ts +2 -0
- package/dist/browser/Config.d.ts.map +1 -1
- package/dist/browser/PubSubBridge.d.cts +8 -6
- package/dist/browser/PubSubBridge.d.cts.map +1 -1
- package/dist/browser/PubSubBridge.d.mts +8 -6
- package/dist/browser/PubSubBridge.d.mts.map +1 -1
- package/dist/browser/PubSubBridge.d.ts +8 -6
- package/dist/browser/PubSubBridge.d.ts.map +1 -1
- package/dist/browser/PubSubBridgeModuleResolver.d.cts +2 -2
- package/dist/browser/PubSubBridgeModuleResolver.d.cts.map +1 -1
- package/dist/browser/PubSubBridgeModuleResolver.d.mts +2 -2
- package/dist/browser/PubSubBridgeModuleResolver.d.mts.map +1 -1
- package/dist/browser/PubSubBridgeModuleResolver.d.ts +2 -2
- package/dist/browser/PubSubBridgeModuleResolver.d.ts.map +1 -1
- package/dist/browser/index.cjs +88 -21
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +88 -21
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.cts.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.mts.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusBase.d.ts.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.cts.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.mts.map +1 -1
- package/dist/node/AsyncQueryBus/AsyncQueryBusClient.d.ts.map +1 -1
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts +8 -2
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.cts.map +1 -1
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts +8 -2
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.mts.map +1 -1
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts +8 -2
- package/dist/node/AsyncQueryBus/ModuleProxy/ModuleProxy.d.ts.map +1 -1
- package/dist/node/Config.d.cts +2 -0
- package/dist/node/Config.d.cts.map +1 -1
- package/dist/node/Config.d.mts +2 -0
- package/dist/node/Config.d.mts.map +1 -1
- package/dist/node/Config.d.ts +2 -0
- package/dist/node/Config.d.ts.map +1 -1
- package/dist/node/PubSubBridge.d.cts +8 -6
- package/dist/node/PubSubBridge.d.cts.map +1 -1
- package/dist/node/PubSubBridge.d.mts +8 -6
- package/dist/node/PubSubBridge.d.mts.map +1 -1
- package/dist/node/PubSubBridge.d.ts +8 -6
- package/dist/node/PubSubBridge.d.ts.map +1 -1
- package/dist/node/PubSubBridgeModuleResolver.d.cts +2 -2
- package/dist/node/PubSubBridgeModuleResolver.d.cts.map +1 -1
- package/dist/node/PubSubBridgeModuleResolver.d.mts +2 -2
- package/dist/node/PubSubBridgeModuleResolver.d.mts.map +1 -1
- package/dist/node/PubSubBridgeModuleResolver.d.ts +2 -2
- package/dist/node/PubSubBridgeModuleResolver.d.ts.map +1 -1
- package/dist/node/index.cjs +94 -22
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +94 -22
- package/dist/node/index.js.map +1 -1
- package/package.json +30 -26
- package/src/AsyncQueryBus/AsyncQueryBusBase.ts +8 -4
- package/src/AsyncQueryBus/AsyncQueryBusClient.ts +4 -0
- package/src/AsyncQueryBus/AsyncQueryBusHost.ts +1 -1
- package/src/AsyncQueryBus/ModuleProxy/ModuleProxy.ts +18 -5
- package/src/Config.ts +2 -0
- package/src/PubSubBridge.ts +42 -16
- package/src/PubSubBridgeModuleResolver.ts +32 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractModuleProxy, ModuleProxyParams } from '@xyo-network/abstract-bridge'
|
|
2
2
|
import { QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
3
|
-
import {
|
|
3
|
+
import { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'
|
|
4
4
|
import { Payload } from '@xyo-network/payload-model'
|
|
5
5
|
|
|
6
6
|
import { AsyncQueryBusClient } from '../AsyncQueryBusClient'
|
|
@@ -9,11 +9,24 @@ export type AsyncQueryBusModuleProxyParams = ModuleProxyParams & {
|
|
|
9
9
|
busClient: AsyncQueryBusClient
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export class AsyncQueryBusModuleProxy<
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export class AsyncQueryBusModuleProxy<
|
|
13
|
+
TWrappedModule extends ModuleInstance = ModuleInstance,
|
|
14
|
+
TParams extends Omit<AsyncQueryBusModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<
|
|
15
|
+
AsyncQueryBusModuleProxyParams,
|
|
16
|
+
'config'
|
|
17
|
+
> & {
|
|
18
|
+
config: TWrappedModule['config']
|
|
19
|
+
},
|
|
20
|
+
>
|
|
21
|
+
extends AbstractModuleProxy<TWrappedModule, TParams>
|
|
22
|
+
implements ModuleInstance<TParams, TWrappedModule['eventData']>
|
|
15
23
|
{
|
|
24
|
+
pipeline?: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many' | undefined
|
|
16
25
|
async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {
|
|
17
|
-
return await this.
|
|
26
|
+
return await this.params.busClient.send(this.address, query, payloads)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override async startHandler(): Promise<boolean> {
|
|
30
|
+
return await super.startHandler()
|
|
18
31
|
}
|
|
19
32
|
}
|
package/src/Config.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Address } from '@xylabs/hex'
|
|
1
2
|
import { EmptyObject } from '@xylabs/object'
|
|
2
3
|
import { BridgeConfig } from '@xyo-network/bridge-model'
|
|
3
4
|
|
|
@@ -14,6 +15,7 @@ export type PubSubBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchem
|
|
|
14
15
|
{
|
|
15
16
|
client?: AsyncQueryBusClientConfig
|
|
16
17
|
host?: AsyncQueryBusHostConfig
|
|
18
|
+
roots?: Address[]
|
|
17
19
|
} & TConfig,
|
|
18
20
|
TSchema extends string ? TSchema : PubSubBridgeConfigSchema
|
|
19
21
|
>
|
package/src/PubSubBridge.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { exists } from '@xylabs/exists'
|
|
2
3
|
import { Address } from '@xylabs/hex'
|
|
3
4
|
import { AbstractBridge } from '@xyo-network/abstract-bridge'
|
|
4
5
|
import { BridgeExposeOptions, BridgeModule, BridgeUnexposeOptions } from '@xyo-network/bridge-model'
|
|
5
|
-
import { creatableModule, ModuleFilterOptions, ModuleIdentifier } from '@xyo-network/module-model'
|
|
6
|
+
import { creatableModule, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleResolverInstance } from '@xyo-network/module-model'
|
|
6
7
|
import { LRUCache } from 'lru-cache'
|
|
7
8
|
|
|
8
9
|
import { AsyncQueryBusClient, AsyncQueryBusHost } from './AsyncQueryBus'
|
|
@@ -26,14 +27,12 @@ export class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParam
|
|
|
26
27
|
private _busHost?: AsyncQueryBusHost
|
|
27
28
|
private _resolver?: PubSubBridgeModuleResolver
|
|
28
29
|
|
|
29
|
-
override get resolver() {
|
|
30
|
+
override get resolver(): ModuleResolverInstance {
|
|
30
31
|
this._resolver =
|
|
31
32
|
this._resolver ??
|
|
32
33
|
new PubSubBridgeModuleResolver({
|
|
33
34
|
bridge: this,
|
|
34
35
|
busClient: assertEx(this.busClient(), () => 'busClient not configured'),
|
|
35
|
-
downResolver: this.downResolver,
|
|
36
|
-
upResolver: this.upResolver,
|
|
37
36
|
wrapperAccount: this.account,
|
|
38
37
|
})
|
|
39
38
|
return this._resolver
|
|
@@ -43,24 +42,56 @@ export class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParam
|
|
|
43
42
|
return `${this.config.name ?? moduleName}`
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
protected get roots() {
|
|
46
|
+
return assertEx(this.config.roots, () => 'roots not configured')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
override async discoverRoots(): Promise<ModuleInstance[]> {
|
|
50
|
+
const rootInstances = (await Promise.all(this.roots.map(async (root) => await this.resolver.resolve<ModuleInstance>(root)))).filter(exists)
|
|
51
|
+
for (const instance of rootInstances) {
|
|
52
|
+
this.downResolver.add(instance)
|
|
53
|
+
}
|
|
54
|
+
return rootInstances
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async exposeHandler(id: ModuleIdentifier, options?: BridgeExposeOptions | undefined): Promise<ModuleInstance[]> {
|
|
58
|
+
const { maxDepth = 5, direction } = options ?? {}
|
|
59
|
+
const filterOptions: ModuleFilterOptions = { direction }
|
|
60
|
+
const module = assertEx(await super.resolve(id, filterOptions), () => `Expose failed to locate module [${id}]`)
|
|
49
61
|
if (module) {
|
|
50
62
|
const host = assertEx(this.busHost(), () => 'Not configured as a host')
|
|
51
63
|
host.expose(module.address)
|
|
52
|
-
|
|
64
|
+
const children = await module.resolve('*', { direction, maxDepth, visibility: 'public' })
|
|
65
|
+
for (const child of children) {
|
|
66
|
+
host.expose(child.address)
|
|
67
|
+
}
|
|
68
|
+
return [module, ...children]
|
|
53
69
|
}
|
|
54
70
|
return []
|
|
55
71
|
}
|
|
56
72
|
|
|
57
|
-
|
|
58
|
-
const
|
|
73
|
+
exposedHandler(): Address[] {
|
|
74
|
+
const exposedSet = this.busHost()?.exposedAddresses
|
|
75
|
+
return exposedSet ? [...exposedSet] : []
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override async startHandler(): Promise<boolean> {
|
|
79
|
+
this.busHost()?.start()
|
|
80
|
+
return await super.startHandler()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async unexposeHandler(id: ModuleIdentifier, options?: BridgeUnexposeOptions | undefined): Promise<ModuleInstance[]> {
|
|
84
|
+
const { maxDepth = 1, direction } = options ?? {}
|
|
85
|
+
const filterOptions: ModuleFilterOptions = { direction }
|
|
59
86
|
const module = await super.resolve(id, filterOptions)
|
|
60
87
|
if (module) {
|
|
61
88
|
const host = assertEx(this.busHost(), () => 'Not configured as a host')
|
|
62
89
|
host.unexpose(module.address)
|
|
63
|
-
|
|
90
|
+
const children = await module.resolve('*', { direction, maxDepth, visibility: 'public' })
|
|
91
|
+
for (const child of children) {
|
|
92
|
+
host.unexpose(child.address)
|
|
93
|
+
}
|
|
94
|
+
return [module, ...children]
|
|
64
95
|
}
|
|
65
96
|
return []
|
|
66
97
|
}
|
|
@@ -87,11 +118,6 @@ export class PubSubBridge<TParams extends PubSubBridgeParams = PubSubBridgeParam
|
|
|
87
118
|
return this._busHost
|
|
88
119
|
}
|
|
89
120
|
|
|
90
|
-
protected override startHandler(): Promise<boolean> {
|
|
91
|
-
this.busHost()?.start()
|
|
92
|
-
return Promise.resolve(true)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
121
|
protected override stopHandler(_timeout?: number | undefined) {
|
|
96
122
|
this.busHost()?.stop()
|
|
97
123
|
return true
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Address, isAddress } from '@xylabs/hex'
|
|
3
|
+
import { AbstractBridgeModuleResolver, BridgeModuleResolverOptions, wrapModuleWithType } from '@xyo-network/abstract-bridge'
|
|
3
4
|
import { Account } from '@xyo-network/account'
|
|
4
|
-
import {
|
|
5
|
+
import { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'
|
|
6
|
+
import { ModuleConfig, ModuleConfigSchema, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model'
|
|
5
7
|
|
|
6
8
|
import { AsyncQueryBusClient, AsyncQueryBusModuleProxy, AsyncQueryBusModuleProxyParams } from './AsyncQueryBus'
|
|
7
9
|
|
|
@@ -9,21 +11,42 @@ export interface PubSubBridgeModuleResolverOptions extends BridgeModuleResolverO
|
|
|
9
11
|
busClient: AsyncQueryBusClient
|
|
10
12
|
}
|
|
11
13
|
|
|
12
|
-
export class PubSubBridgeModuleResolver<
|
|
13
|
-
T extends
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
export class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverOptions> {
|
|
15
|
+
override async resolveHandler<T extends ModuleInstance = ModuleInstance>(
|
|
16
|
+
id: ModuleIdentifier,
|
|
17
|
+
options?: ModuleFilterOptions<T>,
|
|
18
|
+
): Promise<T | T[] | undefined> {
|
|
19
|
+
const parentResult = await super.resolveHandler(id, options)
|
|
20
|
+
if (parentResult) {
|
|
21
|
+
return parentResult
|
|
22
|
+
}
|
|
16
23
|
const idParts = id.split(':')
|
|
17
24
|
const firstPart = idParts.shift()
|
|
25
|
+
assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)
|
|
18
26
|
const remainderParts = idParts.join(':')
|
|
19
27
|
const account = Account.randomSync()
|
|
20
28
|
const params: AsyncQueryBusModuleProxyParams = {
|
|
21
29
|
account,
|
|
22
30
|
busClient: this.options.busClient,
|
|
31
|
+
config: { schema: ModuleConfigSchema },
|
|
23
32
|
host: this.options.bridge,
|
|
24
33
|
moduleAddress: firstPart as Address,
|
|
25
34
|
}
|
|
26
|
-
const proxy = new AsyncQueryBusModuleProxy<T>(params)
|
|
27
|
-
|
|
35
|
+
const proxy = new AsyncQueryBusModuleProxy<T, AsyncQueryBusModuleProxyParams>(params)
|
|
36
|
+
if (proxy) {
|
|
37
|
+
const state = await proxy.state()
|
|
38
|
+
if (state) {
|
|
39
|
+
const configSchema = (state.find((payload) => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config
|
|
40
|
+
const config = assertEx(
|
|
41
|
+
state.find((payload) => payload.schema === configSchema),
|
|
42
|
+
() => 'Unable to locate config',
|
|
43
|
+
) as ModuleConfig
|
|
44
|
+
proxy.setConfig(config)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
await proxy.start?.()
|
|
48
|
+
const wrappedProxy = wrapModuleWithType(proxy, account) as unknown as T
|
|
49
|
+
this.add(wrappedProxy)
|
|
50
|
+
return remainderParts.length > 0 ? await proxy.resolve(remainderParts, options) : wrappedProxy
|
|
28
51
|
}
|
|
29
52
|
}
|