@xyo-network/chain-bridge 1.15.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/LICENSE +165 -0
- package/README.md +96 -0
- package/dist/node/driver/index.d.ts +2 -0
- package/dist/node/driver/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlockIteration/ChainHashIterationService.d.ts +24 -0
- package/dist/node/driver/indexer/ChainBlockIteration/ChainHashIterationService.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlockIteration/index.d.ts +2 -0
- package/dist/node/driver/indexer/ChainBlockIteration/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainBlocksObservable.d.ts +5 -0
- package/dist/node/driver/indexer/ChainBlocksObservable.d.ts.map +1 -0
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts +11 -0
- package/dist/node/driver/indexer/ChainHydratedBlocksObservable.d.ts.map +1 -0
- package/dist/node/driver/indexer/index.d.ts +2 -0
- package/dist/node/driver/indexer/index.d.ts.map +1 -0
- package/dist/node/driver/indexer/spec/ChainBlocksObservable.spec.d.ts +2 -0
- package/dist/node/driver/indexer/spec/ChainBlocksObservable.spec.d.ts.map +1 -0
- package/dist/node/driver/indexer/spec/ChainHydratedBlocksObservable.spec.d.ts +2 -0
- package/dist/node/driver/indexer/spec/ChainHydratedBlocksObservable.spec.d.ts.map +1 -0
- package/dist/node/driver/mongo/MongoMap.d.ts +17 -0
- package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -0
- package/dist/node/driver/mongo/index.d.ts +2 -0
- package/dist/node/driver/mongo/index.d.ts.map +1 -0
- package/dist/node/driver/mongo/spec/MongoMap.spec.d.ts +2 -0
- package/dist/node/driver/mongo/spec/MongoMap.spec.d.ts.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.mjs +751 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/interface/index.d.ts +5 -0
- package/dist/node/interface/index.d.ts.map +1 -0
- package/dist/node/interface/interface/ChainBridgeRelayInterface.d.ts +9 -0
- package/dist/node/interface/interface/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts +6 -0
- package/dist/node/interface/interface/IntentIndexerInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/LockingProcessorInterface.d.ts +9 -0
- package/dist/node/interface/interface/LockingProcessorInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/ObservationIndexerInterface.d.ts +7 -0
- package/dist/node/interface/interface/ObservationIndexerInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/Params.d.ts +26 -0
- package/dist/node/interface/interface/Params.d.ts.map +1 -0
- package/dist/node/interface/interface/RelayInterface.d.ts +8 -0
- package/dist/node/interface/interface/RelayInterface.d.ts.map +1 -0
- package/dist/node/interface/interface/index.d.ts +7 -0
- package/dist/node/interface/interface/index.d.ts.map +1 -0
- package/dist/node/interface/repository/RepositoryInterface.d.ts +22 -0
- package/dist/node/interface/repository/RepositoryInterface.d.ts.map +1 -0
- package/dist/node/interface/repository/index.d.ts +2 -0
- package/dist/node/interface/repository/index.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts +9 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts +31 -0
- package/dist/node/interface/service/ChainBridgeRelay/ChainBridgeRelayService.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts +2 -0
- package/dist/node/interface/service/ChainBridgeRelay/index.d.ts.map +1 -0
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts +2 -0
- package/dist/node/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/Observer.d.ts +15 -0
- package/dist/node/interface/service/Observer/Observer.d.ts.map +1 -0
- package/dist/node/interface/service/Observer/index.d.ts +2 -0
- package/dist/node/interface/service/Observer/index.d.ts.map +1 -0
- package/dist/node/interface/service/index.d.ts +3 -0
- package/dist/node/interface/service/index.d.ts.map +1 -0
- package/dist/node/interface/util/getBridgeIntentIdentifier.d.ts +5 -0
- package/dist/node/interface/util/getBridgeIntentIdentifier.d.ts.map +1 -0
- package/dist/node/interface/util/index.d.ts +2 -0
- package/dist/node/interface/util/index.d.ts.map +1 -0
- package/dist/node/manifest/getLocator.d.ts +14 -0
- package/dist/node/manifest/getLocator.d.ts.map +1 -0
- package/dist/node/manifest/getNode.d.ts +15 -0
- package/dist/node/manifest/getNode.d.ts.map +1 -0
- package/dist/node/manifest/index.d.ts +6 -0
- package/dist/node/manifest/index.d.ts.map +1 -0
- package/dist/node/manifest/nodeManifest.d.ts +6 -0
- package/dist/node/manifest/nodeManifest.d.ts.map +1 -0
- package/dist/node/manifest/private/index.d.ts +5 -0
- package/dist/node/manifest/private/index.d.ts.map +1 -0
- package/dist/node/manifest/public/index.d.ts +14 -0
- package/dist/node/manifest/public/index.d.ts.map +1 -0
- package/dist/node/manifest/public/spec/Node.spec.d.ts +2 -0
- package/dist/node/manifest/public/spec/Node.spec.d.ts.map +1 -0
- package/dist/node/server/app.d.ts +4 -0
- package/dist/node/server/app.d.ts.map +1 -0
- package/dist/node/server/index.d.ts +11 -0
- package/dist/node/server/index.d.ts.map +1 -0
- package/dist/node/server/instrumentation.d.ts +9 -0
- package/dist/node/server/instrumentation.d.ts.map +1 -0
- package/dist/node/server/routes/addRoutes.d.ts +3 -0
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts +4 -0
- package/dist/node/server/routes/address/AddressPathParams.d.ts.map +1 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts +3 -0
- package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/get.d.ts +4 -0
- package/dist/node/server/routes/address/get/get.d.ts.map +1 -0
- package/dist/node/server/routes/address/get/index.d.ts +2 -0
- package/dist/node/server/routes/address/get/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/index.d.ts +2 -0
- package/dist/node/server/routes/address/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts +6 -0
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/index.d.ts +2 -0
- package/dist/node/server/routes/address/post/index.d.ts.map +1 -0
- package/dist/node/server/routes/address/post/post.d.ts +8 -0
- package/dist/node/server/routes/address/post/post.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts +3 -0
- package/dist/node/server/routes/dataLake/addDataLakeRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts +10 -0
- package/dist/node/server/routes/dataLake/archivistMiddleware.d.ts.map +1 -0
- package/dist/node/server/routes/dataLake/index.d.ts +2 -0
- package/dist/node/server/routes/dataLake/index.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/get.d.ts +3 -0
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -0
- package/dist/node/server/routes/healthz/index.d.ts +2 -0
- package/dist/node/server/routes/healthz/index.d.ts.map +1 -0
- package/dist/node/server/routes/index.d.ts +5 -0
- package/dist/node/server/routes/index.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/index.d.ts +2 -0
- package/dist/node/server/routes/rpc/index.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +3 -0
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +1 -0
- package/dist/node/server/routes/rpc/routes/index.d.ts +2 -0
- package/dist/node/server/routes/rpc/routes/index.d.ts.map +1 -0
- package/dist/node/server/server.d.ts +11 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/package.json +125 -0
- package/src/driver/index.ts +1 -0
- package/src/driver/indexer/ChainBlockIteration/ChainHashIterationService.ts +87 -0
- package/src/driver/indexer/ChainBlockIteration/index.ts +1 -0
- package/src/driver/indexer/ChainBlocksObservable.ts +47 -0
- package/src/driver/indexer/ChainHydratedBlocksObservable.ts +23 -0
- package/src/driver/indexer/index.ts +1 -0
- package/src/driver/indexer/spec/ChainBlocksObservable.spec.ts +58 -0
- package/src/driver/indexer/spec/ChainHydratedBlocksObservable.spec.ts +58 -0
- package/src/driver/mongo/MongoMap.ts +62 -0
- package/src/driver/mongo/index.ts +1 -0
- package/src/driver/mongo/spec/MongoMap.spec.ts +67 -0
- package/src/index.ts +1 -0
- package/src/interface/index.ts +4 -0
- package/src/interface/interface/ChainBridgeRelayInterface.ts +9 -0
- package/src/interface/interface/IntentIndexerInterface.ts +7 -0
- package/src/interface/interface/LockingProcessorInterface.ts +10 -0
- package/src/interface/interface/ObservationIndexerInterface.ts +12 -0
- package/src/interface/interface/Params.ts +26 -0
- package/src/interface/interface/RelayInterface.ts +8 -0
- package/src/interface/interface/index.ts +6 -0
- package/src/interface/repository/RepositoryInterface.ts +28 -0
- package/src/interface/repository/index.ts +1 -0
- package/src/interface/service/ChainBridgeRelay/ChainBridgeRelayInterface.ts +11 -0
- package/src/interface/service/ChainBridgeRelay/ChainBridgeRelayService.ts +116 -0
- package/src/interface/service/ChainBridgeRelay/index.ts +1 -0
- package/src/interface/service/ChainBridgeRelay/spec/ChainBridgeRelayService.spec.ts +264 -0
- package/src/interface/service/Observer/Observer.ts +48 -0
- package/src/interface/service/Observer/index.ts +1 -0
- package/src/interface/service/index.ts +2 -0
- package/src/interface/util/getBridgeIntentIdentifier.ts +18 -0
- package/src/interface/util/index.ts +1 -0
- package/src/manifest/getLocator.ts +105 -0
- package/src/manifest/getNode.ts +32 -0
- package/src/manifest/index.ts +5 -0
- package/src/manifest/node.json +17 -0
- package/src/manifest/nodeManifest.ts +8 -0
- package/src/manifest/private/index.ts +4 -0
- package/src/manifest/public/Chain.json +138 -0
- package/src/manifest/public/Pending.json +35 -0
- package/src/manifest/public/index.ts +20 -0
- package/src/manifest/public/spec/Node.spec.ts +32 -0
- package/src/server/app.ts +37 -0
- package/src/server/index.ts +13 -0
- package/src/server/instrumentation.ts +15 -0
- package/src/server/routes/addRoutes.ts +11 -0
- package/src/server/routes/address/AddressPathParams.ts +3 -0
- package/src/server/routes/address/addNodeRoutes.ts +21 -0
- package/src/server/routes/address/get/get.ts +33 -0
- package/src/server/routes/address/get/index.ts +1 -0
- package/src/server/routes/address/index.ts +1 -0
- package/src/server/routes/address/post/getQueryConfig.ts +23 -0
- package/src/server/routes/address/post/index.ts +1 -0
- package/src/server/routes/address/post/post.ts +77 -0
- package/src/server/routes/dataLake/addDataLakeRoutes.ts +9 -0
- package/src/server/routes/dataLake/archivistMiddleware.ts +86 -0
- package/src/server/routes/dataLake/index.ts +1 -0
- package/src/server/routes/healthz/get.ts +20 -0
- package/src/server/routes/healthz/index.ts +1 -0
- package/src/server/routes/index.ts +5 -0
- package/src/server/routes/rpc/index.ts +1 -0
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +22 -0
- package/src/server/routes/rpc/routes/index.ts +1 -0
- package/src/server/server.ts +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddressPathParams.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/address/AddressPathParams.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addNodeRoutes.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/address/addNodeRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,SAczC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
2
|
+
import type { AddressPathParams } from '../AddressPathParams.ts';
|
|
3
|
+
export declare const getAddress: (req: import("express").Request<AddressPathParams, Payload[], any, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<Payload[], Record<string, any>>, next: import("express").NextFunction) => Promise<unknown>;
|
|
4
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/get/get.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAwBhE,eAAO,MAAM,UAAU,4OAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/get/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/address/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
|
+
import type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model';
|
|
3
|
+
import type { Payload } from '@xyo-network/payload-model';
|
|
4
|
+
import type { Request } from 'express';
|
|
5
|
+
export declare const getQueryConfig: (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]) => ModuleConfig | undefined;
|
|
6
|
+
//# sourceMappingURL=getQueryConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQueryConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/post/getQueryConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEtF,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,eAAO,MAAM,cAAc,GAAI,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,IAAI,iBAAiB,EAAE,WAAW,OAAO,EAAE,KAAG,YAAY,GAAG,SAa9H,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/post/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
|
+
import type { ModuleQueryResult } from '@xyo-network/module-model';
|
|
3
|
+
import type { ModuleError, Payload } from '@xyo-network/payload-model';
|
|
4
|
+
import type { AddressPathParams } from '../AddressPathParams.ts';
|
|
5
|
+
type PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]];
|
|
6
|
+
export declare const postAddress: (req: import("express").Request<AddressPathParams, ModuleError | ModuleQueryResult, PostAddressRequestBody, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<ModuleError | ModuleQueryResult, Record<string, any>>, next: import("express").NextFunction) => Promise<unknown>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/address/post/post.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAItE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhE,KAAK,sBAAsB,GAAG,CAAC,iBAAiB,EAAE,SAAS,GAAG,OAAO,EAAE,CAAC,CAAA;AA2DxE,eAAO,MAAM,WAAW,2SAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addDataLakeRoutes.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/addDataLakeRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,eAAO,MAAM,iBAAiB,GAAI,KAAK,OAAO,SAI7C,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ModuleIdentifier } from '@xyo-network/module-model';
|
|
2
|
+
import type { NodeInstance } from '@xyo-network/node-model';
|
|
3
|
+
import type { Router } from 'express';
|
|
4
|
+
type ArchivistMiddlewareOptions = {
|
|
5
|
+
archivistModuleIdentifier: ModuleIdentifier;
|
|
6
|
+
node: NodeInstance;
|
|
7
|
+
};
|
|
8
|
+
export declare const archivistMiddleware: (options: ArchivistMiddlewareOptions) => Router;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=archivistMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archivistMiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/archivistMiddleware.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAiBrC,KAAK,0BAA0B,GAAG;IAChC,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,MAkDzE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/dataLake/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/get.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiB7C,eAAO,MAAM,UAAU,4HAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/healthz/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAElC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/routes/rpc/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addRpcRoutes.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/addRpcRoutes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,SAaxC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/routes/rpc/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '@xylabs/logger';
|
|
2
|
+
import type { NodeInstance } from '@xyo-network/node-model';
|
|
3
|
+
import { type Config } from '@xyo-network/xl1-protocol-sdk';
|
|
4
|
+
interface GetServerContext {
|
|
5
|
+
config: Config;
|
|
6
|
+
logger?: Logger;
|
|
7
|
+
node?: NodeInstance;
|
|
8
|
+
}
|
|
9
|
+
export declare const getServer: (context: GetServerContext) => Promise<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAI5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAA;AA8B3D,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,GAAU,SAAS,gBAAgB,gHAexD,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xyo-network/chain-bridge",
|
|
3
|
+
"version": "1.15.2",
|
|
4
|
+
"description": "XYO Layer One Bridge",
|
|
5
|
+
"homepage": "https://xylabs.com",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "git+https://github.com/xylabs/xyo-chain/issues",
|
|
8
|
+
"email": "support@xylabs.com"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/xylabs/xyo-chain.git"
|
|
13
|
+
},
|
|
14
|
+
"license": "LGPL-3.0-only",
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "XY Labs Development Team",
|
|
17
|
+
"email": "support@xylabs.com",
|
|
18
|
+
"url": "https://xylabs.com"
|
|
19
|
+
},
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"type": "module",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/node/index.d.ts",
|
|
25
|
+
"source": "./src/index.ts",
|
|
26
|
+
"default": "./dist/node/index.mjs"
|
|
27
|
+
},
|
|
28
|
+
"./package.json": "./package.json",
|
|
29
|
+
"./README.md": "./README.md"
|
|
30
|
+
},
|
|
31
|
+
"module": "./dist/node/index.mjs",
|
|
32
|
+
"source": "./src/index.ts",
|
|
33
|
+
"types": "./dist/node/index.d.ts",
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"src"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build-tests": "tsc --noEmit --lib dom,esnext",
|
|
40
|
+
"deploy": "echo Deploy not allowed!",
|
|
41
|
+
"deploy3": "echo Deploy3 not allowed!",
|
|
42
|
+
"start": "nodemon",
|
|
43
|
+
"start-esm": "node ./dist/node/index.mjs",
|
|
44
|
+
"test": "vitest run",
|
|
45
|
+
"test:ci": "vitest run",
|
|
46
|
+
"types": "tsc --noEmit -p tsconfig.test.json"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@opentelemetry/instrumentation": "~0.205.0",
|
|
50
|
+
"@opentelemetry/instrumentation-express": "~0.54.0",
|
|
51
|
+
"@opentelemetry/instrumentation-http": "~0.205.0",
|
|
52
|
+
"@xylabs/assert": "~5.0.11",
|
|
53
|
+
"@xylabs/creatable": "~5.0.11",
|
|
54
|
+
"@xylabs/express": "~5.0.11",
|
|
55
|
+
"@xylabs/hex": "~5.0.11",
|
|
56
|
+
"@xylabs/logger": "~5.0.11",
|
|
57
|
+
"@xylabs/mongo": "~5.0.11",
|
|
58
|
+
"@xylabs/typeof": "~5.0.11",
|
|
59
|
+
"@xyo-network/archivist-memory": "~5.1.3",
|
|
60
|
+
"@xyo-network/archivist-model": "~5.1.3",
|
|
61
|
+
"@xyo-network/archivist-mongodb": "~5.1.3",
|
|
62
|
+
"@xyo-network/archivist-view": "~5.1.3",
|
|
63
|
+
"@xyo-network/bios": "~7.1.0",
|
|
64
|
+
"@xyo-network/boundwitness-model": "~5.1.3",
|
|
65
|
+
"@xyo-network/chain-modules": "~1.15.2",
|
|
66
|
+
"@xyo-network/chain-protocol": "~1.15.2",
|
|
67
|
+
"@xyo-network/chain-rpc": "~1.15.2",
|
|
68
|
+
"@xyo-network/chain-telemetry": "~1.15.2",
|
|
69
|
+
"@xyo-network/manifest-model": "~5.1.3",
|
|
70
|
+
"@xyo-network/manifest-wrapper": "~5.1.3",
|
|
71
|
+
"@xyo-network/module-abstract": "~5.1.3",
|
|
72
|
+
"@xyo-network/module-factory-locator": "~5.1.3",
|
|
73
|
+
"@xyo-network/module-model": "~5.1.3",
|
|
74
|
+
"@xyo-network/node-model": "~5.1.3",
|
|
75
|
+
"@xyo-network/payload-builder": "~5.1.3",
|
|
76
|
+
"@xyo-network/payload-model": "~5.1.3",
|
|
77
|
+
"@xyo-network/sentinel-memory": "~5.1.3",
|
|
78
|
+
"@xyo-network/wallet": "~5.1.3",
|
|
79
|
+
"@xyo-network/wallet-model": "~5.1.3",
|
|
80
|
+
"@xyo-network/xl1-protocol-sdk": "~1.15.2",
|
|
81
|
+
"@xyo-network/xl1-rpc": "~1.15.2",
|
|
82
|
+
"compression": "~1.8.1",
|
|
83
|
+
"cors": "~2.8.5",
|
|
84
|
+
"express": "~5.1.0",
|
|
85
|
+
"http-status-codes": "~2.3.0",
|
|
86
|
+
"mongodb": "~6.20.0",
|
|
87
|
+
"rxjs": "~7.8.2"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@types/compression": "~1.8.1",
|
|
91
|
+
"@types/cors": "~2.8.19",
|
|
92
|
+
"@types/express": "5.0.3",
|
|
93
|
+
"@types/express-serve-static-core": "~5.0.7",
|
|
94
|
+
"@types/node": "~24.5.2",
|
|
95
|
+
"@xylabs/base": "~5.0.11",
|
|
96
|
+
"@xylabs/object": "~5.0.11",
|
|
97
|
+
"@xylabs/promise": "~5.0.11",
|
|
98
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.7",
|
|
99
|
+
"@xylabs/tsconfig": "~7.1.7",
|
|
100
|
+
"@xyo-network/account": "~5.1.3",
|
|
101
|
+
"@xyo-network/account-model": "~5.1.3",
|
|
102
|
+
"@xyo-network/archivist-abstract": "~5.1.3",
|
|
103
|
+
"@xyo-network/bios-model": "~7.1.0",
|
|
104
|
+
"@xyo-network/boundwitness-builder": "~5.1.3",
|
|
105
|
+
"@xyo-network/chain-services": "~1.15.2",
|
|
106
|
+
"@xyo-network/module-abstract-mongodb": "~5.1.3",
|
|
107
|
+
"@xyo-network/module-model-mongodb": "~5.1.3",
|
|
108
|
+
"@xyo-network/node-memory": "~5.1.3",
|
|
109
|
+
"@xyo-network/xl1-protocol": "~1.12.40",
|
|
110
|
+
"dotenv": "~17.2.2",
|
|
111
|
+
"eslint": "^9.36.0",
|
|
112
|
+
"nodemon": "~3.1.10",
|
|
113
|
+
"tslib": "~2.8.1",
|
|
114
|
+
"typescript": "~5.9.2",
|
|
115
|
+
"vitest": "~3.2.4",
|
|
116
|
+
"vitest-mock-extended": "~3.1.0"
|
|
117
|
+
},
|
|
118
|
+
"engines": {
|
|
119
|
+
"node": ">=22.3 <23"
|
|
120
|
+
},
|
|
121
|
+
"engineStrict": true,
|
|
122
|
+
"publishConfig": {
|
|
123
|
+
"access": "restricted"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mongo/index.ts'
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import type { Hash, Hex } from '@xylabs/hex'
|
|
3
|
+
import type { Promisable } from '@xylabs/promise'
|
|
4
|
+
import {
|
|
5
|
+
isDefined, isNull, isUndefined,
|
|
6
|
+
} from '@xylabs/typeof'
|
|
7
|
+
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
8
|
+
import type { BaseServiceParams } from '@xyo-network/chain-services'
|
|
9
|
+
import { BaseService } from '@xyo-network/chain-services'
|
|
10
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
11
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
12
|
+
import {
|
|
13
|
+
asBlockBoundWitnessWithStorageMeta, type BlockBoundWitness, type ChainIteratorServiceEventData, type EventingChainHashIteratorService,
|
|
14
|
+
isBlockBoundWitnessWithStorageMeta,
|
|
15
|
+
} from '@xyo-network/xl1-protocol'
|
|
16
|
+
|
|
17
|
+
export interface ChainHashIterationServiceParams extends BaseServiceParams {
|
|
18
|
+
chainArchivist: ArchivistInstance
|
|
19
|
+
head: BlockBoundWitness
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class ChainHashIterationService extends BaseService<ChainHashIterationServiceParams, ChainIteratorServiceEventData>
|
|
23
|
+
implements EventingChainHashIteratorService {
|
|
24
|
+
protected _currentHead: WithStorageMeta<BlockBoundWitness> | undefined
|
|
25
|
+
|
|
26
|
+
get chainArchivist(): ArchivistInstance { return assertEx(this.params.chainArchivist) }
|
|
27
|
+
|
|
28
|
+
get chainId(): Hex { return assertEx(this._currentHead?.chain ?? this.params?.head?.chain, () => 'Current head is not set') }
|
|
29
|
+
|
|
30
|
+
get(id: Hash): Promisable<BlockBoundWitness | undefined> {
|
|
31
|
+
return this.getHashAsBlockBoundWitnessWithStorageMeta(id)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async head(): Promise<WithStorageMeta<BlockBoundWitness>> {
|
|
35
|
+
if (isDefined(this._currentHead)) return this._currentHead
|
|
36
|
+
if (isDefined(this.params.head)) {
|
|
37
|
+
const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(this.params.head)
|
|
38
|
+
this._currentHead = newHead
|
|
39
|
+
return newHead
|
|
40
|
+
}
|
|
41
|
+
throw new Error('Head is not set')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async next(_id: Hex): Promise<WithStorageMeta<BlockBoundWitness> | undefined> {
|
|
45
|
+
await Promise.resolve() // to make this function async
|
|
46
|
+
throw new Error('Next method not implemented for ChainHashIterationService.')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async previous(block: Hash | undefined = undefined, count: number = 1): Promise<WithStorageMeta<BlockBoundWitness>[]> {
|
|
50
|
+
const results: WithStorageMeta<BlockBoundWitness>[] = []
|
|
51
|
+
let currentBlock: WithStorageMeta<BlockBoundWitness> | undefined = await this.head()
|
|
52
|
+
if (isDefined(block)) {
|
|
53
|
+
currentBlock = await this.getHashAsBlockBoundWitnessWithStorageMeta(block)
|
|
54
|
+
}
|
|
55
|
+
while (currentBlock && results.length < count) {
|
|
56
|
+
if (isBlockBoundWitnessWithStorageMeta(currentBlock)) {
|
|
57
|
+
results.push(currentBlock)
|
|
58
|
+
const { previous } = currentBlock
|
|
59
|
+
if (isNull(previous)) break
|
|
60
|
+
const nextBlock = await this.chainArchivist.get([previous])
|
|
61
|
+
currentBlock = asBlockBoundWitnessWithStorageMeta(nextBlock[0])
|
|
62
|
+
} else {
|
|
63
|
+
const hash = await PayloadBuilder.hash(currentBlock)
|
|
64
|
+
assertEx(asBlockBoundWitnessWithStorageMeta(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return results
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async updateHead(head: BlockBoundWitness): Promise<void> {
|
|
71
|
+
const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head)
|
|
72
|
+
this._currentHead = newHead
|
|
73
|
+
void this.emit('headUpdated', { blocks: [newHead] })
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private async getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head: BlockBoundWitness): Promise<WithStorageMeta<BlockBoundWitness>> {
|
|
77
|
+
const hash = await PayloadBuilder.hash(head)
|
|
78
|
+
return this.getHashAsBlockBoundWitnessWithStorageMeta(hash)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private async getHashAsBlockBoundWitnessWithStorageMeta(hash: Hash): Promise<WithStorageMeta<BlockBoundWitness>> {
|
|
82
|
+
const stored = (await this.chainArchivist.get([hash])).at(-1)
|
|
83
|
+
const bw = asBlockBoundWitnessWithStorageMeta(stored)
|
|
84
|
+
if (isUndefined(bw)) throw new Error(`Block not found in archivist [${hash}]`)
|
|
85
|
+
return bw
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChainHashIterationService.ts'
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { isDefined, isUndefined } from '@xylabs/typeof'
|
|
2
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
+
import type {
|
|
4
|
+
BlockBoundWitness, EventingChainBlockNumberIteratorService, HeadEventArgs,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import type { Observable } from 'rxjs'
|
|
7
|
+
import {
|
|
8
|
+
concatMap, defer, fromEvent, mergeMap,
|
|
9
|
+
} from 'rxjs'
|
|
10
|
+
|
|
11
|
+
export const chainBlocks$ = (
|
|
12
|
+
chainIterator: EventingChainBlockNumberIteratorService,
|
|
13
|
+
): Observable<WithStorageMeta<BlockBoundWitness>> => {
|
|
14
|
+
// Event source: head updated
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
const headUpdates$ = fromEvent<HeadEventArgs>(chainIterator as any, 'headUpdated')
|
|
17
|
+
|
|
18
|
+
return defer(async () => {
|
|
19
|
+
// seed with current head (optional)
|
|
20
|
+
const head = await chainIterator.head()
|
|
21
|
+
return head
|
|
22
|
+
}).pipe(
|
|
23
|
+
// merge initial head + updates into a single stream
|
|
24
|
+
mergeMap((firstHead) => {
|
|
25
|
+
let lastSeen: number | undefined = firstHead.block
|
|
26
|
+
|
|
27
|
+
return headUpdates$.pipe(
|
|
28
|
+
concatMap(async (blocks: HeadEventArgs) => {
|
|
29
|
+
// walk backwards from newHead until we reach lastSeen
|
|
30
|
+
const history: WithStorageMeta<BlockBoundWitness>[] = []
|
|
31
|
+
const newHead = blocks.blocks.at(-1)
|
|
32
|
+
let cursor: number | undefined = newHead?.block
|
|
33
|
+
while (isDefined(cursor) && (isUndefined(lastSeen) || cursor > lastSeen)) {
|
|
34
|
+
const blocks = await chainIterator.previous(cursor, 1)
|
|
35
|
+
if (blocks.length === 0) break
|
|
36
|
+
history.push(blocks[0])
|
|
37
|
+
cursor = blocks[0].block - 1
|
|
38
|
+
}
|
|
39
|
+
if (isDefined(newHead)) lastSeen = newHead.block
|
|
40
|
+
// emit in ascending order
|
|
41
|
+
return history.toReversed()
|
|
42
|
+
}),
|
|
43
|
+
mergeMap(blocks => blocks), // flatten
|
|
44
|
+
)
|
|
45
|
+
}),
|
|
46
|
+
)
|
|
47
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
2
|
+
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
+
import type { BlockBoundWitness, HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import { hydrateBlock } from '@xyo-network/xl1-protocol-sdk'
|
|
5
|
+
import type { Observable } from 'rxjs'
|
|
6
|
+
import { concatMap } from 'rxjs'
|
|
7
|
+
|
|
8
|
+
import { chainBlocks$ } from './ChainBlocksObservable.ts'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Creates an observable of HydratedBlocks from a chain iterator + archivist.
|
|
12
|
+
* @param chainIterator - EventingChainBlockNumberIteratorService that emits heads
|
|
13
|
+
* @param archivist - ReadArchivist used to fetch payloads and hydrate blocks
|
|
14
|
+
*/
|
|
15
|
+
export const hydratedChainBlocks$ = (
|
|
16
|
+
chainIterator: Parameters<typeof chainBlocks$>[0],
|
|
17
|
+
archivist: ReadArchivist,
|
|
18
|
+
): Observable<HydratedBlock> => {
|
|
19
|
+
return chainBlocks$(chainIterator).pipe(
|
|
20
|
+
concatMap((block: WithStorageMeta<BlockBoundWitness>) =>
|
|
21
|
+
hydrateBlock(archivist, block._hash)),
|
|
22
|
+
)
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChainBlocksObservable.ts'
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Account } from '@xyo-network/account'
|
|
2
|
+
import type { AccountInstance } from '@xyo-network/account-model'
|
|
3
|
+
import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'
|
|
4
|
+
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
5
|
+
import { buildRandomChain } from '@xyo-network/chain-protocol'
|
|
6
|
+
import { ChainBlockNumberIterationService } from '@xyo-network/chain-services'
|
|
7
|
+
import type { EventingChainBlockNumberIteratorService, HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { flattenHydratedBlocks, getDefaultConfig } from '@xyo-network/xl1-protocol-sdk'
|
|
9
|
+
import {
|
|
10
|
+
firstValueFrom, take, toArray,
|
|
11
|
+
} from 'rxjs'
|
|
12
|
+
import {
|
|
13
|
+
beforeAll, beforeEach, describe, expect, it,
|
|
14
|
+
} from 'vitest'
|
|
15
|
+
|
|
16
|
+
import { chainBlocks$ } from '../ChainBlocksObservable.ts'
|
|
17
|
+
|
|
18
|
+
describe('chainBlocks$', () => {
|
|
19
|
+
let chainArchivist: ArchivistInstance
|
|
20
|
+
let producer: AccountInstance
|
|
21
|
+
let chain: HydratedBlock[]
|
|
22
|
+
let chainIterator: EventingChainBlockNumberIteratorService
|
|
23
|
+
const config = getDefaultConfig()
|
|
24
|
+
|
|
25
|
+
beforeAll(async () => {
|
|
26
|
+
producer = await Account.random()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
beforeEach(async () => {
|
|
30
|
+
chain = await buildRandomChain(producer, 10)
|
|
31
|
+
chainArchivist = await MemoryArchivist.create({ config: { schema: MemoryArchivistConfigSchema } })
|
|
32
|
+
await chainArchivist.insert(flattenHydratedBlocks(chain))
|
|
33
|
+
chainIterator = await ChainBlockNumberIterationService.create({ chainArchivist, config })
|
|
34
|
+
})
|
|
35
|
+
it('emits blocks in order when head updates', async () => {
|
|
36
|
+
// Arrange
|
|
37
|
+
// Setup initial head
|
|
38
|
+
await chainIterator.updateHead(chain[4][0])
|
|
39
|
+
|
|
40
|
+
// Setup observable to collect 3 blocks
|
|
41
|
+
const resultPromise = firstValueFrom(
|
|
42
|
+
chainBlocks$(chainIterator).pipe(
|
|
43
|
+
take(3), // wait for 3 blocks
|
|
44
|
+
toArray(), // collect into array
|
|
45
|
+
),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
// Act
|
|
49
|
+
// Simulate head updates
|
|
50
|
+
await chainIterator.updateHead(chain[6][0])
|
|
51
|
+
await chainIterator.updateHead(chain[7][0])
|
|
52
|
+
const blocks = await resultPromise
|
|
53
|
+
|
|
54
|
+
// Assert
|
|
55
|
+
// Assert blocks are in ascending order
|
|
56
|
+
expect(blocks.map(b => b.block)).toEqual([5, 6, 7])
|
|
57
|
+
})
|
|
58
|
+
})
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Account } from '@xyo-network/account'
|
|
2
|
+
import type { AccountInstance } from '@xyo-network/account-model'
|
|
3
|
+
import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'
|
|
4
|
+
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
5
|
+
import { buildRandomChain } from '@xyo-network/chain-protocol'
|
|
6
|
+
import { ChainBlockNumberIterationService } from '@xyo-network/chain-services'
|
|
7
|
+
import type { EventingChainBlockNumberIteratorService, HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { flattenHydratedBlocks, getDefaultConfig } from '@xyo-network/xl1-protocol-sdk'
|
|
9
|
+
import {
|
|
10
|
+
firstValueFrom, take, toArray,
|
|
11
|
+
} from 'rxjs'
|
|
12
|
+
import {
|
|
13
|
+
beforeAll, beforeEach, describe, expect, it,
|
|
14
|
+
} from 'vitest'
|
|
15
|
+
|
|
16
|
+
import { hydratedChainBlocks$ } from '../ChainHydratedBlocksObservable.ts'
|
|
17
|
+
|
|
18
|
+
describe('hydratedChainBlocks$', () => {
|
|
19
|
+
let chainArchivist: ArchivistInstance
|
|
20
|
+
let producer: AccountInstance
|
|
21
|
+
let chain: HydratedBlock[]
|
|
22
|
+
let chainIterator: EventingChainBlockNumberIteratorService
|
|
23
|
+
const config = getDefaultConfig()
|
|
24
|
+
|
|
25
|
+
beforeAll(async () => {
|
|
26
|
+
producer = await Account.random()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
beforeEach(async () => {
|
|
30
|
+
chain = await buildRandomChain(producer, 10)
|
|
31
|
+
chainArchivist = await MemoryArchivist.create({ config: { schema: MemoryArchivistConfigSchema } })
|
|
32
|
+
await chainArchivist.insert(flattenHydratedBlocks(chain))
|
|
33
|
+
chainIterator = await ChainBlockNumberIterationService.create({ chainArchivist, config })
|
|
34
|
+
})
|
|
35
|
+
it('emits blocks in order when head updates', async () => {
|
|
36
|
+
// Arrange
|
|
37
|
+
// Setup initial head
|
|
38
|
+
await chainIterator.updateHead(chain[4][0])
|
|
39
|
+
|
|
40
|
+
// Setup observable to collect 3 blocks
|
|
41
|
+
const resultPromise = firstValueFrom(
|
|
42
|
+
hydratedChainBlocks$(chainIterator, chainArchivist).pipe(
|
|
43
|
+
take(3), // wait for 3 blocks
|
|
44
|
+
toArray(), // collect into array
|
|
45
|
+
),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
// Act
|
|
49
|
+
// Simulate head updates
|
|
50
|
+
await chainIterator.updateHead(chain[6][0])
|
|
51
|
+
await chainIterator.updateHead(chain[7][0])
|
|
52
|
+
const blocks = await resultPromise
|
|
53
|
+
|
|
54
|
+
// Assert
|
|
55
|
+
// Assert blocks are in ascending order
|
|
56
|
+
expect(blocks.map(b => b[0].block)).toEqual([5, 6, 7])
|
|
57
|
+
})
|
|
58
|
+
})
|