@xyo-network/bridge 2.46.4 → 2.47.1
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/cjs/BridgeWrapper.js +38 -3
- package/dist/cjs/BridgeWrapper.js.map +1 -1
- package/dist/cjs/index.js +2 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/docs.json +15754 -15154
- package/dist/esm/BridgeWrapper.js +27 -2
- package/dist/esm/BridgeWrapper.js.map +1 -1
- package/dist/esm/index.js +2 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/types/BridgeWrapper.d.ts +30 -3
- package/dist/types/BridgeWrapper.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -6
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -13
- package/src/BridgeWrapper.ts +52 -4
- package/src/index.ts +2 -6
- package/dist/cjs/AbstractBridge.js +0 -49
- package/dist/cjs/AbstractBridge.js.map +0 -1
- package/dist/cjs/Bridge.js +0 -3
- package/dist/cjs/Bridge.js.map +0 -1
- package/dist/cjs/Config.js +0 -5
- package/dist/cjs/Config.js.map +0 -1
- package/dist/cjs/HttpBridge.js +0 -127
- package/dist/cjs/HttpBridge.js.map +0 -1
- package/dist/cjs/HttpBridgeConfig.js +0 -5
- package/dist/cjs/HttpBridgeConfig.js.map +0 -1
- package/dist/cjs/PartialConfig.js +0 -3
- package/dist/cjs/PartialConfig.js.map +0 -1
- package/dist/cjs/Queries/Connect.js +0 -5
- package/dist/cjs/Queries/Connect.js.map +0 -1
- package/dist/cjs/Queries/Disconnect.js +0 -5
- package/dist/cjs/Queries/Disconnect.js.map +0 -1
- package/dist/cjs/Queries/index.js +0 -6
- package/dist/cjs/Queries/index.js.map +0 -1
- package/dist/cjs/RemoteModuleResolver.js +0 -95
- package/dist/cjs/RemoteModuleResolver.js.map +0 -1
- package/dist/esm/AbstractBridge.js +0 -38
- package/dist/esm/AbstractBridge.js.map +0 -1
- package/dist/esm/Bridge.js +0 -2
- package/dist/esm/Bridge.js.map +0 -1
- package/dist/esm/Config.js +0 -2
- package/dist/esm/Config.js.map +0 -1
- package/dist/esm/HttpBridge.js +0 -100
- package/dist/esm/HttpBridge.js.map +0 -1
- package/dist/esm/HttpBridgeConfig.js +0 -2
- package/dist/esm/HttpBridgeConfig.js.map +0 -1
- package/dist/esm/PartialConfig.js +0 -2
- package/dist/esm/PartialConfig.js.map +0 -1
- package/dist/esm/Queries/Connect.js +0 -2
- package/dist/esm/Queries/Connect.js.map +0 -1
- package/dist/esm/Queries/Disconnect.js +0 -2
- package/dist/esm/Queries/Disconnect.js.map +0 -1
- package/dist/esm/Queries/index.js +0 -3
- package/dist/esm/Queries/index.js.map +0 -1
- package/dist/esm/RemoteModuleResolver.js +0 -80
- package/dist/esm/RemoteModuleResolver.js.map +0 -1
- package/dist/types/AbstractBridge.d.ts +0 -13
- package/dist/types/AbstractBridge.d.ts.map +0 -1
- package/dist/types/Bridge.d.ts +0 -9
- package/dist/types/Bridge.d.ts.map +0 -1
- package/dist/types/Config.d.ts +0 -6
- package/dist/types/Config.d.ts.map +0 -1
- package/dist/types/HttpBridge.d.ts +0 -36
- package/dist/types/HttpBridge.d.ts.map +0 -1
- package/dist/types/HttpBridgeConfig.d.ts +0 -10
- package/dist/types/HttpBridgeConfig.d.ts.map +0 -1
- package/dist/types/PartialConfig.d.ts +0 -4
- package/dist/types/PartialConfig.d.ts.map +0 -1
- package/dist/types/Queries/Connect.d.ts +0 -8
- package/dist/types/Queries/Connect.d.ts.map +0 -1
- package/dist/types/Queries/Disconnect.d.ts +0 -8
- package/dist/types/Queries/Disconnect.d.ts.map +0 -1
- package/dist/types/Queries/index.d.ts +0 -8
- package/dist/types/Queries/index.d.ts.map +0 -1
- package/dist/types/RemoteModuleResolver.d.ts +0 -21
- package/dist/types/RemoteModuleResolver.d.ts.map +0 -1
- package/src/AbstractBridge.ts +0 -47
- package/src/Bridge.ts +0 -9
- package/src/Config.ts +0 -7
- package/src/HttpBridge.ts +0 -132
- package/src/HttpBridgeConfig.ts +0 -14
- package/src/PartialConfig.ts +0 -5
- package/src/Queries/Connect.ts +0 -9
- package/src/Queries/Disconnect.ts +0 -9
- package/src/Queries/index.ts +0 -10
- package/src/RemoteModuleResolver.ts +0 -103
- package/src/spec/HttpBridge.spec.ts +0 -20
package/src/HttpBridge.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import { Account } from '@xyo-network/account'
|
|
3
|
-
import { XyoApiEnvelope } from '@xyo-network/api-models'
|
|
4
|
-
import { AxiosError, AxiosJson } from '@xyo-network/axios'
|
|
5
|
-
import {
|
|
6
|
-
AbstractModule,
|
|
7
|
-
ModuleDiscoverQuery,
|
|
8
|
-
ModuleDiscoverQuerySchema,
|
|
9
|
-
ModuleFilter,
|
|
10
|
-
ModuleParams,
|
|
11
|
-
ModuleQueryResult,
|
|
12
|
-
ModuleResolver,
|
|
13
|
-
ModuleWrapper,
|
|
14
|
-
QueryBoundWitnessWrapper,
|
|
15
|
-
XyoErrorBuilder,
|
|
16
|
-
XyoQuery,
|
|
17
|
-
XyoQueryBoundWitness,
|
|
18
|
-
} from '@xyo-network/module'
|
|
19
|
-
import { XyoPayload } from '@xyo-network/payload-model'
|
|
20
|
-
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
21
|
-
import { Promisable } from '@xyo-network/promise'
|
|
22
|
-
import { QueryPayload, QuerySchema } from '@xyo-network/query-payload-plugin'
|
|
23
|
-
import compact from 'lodash/compact'
|
|
24
|
-
|
|
25
|
-
import { BridgeModule } from './Bridge'
|
|
26
|
-
import { HttpBridgeConfig } from './HttpBridgeConfig'
|
|
27
|
-
import { XyoBridgeConnectQuerySchema, XyoBridgeDisconnectQuerySchema, XyoBridgeQuery } from './Queries'
|
|
28
|
-
import { RemoteModuleResolver } from './RemoteModuleResolver'
|
|
29
|
-
|
|
30
|
-
export interface XyoHttpBridgeParams<TConfig extends HttpBridgeConfig = HttpBridgeConfig> extends ModuleParams<TConfig> {
|
|
31
|
-
axios?: AxiosJson
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export class HttpBridge<TConfig extends HttpBridgeConfig = HttpBridgeConfig> extends AbstractModule<TConfig> implements BridgeModule {
|
|
35
|
-
private axios: AxiosJson
|
|
36
|
-
private remoteQueries: string[] = []
|
|
37
|
-
private remoteResolver: ModuleResolver
|
|
38
|
-
|
|
39
|
-
protected constructor(params: XyoHttpBridgeParams<TConfig>) {
|
|
40
|
-
super(params)
|
|
41
|
-
this.axios = params.axios ?? new AxiosJson()
|
|
42
|
-
this.remoteResolver = new RemoteModuleResolver(this)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public get nodeUri() {
|
|
46
|
-
return assertEx(this.config?.nodeUri, 'Missing nodeUri')
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public override get queries() {
|
|
50
|
-
return [...super.queries, ...this.remoteQueries]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public get targetAddress() {
|
|
54
|
-
return this.config?.targetAddress
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
static override async create(params: XyoHttpBridgeParams): Promise<HttpBridge> {
|
|
58
|
-
const result = (await super.create(params)) as HttpBridge
|
|
59
|
-
const moduleWrapper = ModuleWrapper.wrap(result)
|
|
60
|
-
const discover = await moduleWrapper.discover()
|
|
61
|
-
result.remoteQueries = compact(
|
|
62
|
-
discover.map((payload) => {
|
|
63
|
-
if (payload.schema === QuerySchema) {
|
|
64
|
-
const schemaPayload = payload as QueryPayload
|
|
65
|
-
return schemaPayload.query
|
|
66
|
-
} else {
|
|
67
|
-
return null
|
|
68
|
-
}
|
|
69
|
-
}),
|
|
70
|
-
)
|
|
71
|
-
return result
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
connect(): Promisable<boolean> {
|
|
75
|
-
return true
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
disconnect(): Promisable<boolean> {
|
|
79
|
-
return true
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
override async discover() {
|
|
83
|
-
const queryPayload = PayloadWrapper.parse<ModuleDiscoverQuery>({ schema: ModuleDiscoverQuerySchema })
|
|
84
|
-
return (await this.forward(queryPayload))[1]
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(query: T, payloads?: XyoPayload[]): Promise<ModuleQueryResult> {
|
|
88
|
-
const wrapper = QueryBoundWitnessWrapper.parseQuery<XyoBridgeQuery>(query, payloads)
|
|
89
|
-
const typedQuery = wrapper.query.payload
|
|
90
|
-
const queryAccount = new Account()
|
|
91
|
-
const resultPayloads: XyoPayload[] = []
|
|
92
|
-
try {
|
|
93
|
-
switch (typedQuery.schema) {
|
|
94
|
-
case XyoBridgeConnectQuerySchema: {
|
|
95
|
-
await this.connect()
|
|
96
|
-
break
|
|
97
|
-
}
|
|
98
|
-
case XyoBridgeDisconnectQuerySchema: {
|
|
99
|
-
await this.disconnect()
|
|
100
|
-
break
|
|
101
|
-
}
|
|
102
|
-
default:
|
|
103
|
-
if (super.queries.find((schema) => schema === typedQuery.schema)) {
|
|
104
|
-
return await super.query(query, payloads)
|
|
105
|
-
} else {
|
|
106
|
-
return await this.forward(query, payloads)
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
} catch (ex) {
|
|
110
|
-
const error = ex as Error
|
|
111
|
-
resultPayloads.push(new XyoErrorBuilder([wrapper.hash], error.message).build())
|
|
112
|
-
}
|
|
113
|
-
return await this.bindResult(resultPayloads, queryAccount)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
override async resolve(filter?: ModuleFilter) {
|
|
117
|
-
return [...(await super.resolve(filter)), ...(await this.remoteResolver.resolve(filter))]
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
protected async forward(query: XyoQuery, payloads: XyoPayload[] = []): Promise<ModuleQueryResult> {
|
|
121
|
-
try {
|
|
122
|
-
const boundQuery = await this.bindQuery(query, payloads)
|
|
123
|
-
const result = await this.axios.post<XyoApiEnvelope<ModuleQueryResult>>(`${this.nodeUri}/address/${this.targetAddress}`, boundQuery)
|
|
124
|
-
return result.data.data
|
|
125
|
-
} catch (ex) {
|
|
126
|
-
const error = ex as AxiosError
|
|
127
|
-
this.logger?.error(`Error Status: ${error.status}`)
|
|
128
|
-
this.logger?.error(`Error Cause: ${JSON.stringify(error.cause, null, 2)}`)
|
|
129
|
-
throw error
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
package/src/HttpBridgeConfig.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { XyoPayload } from '@xyo-network/payload-model'
|
|
2
|
-
|
|
3
|
-
import { BridgeConfig } from './Config'
|
|
4
|
-
|
|
5
|
-
export type HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'
|
|
6
|
-
export const HttpBridgeConfigSchema: HttpBridgeConfigSchema = 'network.xyo.bridge.http.config'
|
|
7
|
-
|
|
8
|
-
export type HttpBridgeConfig<TConfig extends XyoPayload = XyoPayload> = BridgeConfig<
|
|
9
|
-
{
|
|
10
|
-
nodeUri: string
|
|
11
|
-
schema: HttpBridgeConfigSchema
|
|
12
|
-
targetAddress?: string
|
|
13
|
-
} & TConfig
|
|
14
|
-
>
|
package/src/PartialConfig.ts
DELETED
package/src/Queries/Connect.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { XyoQuery } from '@xyo-network/module-model'
|
|
2
|
-
|
|
3
|
-
export type XyoBridgeConnectQuerySchema = 'network.xyo.query.bridge.connect'
|
|
4
|
-
export const XyoBridgeConnectQuerySchema: XyoBridgeConnectQuerySchema = 'network.xyo.query.bridge.connect'
|
|
5
|
-
|
|
6
|
-
export type XyoBridgeConnectQuery = XyoQuery<{
|
|
7
|
-
schema: XyoBridgeConnectQuerySchema
|
|
8
|
-
uri?: string
|
|
9
|
-
}>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { XyoQuery } from '@xyo-network/module-model'
|
|
2
|
-
|
|
3
|
-
export type XyoBridgeDisconnectQuerySchema = 'network.xyo.query.bridge.disconnect'
|
|
4
|
-
export const XyoBridgeDisconnectQuerySchema: XyoBridgeDisconnectQuerySchema = 'network.xyo.query.bridge.disconnect'
|
|
5
|
-
|
|
6
|
-
export type XyoBridgeDisconnectQuery = XyoQuery<{
|
|
7
|
-
schema: XyoBridgeDisconnectQuerySchema
|
|
8
|
-
uri?: string
|
|
9
|
-
}>
|
package/src/Queries/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ModuleQuery, XyoQuery } from '@xyo-network/module-model'
|
|
2
|
-
|
|
3
|
-
import { XyoBridgeConnectQuery } from './Connect'
|
|
4
|
-
import { XyoBridgeDisconnectQuery } from './Disconnect'
|
|
5
|
-
|
|
6
|
-
export * from './Connect'
|
|
7
|
-
export * from './Disconnect'
|
|
8
|
-
|
|
9
|
-
export type XyoBridgeQueryBase = XyoBridgeConnectQuery | XyoBridgeDisconnectQuery
|
|
10
|
-
export type XyoBridgeQuery<T extends XyoQuery | void = void> = ModuleQuery<T extends XyoQuery ? XyoBridgeQueryBase | T : XyoBridgeQueryBase>
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
|
|
3
|
-
import { AbstractModule, CompositeModuleResolver, ModuleWrapper } from '@xyo-network/module'
|
|
4
|
-
import { Module, ModuleFilter } from '@xyo-network/module-model'
|
|
5
|
-
import compact from 'lodash/compact'
|
|
6
|
-
import flatten from 'lodash/flatten'
|
|
7
|
-
|
|
8
|
-
import { HttpBridge } from './HttpBridge'
|
|
9
|
-
import { HttpBridgeConfigSchema } from './HttpBridgeConfig'
|
|
10
|
-
|
|
11
|
-
interface LocalModuleFilter {
|
|
12
|
-
config?: string[]
|
|
13
|
-
query?: string[][]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface RemoteModuleFilter {
|
|
17
|
-
address?: string[]
|
|
18
|
-
name?: string[]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export class RemoteModuleResolver extends CompositeModuleResolver {
|
|
22
|
-
private resolvedModules: Record<string, HttpBridge> = {}
|
|
23
|
-
|
|
24
|
-
// TODO: Allow optional ctor param for supplying address for nested Nodes
|
|
25
|
-
// protected readonly address?: string,
|
|
26
|
-
constructor(protected readonly bridge: HttpBridge) {
|
|
27
|
-
super()
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public get isModuleResolver(): boolean {
|
|
31
|
-
return true
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
add(module: Module, name?: string | undefined): this
|
|
35
|
-
add(module: Module[], name?: string[] | undefined): this
|
|
36
|
-
add(module: Module | Module[], name?: string | string[] | undefined): this
|
|
37
|
-
add(_module: unknown, _name?: unknown): this {
|
|
38
|
-
throw new Error('Method not implemented.')
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
remove(name: string | string[]): this
|
|
42
|
-
remove(address: string | string[]): this
|
|
43
|
-
remove(_address: unknown): this {
|
|
44
|
-
throw new Error('Method not implemented.')
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async resolve(filter?: ModuleFilter): Promise<AbstractModule[]> {
|
|
48
|
-
const mods = await Promise.all(flatten(await this.resolveRemoteModules(filter)))
|
|
49
|
-
return this.filterLocalModules(mods, filter)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
private filterLocalModules(mods: AbstractModule[], filter?: LocalModuleFilter): AbstractModule[] {
|
|
53
|
-
// TODO: Handle filter?.query
|
|
54
|
-
if (filter?.query) throw new Error('Filtering by query not yet implemented by this resolver')
|
|
55
|
-
const config = filter?.config
|
|
56
|
-
const filtered = config?.length ? mods.filter((mod) => config.includes(mod.config.schema)) : mods
|
|
57
|
-
return filtered
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
private async getRemoteAddresses() {
|
|
61
|
-
const nodeWrapper = assertEx(ModuleWrapper.wrap(this.bridge), 'nodeUri can not be wrapped')
|
|
62
|
-
const discover = await nodeWrapper.discover()
|
|
63
|
-
return compact(
|
|
64
|
-
discover.map((payload) => {
|
|
65
|
-
if (payload.schema === AddressSchema) {
|
|
66
|
-
const schemaPayload = payload as AddressPayload
|
|
67
|
-
return schemaPayload.address
|
|
68
|
-
} else {
|
|
69
|
-
return null
|
|
70
|
-
}
|
|
71
|
-
}),
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
private async resolveByAddress(targetAddress: string): Promise<HttpBridge> {
|
|
76
|
-
const cached = this.resolvedModules[targetAddress]
|
|
77
|
-
if (cached) return cached
|
|
78
|
-
const mod = await HttpBridge.create({
|
|
79
|
-
config: { nodeUri: this.bridge.nodeUri, schema: HttpBridgeConfigSchema, targetAddress },
|
|
80
|
-
})
|
|
81
|
-
this.resolvedModules[targetAddress] = mod
|
|
82
|
-
return mod
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
private async resolveByName(name: string): Promise<HttpBridge> {
|
|
86
|
-
const cached = this.resolvedModules[name]
|
|
87
|
-
if (cached) return cached
|
|
88
|
-
const mod = await HttpBridge.create({
|
|
89
|
-
config: { name, nodeUri: this.bridge.nodeUri, schema: HttpBridgeConfigSchema },
|
|
90
|
-
})
|
|
91
|
-
this.resolvedModules[name] = mod
|
|
92
|
-
this.resolvedModules[mod.address] = mod
|
|
93
|
-
return mod
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private async resolveRemoteModules(filter?: RemoteModuleFilter): Promise<HttpBridge[]> {
|
|
97
|
-
const addresses = filter ? filter?.address : await this.getRemoteAddresses()
|
|
98
|
-
const names = filter?.name
|
|
99
|
-
const byAddress = await Promise.all(addresses?.map((address) => this.resolveByAddress(address)) ?? [])
|
|
100
|
-
const byName = await Promise.all(names?.map((name) => this.resolveByName(name)) ?? [])
|
|
101
|
-
return [...byAddress, ...byName]
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { AxiosJson } from '@xyo-network/axios'
|
|
2
|
-
import { NodeWrapper } from '@xyo-network/node'
|
|
3
|
-
|
|
4
|
-
import { HttpBridge } from '../HttpBridge'
|
|
5
|
-
import { HttpBridgeConfigSchema } from '../HttpBridgeConfig'
|
|
6
|
-
|
|
7
|
-
test('HttpBridge', async () => {
|
|
8
|
-
const nodeUri = `${process.env.API_DOMAIN}` ?? 'http://localhost:8080'
|
|
9
|
-
|
|
10
|
-
const bridge = await HttpBridge.create({
|
|
11
|
-
axios: new AxiosJson(),
|
|
12
|
-
config: { nodeUri, schema: HttpBridgeConfigSchema, targetAddress: '5111228f724a066ac060fe2e6c8bbaae44b107d5' },
|
|
13
|
-
})
|
|
14
|
-
const wrapper = NodeWrapper.wrap(bridge)
|
|
15
|
-
const description = await wrapper.describe()
|
|
16
|
-
expect(description.children).toBeArray()
|
|
17
|
-
expect(description.children?.length).toBeGreaterThan(0)
|
|
18
|
-
expect(description.queries).toBeArray()
|
|
19
|
-
expect(description.queries?.length).toBeGreaterThan(0)
|
|
20
|
-
})
|