@xyo-network/bridge 2.47.0 → 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 (94) hide show
  1. package/dist/cjs/BridgeWrapper.js +6 -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 +5838 -10851
  6. package/dist/esm/BridgeWrapper.js +4 -1
  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 +3 -2
  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 +5 -3
  16. package/src/index.ts +2 -6
  17. package/dist/cjs/AbstractBridge.js +0 -43
  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 -146
  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/HttpProxyModule.js +0 -39
  28. package/dist/cjs/HttpProxyModule.js.map +0 -1
  29. package/dist/cjs/PartialConfig.js +0 -3
  30. package/dist/cjs/PartialConfig.js.map +0 -1
  31. package/dist/cjs/Queries/Connect.js +0 -5
  32. package/dist/cjs/Queries/Connect.js.map +0 -1
  33. package/dist/cjs/Queries/Disconnect.js +0 -5
  34. package/dist/cjs/Queries/Disconnect.js.map +0 -1
  35. package/dist/cjs/Queries/index.js +0 -6
  36. package/dist/cjs/Queries/index.js.map +0 -1
  37. package/dist/cjs/RemoteModuleResolver.js +0 -72
  38. package/dist/cjs/RemoteModuleResolver.js.map +0 -1
  39. package/dist/esm/AbstractBridge.js +0 -33
  40. package/dist/esm/AbstractBridge.js.map +0 -1
  41. package/dist/esm/Bridge.js +0 -2
  42. package/dist/esm/Bridge.js.map +0 -1
  43. package/dist/esm/Config.js +0 -2
  44. package/dist/esm/Config.js.map +0 -1
  45. package/dist/esm/HttpBridge.js +0 -116
  46. package/dist/esm/HttpBridge.js.map +0 -1
  47. package/dist/esm/HttpBridgeConfig.js +0 -2
  48. package/dist/esm/HttpBridgeConfig.js.map +0 -1
  49. package/dist/esm/HttpProxyModule.js +0 -32
  50. package/dist/esm/HttpProxyModule.js.map +0 -1
  51. package/dist/esm/PartialConfig.js +0 -2
  52. package/dist/esm/PartialConfig.js.map +0 -1
  53. package/dist/esm/Queries/Connect.js +0 -2
  54. package/dist/esm/Queries/Connect.js.map +0 -1
  55. package/dist/esm/Queries/Disconnect.js +0 -2
  56. package/dist/esm/Queries/Disconnect.js.map +0 -1
  57. package/dist/esm/Queries/index.js +0 -3
  58. package/dist/esm/Queries/index.js.map +0 -1
  59. package/dist/esm/RemoteModuleResolver.js +0 -61
  60. package/dist/esm/RemoteModuleResolver.js.map +0 -1
  61. package/dist/types/AbstractBridge.d.ts +0 -17
  62. package/dist/types/AbstractBridge.d.ts.map +0 -1
  63. package/dist/types/Bridge.d.ts +0 -15
  64. package/dist/types/Bridge.d.ts.map +0 -1
  65. package/dist/types/Config.d.ts +0 -6
  66. package/dist/types/Config.d.ts.map +0 -1
  67. package/dist/types/HttpBridge.d.ts +0 -56
  68. package/dist/types/HttpBridge.d.ts.map +0 -1
  69. package/dist/types/HttpBridgeConfig.d.ts +0 -10
  70. package/dist/types/HttpBridgeConfig.d.ts.map +0 -1
  71. package/dist/types/HttpProxyModule.d.ts +0 -25
  72. package/dist/types/HttpProxyModule.d.ts.map +0 -1
  73. package/dist/types/PartialConfig.d.ts +0 -4
  74. package/dist/types/PartialConfig.d.ts.map +0 -1
  75. package/dist/types/Queries/Connect.d.ts +0 -8
  76. package/dist/types/Queries/Connect.d.ts.map +0 -1
  77. package/dist/types/Queries/Disconnect.d.ts +0 -8
  78. package/dist/types/Queries/Disconnect.d.ts.map +0 -1
  79. package/dist/types/Queries/index.d.ts +0 -8
  80. package/dist/types/Queries/index.d.ts.map +0 -1
  81. package/dist/types/RemoteModuleResolver.d.ts +0 -21
  82. package/dist/types/RemoteModuleResolver.d.ts.map +0 -1
  83. package/src/AbstractBridge.ts +0 -62
  84. package/src/Bridge.ts +0 -17
  85. package/src/Config.ts +0 -7
  86. package/src/HttpBridge.ts +0 -156
  87. package/src/HttpBridgeConfig.ts +0 -14
  88. package/src/HttpProxyModule.ts +0 -37
  89. package/src/PartialConfig.ts +0 -5
  90. package/src/Queries/Connect.ts +0 -9
  91. package/src/Queries/Disconnect.ts +0 -9
  92. package/src/Queries/index.ts +0 -10
  93. package/src/RemoteModuleResolver.ts +0 -75
  94. package/src/spec/HttpBridge.spec.ts +0 -24
