@xyo-network/bridge-pub-sub 5.1.22 → 5.1.23
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/neutral/AsyncQueryBus/AsyncQueryBusHost.d.ts +2 -6
- package/dist/neutral/AsyncQueryBus/AsyncQueryBusHost.d.ts.map +1 -1
- package/dist/neutral/PubSubBridgeModuleResolver.d.ts +2 -3
- package/dist/neutral/PubSubBridgeModuleResolver.d.ts.map +1 -1
- package/package.json +38 -35
- package/dist/neutral/spec/PubSubBridge.adhoc.spec.d.ts +0 -2
- package/dist/neutral/spec/PubSubBridge.adhoc.spec.d.ts.map +0 -1
- package/dist/neutral/spec/PubSubBridge.root.spec.d.ts +0 -2
- package/dist/neutral/spec/PubSubBridge.root.spec.d.ts.map +0 -1
- package/src/spec/PubSubBridge.adhoc.spec.ts +0 -228
- package/src/spec/PubSubBridge.root.spec.ts +0 -200
|
@@ -9,17 +9,13 @@ export interface ExposeOptions {
|
|
|
9
9
|
failOnAlreadyExposed?: boolean;
|
|
10
10
|
}
|
|
11
11
|
export declare class AsyncQueryBusHost<TParams extends AsyncQueryBusHostParams = AsyncQueryBusHostParams> extends AsyncQueryBusBase<TParams> {
|
|
12
|
-
protected _exposedAddresses: Set<
|
|
13
|
-
readonly __address: true;
|
|
14
|
-
}>>;
|
|
12
|
+
protected _exposedAddresses: Set<Address>;
|
|
15
13
|
private _exposeOptions;
|
|
16
14
|
private _idle;
|
|
17
15
|
private _lastQueryTime?;
|
|
18
16
|
private _pollId?;
|
|
19
17
|
constructor(params: TParams);
|
|
20
|
-
get exposedAddresses(): Set<
|
|
21
|
-
readonly __address: true;
|
|
22
|
-
}>>;
|
|
18
|
+
get exposedAddresses(): Set<Address>;
|
|
23
19
|
get idlePollFrequency(): number;
|
|
24
20
|
get idleThreshold(): number;
|
|
25
21
|
get perAddressBatchQueryLimit(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncQueryBusHost.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusHost.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,OAAO,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAKxE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EACV,MAAM,EAAY,eAAe,EAClC,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAgBD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAClI,SAAS,CAAC,iBAAiB
|
|
1
|
+
{"version":3,"file":"AsyncQueryBusHost.d.ts","sourceRoot":"","sources":["../../../src/AsyncQueryBus/AsyncQueryBusHost.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,OAAO,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAKxE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EACV,MAAM,EAAY,eAAe,EAClC,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAgBD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAClI,SAAS,CAAC,iBAAiB,eAAqB;IAChD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAEZ,MAAM,EAAE,OAAO;IAI3B,IAAI,gBAAgB,iBAEnB;IAED,IAAI,iBAAiB,WASpB;IAED,IAAI,aAAa,WAShB;IAED,IAAI,yBAAyB,IAAI,MAAM,CAEtC;IAED,IAAI,OAAO,YAEV;IAED,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa;IAa7C,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAWnD,KAAK;IAOL,IAAI;IAQE,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,UAAO;IAYpD,SAAS,CAAC,eAAe,GAAU,aAAa,cAAc,EAAE,OAAO,eAAe,CAAC,iBAAiB,CAAC,mBAiExG;IAED;;;OAGG;IACH,SAAS,CAAC,oBAAoB,GAAU,SAAS,OAAO,iHAmCvD;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI;IAqBZ;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAsB7B;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex';
|
|
1
2
|
import type { BridgeModuleResolverParams } from '@xyo-network/bridge-abstract';
|
|
2
3
|
import { AbstractBridgeModuleResolver } from '@xyo-network/bridge-abstract';
|
|
3
4
|
import type { ModuleConfig, ModuleFilterOptions, ModuleIdentifier, ModuleInstance } from '@xyo-network/module-model';
|
|
@@ -8,9 +9,7 @@ export interface PubSubBridgeModuleResolverParams extends BridgeModuleResolverPa
|
|
|
8
9
|
busClient: AsyncQueryBusClient;
|
|
9
10
|
}
|
|
10
11
|
export declare class PubSubBridgeModuleResolver extends AbstractBridgeModuleResolver<PubSubBridgeModuleResolverParams> {
|
|
11
|
-
protected _resolvedCache: LRUCache<import("@
|
|
12
|
-
readonly __address: true;
|
|
13
|
-
}>, ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>>, unknown>;
|
|
12
|
+
protected _resolvedCache: LRUCache<Address, ModuleInstance<import("@xyo-network/module-model").ModuleParams<import("@xyo-network/module-model").AnyConfigSchema<ModuleConfig>>, import("@xyo-network/module-model").ModuleEventData<object>>, unknown>;
|
|
14
13
|
protected _resolvedCacheMutex: Mutex;
|
|
15
14
|
resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
|
|
16
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PubSubBridgeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/PubSubBridgeModuleResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,4BAA4B,EAAsB,MAAM,8BAA8B,CAAA;AAG/F,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAkC,MAAM,0BAA0B,CAAA;AAGnG,MAAM,WAAW,gCAAiC,SAAQ,0BAA0B;IAClF,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,qBAAa,0BAA2B,SAAQ,4BAA4B,CAAC,gCAAgC,CAAC;IAC5G,SAAS,CAAC,cAAc,+NAAuD;IAC/E,SAAS,CAAC,mBAAmB,QAAc;IAE5B,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CA6C/I"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/bridge-pub-sub",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.23",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -30,49 +30,52 @@
|
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"files": [
|
|
32
32
|
"dist",
|
|
33
|
-
"src"
|
|
33
|
+
"src",
|
|
34
|
+
"!**/*.bench.*",
|
|
35
|
+
"!**/*.spec.*",
|
|
36
|
+
"!**/*.test.*"
|
|
34
37
|
],
|
|
35
38
|
"dependencies": {
|
|
36
|
-
"@xylabs/array": "~5.0.
|
|
37
|
-
"@xylabs/assert": "~5.0.
|
|
38
|
-
"@xylabs/base": "~5.0.
|
|
39
|
-
"@xylabs/creatable": "~5.0.
|
|
40
|
-
"@xylabs/delay": "~5.0.
|
|
41
|
-
"@xylabs/exists": "~5.0.
|
|
42
|
-
"@xylabs/forget": "~5.0.
|
|
43
|
-
"@xylabs/hex": "~5.0.
|
|
44
|
-
"@xylabs/object": "~5.0.
|
|
45
|
-
"@xylabs/promise": "~5.0.
|
|
46
|
-
"@xylabs/timer": "~5.0.
|
|
47
|
-
"@xylabs/typeof": "~5.0.
|
|
48
|
-
"@xyo-network/account": "~5.1.
|
|
49
|
-
"@xyo-network/archivist-model": "~5.1.
|
|
50
|
-
"@xyo-network/boundwitness-model": "~5.1.
|
|
51
|
-
"@xyo-network/bridge-abstract": "~5.1.
|
|
52
|
-
"@xyo-network/bridge-model": "~5.1.
|
|
53
|
-
"@xyo-network/config-payload-plugin": "~5.1.
|
|
54
|
-
"@xyo-network/diviner-boundwitness-model": "~5.1.
|
|
55
|
-
"@xyo-network/diviner-model": "~5.1.
|
|
56
|
-
"@xyo-network/module-model": "~5.1.
|
|
57
|
-
"@xyo-network/node-model": "~5.1.
|
|
58
|
-
"@xyo-network/payload-builder": "~5.1.
|
|
59
|
-
"@xyo-network/payload-model": "~5.1.
|
|
39
|
+
"@xylabs/array": "~5.0.33",
|
|
40
|
+
"@xylabs/assert": "~5.0.33",
|
|
41
|
+
"@xylabs/base": "~5.0.33",
|
|
42
|
+
"@xylabs/creatable": "~5.0.33",
|
|
43
|
+
"@xylabs/delay": "~5.0.33",
|
|
44
|
+
"@xylabs/exists": "~5.0.33",
|
|
45
|
+
"@xylabs/forget": "~5.0.33",
|
|
46
|
+
"@xylabs/hex": "~5.0.33",
|
|
47
|
+
"@xylabs/object": "~5.0.33",
|
|
48
|
+
"@xylabs/promise": "~5.0.33",
|
|
49
|
+
"@xylabs/timer": "~5.0.33",
|
|
50
|
+
"@xylabs/typeof": "~5.0.33",
|
|
51
|
+
"@xyo-network/account": "~5.1.23",
|
|
52
|
+
"@xyo-network/archivist-model": "~5.1.23",
|
|
53
|
+
"@xyo-network/boundwitness-model": "~5.1.23",
|
|
54
|
+
"@xyo-network/bridge-abstract": "~5.1.23",
|
|
55
|
+
"@xyo-network/bridge-model": "~5.1.23",
|
|
56
|
+
"@xyo-network/config-payload-plugin": "~5.1.23",
|
|
57
|
+
"@xyo-network/diviner-boundwitness-model": "~5.1.23",
|
|
58
|
+
"@xyo-network/diviner-model": "~5.1.23",
|
|
59
|
+
"@xyo-network/module-model": "~5.1.23",
|
|
60
|
+
"@xyo-network/node-model": "~5.1.23",
|
|
61
|
+
"@xyo-network/payload-builder": "~5.1.23",
|
|
62
|
+
"@xyo-network/payload-model": "~5.1.23",
|
|
60
63
|
"async-mutex": "~0.5.0",
|
|
61
64
|
"lru-cache": "~11.2.2"
|
|
62
65
|
},
|
|
63
66
|
"devDependencies": {
|
|
64
|
-
"@xylabs/logger": "~5.0.
|
|
67
|
+
"@xylabs/logger": "~5.0.33",
|
|
65
68
|
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
66
69
|
"@xylabs/tsconfig": "~7.2.8",
|
|
67
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
68
|
-
"@xyo-network/archivist-memory": "~5.1.
|
|
69
|
-
"@xyo-network/diviner-boundwitness-memory": "~5.1.
|
|
70
|
-
"@xyo-network/module-abstract": "~5.1.
|
|
71
|
-
"@xyo-network/node-memory": "~5.1.
|
|
72
|
-
"@xyo-network/node-model": "~5.1.
|
|
73
|
-
"@xyo-network/payload-wrapper": "~5.1.
|
|
70
|
+
"@xylabs/vitest-extended": "~5.0.33",
|
|
71
|
+
"@xyo-network/archivist-memory": "~5.1.23",
|
|
72
|
+
"@xyo-network/diviner-boundwitness-memory": "~5.1.23",
|
|
73
|
+
"@xyo-network/module-abstract": "~5.1.23",
|
|
74
|
+
"@xyo-network/node-memory": "~5.1.23",
|
|
75
|
+
"@xyo-network/node-model": "~5.1.23",
|
|
76
|
+
"@xyo-network/payload-wrapper": "~5.1.23",
|
|
74
77
|
"typescript": "~5.9.3",
|
|
75
|
-
"vitest": "~4.0.
|
|
78
|
+
"vitest": "~4.0.9"
|
|
76
79
|
},
|
|
77
80
|
"publishConfig": {
|
|
78
81
|
"access": "public"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubBridge.adhoc.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/PubSubBridge.adhoc.spec.ts"],"names":[],"mappings":"AACA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubBridge.root.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/PubSubBridge.root.spec.ts"],"names":[],"mappings":"AACA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/* eslint-disable max-statements */
|
|
2
|
-
import '@xylabs/vitest-extended'
|
|
3
|
-
|
|
4
|
-
import { ConsoleLogger, LogLevel } from '@xylabs/logger'
|
|
5
|
-
import { Account } from '@xyo-network/account'
|
|
6
|
-
import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
7
|
-
import { ArchivistConfigSchema, asArchivistInstance } from '@xyo-network/archivist-model'
|
|
8
|
-
import { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'
|
|
9
|
-
import type { SearchableStorage } from '@xyo-network/diviner-model'
|
|
10
|
-
import { AbstractModule } from '@xyo-network/module-abstract'
|
|
11
|
-
import { MemoryNode } from '@xyo-network/node-memory'
|
|
12
|
-
import { asNodeInstance } from '@xyo-network/node-model'
|
|
13
|
-
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
14
|
-
import type { Payload } from '@xyo-network/payload-model'
|
|
15
|
-
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
16
|
-
import {
|
|
17
|
-
describe, expect, it,
|
|
18
|
-
} from 'vitest'
|
|
19
|
-
|
|
20
|
-
import type { AsyncQueryBusIntersectConfig } from '../AsyncQueryBus/index.ts'
|
|
21
|
-
import { PubSubBridge } from '../PubSubBridge.ts'
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @group module
|
|
25
|
-
* @group bridge
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
AbstractModule.defaultLogger = new ConsoleLogger(LogLevel.warn)
|
|
29
|
-
|
|
30
|
-
const pollFrequency = 250
|
|
31
|
-
const ttl = 1000 * 5
|
|
32
|
-
|
|
33
|
-
describe('PubSubBridge', () => {
|
|
34
|
-
it('PubSubBridge', async () => {
|
|
35
|
-
const intermediateNodeAccount = await Account.create()
|
|
36
|
-
const intermediateNode = await MemoryNode.create({
|
|
37
|
-
account: intermediateNodeAccount,
|
|
38
|
-
config: { name: 'intermediateNode', schema: MemoryNode.defaultConfigSchema },
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
const hostNode = await MemoryNode.create({
|
|
42
|
-
account: 'random',
|
|
43
|
-
config: { name: 'hostNode', schema: MemoryNode.defaultConfigSchema },
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
const hostNodeContainer = await MemoryNode.create({
|
|
47
|
-
account: 'random',
|
|
48
|
-
config: { name: 'hostNodeContainer', schema: MemoryNode.defaultConfigSchema },
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
const archivist = await MemoryArchivist.create({
|
|
52
|
-
account: 'random',
|
|
53
|
-
config: { name: 'Archivist', schema: ArchivistConfigSchema },
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
await hostNodeContainer.register(archivist)
|
|
57
|
-
await hostNodeContainer.attach(archivist.address, true)
|
|
58
|
-
|
|
59
|
-
const queryArchivistAccount = await Account.create()
|
|
60
|
-
const queryArchivist = await MemoryArchivist.create({
|
|
61
|
-
account: queryArchivistAccount,
|
|
62
|
-
config: { name: 'queryArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
await intermediateNode.register(queryArchivist)
|
|
66
|
-
await intermediateNode.attach(queryArchivist.address, true)
|
|
67
|
-
|
|
68
|
-
const queryBoundWitnessDivinerAccount = await Account.create()
|
|
69
|
-
const queryBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
70
|
-
account: queryBoundWitnessDivinerAccount,
|
|
71
|
-
config: {
|
|
72
|
-
archivist: queryArchivist.address, name: 'queryBoundWitnessDiviner', schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
73
|
-
},
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
await intermediateNode.register(queryBoundWitnessDiviner)
|
|
77
|
-
await intermediateNode.attach(queryBoundWitnessDiviner.address, true)
|
|
78
|
-
|
|
79
|
-
const responseArchivistAccount = await Account.create()
|
|
80
|
-
const responseArchivist = await MemoryArchivist.create({
|
|
81
|
-
account: responseArchivistAccount,
|
|
82
|
-
config: { name: 'responseArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
await intermediateNode.register(responseArchivist)
|
|
86
|
-
await intermediateNode.attach(responseArchivist.address, true)
|
|
87
|
-
|
|
88
|
-
const responseBoundWitnessDivinerAccount = await Account.create()
|
|
89
|
-
const responseBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
90
|
-
account: responseBoundWitnessDivinerAccount,
|
|
91
|
-
config: {
|
|
92
|
-
archivist: responseArchivist.address, name: 'responseBoundWitnessDiviner', schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
93
|
-
},
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
await intermediateNode.register(responseBoundWitnessDiviner)
|
|
97
|
-
await intermediateNode.attach(responseBoundWitnessDiviner.address, true)
|
|
98
|
-
|
|
99
|
-
const clientNode = await MemoryNode.create({ account: 'random' })
|
|
100
|
-
|
|
101
|
-
await clientNode.register(intermediateNode)
|
|
102
|
-
await clientNode.attach(intermediateNode.address, true)
|
|
103
|
-
|
|
104
|
-
await hostNode.register(intermediateNode)
|
|
105
|
-
await hostNode.attach(intermediateNode.address, true)
|
|
106
|
-
|
|
107
|
-
await hostNode.register(hostNodeContainer)
|
|
108
|
-
await hostNode.attach(hostNodeContainer.address, true)
|
|
109
|
-
|
|
110
|
-
const stateStoreArchivistAccount = await Account.random()
|
|
111
|
-
const stateStoreArchivist = await MemoryArchivist.create({
|
|
112
|
-
account: stateStoreArchivistAccount,
|
|
113
|
-
config: { name: 'stateStoreArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
const stateStoreBoundWitnessDivinerAccount = await Account.random()
|
|
117
|
-
const stateStoreBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
118
|
-
account: stateStoreBoundWitnessDivinerAccount,
|
|
119
|
-
config: {
|
|
120
|
-
archivist: stateStoreArchivist.address,
|
|
121
|
-
name: 'stateStoreBoundWitnessDiviner',
|
|
122
|
-
schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
123
|
-
},
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
const stateStore: SearchableStorage = {
|
|
127
|
-
archivist: stateStoreArchivist.address,
|
|
128
|
-
boundWitnessDiviner: stateStoreBoundWitnessDiviner.address,
|
|
129
|
-
}
|
|
130
|
-
const intersect: AsyncQueryBusIntersectConfig = {
|
|
131
|
-
queries: {
|
|
132
|
-
archivist: queryArchivist.address,
|
|
133
|
-
boundWitnessDiviner: queryBoundWitnessDiviner.address,
|
|
134
|
-
},
|
|
135
|
-
responses: {
|
|
136
|
-
archivist: responseArchivist.address,
|
|
137
|
-
boundWitnessDiviner: responseBoundWitnessDiviner.address,
|
|
138
|
-
},
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const hostBridge = await PubSubBridge.create({
|
|
142
|
-
account: 'random',
|
|
143
|
-
config: {
|
|
144
|
-
host: {
|
|
145
|
-
intersect, pollFrequency, stateStore,
|
|
146
|
-
},
|
|
147
|
-
name: 'hostPubSubBridge',
|
|
148
|
-
schema: PubSubBridge.defaultConfigSchema,
|
|
149
|
-
security: { allowAnonymous: true },
|
|
150
|
-
},
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
const clientBridge = await PubSubBridge.create({
|
|
154
|
-
account: 'random',
|
|
155
|
-
config: {
|
|
156
|
-
client: {
|
|
157
|
-
intersect,
|
|
158
|
-
pollFrequency,
|
|
159
|
-
queryCache: { ttl },
|
|
160
|
-
stateStore,
|
|
161
|
-
},
|
|
162
|
-
name: 'clientPubSubBridge',
|
|
163
|
-
schema: PubSubBridge.defaultConfigSchema,
|
|
164
|
-
security: { allowAnonymous: true },
|
|
165
|
-
},
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
clientBridge.on('querySendStarted', ({ query }) => console.log(`Query send started: ${query}`))
|
|
169
|
-
clientBridge.on('querySendFinished', ({ query }) => console.log(`Query send finished: ${query}`))
|
|
170
|
-
|
|
171
|
-
hostBridge.on('queryFulfillStarted', ({ query }) => console.log(`Query fulfill started: ${query}`))
|
|
172
|
-
hostBridge.on('queryFulfillFinished', ({ query }) => console.log(`Query fulfill finished: ${query}`))
|
|
173
|
-
|
|
174
|
-
clientBridge.onAny(event => console.log(`onAny: ${String(event)}`))
|
|
175
|
-
|
|
176
|
-
await clientBridge?.start?.()
|
|
177
|
-
await hostBridge?.start?.()
|
|
178
|
-
await clientNode.register(clientBridge)
|
|
179
|
-
await clientNode.attach(clientBridge?.address, true)
|
|
180
|
-
const resolvedBridge = clientNode.resolve(clientBridge.id)
|
|
181
|
-
expect(resolvedBridge).toBeDefined()
|
|
182
|
-
|
|
183
|
-
await hostNode.register(hostBridge)
|
|
184
|
-
await hostNode.attach(hostBridge?.address, true)
|
|
185
|
-
await hostBridge.expose(hostNodeContainer.address, { maxDepth: 5 })
|
|
186
|
-
|
|
187
|
-
const exposed = await hostBridge.exposed?.()
|
|
188
|
-
expect(exposed).toBeArray()
|
|
189
|
-
expect(exposed?.length).toBeGreaterThan(1)
|
|
190
|
-
|
|
191
|
-
// test the requirement for connect to be called before resolve
|
|
192
|
-
const rootModuleNoExist = await clientNode.resolve(hostNodeContainer.address)
|
|
193
|
-
expect(rootModuleNoExist).toBeUndefined()
|
|
194
|
-
|
|
195
|
-
const connectedAddress = await clientBridge.connect(hostNodeContainer.address)
|
|
196
|
-
expect(connectedAddress).toBe(hostNodeContainer.address)
|
|
197
|
-
|
|
198
|
-
const rootModule = await clientBridge.resolve(hostNodeContainer.address)
|
|
199
|
-
expect(rootModule).toBeDefined()
|
|
200
|
-
|
|
201
|
-
const remoteNode = asNodeInstance(rootModule, 'Failed to resolve correct object type')
|
|
202
|
-
expect(remoteNode).toBeDefined()
|
|
203
|
-
|
|
204
|
-
const hostNodeContainerByAddress = await clientBridge.resolve(hostNodeContainer.address)
|
|
205
|
-
expect(hostNodeContainerByAddress).toBeDefined()
|
|
206
|
-
|
|
207
|
-
const archivistViaHostNodeContainer = await hostNodeContainerByAddress?.resolve('Archivist')
|
|
208
|
-
expect(archivistViaHostNodeContainer).toBeDefined()
|
|
209
|
-
|
|
210
|
-
const archivistByName = await hostNodeContainerByAddress?.resolve('Archivist')
|
|
211
|
-
expect(archivistByName).toBeDefined()
|
|
212
|
-
|
|
213
|
-
const archivistInstance = asArchivistInstance(archivistByName, 'Failed to cast archivist', { required: true })
|
|
214
|
-
expect(archivistInstance).toBeDefined()
|
|
215
|
-
const knownPayload = PayloadWrapper.parse({ schema: 'network.xyo.test' })?.payload as Payload
|
|
216
|
-
expect(knownPayload).toBeDefined()
|
|
217
|
-
const knownHash = await PayloadBuilder.dataHash(knownPayload as Payload)
|
|
218
|
-
const insertResult = await archivistInstance.insert([knownPayload])
|
|
219
|
-
expect(insertResult).toBeDefined()
|
|
220
|
-
const roundTripPayload = (await archivistInstance.get([knownHash]))[0]
|
|
221
|
-
expect(roundTripPayload).toBeDefined()
|
|
222
|
-
|
|
223
|
-
await hostBridge.unexpose(hostNodeContainer.address)
|
|
224
|
-
const exposedAfter = await hostBridge.exposed?.()
|
|
225
|
-
expect(exposedAfter).toBeArray()
|
|
226
|
-
expect(exposedAfter?.length).toBe(0)
|
|
227
|
-
})
|
|
228
|
-
}, 10_000)
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/* eslint-disable max-statements */
|
|
2
|
-
import '@xylabs/vitest-extended'
|
|
3
|
-
|
|
4
|
-
import { ConsoleLogger, LogLevel } from '@xylabs/logger'
|
|
5
|
-
import { Account } from '@xyo-network/account'
|
|
6
|
-
import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
7
|
-
import { ArchivistConfigSchema, asArchivistInstance } from '@xyo-network/archivist-model'
|
|
8
|
-
import { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'
|
|
9
|
-
import type { SearchableStorage } from '@xyo-network/diviner-model'
|
|
10
|
-
import { AbstractModule } from '@xyo-network/module-abstract'
|
|
11
|
-
import { MemoryNode } from '@xyo-network/node-memory'
|
|
12
|
-
import { asNodeInstance } from '@xyo-network/node-model'
|
|
13
|
-
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
14
|
-
import type { Payload } from '@xyo-network/payload-model'
|
|
15
|
-
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
16
|
-
import {
|
|
17
|
-
describe, expect, it,
|
|
18
|
-
} from 'vitest'
|
|
19
|
-
|
|
20
|
-
import type { AsyncQueryBusIntersectConfig } from '../AsyncQueryBus/index.ts'
|
|
21
|
-
import { PubSubBridge } from '../PubSubBridge.ts'
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @group module
|
|
25
|
-
* @group bridge
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
AbstractModule.defaultLogger = new ConsoleLogger(LogLevel.warn)
|
|
29
|
-
|
|
30
|
-
const pollFrequency = 250
|
|
31
|
-
const ttl = 1000 * 5
|
|
32
|
-
|
|
33
|
-
describe('PubSubBridge', () => {
|
|
34
|
-
it('PubSubBridge', async () => {
|
|
35
|
-
const intermediateNodeAccount = await Account.create()
|
|
36
|
-
const intermediateNode = await MemoryNode.create({
|
|
37
|
-
account: intermediateNodeAccount,
|
|
38
|
-
config: { name: 'intermediateNode', schema: MemoryNode.defaultConfigSchema },
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
const hostNode = await MemoryNode.create({
|
|
42
|
-
account: 'random',
|
|
43
|
-
config: { name: 'hostNode', schema: MemoryNode.defaultConfigSchema },
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
const hostNodeContainer = await MemoryNode.create({
|
|
47
|
-
account: 'random',
|
|
48
|
-
config: { name: 'hostNodeContainer', schema: MemoryNode.defaultConfigSchema },
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
const archivist = await MemoryArchivist.create({
|
|
52
|
-
account: 'random',
|
|
53
|
-
config: { name: 'Archivist', schema: ArchivistConfigSchema },
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
await hostNodeContainer.register(archivist)
|
|
57
|
-
await hostNodeContainer.attach(archivist.address, true)
|
|
58
|
-
|
|
59
|
-
const queryArchivistAccount = await Account.create()
|
|
60
|
-
const queryArchivist = await MemoryArchivist.create({
|
|
61
|
-
account: queryArchivistAccount,
|
|
62
|
-
config: { name: 'queryArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
await intermediateNode.register(queryArchivist)
|
|
66
|
-
await intermediateNode.attach(queryArchivist.address, true)
|
|
67
|
-
|
|
68
|
-
const queryBoundWitnessDivinerAccount = await Account.create()
|
|
69
|
-
const queryBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
70
|
-
account: queryBoundWitnessDivinerAccount,
|
|
71
|
-
config: {
|
|
72
|
-
archivist: queryArchivist.address, name: 'queryBoundWitnessDiviner', schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
73
|
-
},
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
await intermediateNode.register(queryBoundWitnessDiviner)
|
|
77
|
-
await intermediateNode.attach(queryBoundWitnessDiviner.address, true)
|
|
78
|
-
|
|
79
|
-
const responseArchivistAccount = await Account.create()
|
|
80
|
-
const responseArchivist = await MemoryArchivist.create({
|
|
81
|
-
account: responseArchivistAccount,
|
|
82
|
-
config: { name: 'responseArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
await intermediateNode.register(responseArchivist)
|
|
86
|
-
await intermediateNode.attach(responseArchivist.address, true)
|
|
87
|
-
|
|
88
|
-
const responseBoundWitnessDivinerAccount = await Account.create()
|
|
89
|
-
const responseBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
90
|
-
account: responseBoundWitnessDivinerAccount,
|
|
91
|
-
config: {
|
|
92
|
-
archivist: responseArchivist.address, name: 'responseBoundWitnessDiviner', schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
93
|
-
},
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
await intermediateNode.register(responseBoundWitnessDiviner)
|
|
97
|
-
await intermediateNode.attach(responseBoundWitnessDiviner.address, true)
|
|
98
|
-
|
|
99
|
-
const clientNode = await MemoryNode.create({ account: 'random' })
|
|
100
|
-
|
|
101
|
-
await clientNode.register(intermediateNode)
|
|
102
|
-
await clientNode.attach(intermediateNode.address, true)
|
|
103
|
-
|
|
104
|
-
await hostNode.register(intermediateNode)
|
|
105
|
-
await hostNode.attach(intermediateNode.address, true)
|
|
106
|
-
|
|
107
|
-
await hostNode.register(hostNodeContainer)
|
|
108
|
-
await hostNode.attach(hostNodeContainer.address, true)
|
|
109
|
-
|
|
110
|
-
const stateStoreArchivistAccount = await Account.random()
|
|
111
|
-
const stateStoreArchivist = await MemoryArchivist.create({
|
|
112
|
-
account: stateStoreArchivistAccount,
|
|
113
|
-
config: { name: 'stateStoreArchivist', schema: MemoryArchivist.defaultConfigSchema },
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
const stateStoreBoundWitnessDivinerAccount = await Account.random()
|
|
117
|
-
const stateStoreBoundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
|
|
118
|
-
account: stateStoreBoundWitnessDivinerAccount,
|
|
119
|
-
config: {
|
|
120
|
-
archivist: stateStoreArchivist.address,
|
|
121
|
-
name: 'stateStoreBoundWitnessDiviner',
|
|
122
|
-
schema: MemoryBoundWitnessDiviner.defaultConfigSchema,
|
|
123
|
-
},
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
const stateStore: SearchableStorage = {
|
|
127
|
-
archivist: stateStoreArchivist.address,
|
|
128
|
-
boundWitnessDiviner: stateStoreBoundWitnessDiviner.address,
|
|
129
|
-
}
|
|
130
|
-
const intersect: AsyncQueryBusIntersectConfig = {
|
|
131
|
-
queries: {
|
|
132
|
-
archivist: queryArchivist.address,
|
|
133
|
-
boundWitnessDiviner: queryBoundWitnessDiviner.address,
|
|
134
|
-
},
|
|
135
|
-
responses: {
|
|
136
|
-
archivist: responseArchivist.address,
|
|
137
|
-
boundWitnessDiviner: responseBoundWitnessDiviner.address,
|
|
138
|
-
},
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const pubSubBridge = await PubSubBridge.create({
|
|
142
|
-
account: 'random',
|
|
143
|
-
config: {
|
|
144
|
-
client: {
|
|
145
|
-
intersect,
|
|
146
|
-
pollFrequency,
|
|
147
|
-
queryCache: { ttl },
|
|
148
|
-
stateStore,
|
|
149
|
-
},
|
|
150
|
-
discoverRoots: 'lazy',
|
|
151
|
-
host: {
|
|
152
|
-
intersect, pollFrequency, stateStore,
|
|
153
|
-
},
|
|
154
|
-
name: 'pubSubBridge',
|
|
155
|
-
roots: [hostNodeContainer.address],
|
|
156
|
-
schema: PubSubBridge.defaultConfigSchema,
|
|
157
|
-
security: { allowAnonymous: true },
|
|
158
|
-
},
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
await clientNode.register(pubSubBridge)
|
|
162
|
-
await clientNode.attach(pubSubBridge?.address, true)
|
|
163
|
-
const resolvedBridge = clientNode.resolve(pubSubBridge.id)
|
|
164
|
-
expect(resolvedBridge).toBeDefined()
|
|
165
|
-
|
|
166
|
-
await hostNode.register(pubSubBridge)
|
|
167
|
-
await hostNode.attach(pubSubBridge?.address, true)
|
|
168
|
-
await pubSubBridge.expose(hostNodeContainer.address)
|
|
169
|
-
|
|
170
|
-
const exposed = await pubSubBridge.exposed?.()
|
|
171
|
-
expect(exposed).toBeArray()
|
|
172
|
-
expect(exposed?.length).toBeGreaterThan(1)
|
|
173
|
-
|
|
174
|
-
const rootModule = await pubSubBridge.resolve(hostNodeContainer.address)
|
|
175
|
-
expect(rootModule).toBeDefined()
|
|
176
|
-
|
|
177
|
-
const rootModuleViaHostNode = await hostNode.resolve(hostNodeContainer.address)
|
|
178
|
-
expect(rootModuleViaHostNode).toBeDefined()
|
|
179
|
-
|
|
180
|
-
const remoteNode = asNodeInstance(rootModule, 'Failed to resolve correct object type [XYOPublic]')
|
|
181
|
-
expect(remoteNode).toBeDefined()
|
|
182
|
-
|
|
183
|
-
const archivistByName = await pubSubBridge.resolve(`${hostNodeContainer.address}:Archivist`)
|
|
184
|
-
expect(archivistByName).toBeDefined()
|
|
185
|
-
const archivistInstance = asArchivistInstance(archivistByName, 'Failed to cast archivist', { required: true })
|
|
186
|
-
expect(archivistInstance).toBeDefined()
|
|
187
|
-
const knownPayload = PayloadWrapper.parse({ schema: 'network.xyo.test' })?.payload as Payload
|
|
188
|
-
expect(knownPayload).toBeDefined()
|
|
189
|
-
const knownHash = await PayloadBuilder.dataHash(knownPayload as Payload)
|
|
190
|
-
const insertResult = await archivistInstance.insert([knownPayload])
|
|
191
|
-
expect(insertResult).toBeDefined()
|
|
192
|
-
const roundTripPayload = (await archivistInstance.get([knownHash]))[0]
|
|
193
|
-
expect(roundTripPayload).toBeDefined()
|
|
194
|
-
|
|
195
|
-
await pubSubBridge.unexpose(hostNodeContainer.address)
|
|
196
|
-
const exposedAfter = await pubSubBridge.exposed?.()
|
|
197
|
-
expect(exposedAfter).toBeArray()
|
|
198
|
-
expect(exposedAfter?.length).toBe(0)
|
|
199
|
-
})
|
|
200
|
-
})
|