@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.
Files changed (87) hide show
  1. package/dist/cjs/BridgeWrapper.js +38 -3
  2. package/dist/cjs/BridgeWrapper.js.map +1 -1
  3. package/dist/cjs/index.js +2 -6
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/docs.json +15754 -15154
  6. package/dist/esm/BridgeWrapper.js +27 -2
  7. package/dist/esm/BridgeWrapper.js.map +1 -1
  8. package/dist/esm/index.js +2 -6
  9. package/dist/esm/index.js.map +1 -1
  10. package/dist/types/BridgeWrapper.d.ts +30 -3
  11. package/dist/types/BridgeWrapper.d.ts.map +1 -1
  12. package/dist/types/index.d.ts +2 -6
  13. package/dist/types/index.d.ts.map +1 -1
  14. package/package.json +6 -13
  15. package/src/BridgeWrapper.ts +52 -4
  16. package/src/index.ts +2 -6
  17. package/dist/cjs/AbstractBridge.js +0 -49
  18. package/dist/cjs/AbstractBridge.js.map +0 -1
  19. package/dist/cjs/Bridge.js +0 -3
  20. package/dist/cjs/Bridge.js.map +0 -1
  21. package/dist/cjs/Config.js +0 -5
  22. package/dist/cjs/Config.js.map +0 -1
  23. package/dist/cjs/HttpBridge.js +0 -127
  24. package/dist/cjs/HttpBridge.js.map +0 -1
  25. package/dist/cjs/HttpBridgeConfig.js +0 -5
  26. package/dist/cjs/HttpBridgeConfig.js.map +0 -1
  27. package/dist/cjs/PartialConfig.js +0 -3
  28. package/dist/cjs/PartialConfig.js.map +0 -1
  29. package/dist/cjs/Queries/Connect.js +0 -5
  30. package/dist/cjs/Queries/Connect.js.map +0 -1
  31. package/dist/cjs/Queries/Disconnect.js +0 -5
  32. package/dist/cjs/Queries/Disconnect.js.map +0 -1
  33. package/dist/cjs/Queries/index.js +0 -6
  34. package/dist/cjs/Queries/index.js.map +0 -1
  35. package/dist/cjs/RemoteModuleResolver.js +0 -95
  36. package/dist/cjs/RemoteModuleResolver.js.map +0 -1
  37. package/dist/esm/AbstractBridge.js +0 -38
  38. package/dist/esm/AbstractBridge.js.map +0 -1
  39. package/dist/esm/Bridge.js +0 -2
  40. package/dist/esm/Bridge.js.map +0 -1
  41. package/dist/esm/Config.js +0 -2
  42. package/dist/esm/Config.js.map +0 -1
  43. package/dist/esm/HttpBridge.js +0 -100
  44. package/dist/esm/HttpBridge.js.map +0 -1
  45. package/dist/esm/HttpBridgeConfig.js +0 -2
  46. package/dist/esm/HttpBridgeConfig.js.map +0 -1
  47. package/dist/esm/PartialConfig.js +0 -2
  48. package/dist/esm/PartialConfig.js.map +0 -1
  49. package/dist/esm/Queries/Connect.js +0 -2
  50. package/dist/esm/Queries/Connect.js.map +0 -1
  51. package/dist/esm/Queries/Disconnect.js +0 -2
  52. package/dist/esm/Queries/Disconnect.js.map +0 -1
  53. package/dist/esm/Queries/index.js +0 -3
  54. package/dist/esm/Queries/index.js.map +0 -1
  55. package/dist/esm/RemoteModuleResolver.js +0 -80
  56. package/dist/esm/RemoteModuleResolver.js.map +0 -1
  57. package/dist/types/AbstractBridge.d.ts +0 -13
  58. package/dist/types/AbstractBridge.d.ts.map +0 -1
  59. package/dist/types/Bridge.d.ts +0 -9
  60. package/dist/types/Bridge.d.ts.map +0 -1
  61. package/dist/types/Config.d.ts +0 -6
  62. package/dist/types/Config.d.ts.map +0 -1
  63. package/dist/types/HttpBridge.d.ts +0 -36
  64. package/dist/types/HttpBridge.d.ts.map +0 -1
  65. package/dist/types/HttpBridgeConfig.d.ts +0 -10
  66. package/dist/types/HttpBridgeConfig.d.ts.map +0 -1
  67. package/dist/types/PartialConfig.d.ts +0 -4
  68. package/dist/types/PartialConfig.d.ts.map +0 -1
  69. package/dist/types/Queries/Connect.d.ts +0 -8
  70. package/dist/types/Queries/Connect.d.ts.map +0 -1
  71. package/dist/types/Queries/Disconnect.d.ts +0 -8
  72. package/dist/types/Queries/Disconnect.d.ts.map +0 -1
  73. package/dist/types/Queries/index.d.ts +0 -8
  74. package/dist/types/Queries/index.d.ts.map +0 -1
  75. package/dist/types/RemoteModuleResolver.d.ts +0 -21
  76. package/dist/types/RemoteModuleResolver.d.ts.map +0 -1
  77. package/src/AbstractBridge.ts +0 -47
  78. package/src/Bridge.ts +0 -9
  79. package/src/Config.ts +0 -7
  80. package/src/HttpBridge.ts +0 -132
  81. package/src/HttpBridgeConfig.ts +0 -14
  82. package/src/PartialConfig.ts +0 -5
  83. package/src/Queries/Connect.ts +0 -9
  84. package/src/Queries/Disconnect.ts +0 -9
  85. package/src/Queries/index.ts +0 -10
  86. package/src/RemoteModuleResolver.ts +0 -103
  87. 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
- }
@@ -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
- >
@@ -1,5 +0,0 @@
1
- import { PartialModuleConfig } from '@xyo-network/module'
2
-
3
- import { BridgeConfig } from './Config'
4
-
5
- export type PartialBridgeConfig<T extends BridgeConfig> = PartialModuleConfig<T>
@@ -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
- }>
@@ -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
- })