package/src/HttpBridge.ts DELETED
@@ -1,156 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import { Account } from '@xyo-network/account'
3
- import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
4
- import { XyoApiEnvelope } from '@xyo-network/api-models'
5
- import { AxiosError, AxiosJson } from '@xyo-network/axios'
6
- import {
7
- AbstractModule,
8
- ModuleConfig,
9
- ModuleDiscoverQuery,
10
- ModuleDiscoverQuerySchema,
11
- ModuleFilter,
12
- ModuleParams,
13
- ModuleQueryResult,
14
- ModuleResolver,
15
- QueryBoundWitnessWrapper,
16
- XyoErrorBuilder,
17
- XyoQuery,
18
- XyoQueryBoundWitness,
19
- } from '@xyo-network/module'
20
- import { XyoPayload } from '@xyo-network/payload-model'
21
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
22
- import { Promisable } from '@xyo-network/promise'
23
- import { QueryPayload, QuerySchema } from '@xyo-network/query-payload-plugin'
24
- import compact from 'lodash/compact'
25
-
26
- import { BridgeModule } from './Bridge'
27
- import { HttpBridgeConfig } from './HttpBridgeConfig'
28
- import { XyoBridgeConnectQuerySchema, XyoBridgeDisconnectQuerySchema, XyoBridgeQuery } from './Queries'
29
- import { RemoteModuleResolver } from './RemoteModuleResolver'
30
-
31
- export interface XyoHttpBridgeParams<TConfig extends HttpBridgeConfig = HttpBridgeConfig> extends ModuleParams<TConfig> {
32
- axios?: AxiosJson
33
- }
34
-
35
- export class HttpBridge<TConfig extends HttpBridgeConfig = HttpBridgeConfig> extends AbstractModule<TConfig> implements BridgeModule<TConfig> {
36
- private _targetQueries: Record<string, string[]> = {}
37
- private _targetResolver: ModuleResolver
38
- private axios: AxiosJson
39
-
40
- protected constructor(params: XyoHttpBridgeParams<TConfig>) {
41
- super(params)
42
- this.axios = params.axios ?? new AxiosJson()
43
- this._targetResolver = new RemoteModuleResolver(this)
44
- }
45
-
46
- public get nodeUri() {
47
- return assertEx(this.config?.nodeUri, 'Missing nodeUri')
48
- }
49
-
50
- public get targetAddress() {
51
- return assertEx(this.config?.targetAddress, 'targetAddress not set')
52
- }
53
-
54
- public get targetResolver() {
55
- return this._targetResolver
56
- }
57
-
58
- static override async create(params: XyoHttpBridgeParams): Promise<HttpBridge> {
59
- const result = (await super.create(params)) as HttpBridge
60
- const discover = await result.targetDiscover(params.config.targetAddress ?? '')
61
- await Promise.all(
62
- discover.map((payload) => {
63
- const addressPayload = payload as AddressPayload
64
- if (addressPayload.schema === AddressSchema) {
65
- return result.targetDiscover(addressPayload.address)
66
- }
67
- }),
68
- )
69
- return result
70
- }
71
-
72
- connect(): Promisable<boolean> {
73
- return true
74
- }
75
-
76
- disconnect(): Promisable<boolean> {
77
- return true
78
- }
79
-
80
- override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(query: T, payloads?: XyoPayload[]): Promise<ModuleQueryResult> {
81
- const wrapper = QueryBoundWitnessWrapper.parseQuery<XyoBridgeQuery>(query, payloads)
82
- const typedQuery = wrapper.query.payload
83
- const queryAccount = new Account()
84
- const resultPayloads: XyoPayload[] = []
85
- try {
86
- switch (typedQuery.schema) {
87
- case XyoBridgeConnectQuerySchema: {
88
- await this.connect()
89
- break
90
- }
91
- case XyoBridgeDisconnectQuerySchema: {
92
- await this.disconnect()
93
- break
94
- }
95
- default:
96
- return await super.query(query, payloads)
97
- }
98
- } catch (ex) {
99
- const error = ex as Error
100
- resultPayloads.push(new XyoErrorBuilder([wrapper.hash], error.message).build())
101
- }
102
- return await this.bindResult(resultPayloads, queryAccount)
103
- }
104
-
105
- override async resolve(filter?: ModuleFilter) {
106
- return [...(await super.resolve(filter)), ...(await this.targetResolver.resolve(filter))]
107
- }
108
-
109
- async targetDiscover(address: string): Promise<XyoPayload[]> {
110
- const queryPayload = PayloadWrapper.parse<ModuleDiscoverQuery>({ schema: ModuleDiscoverQuerySchema })
111
- const discover = assertEx(await this.targetQuery(address, queryPayload), `Unable to resolve [${address}]`)[1]
112
-
113
- this._targetQueries[address] = compact(
114
- discover?.map((payload) => {
115
- if (payload.schema === QuerySchema) {
116
- const schemaPayload = payload as QueryPayload
117
- return schemaPayload.query
118
- } else {
119
- return null
120
- }
121
- }) ?? [],
122
- )
123
-
124
- return discover
125
- }
126
-
127
- public targetQueries(address: string): string[] {
128
- return assertEx(this._targetQueries[address], `targetConfig not set [${address}]`)
129
- }
130
-
131
- async targetQuery(address: string, query: XyoQuery, payloads: XyoPayload[] = []): Promise<ModuleQueryResult> {
132
- try {
133
- const boundQuery = await this.bindQuery(query, payloads)
134
- const path = `${this.nodeUri}/${address}`
135
- const result = await this.axios.post<XyoApiEnvelope<ModuleQueryResult>>(path, boundQuery)
136
- if (result.status >= 400) {
137
- this.logger?.error(`targetQuery failed [${path}]`)
138
- throw `targetQuery failed [${path}] [${result.status}]`
139
- }
140
- return result.data.data
141
- } catch (ex) {
142
- const error = ex as AxiosError
143
- this.logger?.error(`Error Status: ${error.status}`)
144
- this.logger?.error(`Error Cause: ${JSON.stringify(error.cause, null, 2)}`)
145
- throw error
146
- }
147
- }
148
-
149
- targetQueryable(_address: string, _query: XyoQueryBoundWitness, _payloads?: XyoPayload[], _queryConfig?: ModuleConfig): boolean {
150
- throw 'targetQueryable not available'
151
- }
152
-
153
- async targetResolve(address: string, filter?: ModuleFilter) {
154
- return await this.targetResolver.resolve(filter)
155
- }
156
- }
@@ -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,37 +0,0 @@
1
- import { Module, ModuleConfig, ModuleConfigSchema, ModuleFilter, ModuleQueryResult, XyoQueryBoundWitness } from '@xyo-network/module'
2
- import { XyoPayload } from '@xyo-network/payload-model'
3
-
4
- import { HttpBridge } from './HttpBridge'
5
-
6
- export class HttpProxyModule implements Module {
7
- constructor(protected readonly bridge: HttpBridge, protected readonly _address: string) {}
8
-
9
- get address() {
10
- return this._address
11
- }
12
-
13
- get config(): ModuleConfig {
14
- return { schema: ModuleConfigSchema }
15
- }
16
-
17
- get queries() {
18
- return this.bridge.targetQueries(this.address)
19
- }
20
-
21
- get resolver() {
22
- return this.bridge.targetResolver
23
- }
24
-
25
- async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(query: T, payloads?: XyoPayload[]): Promise<ModuleQueryResult> {
26
- return await this.bridge.targetQuery(this.address, query, payloads)
27
- }
28
-
29
- queryable(query: XyoQueryBoundWitness, payloads?: XyoPayload[], queryConfig?: ModuleConfig): boolean {
30
- return this.bridge.targetQueryable(this.address, query, payloads, queryConfig)
31
- }
32
-
33
- /* Resolves a filter from the perspective of the module, including through the parent/gateway module */
34
- async resolve(filter?: ModuleFilter): Promise<Module[]> {
35
- return await this.bridge.targetResolve(this.address, filter)
36
- }
37
- }
@@ -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,75 +0,0 @@
1
- import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
2
- import { CompositeModuleResolver } from '@xyo-network/module'
3
- import { Module, ModuleFilter } from '@xyo-network/module-model'
4
- import compact from 'lodash/compact'
5
- import flatten from 'lodash/flatten'
6
-
7
- import { HttpBridge } from './HttpBridge'
8
- import { HttpProxyModule } from './HttpProxyModule'
9
-
10
- export class RemoteModuleResolver extends CompositeModuleResolver {
11
- private resolvedModules: Record<string, HttpProxyModule> = {}
12
-
13
- // TODO: Allow optional ctor param for supplying address for nested Nodes
14
- // protected readonly address?: string,
15
- constructor(protected readonly bridge: HttpBridge) {
16
- super()
17
- }
18
-
19
- public get isModuleResolver(): boolean {
20
- return true
21
- }
22
-
23
- add(module: Module, name?: string | undefined): this
24
- add(module: Module[], name?: string[] | undefined): this
25
- add(module: Module | Module[], name?: string | string[] | undefined): this
26
- add(_module: unknown, _name?: unknown): this {
27
- throw new Error('Method not implemented.')
28
- }
29
-
30
- remove(name: string | string[]): this
31
- remove(address: string | string[]): this
32
- remove(_address: unknown): this {
33
- throw new Error('Method not implemented.')
34
- }
35
-
36
- async resolve(filter?: ModuleFilter): Promise<HttpProxyModule[]> {
37
- return await Promise.all(flatten(await this.resolveRemoteModules(filter)))
38
- }
39
-
40
- private async getRemoteAddresses() {
41
- const discover = await this.bridge.targetDiscover('')
42
- return compact(
43
- discover.map((payload) => {
44
- if (payload.schema === AddressSchema) {
45
- const schemaPayload = payload as AddressPayload
46
- return schemaPayload.address
47
- } else {
48
- return null
49
- }
50
- }),
51
- )
52
- }
53
-
54
- private resolveByAddress(targetAddress: string): HttpProxyModule | undefined {
55
- const cached = this.resolvedModules[targetAddress]
56
- if (cached) return cached
57
- const mod = new HttpProxyModule(this.bridge, targetAddress)
58
- this.resolvedModules[targetAddress] = mod
59
- return mod
60
- }
61
-
62
- private resolveByName(name: string): HttpProxyModule | undefined {
63
- const cached = this.resolvedModules[name]
64
- if (cached) return cached
65
- return undefined
66
- }
67
-
68
- private async resolveRemoteModules(filter?: ModuleFilter): Promise<HttpProxyModule[]> {
69
- const addresses = filter ? filter?.address : await this.getRemoteAddresses()
70
- const names = filter?.name
71
- const byAddress = compact(await Promise.all(addresses?.map((address) => this.resolveByAddress(address)) ?? []))
72
- const byName = compact(await Promise.all(names?.map((name) => this.resolveByName(name)) ?? []))
73
- return [...byAddress, ...byName]
74
- }
75
- }
@@ -1,24 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import { AxiosJson } from '@xyo-network/axios'
3
- import { NodeWrapper } from '@xyo-network/node'
4
-
5
- import { HttpBridge } from '../HttpBridge'
6
- import { HttpBridgeConfigSchema } from '../HttpBridgeConfig'
7
-
8
- test('HttpBridge', async () => {
9
- const nodeUri = `${process.env.API_DOMAIN}` ?? 'http://localhost:8080'
10
- const targetAddress = ''
11
-
12
- const bridge = await HttpBridge.create({
13
- axios: new AxiosJson(),
14
- config: { nodeUri: `${nodeUri}/node`, schema: HttpBridgeConfigSchema, security: { allowAnonymous: true }, targetAddress },
15
- })
16
- const modules = await bridge.resolve()
17
- const rootNode = assertEx(modules[0])
18
- const wrapper = NodeWrapper.wrap(rootNode)
19
- const description = await wrapper.describe()
20
- expect(description.children).toBeArray()
21
- expect(description.children?.length).toBeGreaterThan(0)
22
- expect(description.queries).toBeArray()
23
- expect(description.queries?.length).toBeGreaterThan(0)
24
- })